【MicroPython】使用DS1820单总线温度传感器

dcexpert   2016-4-13 22:40 楼主
在MicroPython的源码中,带有了单总线的驱动,可以很方便的驱动单总线器件,如读取温度传感器DS1820。 首先在MicroPython的源码目录中,进入drivers\onewire\目录,然后将目录下的文件ds18x20.py和onewire.py复制到PYBFLASH磁盘的根目录。复制文件后要安全退出磁盘,然后重新接入,不然找不到文件。 用Y11、Y10、Y9三个引脚做为DS1820的控制,其中Y11是GND,Y9是VCC,Y10是DQ。 先将DS1820接到Y11、Y10、Y9,然后输入下面代码:
  1. >>> from pyb import Pin
  2. >>> Pin("Y11", Pin.OUT_PP).low()
  3. >>> Pin("Y9", Pin.OUT_PP).high()
  4. >>> pyb.delay(100)
  5. >>> from ds18x20 import DS18X20
  6. >>> d = DS18X20(Pin('Y10'))
  7. >>> d.read_temp()
  8. 34.0
  9. >>> d.read_temp()
  10. 33.375
  11. >>> d.read_temps()
  12. [32.625]
  13. >>>
可以看到已经可以读出传感器的温度。用d.read_temp()可以读取一个传感器,默认是第一个传感器,d.read_temp(d.roms[1])可以读取第二个传感器;如果只有一个传感器,可以用d.read_temp(rom=None)忽略地址 用d.read_temps()可以读取全部传感器。 下面连接两个DS18B20进行测试
  1. >>> from pyb import Pin
  2. >>> Pin("Y11", Pin.OUT_PP).low()
  3. >>> Pin("Y9", Pin.OUT_PP).high()
  4. >>> pyb.delay(100)
  5. >>> from ds18x20 import DS18X20
  6. >>> d = DS18X20(Pin('Y10'))
  7. >>> d.read_temp()
  8. 33.75
  9. >>> d.read_temp(d.roms[0])
  10. 33.875
  11. >>> d.read_temp(d.roms[1])
  12. 33.625
  13. >>> d.read_temps()
  14. [33.5625, 32.75]
  15. >>> d.read_temp()
  16. 34.0625
  17. >>> d.read_temps()
  18. [34.0, 34.75]
注:
  • 如果DS1820没有连接好就输入了d = DS18X20(Pin('Y10'))命令,会因为没有搜索到器件而出错。
  • 千万不要接反VCC和GND,不然会损坏传感器。
  • 使用Y11、Y10、Y9测试成功,但是换其他GPIO时读取错误,暂时还不清楚原因。
本帖最后由 dcexpert 于 2016-4-13 22:41 编辑

回复评论 (13)

哇,!!有别人写好的库!!真棒,这样应用上就很方便了!
点赞  2016-4-13 23:08
怎么让micropython像单片机一样同时输出八位,一直没成功
点赞  2016-4-18 22:08
引用: xinmeng_wit 发表于 2016-4-18 22:08
怎么让micropython像单片机一样同时输出八位,一直没成功

输出8位什么?是指GPIO吗?
点赞  2016-4-18 22:37
用内联编译器读写寄存器。平时用迭代器。Python类型中没有bit。
点赞  2016-4-20 13:46
引用: dcexpert 发表于 2016-4-18 22:37
输出8位什么?是指GPIO吗?

是的,GPIO,比如,我用X1~X8接lcd的数据口D0~D7,这样就需要X输出一个字节,就是X1~X7同时输出。
点赞  2016-4-24 18:23
引用: xinmeng_wit 发表于 2016-4-24 18:23
是的,GPIO,比如,我用X1~X8接lcd的数据口D0~D7,这样就需要X输出一个字节,就是X1~X7同时输出。

暂时没有找到函数,可能需要自己实现。
点赞  2016-4-24 20:28
我就喜欢py的风格,库拿来就用,要C写18b20不下150行。
点赞  2016-5-14 11:23
为什么我的会报错:
Traceback (most recent call last):
  File "main.py", line 8, in
TypeError: function takes 2 positional arguments but 1 were given

这是我的main.py
  1. from pyb import Pin
  2. from ds18x20 import DS18X20
  3. Pin("Y11",Pin.OUT_PP).low()#GND
  4. Pin("Y9",Pin.OUT_PP).high()#VCC
  5. pyb.delay(100)
  6. DQ=DS18X20(Pin('Y10'))#DQ
  7. while True:
  8.         tem = DQ.read_temp()
  9.         print(tem)
  10.         pyb.delay(1000)
点赞  2018-1-25 12:32
引用: jihw1990 发表于 2018-1-25 12:32
为什么我的会报错:
Traceback (most recent call last):
  File "main.py", line 8, in
TypeError: fu ...

检查一下连接,看起来是没有找到芯片,rom是空的,所以出错
点赞  2018-1-25 13:50
引用: dcexpert 发表于 2018-1-25 13:50
检查一下连接,看起来是没有找到芯片,rom是空的,所以出错

连接是好的
点赞  2018-1-25 14:22
引用: jihw1990 发表于 2018-1-25 14:22
连接是好的

你好,你的问题最后解决了没??我的一直报同样的错误
点赞  2018-3-26 15:57

不错,支持。

也可以选用成品多点DS18B20采集模块LCT2662M或者仪表LCT2201C

北京长信物联科技有限公司 专业的USB温湿度传感器、485温湿度传感器、气体传感器、64路DS18B20温度采集模块厂商。 www.lct2000.cn QQ:1930227091
点赞  2019-7-10 11:21

北京长信物联科技有限公司 专业的USB温湿度传感器、485温湿度传感器、气体传感器、64路DS18B20温度采集模块厂商。 www.lct2000.cn QQ:1930227091
点赞  2019-9-27 12:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复