小型なESP8266開発ボードとなるWeMos D1 miniを使いWi-Fi経由でお天気情報を取得して表示させるMini Weather Station(ウェザーステーション)を作ってみました。
ベースとなるスケッチはArduino IDEのESP8266を使ったサンプルスケッチ[ESP8266 Weather Station]として公開されているもので、調べてみると多くの方がこのスケッチを使ったウェザーステーションの製作を行っているようですね。
同様な構成で作られたものはキットとしても販売されているようで非常に人気があるもののようです!
私も以前から作ってみたいと思っていたのですが、Arduinoを使った電子工作を始めた当初はどうにもサンプルスケッチ自体をうまく動かすことが出来ず・・・
最近ようやくスケッチ内容を理解することが出来るようになってきたので少し手を加えて機能を追加し、そしてCADでケースをモデリングしMini Weather Stationとして製作してみました。
0.96インチの小型OLEDディスプレイを使っていますが、このミニサイズのディスプレイではボディーサイズがあまり大きくなりすぎると見栄えもよくなくなります。
なんとか約4cm角以内の小型サイズに全パーツが収まるようにするためにモデリングは苦労しました!
完成品はなかなかオシャレでかっこいいものになったと思います!
この投稿をInstagramで見る
今回3Dプリンタでケースを作成し完成品として各パーツをケース内に収めましたが、ESP8266を使ったWi-Fi通信の学習用としても最適なのでブレッドボード上で組んで動かしてみるだけでも面白いかと思います。
目次
ミニウェザーステーションの製作!
今回製作したMini Weather Station(ミニウェザーステーション)のベースとして使ったスケッチは、ESP8266のサンプルスケッチ[ESP8266 Weather Station]としてArduino IDEに入っているものです。
Arduinoを始めた頃に面白そうだったので何度か試したことがあったのですが、その当時はうまくスケッチを動かすことが出来ず・・・
Arduino IDEに入っているサンプルスケッチって簡単なものもありますが、ある程度スケッチ(プログラム)内容を理解していないと動かすことが出来ないものも多いですよね!
一応ベースとして使ったサンプルスケッチはこちらにあります。
[ファイル]→[スケッチ例]→[ESP8266 Weather Station]→[Weather StationDemo]
上記サンプルスケッチをベースにWeMos D1 Miniで動作するようにスケッチを修正しています。
また上記サンプルスケッチではOpenWeatherのAPIキーを使い指定した地域の天気予報を取得し表示させるものとなります。
このスケッチをベースに温湿度センサー(DHT11 or DHT22)を使い部屋のリアルタイムの温湿度を計測し表示させる項目を追加したものをケースデータ(STLファイル)とともにThingiverseに公開しています。
それではミニウェザーステーションの製作を進めていきましょう!
使用パーツ一覧
まず製作に必要なパーツの一覧です。
ケースデータは下記ThingiverseにSTLファイルをアップしているのでこれを使って下さい。
製作したケースは、前面パネル・センターパネル・後面パネルの3パーツ構成となっています。
またArduinoスケッチも一緒にアップしています。
後述しますが、このスケッチを使いご自宅のWi-Fi環境の設定やOpenWeatherのAPIキーの設定などスケッチを修正する作業も必要となります!
ケースのSTLファイル・Arduinoコードはこちらからダウンロードして下さい!
参考 Mini Weather Station(WeMos D1 Mini/ESP8266)Thingiverseブレッドボード上でテスト動作のみさせてみたいという方も使用する以下パーツ構成は同じなので参考にして下さい。(充電モジュールは必要ないですが)
パーツ一覧 | |
WeMos D1 Mini | ESP8266開発ボード |
ディスプレイ | 0.96インチ(解像度128×64) I2C接続 |
DHT22(or DHT11) | 温湿度センサー |
TP4056 | 充電モジュール |
リポバッテリー | 約150mAhくらいのサイズのものが最適です |
スライドスイッチ | タミヤの6Pタイプのものにサイズを合わせています |
M2×6mmタッピングビス | 計14本(内2本は3mmにカット) |
WeMos D1 Mini(Lolin)
マイコンボードはESP8266開発ボードとして有名なWeMos D1 Miniを使いました。
小型で使いやすいESP8266開発ボードの一つとなります。
入手性のことも考えボードのバージョンはV2タイプのものを使いました。
WeMos D1 Mini(Lolin)は、V3タイプのボードやオリジナルとなるLolinではV4タイプのものも販売されています。
基本的にボードサイズは同じなので、どのバージョンのボードを使っても問題ないかと思います。
OLEDディスプレイ(0.96インチ)
ディスプレイは0.96インチの小型ディスプレイ(解像度128×64)を使っています。
同サイズのディスプレイは多数販売されています。
SPI接続で使用するものもありますが、今回I2C接続タイプのものを使っています。
温湿度センサーDHT22(or DHT11)
設置した部屋の温湿度をリアルタイムに計測するために温湿度センサーを使っています。
今回DHT22のサイズに合わせてケースをモデリングしていますが、小型なDHT11を使うことも出来ます。
DHT22の方がセンサーの精度が高くなっていますが、そこまで精度が要求されるものでもないのでDHT11を使っても全く問題ないと思います。(ケース内に隙間ができるのでスポンジ等で固定が必要)
DHT22には基盤(モジュール)の形状が異なるものがいつくか販売されていますが、リンク先の形状のものを選択して下さい。
充電モジュール TP4056
今回製作したミニウェザーステーションは、バッテリー駆動も出来るように小型サイズのリポバッテリー(150mAh)を使っています。
この内臓バッテリーの充電とマイコンや各モジュールの駆動を同時に出来るようにTP4056充電モジュールを使いました。
TP4056のUSB端子の形状は数種類ありますが、今回Type-Cタイプのものを使っています。
リポバッテリー
どうしてもケースサイズを約4cm角に収めたかったので、内部に収納出来るバッテリーサイズはかなり制限されます。
ドローン用途で結構多くのリポバッテリーを持っていますが、手元にあったサイズが約28mm×18mm×8mmとなる容量150mAhのものを今回使いました。
ケース内に収まらなくなるので、このサイズに極力近いものを選んで下さい。(30mm×20mm×8mmサイズまでが限界です)
Amazonで購入出来るものだとこのあたりのバッテリーになります。
電源スイッチ
電源スイッチにはタミヤのスライドスイッチを使いました。
基盤用のスライドスイッチでは小さすぎるので、これくらいのサイズのものが使いやすくなります。
M2×6mmタッピングビス(14本)
ケースとディスプレイ固定用のビスはM2×6mmのタッピングビスを使っています。
前面パネル・後面パネル・ディスプレイの固定で各4本ずつの合計12本使います。
また電源スイッチの固定に3mmの長さのものを2本使いますが、これは6mmのものをペンチ等でカットすれば使えるので合計14本必要となります。
ESP8266開発環境の構築
まずESP8266の開発環境の構築です。
普段ESP系のマイコンボードを使われている方は既に行われていると思うので問題ないかと思います。
Arduino IDEを使った開発環境で行っていきます。
Arduino IDEのインストールがまだという方はこちらの記事も参考にして下さい!
WeMos D1 MiniはESP8266開発ボードとなります。
Arduino IDEで使う場合、ESP8266のボードパッケージのインストールが必要となってきます。
作業は簡単なので、こちらの記事を参考にESP8266に対応したボードパッケージのインストールを行って下さい。
ご自宅のWi-Fi環境の設定やOpenWeatherのAPIキーの設定などスケッチを修正する箇所がいくつかあります。
また、使われているライブラリのインストールも必要となってきます。
上記開発環境が整えば、ここから一部スケッチの修正作業と使用するライブラリのインストール作業を行っていきます。
それでは順を追ってやっていきましょう!
ライブラリのインストール
まず、必要となるライブラリのインストールです。
いくつかあります。
[スケッチ]→[ライブラリをインクルード]→[ライブラリを管理]へと進みます。
[Json Streaming Parser]
[json streaming]で検索すると[Json Streaming Parser]というライブラリが見つかります。これをインストールします。
[ESP8266 and ESP32 OLED driver for SSD1306 displays]
同様の手順で以下のライブラリをインストールしていきます。
[ESP8266 Weather Station]
[DHT sensor library for ESPx]
スケッチの修正
次にスケッチの修正です。
ご自宅のWi-Fi環境の設定・OpenWeatherのAPIキーの設定・ロケーションIDの設定などいくつか修正が必要な箇所があります。
上記ThingiverseにアップしているArduinoスケッチを使って修正作業を行っていきます。
Arduino用のスケッチは、[WeatherStation.ino][WeatherStationFonts.h][WeatherStationImages.h]の3つのフィアルに分かれています。
Thingiverseの仕様なのか?zip形式でアップロードできなかったので、上記3つのファイルをダウンロード後、新規で[WeatherStation]という名称でフォルダを作りこの中にファイルを入れて下さい。
あとは通常通り[WeatherStation.ino]ファイルをクリックして開きます。
これで2つのヘッダーファイルも一緒に読み込まれます。
ここから以下スケッチの修正作業を行っていきます。
Wi-Fi設定
ご自宅で使われているWi-Fi環境でのSSIDとパスワードをスケッチ内のこの項目に入力して下さい。
【例】const char* WIFI_SSID = “xxxx-xxxxxx-g “;
52 53 | const char* WIFI_SSID = " Your SSID "; const char* WIFI_PWD = " Your Password "; |
タイムゾーンの設定
タイムゾーンとサマータイムの設定項目です。
サンプルスケッチから既に修正しているので国内で使われるなら特に修正する必要はありませんが、国外で使われる場合ではこの項目の修正が必要となります。
55 56 | #define TZ 9 // (utc+) TZ in hours #define DST_MN 0 // use 60mn for summer time in some countries |
アップデート間隔の設定
OpenWeatherからの情報取得の間隔を設定します。
現在の設定は5分間隔で更新する設定にしています。
特に変更する必要はありませんが、任意に更新する間隔(時間)を変更する事も出来ます。
59 | const int UPDATE_INTERVAL_SECS = 5 * 60; // Update every 5 minutes |
また内蔵している温湿度センサーDHT22(or DHT11)からの情報取得の間隔は1分に設定しています。
こちらも任意に変更する事が出来ます。
60 | const int DHT_UPDATE_INTERVAL_SECS = 1 * 60; // Update every 1 minutes |
DHT22 or DHT11の設定
温湿度センサーは今回DHT22を使っています。
DHT22を使う場合はスケッチの修正は必要ありませんが、DHT11を使われる場合スケッチ内の以下の部分をDHT22→DHT11に修正して下さい!
152 | dht.setup(D4, DHTesp::DHT22); |
OLEDディスプレイのI2Cアドレス
OLEDディスプレイのI2Cアドレスの設定です。
おそらくこのタイプ(サイズ)のディスプレイでのI2Cアドレスは”0x3C“で問題ないと思いますが、購入サイトを参考に必要なら変更して下さい。
63 | const int I2C_DISPLAY_ADDRESS = 0x3c; |
OpenWeather APIキーの設定
本スケッチはOpenWeatherのAPIを使い各地の気象データをWi-Fi経由でネットから取得しています。
OpenWeatherは全世界の気温や降水確率・湿度や気圧といった気象データを取得できるサービスです。
詳しくは割愛しますが、これら気象データの取得にはAPIキーを発行する必要があります。(ユーザー登録が必要です!)
有料版では多くのデータを取得できますが、今回製作したミニウェザーステーションでは無料版で特に問題ありません!
APIキーの発行は簡単です!
まずOpenWeatherのユーザー登録を行います。(メールアドレスとパスワードの設定のみです)
ユーザー登録完了後、サイトにログインし[My API Keys]のページに行くとAPIキーが表示されます。
こちらが発行されたAPIキーとなります。
無料版と有料版の違いについてはこちらを参考にして下さい。
ちなみに無料版では1分間に最大60コール、月に1000000コール出来ます。
今回5分間隔で更新する設定にしていますが全く問題ないですね。
発行されたAPIキーをコピーしスケッチのこの部分に貼り付けます。
72 | String OPEN_WEATHER_MAP_APP_ID = " OpenWeather API Keys "; |
ロケーションIDの設定
次にロケーションIDの設定です。
OpenWeatherのトップページの検索ボックスに地域を入力します。
仮にお住まいの地域が東京だとします。
選択した地域の気象データが表示されます。
これらが取得されるデータとなります。
URL部分を見ると末尾に数字が記載されています。
これがロケーションIDとなります。
東京では[1850147]ですね。
この数字をスケッチ内のこの部分にコピー&ペーストします。
79 | String OPEN_WEATHER_MAP_LOCATION_ID = " Your Location ID "; |
スケッチの修正作業は以上です。
スケッチの書き込み
次にスケッチの書き込みです。
ボード設定は、[ツール]→[ボード]→[ESP8266 Boards]から[LOLIN(WEMOS)D1 R2 & mini]を選択します。
シリアルポートを選択しあとは通常通りアップロードボタンをクリックしてスケッチの書き込みを行って下さい。
接続
全体の接続はこのようになります。
OLEDディスプレイのSDA端子をWeMos D1 MiniのD2、SCL端子をD1に接続します。
またDHT22(or DHT11)のS(シグナル)端子はD4へ接続します。
ブレッドボードでのテストのみの場合は、上記回路図のTP4056とリポバッテリーは省略しOLEDディスプレイとDHT22のVCC・GND端子をWeMos D1 Miniの5V端子・GND端子に接続してUSB端子からの給電で動かせば問題ありません。
接続&スケッチに問題なければWi-Fi経由でOpenWeatherからのデータ取得後、このように4項目スクロールして現在時刻や天気情報、室内の温湿度が表示されます。
この投稿をInstagramで見る
ケースへの組み込み
それではケースへ組み込んでいきます。
サイズが小さいのでビス打ちや配線が少し大変ですが頑張って下さい!
OLEDディスプレイと温湿度センサーDHT22にはピンヘッダーが取り付けられています。
ケースに組み込む際にこのピンヘッダーが邪魔になるので取り外してからケーブルを配線しておきます。
長めのケーブルを接続し、組み込む際に適度な長さに調整するのが作業しやすいと思います。
前面パネルへディスプレイを固定します。(M2×6mmビス使用)
充電モジュールTP4056にリポバッテリーとスライドスイッチを配線しておきます。
ケーブルは長すぎるとケース内に収めるのが大変なので、これくらいの長さがベストだと思います。
接続が出来たらケースにはめ込みます。
TP4056充電モジュールのUSB端子側にスライドさせながら下に押し込むとうまく溝にハマります。
スライドスイッチの固定には3mmビスを使います。
M2ビスなので普通のペンチなどを使ってカット出来るので、用意したM2×6mmビスをカットして使えばいいと思います。
スペースの関係でドライバーが入れにくいと思いますが、タッピングビスなので多少斜めに打ち込んでも問題ないです。
DHT22を上部スペースに入れます。
ケース内部で90°回転出来る設計にしています。
スペースの関係で固定する形状にはしていないので、ケース内で動くようなら裏からスポンジ等を入れておけばいいと思います。
ケーブルを処理して前面パネルの取り付けです。
あとはWeMos D1 Miniとの接続です。
今回ワイヤーにはブレッドボードに挿せるジャンパーワイヤーを使いました。(はんだの際にカットします)
実は小型な5Vレギュレーターを使いリポバッテリーの電圧3.7V(満充電時4.2V)を5Vに昇圧して使用する予定でした。
何度かこの時点で電圧や動作チェックをしたのですが、特に5Vレギュレーターを入れなくても問題なく動作するようなのでカットしました。
WeMos D1 Miniには[5V端子]からの入力をボード上の3.3Vレギュレーターで電圧を落として動作させていますが、マイクロコントローラー自体の最低動作電圧は2.58Vとなっているので直接リポバッテリーからの給電でもうまく動作するようです。
OLEDディスプレイやDHT22の動作も問題ないようです。
上記接続図の通りに配線して完了です!
かなりいい感じに仕上がりました。
0.96インチの小型ディスプレイを使っているのでケースサイズもこのくらいミニサイズの方が可愛くかっこいいと思います。
この投稿をInstagramで見る
今回内蔵したリポバッテリーは150mAhの容量のものを使いました。
おそらくこのケースに収めるにはこれくらいの容量のものになると思います。
容量が小さいのでバッテリー駆動だけでは約3時間ほどしか持たないので、あくまでUSB端子からの給電の補助として考えた方がいいかと思います。
ケース作成には、RepRapperホワイトPLAフィラメントを使いました。
細かい部分の寸法精度もよく綺麗に出してくれました。
【追記】製作報告、ありがとうございます!
Mini Weather Stationの製作第1号様、ご報告頂きました。
他の方の環境でも上手く再現出来ているようなので安心しました。
2色タイプのOLEDディスプレイを使うのもカッコいいですね。
早速作らせて頂きました。ありがとうございました。
ケースの中に詰め込むのにそれなりに苦労した。
可愛くてお気に入りのWeatherステーションです! pic.twitter.com/ChrVxGPlmP— monkey (@afour052) August 6, 2022
最後に!
個人的には非常に大満足なミニサイズの可愛いウェザーステーションになったと思います。
PCまわりに置いておけば結構オシャレじゃないですかね?
CADの設計も少し慣れてきて以前は作れなかったこのようなミニサイズのものの設計にも挑戦してみました!
ベースとなるスケッチはArduino IDEのサンプルスケッチとして提供されているもので、このスケッチをベースとしたウェザーステーションキットなども販売されている結構メジャーなものなので、ブレッドボードで組んで試してみるだけでも面白いと思います。
Wi-Fiに接続されているので、スケッチを修正して例えば世界の時刻を表示するワールド時計みたいな機能を付けることなんかも出来るので面白いと思います!
興味ある方はぜひ作ってみて下さい!
コメントを残す