ラベル BME280 の投稿を表示しています。 すべての投稿を表示
ラベル BME280 の投稿を表示しています。 すべての投稿を表示

2026年9月17日木曜日

Arduino手習い(TFTディスプレイを使う)

 以前、PICに繋げるつもりで買ってデッドストックになっていたTFTディスプレイ(ILI9341)はESP32に繋げられそうなので試してみた。このTFTディスプレイにはタッチパネル(MSP2807)が付いている。次のWEBを参考にした。

ESP32 TFT with LVGL: Display Temperature on Line Chart (BME280)

プログラムをコンパイルしESP32に書込むとプログラムは何事も無く動いた。コンパイルにあたり1つ注意が必要なのはlvglライブラリーが最新バージョンの9.6.0ではなく9.2.xを選ぶ必要がある事だ。そうでないとコンパイルエラーで先へ進めない。

 上の写真を撮った時点ではタッチパネルは未配線であるが問題なく動いた。タッチパネルを配線してみたらタッチした反応が得られようになったが座標が正常には認識されていなかった。これはプログラム中305行目付近にある次の行のパラメータを2から0に変更したら正常になった(この事はプログラム中のコメントに記載されている)。

    touchscreen.setRotation(2);

 

TFTディスプレイが動いたことに気をよくしてプログラム(ウェザーステーション)にも挑戦した。

  ESP32 TFT with LVGL: Weather Station

これはインターネットから気象データを取得し気温や天気をグラフィックに表示するものだが、こちらは 、

最大1310720バイトのフラッシュメモリのうち、スケッチが1853116バイト(141%)を使っています。

 というフラッシュメモリーが足りないというエラーが出て実行できなかった。

最後に、TFTディスプレイに画像を表示させてみた。元ネタは次のWebだ。

    ESP32 with TFT: Display Image using LVGL – 2.8 inch ILI9341 240×320 

 指示に従って外部サイトを使って自分の画像データをプログラムで使える形に変換し image.h のファイル中に挿入、さらにimage.hの最後の方にある次の行に解像度を設定し、

        .w = 320,
        .h = 240,

プログラムと共にコンパイル・実行すると画像がTFTに表示された。


 参考までにESP32-DevKitC-32E、TFT(ILI9341)、BME280の接続関係は次図の通り。


 

 

 

2026年9月15日火曜日

Arduino手習い(WiFi WEBサーバ、気象データ(BME280)のグラフ表示)

 前回はBME280で測定した気象データ(気温、湿度、気圧)を数値で表示させたが、それらをグラフで表示させる事に挑戦した。参考にしたのは次のWEBページだ。

 ESP32/ESP8266 Plot Sensor Readings in Real Time Charts

 WEBページの指示通り予め表示用htmlファイルを作成し、ESP32 LittleFSファイルシステムアップローダ(ダウンロード&IDEへの追加が必要)を使ってESP32のフラッシュメモリーに書き込んだ。次にプログラム中にあるWiFiアクセスポイントのSSIDとパスワードを設定し、コンパイルすればそのまま動いた。 

ESP32に割り振られたIPアドレス(IDEのシリアルモニターに表示される)にPCや携帯のブラウザからアクセスすれば次のようなグラフが見られる。 



 グラフはサーバ側ではなくアクセスしたクライアント側で作成されるのでアクセスした時点ではスケールしか描画されておらず30秒~1分程度待たなければグラフにならないが、その後は30秒毎にデータが更新され3つのグラフが更新されていく。

データは小数点下2桁まで表示され、実用上はそのような分解能は必要ないが描画する上ではグラフに動きが出て面白い。 カーソルをプロット上に持っていくとそのデータ値と時刻が表示される。

とても面倒だと思っていたグラフ描画を簡単に実行できたので拍子抜けした。今回のプログラムを解析すれば今後のプログラミングに役立つだろう。今のところ時刻がUTCなのは良しとしよう。

 

2026年9月13日日曜日

Arduino手習い(WiFi WEBサーバ、気象データ(BME280)の表示)

 動的なWEBサーバを構築するに当たって、リアルタイムデータが欲しい。ネットで事例を当たっていると1個で気圧・温度・湿度が図れるBME280というのセンサーが便利なようだ。そういえば似たようなセンサー昔秋月で買ったことがあるぞ、と過去の未完成基板を引っ張り出してみたら上手い具合にBME280モジュールが載っていた。

早速、簡単な事例を探して動かしてみたら必要なライブラリーのインクルードと若干の修正で簡単に動いた。

PCからアクセスすると次のような表示になる。 

この元となったブログは「すっさんぽ」さんの、ESP32とBME280で、温湿度計を作った、だ。

このプログラムはネット経由で時刻を取得するのでESP32スタンドアローンでは動かせないが、一方mDNSの機能を搭載し、IPアドレスではなくホスト名(esp32.local)でアクセスできる所が優れている。

データは1分毎に更新されるが、それはクライアント側からリロードのリクエストを出す事で実現されているので、最終的に目標としているPUSH型ではない。 

ちなみに、ソースコードの変更点は次の通り。

  • 漢字コードがShift-JISだったのでUTF-8に変更
  • HTMLの定義の中の 
    <title></title>
    を
    <title>気温・湿度・気圧(BME280)</title>
    に変更(ブラウザのタブにタイトルが表示されるようになる)。
  • シリアル通信が初期化されていなかったので
    void setup() {
    の次の行に
    Serial.begin(115200);
    を挿入。
  •  setup()の最後に
    Serial.println("ESP32 Web Server(+BME280) Ready!");
    を挿入。   

 以上、