8236|13

1万

帖子

25

TA的资源

版主

楼主
 

【MicroPython】使用DS1820单总线温度传感器 [复制链接]

 
 
本帖最后由 dcexpert 于 2016-4-13 22:41 编辑

在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时读取错误,暂时还不清楚原因。



最新回复

  详情 回复 发表于 2019-9-27 12:36
点赞 关注
 
 

回复
举报

1158

帖子

2

TA的资源

版主

沙发
 
哇,!!有别人写好的库!!真棒,这样应用上就很方便了!
 
 
 

回复

539

帖子

3

TA的资源

纯净的硅(初级)

板凳
 
怎么让micropython像单片机一样同时输出八位,一直没成功

点评

输出8位什么?是指GPIO吗?  详情 回复 发表于 2016-4-18 22:37
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
xinmeng_wit 发表于 2016-4-18 22:08
怎么让micropython像单片机一样同时输出八位,一直没成功

输出8位什么?是指GPIO吗?

点评

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

回复

111

帖子

0

TA的资源

一粒金砂(高级)

5
 
用内联编译器读写寄存器。平时用迭代器。Python类型中没有bit。
 
 
 

回复

539

帖子

3

TA的资源

纯净的硅(初级)

6
 
dcexpert 发表于 2016-4-18 22:37
输出8位什么?是指GPIO吗?

是的,GPIO,比如,我用X1~X8接lcd的数据口D0~D7,这样就需要X输出一个字节,就是X1~X7同时输出。

点评

暂时没有找到函数,可能需要自己实现。  详情 回复 发表于 2016-4-24 20:28
 
 
 

回复

1万

帖子

25

TA的资源

版主

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

暂时没有找到函数,可能需要自己实现。
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

8
 
我就喜欢py的风格,库拿来就用,要C写18b20不下150行。
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

9
 
为什么我的会报错:
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)
复制代码

点评

检查一下连接,看起来是没有找到芯片,rom是空的,所以出错  详情 回复 发表于 2018-1-25 13:50
 
 
 

回复

1万

帖子

25

TA的资源

版主

10
 
jihw1990 发表于 2018-1-25 12:32
为什么我的会报错:
Traceback (most recent call last):
  File "main.py", line 8, in
TypeError: fu ...

检查一下连接,看起来是没有找到芯片,rom是空的,所以出错

点评

连接是好的  详情 回复 发表于 2018-1-25 14:22
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

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

连接是好的

点评

你好,你的问题最后解决了没??我的一直报同样的错误  详情 回复 发表于 2018-3-26 15:57
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

12
 

你好,你的问题最后解决了没??我的一直报同样的错误
 
 
 

回复

203

帖子

0

TA的资源

一粒金砂(高级)

13
 

不错,支持。

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

个人签名北京长信物联科技有限公司
专业的USB温湿度传感器、485温湿度传感器、气体传感器、64路DS18B20温度采集模块厂商。
www.lct2000.cn
QQ:1930227091
 
 
 

回复

203

帖子

0

TA的资源

一粒金砂(高级)

14
个人签名北京长信物联科技有限公司
专业的USB温湿度传感器、485温湿度传感器、气体传感器、64路DS18B20温度采集模块厂商。
www.lct2000.cn
QQ:1930227091
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表