LoginSignup
0
0

ChatGPT4.0に色々教えてもらいながらMQTT通信を使ってESP32から発信するデータをウェブダッシュボードに表示させるアプリケーションを作った

Posted at

ChatGPTにいろいろと教えてもらいながら、MQTT通信でESP32から発信されるデータをDashというダッシュボードに表示するアプリケーションを構築してみました。以下のような感じで電圧と温度をブラウザ上で表示した(温度と電圧のデータはダミーデータ)。

スクリーンショット 2023-09-18 14.01.05.png

今回の成果物

以下のGithubに置いてあります。
https://github.com/takurot/ESP32_MQTT

  • ESP32のコード
  • MQTTブローカーの設定(README)
  • MQTTブローカーからデータを受け取ってデータベースに保存するスクリプト
  • データベースを定期的に見に行って値をダッシュボードに表示するスクリプト

一連のChatGPTとのやり取り

コード上で修正が必要だったところ

  • サーバー側のSQLの記述に、特にリクエストしていなかったtimestampが入っていて、当初動かなかった。この辺はちょっと修正しているが、その他の部分はほとんど使える。
  • 証明書で暗号化通信を試みたが、なぜかMosquittoとESP32が認証ファイルエラーでつながらなかった。ChatGPTの問題というよりは、実行環境の問題のような気がしているがまだよくわかっていない。暗号化通信の部分はコードをコメント化している。ユーザー認証はちゃんと動いた。
  • 以下の回答はChatGPTが間違いを認めているのがちょっと面白い。たまに細かいところの整合が取れない時があるのかも。コードは一度に生成してもらったほうがよいかもしれない。

ChatGPT回答

  1. スクリプトの分離について:
    一般的に、異なる役割を持つコードは別々のスクリプトやモジュールに分けることが推奨されます。これにはいくつかの理由があります:

    • 単一責任原則: 一つのスクリプトやモジュールは一つの明確な役割や機能を持つべきです。これにより、コードの保守やデバッグが容易になります。
    • 再利用性: 分離されたモジュールは、必要に応じて他のプロジェクトで再利用しやすくなります。
    • 可読性: より小さな、特定の機能に特化したスクリプトは、大きな一つのスクリプトよりも読みやすくなります。

    したがって、MQTTを介してデータを受け取りデータベースに保存するスクリプトと、Dashを使用してデータベースの内容をグラフとして表示するスクリプトは、通常別々のファイルに配置するのが良いでしょう。

  2. データベース名について:
    私の回答での不整合を指摘していただき、ありがとうございます。以前の例ではデータベースの名前としてsensors.dbを使用しましたが、このDashスクリプトではdata.dbとしてしまいました。実際には、両方のスクリプトで同じデータベース名を使用する必要があります。したがって、Dashのスクリプト中のデータベース名もsensors.dbに修正すべきです。

前述の例から次の部分を:

conn = sqlite3.connect('data.db')

次のように修正してください:

conn = sqlite3.connect('sensors.db')

このように統一しておくことで、両方のスクリプトが同じデータベースを参照・操作することが確実となります。

所感

  • MQTTのこととかユーザー認証のこととか確認方法とかを聞きながら、ちょっとづつ知識を増やしてアプリケーション構築することができるので、多少時間はかかりながらも異分野のコードを短時間で作成することができる。
  • ユーザー認証をする、などあとから仕様が追加になったりした場合は、全部を再作成してもらったほうがよい。
  • 注意すべきポイントもその都度教えてくれる。
  • 微々たる間違いはあるが、すべてを否定するほどのことでもない。よく知ってる先輩、くらいの位置づけ(多少間違うこともある)。
  • 出力されるエラーについても詳しく教えてくれる。
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0