ESP8266のmicropythonでSPI


micropythonでadt7310を読む

micropythonで温度測定するために、adt7310を使う方法を模索してみた。adt7310のpinとesp8266は以下のように接続した。

1 SCK  D5 14
2 DOUT D6 12
3 DIN  D7 13
4 CS   D8 15

まず、初期化は以下のように行う。

from machine import Pin,SPI
spi=SPI(baudrate=1000000,sck=Pin(14),mosi=Pin(13),miso=Pin(12),firstbit=SPI.MSB,polarity=1,phase=1)
cs=Pin(15, Pin.OUT)
cs(1)

ここで、polarityはclockが何もしていない時にはhighであることを示し、phaseはclockが元に戻るedgeで読み取りを行うことを示す。 adt7310のモードの設定は、以下のように行う。

cs(0)
#spi.write(bytearray([1<<3,0xa0])) #one shot
spi.write(bytearray([1<<3,0x80])) #continuous
cs(1)

そして、温度の読み取りは

cs(0)
spi.write(bytearray([0x40|2<<3]))
ret=spi.read(2)
cs(1)
(ret[0]*256+ret[1])/128

とすれば良い。本当は符号の処理も行わないといけないけど、零下になることはまず無いので、良しとしよう。bytearrayの扱いもよく分かっていないけど、まあ良いか。