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