Ideal Reality

興味の赴くままに

Raspberry PiでC言語・Node.jsからBME280の値を読みとる

Amazon.co.jp: HiLetgo BME280

温度 センサー 湿度 センサー 気圧 センサー Arduino センサー 大気圧センサ 温湿度センサー ブレイクアウト Arduinoに対応 [並行輸入品]: 産業・研究開発用品

これを買ったので、Raspberry Piで値を読み取ってスマホから確認できるようにしたかったんですけど、値を読み取るプログラムがスイッチサイエンスのサンプル以外まともになかったので、とりあえずCとNode.jsで扱ってみました。

Contents
スポンサーリンク

Raspberry Piに接続

ピンヘッダをハンダ付けしたら、Raspberry Piと繋ぎましょう。

ちなみに、ピンアサインが裏面にプリントしてあって見辛かったので、僕は付属のではなく、手持ちのL字型のピンヘッダを使用しました。また、ハンダ付け直後はセンサーが熱を持ち、測定値がズレることがあるそうです。

BME280Raspberry Pi
VCC3V3
GNDGND
SCLGPIO3 (SCL1)
SDAGPIO3 (SDA1)
CSB接続しない
SD0GND

以上のように繋げばOK。その後Raspberry Pi OSでI2Cを有効にしてください。

$ sudo raspi-config

ターミナルからraspi-configを開いて、以下のように辿っていけば簡単にONにできます。できたら再起動してください。

もし、Raspberry Pi OS以外を使っているなら、/etc/modulesi2c-devを、bootパーティションのconfig.txtdtparam=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で書きました。

Hiroki-Kawakami/RPi-Samples/bme280/c/main.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通信は以下を参考にさせていただきました。

LinuxのC言語でI2Cデバイスと通信する - Qiita

はじめに Raspberry PiやJetson nanoでI2Cデバイスを使いたい時に、RasPiではpigpioやWiringPiなどのライブラリがありますが、JetsonだとJetson.GPIOぐらいしかなく、C/C++...

wiringPiは、なんか開発終わってしまったみたいなので、これからは使用を控えていこうかと・・・

Node.js

外部からアクセスできるプログラムを書くのはNode.jsが楽なので、これ用にも書いてみました。

Hiroki-Kawakami/RPi-Samples/bme280/nodejs/index.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から読み取ってみましょうかね。

スポンサーリンク

コメント

投稿されたコメントはありません

名前

メールアドレス(任意)

コメント

関連する投稿