稼働中

マイクロビット(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は以下の組み合わせです。

spi 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に関しては、現在接続できるデバイスが無いので機会があれば別途記載します。