
自宅IoT推進のためにesp8266 wifiモジュールを使ってみた話
こんにちは!
今回は電子工作ネタとして、低価格のArduino互換Wifiモジュール「esp8266」を使ってみたことについて書いていきたいと思います。今回はあくまでもテスト起動と言ったところですが、このモジュールを使うことで自宅のIoT化にむけていろいろと面白いことができそうなので、そのための足がかりに、と言ったところですね。
Arduino互換Wifiモジュール「Esp8266」
今回利用したのはEsp8266というモジュール。Arduinoと互換性を持っており、以前紹介したArduino IDEでC言語ベースのプログラミング環境で開発ができるので、手軽にインターネットと接続できるマイコンとなっています。センサーで取得したデータをクラウド上に保管したり、センサー情報からインターネット経由で通知や警告を出したり、逆に遠隔からインターネット経由でマイコンでモーターなどを操作したりとかですね。
詳しくはこちらのWikipediaの記事も合わせてどうぞ。
特徴はなんと言ってもその価格。モジュール単体だと250円という超低価格で、それをもう少し使いやすくモジュール化したものでも500円から1000円くらいで購入することができます。無線を使ってなにかしたいときには、まずはこれを使って試してみるみたいな感じですね。このモジュール単体でWifiに接続できるので、電源さえあればPCと接続しなくてもよく、設置場所やスペースを柔軟に選べるのが便利です(もちろん、プログラムの書き込みにはPCとの接続が必要ですが)。
電子工作の世界ではかなり広く使われているモジュールなので、いろいろなところで購入できますが、例えば秋月電子だと以下のような感じです。基本的にどこで買ってもいいと思いますが、国内で使う場合には「技適マーク」が取得済みであるかどうかは確認しておいたほうが良いと思います。
このモジュールを使ってインターネットに接続するためのArduino言語用のライブラリもオープンソースで利用できるので、ある程度プログラミングに慣れている人なら接続するコードを組むこと自体もそこまで難しくありません。マイコンのハードウェアを理解してアセンブリ言語などで開発しようとするとおそらくめちゃくちゃ大変なので、本当にいい時代だなぁと思いますねw
Wifiとの接続確認
まずは、ブレッドボード上でWifiにうまくつながるかどうかを確かめてみます。
Pinの使い方はちょっとわかりにくいですが、このあたりの詳しいことは調べれば色々出てくるので、ご興味のある方は是非調べていただければと。ポイントは入力電圧が3.3Vであるということと、PCとの接続にはUSB - シリアルのコンバーターが必要になってくるところですかね。ちなみに僕が使ったのは下記のもの。3.3Vの電源供給とシリアル通信ができればいいので、別にこれである必要はないと思います。おそらく、Raspberry Piとかであれば接続用Pinが準備されているので、こういったコンバーターなしでも直接接続できるはずです。
Wifiの接続確認用に使ったコードはこちら。
/*
* Simple HTTP get webclient test
*/
#include <ESP8266WiFi.h>
const char* ssid = "SSID";
const char* password = "Password";
const char* host = "192.168.179.11";
void setup() {
Serial.begin(9600);
delay(1000);
// We start by connecting to a WiFi network
Serial.println("");
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected");
pinMode(ledPin, OUTPUT);
}
void loop() {
delay(5000);
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
String url = "/test.html";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(1000);
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("closing connection");
}
基本的にはサンプルコードをそのまま流用した形で、自宅サーバー(ip addressは192.168.179.11)においてある「test.html」に接続してみます。htmlの中身は、"HELLO WORLD"と書いてあるだけのシンプルなもので、本当にテスト接続のためって感じですね。あと、SSIDとパスワードは実際には家のwifiを入力している形です。
シリアルモニタで見てみるとこんな感じ。最後の方に "HELLO WORLD"というtest.htmlのデータがきちんととれていることがわかると思います。とりあえず、これでWifiとの接続が確認できたので、いろいろと面白いことができそうです!
モジュールのシールド化
先ほどのブレッドボードの写真を見ていただければわかるとおり、このモジュールは接続がなかなか複雑なので、使うたびにこのセッティングするのはさすがに面倒です。ということで、もう少し取り回しが良くなるようにシールド化を行いました。ユニバーサル基板に必要な配線や抵抗等をはんだ付けして、ピンヘッダで手軽に使えるようにする感じですね。
こんな感じですね。ウラ面を見ていただければわかるとおり、配線は結構ごちゃごちゃしていて、基盤への実装は結構大変でした。二つほどこのシールドを作ったわけですが、かなり時間がかかったので正直これをたくさん作るのは現実的ではないですね。少しお金出せば、モジュールとして売っているタイプのものもあるので、自分で実装する手間を考えると、そういうタイプの物を買うのが無難な気がしますねw
ただ、一度作ってさえしまえばPCとの接続は非常に楽に行えるので、とりあえず作ってみたのはムダではないかなと。実際に使うときは、先ほどのUSB - シリアルコンバータを差し込んで手軽にPCと接続できます。
実際にLチカを行うとこんな感じ。
これで手軽にWifiモジュールが使える環境が整いました。既に色々と作っているので、ぼちぼちこのnoteで紹介していくつもりです!
まとめ
ということで、今回はArduino互換のWifiモジュール「esp8266」を使ってみたことについて書きました。無線通信ができるようになることで、マイコンとインターネットが直接繋げられるようになるので、夢が広がりますねw ネット上で調べてみても色んな人がいろんなことをやっていたりするので、そちらも参考にしながら面白いものを作れればと思います!
それでは、また!