ESP8266でBME280のデータを収集して、MQTTでWebARENAに送れるようになりました。となれば、もう表示するしかないです。
というわけで表示させてみたのがこちらです。(ホスト名は違いますからねー)
趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
ESP8266でBME280のデータを収集して、MQTTでWebARENAに送れるようになりました。となれば、もう表示するしかないです。
というわけで表示させてみたのがこちらです。(ホスト名は違いますからねー)
サーバ側はFlaskで構築しましたが、Flaskの本番環境だといまいちエラーがどこででているのかわかりにくく、デバッグに難儀することが見えてきました。
そこで、ローカル環境でテストする方法を確認しました。
MQTTクライアントがやっと動作するようになりましたが、さらに smartconfig と NTPクライアントの機能を追加しました。加えて、MQTTで送信するデータをJSON形式にしてみました。
昨日構築したArduino環境でESP8266にてMQTTクライアント(MQTT Subscriber/Publisher)を動かしてみます。接続先はInternet上のMQTTサーバ(MQTT Broker)をターゲットにします。ですので、通信路がSSLで保護されるのが最低条件です。
先日インストールしたAdafruit MQTTライブラリでいろいろ試してみたのですが上手く行かず、異なる方法を模索しました。また、その他のライブラリなども検討したり試してみたりしましたが、一長一短で、結構悩みました。
で、たどり着いた方法はこちらのサイトを参考にさせていただいて、 PubSubClient というMQTTクライアントを使いました。(基本的には、記載されている内容そのままです)
Flaskを使ってページ単位でBasic認証を設定する際のパスワードリストが前回生のパスワードを直接ファイルに記述していましたが、これをハッシュで記載するように修正します。
今回のPCはOSをインストールし直した環境です。ですので、仮想環境を用意するところから始めます。といっても、説明は省略します。ついでに、今回使うライブラリ(werkzeug)までインストールしてしまいます。
~$ mkdir python ~$ cd python/ ~/python$ sudo apt-get install python3-venv ~/python$ python3 -m venv pytest ~/python$ cd pytest/ ~/python/pytest$ source ./bin/activate (pytest) ~/python/pytest$ python -V Python 3.6.9 (pytest) ~/python/pytest$ pip install --upgrade pip (pytest) ~/python/pytest$ pip install werkzeug
今回使用するライブラリは werkzeug というものです。wUSGI をインストールすると一緒に入るようですが、手元のPCには wUSGI は入っていないので、インストールする必要がありました。
で、対話的にハッシュ値を計算して、検算してみます。
(pytest) ~/python/pytest$ python3 Python 3.6.9 (default, Jul 17 2020, 12:50:27) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from werkzeug.security import generate_password_hash, check_password_hash >>> generate_password_hash("GoodPassword") 'pbkdf2:sha256:150000$1AVzDmpB$2687453800736d0569477851b960ea158dc16949a3b3d9c317c8d212fbac4400' >>> check_password_hash('pbkdf2:sha256:150000$1AVzDmpB$2687453800736d0569477851b960ea158dc16949a3b3d9c317c8d212fbac4400',"GoodPassword") True >>> check_password_hash('pbkdf2:sha256:150000$1AVzDmpB$2687453800736d0569477851b960ea158dc16949a3b3d9c317c8d212fbac4400',"BadPassword") False >>>
このハッシュ値をパスワードリストに貼っておけばOKです。
MQTTで集めたデータを見える化する環境を作ります。できるだけお手軽に済ませたいので、Pythonを中心に構築します。
WebフレームワークはFlaskを使用、MQTTのsubscriberもPythonで記述します。
MQTTブローカーである mosquitto をインストールしてみます。インターネット上に見えるMQTTブローカーなので、SSLでの暗号化と接続のための何らかの認証を導入します。
本来ならば、クライアントの正当性を認証するところまでやるべきなのですが、1クライントごとに証明書を生成して管理する必要が出てきます。趣味の世界でそこまでやると大変なので、MQTTブローカーに接続する際にパスワード認証を行うレベルにとどめました。
こちらの記事を参考にしました。
秋月の新商品をずーっと遡っていたら、Sipeed M1n Module AI Development Kit based on K210(RISC-V)という1,450円のエッジAIデバイス開発ボードが目に止まりました。
これ、カメラがついているのにどうやって使うのだろう?
と思って、「Sipeed M1n Development Kit」ぐぐってみたら、こんな動画が引っかかりました。
これを見ていくと、開発ツールのMaxPyIDE上でカメラ画像の表示ができるっぽいです。これであれば、非常に扱いやすそう。
実験用にWebARENAでUbuntuサーバを立ててみます。
まずは、サーバのインスタンスを生成して、nginx + Let’s Encypt をインストールするところまでです。以下では、ホスト名を example.com と仮定します(置換しています)。