見出し画像

Raspberry Pi PicoでPythonのお勉強 ~5~

MicroPythonによるI2C Readは前回までで終わり、今回はI2C Writeになります。BME280モジュール内で使われているI2C Writeの記述は91行目になります。

        self.i2c.writeto_mem(self.address, BME280_REGISTER_CONTROL,
                             bytearray([0x3F]))

BME280モジュール内で出てくるI2C Writeは"i2c.writeto_mem"だけで、Readの時のように2種類使っているわけではないようです。このi2c.writeto_memをMicroPython librariesで調べると

I2C.writeto_mem(addr, memaddr, buf, *, addrsize=8)
Write buf to the peripheral specified by addr starting from the memory address specified by memaddr. The argument addrsize specifies the address size in bits (on ESP8266 this argument is not recognised and the address size is always 8 bits).
The method returns None.

https://docs.micropython.org/en/latest/library/index.html

となっていて、以前出てきた"i2c.readfrom_mem"と同じ書式になっています。self.addressがBME280のI2Cスレーブアドレス、BME280_REGISTER_CONTROLがレジスタアドレスでそこに1byteのデータを書きこむということになります。

今回BME280モジュール内で出てくるi2c.writeto_memは全て1byteのデータ書き込みなのですが、bufに複数bytesを指定した時どういう形でデータを出力するのかちょっと気になりました。レジスタアドレスは最初の1回だけ出力されるのか?、それとも自動でアドレスをインクリメントして複数回送ってくれるのか?といった部分です。

BME280のデータシートを見ると複数bytes書き込み時のデータフォーマットが載っていますが、果たしてi2c.writeto_memがこれに合ったフォーマットでデータを送ってくれるのかどうかは分かりませんね。

ここまででMicroPythonでのI2C Read/Write方法は分かったので、次回からはSPIアクセスをするにはどうすればよいのかを調べて、SPIでアクセスするソースを作っていきたいと思います。

いいなと思ったら応援しよう!