Raspberry PiでC言語・Node.jsからBME280の値を読みとる
                温度 センサー 湿度 センサー 気圧 センサー Arduino センサー 大気圧センサ 温湿度センサー ブレイクアウト Arduinoに対応 [並行輸入品]: 産業・研究開発用品
これを買ったので、Raspberry Piで値を読み取ってスマホから確認できるようにしたかったんですけど、値を読み取るプログラムがスイッチサイエンスのサンプル以外まともになかったので、とりあえずCとNode.jsで扱ってみました。
Raspberry Piに接続
ピンヘッダをハンダ付けしたら、Raspberry Piと繋ぎましょう。
ちなみに、ピンアサインが裏面にプリントしてあって見辛かったので、僕は付属のではなく、手持ちのL字型のピンヘッダを使用しました。また、ハンダ付け直後はセンサーが熱を持ち、測定値がズレることがあるそうです。
| BME280 | Raspberry Pi | 
|---|---|
| VCC | 3V3 | 
| GND | GND | 
| SCL | GPIO3 (SCL1) | 
| SDA | GPIO3 (SDA1) | 
| CSB | 接続しない | 
| SD0 | GND | 
以上のように繋げばOK。その後Raspberry Pi OSでI2Cを有効にしてください。
$ sudo raspi-configターミナルからraspi-configを開いて、以下のように辿っていけば簡単にONにできます。できたら再起動してください。
もし、Raspberry Pi OS以外を使っているなら、/etc/modulesにi2c-devを、bootパーティションのconfig.txtにdtparam=i2c_arm=onを追記すれば有効化できるはずです。
I2Cの有効化ができれば、あとはターミナルでi2c-toolsをインストールして、i2cdetectを叩けば0x76に検出されるはず。
$ sudo apt install i2c-tools
$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 --  Python
とりあえずPythonでスイッチサイエンスのサンプルを動かしてみましょうか。まずはgitからサンプルを取ってきて、必要なライブラリをインストールします。
$ git clone https://github.com/SWITCHSCIENCE/BME280.git
$ cd BME280/Python27
$ pip install -r requirements.txtあとは、bme280_sample.pyを実行すれば温度・湿度・気圧が表示されます。
$ python bme280_sample.py 
temp : 15.28  ℃
pressure : 1014.54 hPa
hum :  58.74 %ちなみに、こちらのプログラムは、bme280_sample.py内に3箇所あるprint文の引数を()で囲むだけで、Python3系でも動くようになります。
C言語
さてここからが本題。というのも、当初以下のコードを使おうと思ったのに使えなかったので、スイッチサイエンスのサンプルを真似する形でCで書きました。
Raspberry Pi Samples. Contribute to Hiroki-Kawakami/RPi-Samples development by creating an account on GitHub.
gitからcloneしてきて、bme280/c/に移動した後、以下のコマンドで使えます。
$ make
$ ./main
temp: 15.30 °C
pressure : 1014.21 hPa
hum :  59.42 %wiringPiは使ってません。I2C通信は以下を参考にさせていただきました。
はじめに Raspberry PiやJetson nanoでI2Cデバイスを使いたい時に、RasPiではpigpioやWiringPiなどのライブラリがありますが、JetsonだとJetson.GPIOぐらいしかなく、C/C++...
wiringPiは、なんか開発終わってしまったみたいなので、これからは使用を控えていこうかと・・・
Node.js
外部からアクセスできるプログラムを書くのはNode.jsが楽なので、これ用にも書いてみました。
Raspberry Pi Samples. Contribute to Hiroki-Kawakami/RPi-Samples development by creating an account on GitHub.
gitからcloneしてきて、bme280/nodejs/に移動した後、以下のコマンドで使えます。
$ npm install
$ node index.js
temp: 15.298833577340702°C
pressure: 1014.2315845012982 hPa
hum: 59.53193717028008 %ライブラリにi2c-busを使用しています。あとは特にpythonのサンプルと変わりません。
まとめ
案外Pythonのサンプルを簡単に他の言語に移植できるよって話でした。とりあえずNode.jsで動いたので、Homebridgeから読み取ってみましょうかね。
コメント