ESP-32とMicroPythonでCO2センサを読んでみた+α


初めに

ESP32がお好き?けっこう.ではMicroPythonを使ってみるとますます好きになりますよ.

きっかけ

講義中眠くなるのはCO2濃度が高いからって古事記に書いてあったからとりあえずCO2濃度が基準値超えたらアラートを出して換気を促すSomeThingを作ってみたい.それと温度と湿度も測れるようにして,ついでにWifiのAP立ててWEBから濃度とか見れるようにしたい.

制作

環境はUbuntu18.04.部品はAliExpressで.

主に参考にしたところ

https://kokensha.xyz/electronics/try-micropython-on-esp32/
http://ken5owata.hatenablog.com/entry/2017/10/21/003706

検品

Aliexpressから買ったのでとりあえず検品してみた.
とりあえず,文献が豊富なArduinoとしてのESP32で読んでみた.
以下参考.
https://blog2.creativeflake.com/2017/04/22/オフィス換気のため-co2-センサー作り-ー-arduino-bme280-mh-z19編/
http://toccho.xsrv.jp/2018/05/05/esp-wroom02-mh-z19-measurement/
途中,配線を間違えて2000円と2週間を水泡に帰すところだったが,なんとかUARTで読むことに成功した.MH-Z19の電源電圧が3.3Vじゃ足りなくて困ってたらESP32ボードのVinから5Vが出ていることに気が付けて良かった.

が,しかし開けてある窓の近くに置いてるのにCO2濃度が高すぎやしないか?と思って調べてみたらキャリブレーションをすればリセットされて400ppmになるらしい.まだやらないけど.

MicroPythonをESP32へ

さて,いよいよESP32にMicroPythonを入れる時がやってきました.
参考↓
http://ken5owata.hatenablog.com/entry/2017/10/21/003706
適当なコマンドなりソフトでシリアルを覗いたら

成功してました.(繋いだらリセットスイッチとか押さないとこの画面は出力されない)
エラーが出てるけど気にしたら負け.

MicropythonでUART

そのままやろうとしたけど,Micropythonでデフォルトのやつ以外でUARTってどうしたらできるんだ?と悩みつつ見つけた救世主↓
https://github.com/micropython/micropython-esp32/issues/78

>>>import machine
>>>u1=machine.UART(1,baudrate=9600,rx=5,tx=4)
>>>b=bytearray([0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79])
>>>u1.write(b)
>>>n=u1.read()
>>>f=n[2]*256+n[3]
>>>print(f)

をすると
1791
と出てきてくれたのでMicropythonでもCO2センサが読めた.

ディスプレイの実装

とりあえずArduinoで

情報を表示するのはAliexprerssで買ったSSD1306搭載のOLED.とりあえずサンプルがあるAruduinoとして検品してみた.
参考↓
https://qiita.com/jakalada/items/8f83d07291d984a31633

動いた.

Micropythonで

https://qiita.com/inachi/items/ceb3e8e12022a7cbdf7b
を参考にやってみた.
ピン配置はSCLが22で,SDAが21にした.

表示はできたようだ.

温湿度計

DHT22というセンサを使いました.
ライブラリはこれを使いました.
https://github.com/micropython/micropython/tree/master/drivers/dht
使い方はコード読めばわかるはずです.
配線はプルアップし忘れなければ問題ないです.
ついでに不快指数も出してみました.

回路

雑ですがこんな感じになりました.

いつかこれをユニ基で実装します.

最後に

BaaSにデータを送ってグラフ化したいのでこんど_threadモジュールを使ってきれいに実装し直します.