Arduinoのサンプルプログラム

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初期化

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」を動作させます。

テキストのコピーはできません。