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