ArduinoのSPI通信でアクセスするライブラリーを作りました。Arduinoで環境モニターを作っています。今まではBME280をI2C通信でアクセスして温度、湿度、気圧を測定していましたが、これに加えてフォトトランジスター(NJL7502L)で照度を測ることにしました。ESP8266にはアナログ入力が一つありますが、これは電池の電圧を測るのに使っているので、照度の測定にはADコンバーター(MCP3002)を使いました。BME280はI2C通信とSPI通信のどちらでもアクセスできますが、MCP3002はSPI通信でしかアクセスできません。そこで、BME280もSPI通信でアクセスするようにしました。BME280とESP8266の接続SPI通信には3線で通信する方式と4線で通信する方式があります。BME280は3線式、4線式の両方に対応できますが、MCP3002が4線式なのでBME280も4線式で使うことにします。ESP2866とBME280は以下のように接続します。CSBSPI通信版BME280ライブラリー複数のSPIデバイスを接続するときはCLK、MISO、MOSIは共通に(バス状に)接続し、CSはデバイスごとに個別に接続します。デバイスの数だけESP8266のピンが必要になります。ESP8266のマニュアルにはIO15ピンがHSPICSに割り当てられていますが、CSはSPIデバイスと通信するときに対応するピンをLOWレベルにすればいいので、別のGPIOピンも使うことができます。SPI通信版BME280ライブラリーBME280にアクセスするプログラムは再利用しやすいよう、ライブラリーにしました。BME280を制御するクラスを定義し、メンバー関数として初期化(begin)と温度、湿度、気圧の読み出し(readTemperature、readHumidity、readPressure)を用意しました。使い方はこんな感じです。気圧の読み出しライブラリーの全体とサンプルプログラムはGithubに公開しました。https://github.com/TakehikoShimojima/BME280_SPI次はこれを使って環境モニター3号機を作ります。