はじめに
ほた~ おはようございます! こんにちは!
今回の記事はESP32でWi-Fi接続を試した結果、住処のWi-Fiでは接続が危険でモバイルルーターの購入を検討しているというお話です。
つまりESP32を使ったWi-Fi接続ができなかったということです。
そうそう7月31日に2019年6月から使っていたスマートフォンが感度センサーの破損により役目を終えました。同日にmineoで機種変更を済ませ、新しいスマートフォンがやってきました。3年間お疲れさまでした。
機種については次のように変わりました。
Zenfone Max Pro M2→moto g52j 5G
ASUS社からMotorola社に変更しました。色はインクブラックです。インクという言葉Splatoonの種族にインクリングと使われているように墨という意味を持つのでイカさんにぴったりです。防水・防塵性能を持っているのでお茶をこぼしても大丈夫です、たぶん。1年に数回はあるので。moto g52j 5Gの他の機能や外観に興味があれば下のリンクから参照をお願いいたします。
https://store.motorola.co.jp/item/MOTO_G52J_5G.html
5Gとつくように5Gデビューを果たしました。といっても家では4G回線なのでまだ威力は体感していません。モバイルルーターを導入するなら5Gに対応したものにします。体感するという意味でもモバイルルーターを導入した方がよいと考えています。
それでは学習書籍の紹介と現状報告に入ります。
ESP32 学習書籍の紹介
ESP32の学習に『はじめての「ESP32」 (I/O BOOKS) 』という書籍を使うことにしました。下リンクはヨドバシ.comでの本書の紹介です。自分はAmazonで購入しました。
書籍で学ぼうと決めたのは体系的に学びたかったためです。ネット上でもESP32のIOピンの構成やLチカの方法が書かれた記事がございますが、それらをまとめて参照するには書籍が最適と思いました。他にもESP32の書籍はございましたが、本書に決めたのは販売開始日が一番新しかったためです。
さて自分が作りたいのはティータイムの時間を知らせるアラームです。まいはさん向けの機能です。しかしながら本書で学べることからアラームを作ることは難しいです。理由はRTC(Realtime Clock)を使った実装がないためです。RTCを使うと現在時刻を取得できます。RTCを使ったアラートの実装方法は別途ググったり、Youtubeで検索して探します。参考になる記事がございましたので「こういうアラームを作りたい」という意味で貼り付けます。
本書からESP32を使って次のことが実現できると思います。
- ESP32をネット(Wi-Fi)に接続
- 温湿度センサとのI2C通信
- Wi-Fiのアクセスポイントを実装
- Webサーバを実装
- LINE通知を実装
1でESP32が本当にネット接続できているか検証することができます。
2でセンサで取得したデータを書き込んだプログラムを使って表示させることができます。本書では「温湿度センサ(SHT35-DIS)を使って温度と湿度を取得しますが、RTCにも応用が効くかもしれません。
3と4でパソコンと通信してブラウザにプログラム実行結果を表示させる実装を行います。
5はLINEの公式API(LINE Notify)を通じてLINEに通知することができます。つまりティータイムのお知らせにLINE通知が使えるということです。LINE Notifyは職場で試したことがございますので全く知識がないというわけではありません。その際はオークションサイトのような感じで商品を出品してお客さんが購入したら通知されるという実装を行いました。
さて学習書籍から自分が実現できることを紹介しましたが、現在①の段階で止まっています。Wi-Fi接続を試したところ接続できなかった場合の結果が返ってきました。そのためモバイルルーターの導入を検討しています。それではWi-Fi接続状況を見せます。
ESP32 Wi-Fi 接続状況
単刀直入に言いますと住処のWi-FiとESP32と接続するのが危険なためモバイルルーターの導入を検討しています。
ESP32は2.4GHz(ギガヘルツ)の周波数帯でのみ接続でき、5GHzには対応していません。電気の周波数は交流電気の入れ替わる波の回数の事1をいい、ギガは10の9乗を表す単位であるため、日々膨大な波が絶えずうねっています。2.4GHzでは電波が遠くまで届きやすく、各Wi-Fi機器が対応しているという長所がありますが、混雑すると渋滞してスピードが遅くなるという短所があります。5GHzはルーター以外に使われない周波数帯であり2.4GHzより高速という長所がありますが、遠く離れていると通信が不安定になる短所があります。2.4GHzと5GHzの違いについてはElecomの記事が参考になりましたので紹介します。
【Wi-Fiルーター】2.4GHzと5GHzの違いについて – 製品Q&A
住処のPCでは5GHzの方を接続しているので2.4GHzに対応した別のネットワークに接続する必要があります。ネットワークにはWi-Fi(無線LAN)通信を識別するためにSSID(Service Set IDentifier)が割り振られています。また接続するとき認証するためのパスワードも必要になります。下記のコード内に住処のSSIDとパスワードを入力しましたが接続できませんでした。
Wi-Fi接続用コードと実行結果
#include <WiFi.h>
const char* ssid = "yourssid"; // 接続したいネットワーク名
const char* password = "passwd"; // 認証に必要なパスワード
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
int count = 0; // ステータスチェック回数を記録
int status; // Wifiステータスを記録
while((status = WiFi.status()) != WL_CONNECTED){
// 接続できていない場合
delay(500);
count++;
if (count == 5 || status == WL_NO_SSID_AVAIL) {
WiFi.begin(ssid, password); // 再接続
delay(500);
}
Serial.print(status); // シリアルモニタにステータス表示
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {}
プログラム実行結果
判明したこと
実行結果からシリアルモニタに「1」と表示されました。これは「WL_NO_SSID_AVAIL」という意味で、つまりSSIDを認識していないということです。リセットすると最初「6」が表示された後に「1」が表示されました。この数字が「3」になれば「WL_CONNECTED」つまり接続できたということを意味します。Wi-Fiの接続状態は他にもございます。知りたい方は下記リンクからArduino(ESP32)リファレンスの確認をお願いいたします。
https://garretlab.web.fc2.com/arduino/esp32/reference/libraries/WiFi/WiFiSTAClass_status.html
接続できるとESP32本体のIPアドレスが表示されるプログラムですが、住処のWi-Fiでは辿り着いていません。接続を試したネットワークはパソコンで「以前のセキュリティ標準が使用されており、ユーザーが保護されない可能性があります。」と警告が表示されており、現在のセキュリティ基準に合っていないと考えられます。そこでモバイルルーターの導入という案が出てきました。モバイルルーターは設備工事不要で持ち運びできるというメリットがあります。調べたところ2.4Ghzと5GHzに対応しているのは標準になっていました。
今後行うこと
今後行うことは次の3点です。
- モバイルルーターの選定と導入をする
- 導入後に上記のコードを使ってWi-Fi接続のテストを行う
- 温湿度センサSHT35-DISを購入
モバイルルーターを注文すると1週間以内に住処に届きます。届いた後Wi-Fi接続のテストを行いIPアドレスが表示されればOKとします。つまり返却可能な試用期間があるのが望ましいということです。温湿度センサについてはArduino Uno スターターキットにDHT11という温湿度センサが入っていますが、I2C通信未対応のためSHT35-DISを購入します。また出費は増えますが、これが自分たちに必要な学習と思えば必要経費です。速やかに行動に移します。
ESP32 Lチカの様子
ESP32においてもLチカできました。
学習書籍に書かれたコードを参考に行いました。学習書籍では抵抗付きLEDを使った例が示されていましたが、自分は持っていないので220Ωの抵抗器を追加しました。ブレッドボードは「サンハヤト SAD-101 ニューブレッドボード」です。リンク先はサンハヤト公式ショップです。スターターキット付属品のブレッドボードより固い感触がしてカッチリはまります。1枚だけではESP32が大部分を覆ってしまい、できることが限られてくるので2枚を連結しています。
以下のプログラムをESP32に書き込んだ結果、Lチカできました。またLEDを4つ上の穴に移動させてジャンパワイヤで接続した場合もLチカできることを確認しました。
void setup(){
// 書き込んだときに1回だけ実行されます。
// 22ピンを出力モードに設定
pinMode(22, OUTPUT);
}
void loop() {
// プログラム本体、繰り返し実行されます。
// HIGHとLOWを交互に出力してチカチカさせます。
digitalWrite(22,HIGH);
delay(500);
digitalWrite(22,LOW);
delay(500);
}
最後に
不運続きで怒りがたまっており、予定より記事投稿が遅れました。
本当は火曜日の夜に書き終える予定でした。しかし下記のように度々の不運続きにつき書けるくらい安定するまで様子見しました。
- スマートフォンの破損
- Arduino UnoでRTCに現在時刻を入力したところ反映されない
- Arduino ESP32でWi-Fiに接続できない
- しまいには藍染のスカーフを紛失
怒りを抑えるのに別の情報を流し込み上書きするという方法を採りました。自分の場合は「フリップフラッパーズ2」というアニメを見ることにしました。現実とは異なる世界、ピュアイリュージョンの中身が見た目は美しいけど危険いっぱい。ヤヤカはただココナの隣に居たかっただけ。パピカはどんな世界にも希望を見ていて健気、実年齢は気にしない気にしない。ココナは感情に振り回された物語と決着をつけた。いろんな見方ができるアニメだと思います。1話で出た生物が12話で出てきたり、振り返ると連続写真のようでした。この物語を知っていることで浮かび上がるストーリーというものもあるでしょう。
澄んだ水を面白く濁らせる。水たまりに墨を吐いてヒレから光を当てると日々グラデーションが変化する、イカが擬態するように毎日異なる景色を見せている。不運続きに見える日々も別の視座を持てば幸運な日々に早変わり。
以上になります。
それでは最後まで読んでいただきありがとうございました。ほた~