プログラミング不要でiPhoneからLEDをオン・オフするIoTを作る(ESP8266使用)

たとえば、「iPhone や Android アプリを起動して、アプリ上のボタンを押すと Wi-Fi 経由で指令が送られ LED(ライト)が点灯する IoT を作る」というと、色々と高度なハードウェアを購入する必要があったり、お金がかかったり、Swift やC言語など高度なプログラミングの知識が必要であるように感じられるかもしれません。

しかし、ESP8266(日本では ESP-WROOM-02 という技適を通っているモジュールを使うのが一般的)を使用すれば、プログラミング不要で、1,000円程度(部品代のみ。ハンダゴテや書き込み時に必要な USB シリアル変換アダプターを除く)でできます。 Raspberry Pi や Arduino 本体も不要です。 制作に必要な時間も、慣れれば1時間ほどでできると思います。

※この記事は、ESP8266 Advent Calendar 2015 23日目の記事です。

必要なもの

その他必要なもの

以下のものを持っていない方は、必要になります。これは今回だけでなく、他のものを作る際にも使い回すことができる便利な道具です。

ダウンロードするもの

BlynkでiPhone側の設定をする

Blynk for iPhone または Android アプリを起動し、Create New Project を選択し、適当なプロジェクト名(スクリーンショットでは LED)を入力し、HARDWARE MODEL から ESP8266 を選択します。 AUTH TOKENE-mail をタップし、トークン番号を自分にメールしておきます。

esp8266-5

Create Project をタップし、次の画面で真ん中付近をタップし、Button をタップで追加します。

追加された Button をタップし、PIN をタップして、どのピンから LED に電気を送るか決めます。

esp8266-5

今回は Digital | ~gp4 をスワイプで選択し、OK をタップしましょう。

esp8266-5

MODEPUSH のまま、右上の OK をタップします。

ESP-WROOM-02のはんだ付けとブレッドボードの配線

ESP-WROOM-02 DIP化キットに付属のピンヘッダーをハンダ付けします。そして、ブレッドボードの溝を挟むように差し込みます。

ジャンパーコードを使用して、以下の端子同士で繋がるように接続します。

  • 3V3 と EN
  • GND と IO15
  • 3V3 と IO2
  • GND と IO0

写真では、見やすいように 短いジャンパーワイヤ)を使用していますが、この記事の「必要なもの」に記載のブレッドボード・ジャンパーコードを使用して構いません。

LEDの接続

写真のように、LED の長い方の脚を IO4、LED の短い方の脚を GND に接続します。

※本当は、LED の長い方の脚と IO04 はジャンパーコードではなく抵抗(150Ω 程度)を使って接続したほうが良いですが、短時間の点灯であれば LED が壊れることはないため省略しました。

※「IO4」とは、正式には「GPIO 4」と呼びます。先ほど Blynk アプリで選択した「~gp4」と「IO4」は、どちらも「GPIO 4」の省略表記です。

FTDI USBシリアル変換アダプターとブレッドボードの接続

FTDI USBシリアル変換アダプターには黒いジャンパーピンが付いており、これを差し替えることで 5V 出力と 3.3V 出力を切り替えることができます。

ESP-WROOM-02 は 3.3V で動作しますので、この黒いジャンパーピンを、必ず 3.3V 側に差し込んでおいてください。

そして、ジャンパーコードを使ってUSBシリアル変換アダプターと ESP-WROOM-02 の以下の端子が繋がるように接続します。

  • VCC と 3V3
  • GND と GND
  • RX と TXD
  • TX と RXD

Arduino IDEでBlynkライブラリをESP-WROOM-02に書き込む

Arduino IDE をインストールした後起動し、メニューの スケッチ>Include Library>Add >ZIP Library を選択し、先ほどダウンロードした Source code (zip) ファイルを選択します。

Source code (zip) を解凍し、Finder やエクスプローラーのファイル検索機能を使って ESP8266_Standalone.ino を探すか、または解凍してできたフォルダー内の Blynk/examples/BoardsAndShields/ESP8266_Standalone/ESP8266_Standalone.ino ファイルを開くと、以下のようなソースコードが表示されます。 (ファイル先頭のコメント部分は省略しています)

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, "ssid", "pass");
}

void loop()
{
  Blynk.run();
}

自宅などの Wi-Fi の名前とパスワードを "ssid" と "pass" 部分に書きます。(ダブルクォーテーション "" は残します) 無線ルーターがなければ、スマートフォンのテザリングでも良いと思います。

メールで送られてきたトークン番号をコピーし、"YourAuthToken" 部分にペーストします。

Arduino IDEでESP-WROOM-02の開発ができるようにする

USBケーブルを使って、PC とUSBシリアル変換アダプターを接続します。

Windows の場合、Arduino IDE のメニューから ファイル>環境設定、Mac の場合は Arduino>Preferences を選択します。 Additional Boards Manager URLs に以下の文字列をペーストします。

http://arduino.esp8266.com/stable/package_esp8266com_index.json

メニューの ツール>ボード>Boards Manager を開き、一覧のダウンロードが終わったら下にスクロールして ESP8266 をインストールします。

メニューの ツール>ボード>Generic ESP8266 Module を選択します。

メニューの ツール>ポート>/dev/usbserial-… のような項目を選択します。(Windowsの場合、適切な COM ポートを選択します)

この項目については下記ページに詳しく書いてありますので、うまくいかない方はこちらをご覧ください。

技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法 - Qiita

ソースコードのウインドウの上にある(→)(マイコンボードに書き込む)ボタンを押し、Blynkライブラリを ESP-WROOM-02 に書き込みます。

もし、赤文字で以下のようなエラーが表示された場合は、USBケーブルを一旦 PC から抜いて、再び接続してすぐに(→)(マイコンボードに書き込む)ボタンを押します。

warning: espcomm_sync failed
error: espcomm_open failed

動作確認

iPhone の Blynk アプリを起動し、右上の再生ボタンを押します。 エラーメッセージのようなものが表示されなければ、ESP-WROOM-02 と接続されています。

ここで、画面に表示されている BUTTON を押している間だけ LED が点灯するはずです。

画面右上の停止ボタンを押してから BUTTON をタップし、 MODESWITCH にすると、タップするたびに LED のオン・オフが切り替わります。

乾電池で動作させたい場合

ESP-WROOM-02 は、3V(単3電池などであれば2本直列)で動作させることもできます。

ただし、USBシリアル変換アダプター以外で動作させる場合は ESP-WROOM-02 の起動モードを切り替える必要があるため、GND と IO0 を接続していたジャンパーコードを3V3 と IO0 に接続し直します。

そして電池ボックスのプラスを 3V3 に、マイナスを GND に接続すれば動作します。(これが冒頭の動画です)

注意事項

Blynk アプリは、2015年12月時点では無料で利用できますが、将来有料化される可能性が高いと考えています。 有料化された場合は

  • 別のアプリを利用する
  • HTML・Ajax などを利用してWebアプリを実装する
  • お金を払って Blynk を利用する

などの方法が考えられます。