Arduino-SPIライブラリの使い方
当記事では、ArduinoのSPIライブラリの使い方について詳しく解説します。
ArduinoのSPI制御用ライブラリ「SPI」を使ったプログラムで、各種I2Cデバイスを動作させます。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。
SPIライブラリ
関数 | 引数 | 戻り値 | 説明 |
---|---|---|---|
void begin(void) | なし | なし | SPI初期化 |
void end(void) | なし | なし | SPIバス無効 |
void beginTransaction(mySettings) | mySettings:SPIスピード、ビットオーダー、データモード | なし | SPI初期化 (SPISettingsを使用) |
void endTransaction(void) | なし | なし | SPIバス終了 |
void setBitOrder(order) | order:LSBFIRSTまたはMSBFIRST | なし | SPIビットオーダー設定 |
void setClockDivider(divider) | divider: SPI_CLOCK_DIV2 SPI_CLOCK_DIV4 SPI_CLOCK_DIV8 SPI_CLOCK_DIV16 SPI_CLOCK_DIV32 SPI_CLOCK_DIV64 SPI_CLOCK_DIV128 | なし | SPIクロック分周器設定 |
void setDataMode(mode) | mode: SPI_MODE0 SPI_MODE1 SPI_MODE2 SPI_MODE3 | なし | SPI転送モード設定 |
int transfer(value) | value:1byteデータ | 受信byte数 | SPIデバイスとデータ送受信 |
begin()/SPI初期化
- 関数:void begin(void)
- 引数:なし
- 戻り値:なし
begin()関数は、SPIの初期化をします。SCK、MOSI、SSの各ピンの動作は出力、SCK、MOSIはLOW、SSはHIGHにします。
end()/SPIバス無効
- 関数:void end(void)
- 引数:なし
- 戻り値:なし
end()関数は、SPIバスを無効にします。
beginTransaction()/SPI初期化(SPISettingsを使用)
- 関数:void beginTransaction(mySettings)
- 引数:mySettings⇒SPIスピード、ビットオーダー、データモード
- 戻り値:なし
beginTransaction()関数は、引数でSPIスピード、ビットオーダー、データモードを指定してSPIを初期化します。
例えば、SPIスピードを「14MHz」、ビットオーダーを「MSBFIRST」、データモードを「SPI_MODE0」とする場合、「SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))」と記述します。
endTransaction()/SPIバス終了
- 関数:void endTransaction(void)
- 引数:なし
- 戻り値:なし
endTransaction()関数は、SPIバスを終了します。通常、チップセレクトの無効後に呼び出され、他のライブラリがSPIバスを使用できるようにします。
setBitOrder()/SPIビットオーダー設定
- 関数:void setBitOrder(order)
- 引数:order⇒LSBFIRST/MSBFIRST
- 戻り値:なし
setBitOrder()関数は、SPIのビットオーダーを引数で設定します。
- LSBFIRST:最下位ビットから転送
- MSBFIRST:最上位ビットから転送
setClockDivider()/SPIクロック分周器設定
- 関数:void setClockDivider(divider)
- 引数:divider⇒SPI_CLOCK_DIV2/SPI_CLOCK_DIV4/SPI_CLOCK_DIV8/SPI_CLOCK_DIV16/SPI_CLOCK_DIV32/SPI_CLOCK_DIV64/SPI_CLOCK_DIV128
- 戻り値:なし
setClockDivider()関数は、SPIのクロック分周器を引数で設定します。
- SPI_CLOCK_DIV2:分周比1/2
- SPI_CLOCK_DIV4:分周比1/4
- SPI_CLOCK_DIV8:分周比1/8
- SPI_CLOCK_DIV16:分周比1/16
- SPI_CLOCK_DIV32:分周比1/32
- SPI_CLOCK_DIV64:分周比1/64
- SPI_CLOCK_DIV128:分周比1/128
setDataMode()/SPI転送モード設定
- 関数:void setDataMode(mode)
- 引数:mode⇒SPI_MODE0/SPI_MODE1/SPI_MODE2/SPI_MODE3
- 戻り値:なし
setDataMode()関数は、SPIの転送モードを引数で設定します。
- SPI_MODE0:CPOL(クロック位相)=0,CPHA(クロック極性)=0
- SPI_MODE1:CPOL(クロック位相)=0,CPHA(クロック極性)=1
- SPI_MODE2:CPOL(クロック位相)=1,CPHA(クロック極性)=1
- SPI_MODE3:CPOL(クロック位相)=1,CPHA(クロック極性)=0
transfer()/SPIデバイスとデータ送受信
- 関数:int transfer(value)
- 引数:value⇒送信する1byteデータ
- 戻り値:受信した1byteデータ
transfer()関数は、SPIデバイスとデータの送受信を行います。引数で送信するデータを指定して、戻り値で受信したデータを返します。
サンプルプログラム(サンプルスケッチ)
SPIライブラリを使って、温湿度・気圧センサや3軸加速度センサといった実際の電子部品を動かすサンプルプログラムをご紹介します。
温湿度・気圧センサ「BME280」
ArduinoのSPI制御用ライブラリ「SPI」を使ったプログラムで、温湿度・気圧センサ「BME280」を動作させます。
3軸加速度センサ「ADXL345」
ArduinoのSPI制御用ライブラリ「SPI」を使ったプログラムで、3軸加速度センサ「ADXL345」を動作させます。
おすすめのArduinoボードはどれ?
当記事『Arduino-SPIライブラリの使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。
また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。