マイクロビット(m_09)microbit.i2c .spi
i2c、spi
「microbit」モジュールには「display, Image, button_a, button_b, accelerometer, compass,pin0, pin1, pin2, pin3, pin4 pin5, pin6, pin7, pin8, pin9, pin10, pin11, pin12,pin13, pin14, pin15, pin16, pin19, pin20,i2c, spi, uart, panic, reset, running_time, sleep, temperature」の関数などがあります。
※「microbit」モジュールを「from microbit import *」でインポートした前提で記載しています。
(07)microbit.i2c
I2Cデバイスを接続できます。デバイスには 7 ビットアドレッシングを使います。
デバイスSCL は micro:bit の端子 19 に、SDA は micro:bit の端子 20、デバイスのグランドを micro:bit のGNDに結線します。micro:bit基板上で加速度センサー、地磁気センサーが接続されています。そのため端子19、20にはI2Cデバイス以外は接続しない方が良いです。「init, scan, read, write」の関数があります。
(07-1)init()
i2c.init(freq=100000, sda=pin20, scl=pin19)
指定の端子 sda と scl と指定のクロック周波数 freq でデバイスを再初期化します。
※デフォルトから変更すると、micro:bitに組み込まれている加速度センサーやコンパスの動作が停止します。
(07-2)scan()
デバイスのバスをスキャンします。応答したデバイスに該当するスレーブアドレスのリストが返ります。
>>> i2c.scan()
[14, 29]
>>> hex(14)
'0xe' # NXP_MAG3110 地磁気センサー
>>> hex(29)
'0x1d' # NXP_MMA8653 三軸加速度センサー
(07-3)read
i2c.read(addr, n, repeat=False)
7 ビットアドレス addr のデバイスから n バイトを読み込みます、repeat を True にすると、ストップビットが送られません。
(07-4)write
i2c.write(addr, buf, repeat=False)
7 ビットアドレス addr のデバイスに buf のバイト列を書き込みます、 repeat を True にすると、ストップビットが送られません。
#micro:bit基板上の地磁気センサーのレジスタのデータを読む
>>> from microbit import *
>>> i2c.write(14, b'\x00') #'0'を書込み
>>>
>>> i2c.read(14,4) #4バイト読込み
b'\xff\xfbw\x06'
(08)microbit.spi
シリアルペリフェラルインターフェイス(SPI)バスを使用して接続されたデバイスと通信します。
SCLK、MOS、MISO端子と接続します。「init, write, read, write_readinto」の関数があります。
※現在接続できるSPIデバイスが無いのでコード例の記載ができていません。
(08-1)init
spi.init(baudrate=1000000, bits=8, mode=0, sclk=pin13, mosi=pin15, miso=pin14)
SPI 通信を初期化します。
bits=8 だけをサポートしています。modeは以下の組み合わせです。
(08-2)read(nbytes)
nbytes を読み込みます。読み込んだものを返します。
(08-3)write(buffer)
バイト列の buffer をバスに書き出します。
(08-4)write_readinto(out, in)out
バッファをバスに書き出し、応答を in バッファに読み込みます。
2つのバッファーの長さは同じでなければなりません。2つのバッファは同じオブジェクトでもかまいません。
まとめ
microbitモジュールのi2c、spiについて記載しました。
※micro:bit基板上の加速度センサー、地磁気センサーのI2Cデバイスについては、別途、記載する予定です。SPIに関しては、現在接続できるデバイスが無いので機会があれば別途記載します。