Arduino-SPIライブラリの使い方

  • URLをコピーしました!

当記事では、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初期化

begin()/SPI初期化
  • 関数:void begin(void)
  • 引数:なし
  • 戻り値:なし

begin()関数は、SPIの初期化をします。SCK、MOSI、SSの各ピンの動作は出力、SCK、MOSIはLOW、SSはHIGHにします。

end()/SPIバス無効

end()/SPIバス無効
  • 関数:void end(void)
  • 引数:なし
  • 戻り値:なし

end()関数は、SPIバスを無効にします。

beginTransaction()/SPI初期化(SPISettingsを使用)

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バス終了

endTransaction()/SPIバス終了
  • 関数:void endTransaction(void)
  • 引数:なし
  • 戻り値:なし

endTransaction()関数は、SPIバスを終了します。通常、チップセレクトの無効後に呼び出され、他のライブラリがSPIバスを使用できるようにします。

setBitOrder()/SPIビットオーダー設定

setBitOrder()/SPIビットオーダー設定
  • 関数:void setBitOrder(order)
  • 引数:order⇒LSBFIRST/MSBFIRST
  • 戻り値:なし

setBitOrder()関数は、SPIのビットオーダーを引数で設定します。

SPIビットオーダー設定
  • LSBFIRST:最下位ビットから転送
  • MSBFIRST:最上位ビットから転送

setClockDivider()/SPIクロック分周器設定

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クロック分周器設定
  • 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転送モード設定

setDataMode()/SPI転送モード設定
  • 関数:void setDataMode(mode)
  • 引数:mode⇒SPI_MODE0/SPI_MODE1/SPI_MODE2/SPI_MODE3
  • 戻り値:なし

setDataMode()関数は、SPIの転送モードを引数で設定します。

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デバイスとデータ送受信

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を実現したい方におすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次