4712|13

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

驱动ds18b20问题 [复制链接]

 
 报错:Traceback (most recent call last):  File "ds18x20.py", line 59, in read_temp

AttributeError: 'OneWire' object has no attribute 'write_byte'

MicroPython v1.9.3-238-g42c4dd09 on 2018-01-10; PYBv1.0 with STM32F405RG



  1. """
  2. DS18x20 temperature sensor driver for MicroPython.

  3. This driver uses the OneWire driver to control DS18S20 and DS18B20
  4. temperature sensors.  It supports multiple devices on the same 1-wire bus.

  5. The following example assumes the ground of your DS18x20 is connected to
  6. Y11, vcc is connected to Y9 and the data pin is connected to Y10.

  7. >>> from pyb import Pin
  8. >>> gnd = Pin('Y11', Pin.OUT_PP)
  9. >>> gnd.low()
  10. >>> vcc = Pin('Y9', Pin.OUT_PP)
  11. >>> vcc.high()

  12. >>> from ds18x20 import DS18X20
  13. >>> d = DS18X20(Pin('Y10'))

  14. Call read_temps to read all sensors:

  15. >>> result = d.read_temps()
  16. >>> print(result)
  17. [20.875, 20.8125]

  18. Call read_temp to read the temperature of a specific sensor:

  19. >>> result = d.read_temp(d.roms[0])
  20. >>> print(result)
  21. 20.25

  22. If only one DS18x20 is attached to the bus, then you don't need to
  23. pass a ROM to read_temp:

  24. >>> result = d.read_temp()
  25. >>> print(result)
  26. 20.25

  27. """

  28. from onewire import OneWire

  29. class DS18X20(object):
  30.     def __init__(self, pin):
  31.         self.ow = OneWire(pin)
  32.         # Scan the 1-wire devices, but only keep those which have the
  33.         # correct # first byte in their rom for a DS18x20 device.
  34.         self.roms = [rom for rom in self.ow.scan() if rom[0] == 0x10 or rom[0] == 0x28]

  35.     def read_temp(self, rom=None):
  36.         """
  37.         Read and return the temperature of one DS18x20 device.
  38.         Pass the 8-byte bytes object with the ROM of the specific device you want to read.
  39.         If only one DS18x20 device is attached to the bus you may omit the rom parameter.
  40.         """
  41.         rom = rom or self.roms[0]
  42.         ow = self.ow
  43.         ow.reset()
  44.         ow.select_rom(rom)
  45.         ow.write_byte(0x44)  # Convert Temp
  46.         while True:
  47.             if ow.read_bit():
  48.                 break
  49.         ow.reset()
  50.         ow.select_rom(rom)
  51.         ow.write_byte(0xbe)  # Read scratch
  52.         data = ow.read_bytes(9)
  53.         return self.convert_temp(rom[0], data)

  54.     def read_temps(self):
  55.         """
  56.         Read and return the temperatures of all attached DS18x20 devices.
  57.         """
  58.         temps = []
  59.         for rom in self.roms:
  60.             temps.append(self.read_temp(rom))
  61.         return temps

  62.     def convert_temp(self, rom0, data):
  63.         """
  64.         Convert the raw temperature data into degrees celsius and return as a float.
  65.         """
  66.         temp_lsb = data[0]
  67.         temp_msb = data[1]
  68.         if rom0 == 0x10:
  69.             if temp_msb != 0:
  70.                 # convert negative number
  71.                 temp_read = temp_lsb >> 1 | 0x80  # truncate bit 0 by shifting, fill high bit with 1.
  72.                 temp_read = -((~temp_read + 1) & 0xff) # now convert from two's complement
  73.             else:
  74.                 temp_read = temp_lsb >> 1  # truncate bit 0 by shifting
  75.             count_remain = data[6]
  76.             count_per_c = data[7]
  77.             temp = temp_read - 0.25 + (count_per_c - count_remain) / count_per_c
  78.             return temp
  79.         elif rom0 == 0x28:
  80.             return (temp_msb << 8 | temp_lsb) / 16
  81.         else:
  82.             assert False
复制代码



最新回复

已经找到解决 的方法了。由于官方升级了固件,新的版本调用DS18B20的方法发生了改变。 详见:http://www.micropython.org.cn/bb ... =viewthread&tid=986  详情 回复 发表于 2018-4-17 15:00
点赞 关注
 
 

回复
举报

11

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
File "main.py", line 10, in
TypeError: function takes 2 positional arguments but 1 were given
  1. #main.py
  2. import pyb
  3. from pyb import Pin
  4. from ds18x20 import DS18X20
  5. Pin("Y11",Pin.OUT_PP).low()#GND
  6. Pin("Y9",Pin.OUT_PP).high()#VCC
  7. pyb.delay(100)
  8. DQ=DS18X20(Pin('Y10'))#DQ
  9. while True:
  10.         tem = DQ.read_temp()
  11.         print(tem)
  12.         pyb.delay(1000)
复制代码
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
为什么我的会报错:
Traceback (most recent call last):
  File "main.py", line 8, in
TypeError: function takes 2 positional arguments but 1 were given

这是我的main.py
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
from pyb import Pin
from ds18x20 import DS18X20
Pin("Y11",Pin.OUT_PP).low()#GND
Pin("Y9",Pin.OUT_PP).high()#VCC
pyb.delay(100)
DQ=DS18X20(Pin('Y10'))#DQ
while True:
    tem = DQ.read_temp()
    print(tem)
    pyb.delay(1000)
 
 
 

回复

2774

帖子

8

TA的资源

版主

4
 
本帖最后由 strong161 于 2018-1-30 10:51 编辑

你这个ds18x20的模块就报错了,先把模块报错解决掉。python 都是解释到哪跑到哪,你发贴的方式,很难看懂,首先,你把整个工程上传一下,然后,把你报错的信息通过图片,清晰显示出来,这样才有可能帮到你,否则提示出错的原因很多,很难说清楚。
https://bbs.eeworld.com.cn/thread-487787-1-1.html  参考一下D大的贴子
  • 如果DS1820没有连接好就输入了d = DS18X20(Pin('Y10'))命令,会因为没有搜索到器件而出错。

 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

5
 
你的两个错误我全遇到了。。。。

点评

恭喜中奖……对于你来,肯定不是啥子问题,有空分享经验呀  详情 回复 发表于 2018-3-27 09:42
 
 
 

回复

2774

帖子

8

TA的资源

版主

6
 
数码小叶 发表于 2018-3-27 08:43
你的两个错误我全遇到了。。。。

恭喜中奖……对于你来,肯定不是啥子问题,有空分享经验呀

点评

别臭我了,纯新手,卡住了  详情 回复 发表于 2018-3-27 09:52
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

7
 
strong161 发表于 2018-3-27 09:42
恭喜中奖……对于你来,肯定不是啥子问题,有空分享经验呀

别臭我了,纯新手,卡住了

点评

你的板子修好了没有?  详情 回复 发表于 2018-3-27 14:53
不至于,你的技术还是很牛逼的,只是新玩法碰到点刺。  详情 回复 发表于 2018-3-27 10:52
 
 
 

回复

2774

帖子

8

TA的资源

版主

8
 
数码小叶 发表于 2018-3-27 09:52
别臭我了,纯新手,卡住了

不至于,你的技术还是很牛逼的,只是新玩法碰到点刺。

点评

多向论坛大神学习,microPython这个确实和直接C差异挺大的  详情 回复 发表于 2018-3-27 16:41
 
 
 

回复

1万

帖子

25

TA的资源

版主

9
 
数码小叶 发表于 2018-3-27 09:52
别臭我了,纯新手,卡住了

你的板子修好了没有?

点评

哈哈,换完芯片后完美复活了,感觉F4有点脆弱啊,18B20居然还顽强的活着  详情 回复 发表于 2018-3-27 16:40
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

10
 
dcexpert 发表于 2018-3-27 14:53
你的板子修好了没有?

哈哈,换完芯片后完美复活了,感觉F4有点脆弱啊,18B20居然还顽强的活着
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

11
 
strong161 发表于 2018-3-27 10:52
不至于,你的技术还是很牛逼的,只是新玩法碰到点刺。

多向论坛大神学习,microPython这个确实和直接C差异挺大的
 
 
 

回复

46

帖子

1

TA的资源

一粒金砂(中级)

12
 
我也遇到了同样的问题,使用的PYBNano的板子,1.9.3版的系统,错误相同,真心郁闷。
 
 
 

回复

46

帖子

1

TA的资源

一粒金砂(中级)

13
 
问题已解决,官方已升级了固件,需要变更调用的方法了。详见:
http://www.micropython.org.cn/bb ... =viewthread&tid=986
 
 
 

回复

46

帖子

1

TA的资源

一粒金砂(中级)

14
 
已经找到解决 的方法了。由于官方升级了固件,新的版本调用DS18B20的方法发生了改变。
详见:http://www.micropython.org.cn/bb ... =viewthread&tid=986
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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