Arduinoは難しい電子回路やプログラミングなどの知識が全くない初心者の方でも扱いやすく作られたマイコンボードで、動かしながら遊んでいるとある程度のことは徐々に出来るようになってきます。
後発となるESP32シリーズのマイコンボードやRaspberry Piなどと比べると、マイコンを使った電子工作で言うと一番扱いやすく感じます。
そしてArduinoを使っていろいろと遊んでいると、無線機能も使いたくなってきます。
Wi-FiやBluetoothといった機能ですね。
無線機能が使えると製作したロボットやラジコンなどをリモコンで操作したり、センサーの値をモニターしたりとArduinoを使った電子工作の幅が一気に広がります。
しかしArduinoにはESP32のように標準では無線機能が搭載されていません。
そのため対応するモジュールやシールドを使ってその機能を持たせる必要があります。
海外のArduinoファンの方からいろいろと教えて頂き、BluetoothやWi-Fi、その他無線モジュールを以前から試しています。
日本国内で合法的に使うには技適が取得されていないモジュールも多くありその使用には注意が必要ですが、Arduinoで使える便利な無線モジュールはいろいろとあります。
これまで当ブログでご紹介したものでは、nRF24L01という無線モジュールがあります。
BluetoothやWi-Fiのように1対1でのデータのやり取り以外に複数モジュール間でのやり取りが行える便利な無線モジュールです。
またHC-05(HC-06)は、Arduinoでは使いやすいBluetoothモジュールになります。
上記ロボくんは、このBluetoothモジュールを使ってPCから操作しています。
これらの無線モジュールは小型なのでArduinoへの接続、また製作物に組み込んで使う場合にも便利に使えます。
UARTやSPIでの接続となるのでその扱いも比較的簡単に行なえます。
そしてArduinoにWi-Fi機能を持たせたい場合も同様で、Wi-FiモジュールをArduinoに接続する必要があります。
Arduinoに接続して使えるWi-FiモジュールはESP-WROOM-02のような技適が取得されたモジュールもありますが、実際のところ製作物への組み込みも考えると小型モジュールの方が適しています。
Arduinoを無線化する一環として以前テスト運用していたESP8266(ESP-01)という小型Wi-Fiモジュールを使った作例をSNSに投稿したところ、かなり多くのコメントやDMを頂いたのでブログにいくつかまとめています。
今回ESP-01にスケッチを書き込み、これ単体で動かしスマホアプリから制御する作例を見ていきます。
ESP-01はWi-Fi機能が付いているので、PCやスマホなどからモニターしながら制御する事が出来ます。
Arduinoを経由せずESP-01単体で動かすと、もうWi-Fi機能が付いたミニArduinoって感じですね!
この投稿をInstagramで見る
ESP-01にスケッチを書き込み単体で動作させスマホアプリから制御してみる!
今回は上記動画を例に、ESP8266(ESP-01)にスケッチを書き込みArduinoなどのマイコンボードを経由せず単体でWi-Fiによる制御をしてみたいと思います。
ESP8266(ESP-01)とは?
ESP-01は非常に小型(約24.8mm×14.3mm)なWi-Fiモジュールです。
シリーズで言うとESP-14あたりまで登場していて特に新しいモジュールというわけではないのですが、Arduinoと接続して簡単に無線機能を持たせる事が出来る小型なWi-Fiモジュールとなります。
技適が取得されていないモジュールなのでその使用には注意が必要ですが、小型&安価で入手する事が出来るのでArduino学習用としては非常に便利に使えます!
この投稿をInstagramで見る
上記動画では、ESP-01をArduinoと接続しWi-Fiモジュールとして使っています。
無線機能を持たないArduinoにWi-Fi機能を持たせることができ、小型モジュールで接続も簡単でWi-Fi経由でブラウザやスマホアプリから操作する事が出来ます。
またESP-01が面白いのが、ESP-01自身にスケッチを書き込むことにより単体で動かすこともできます。
ESP-01にはEspressif System社のESP8266EXチップが搭載されています。
そしてメモリやパターンアンテナ、クロック用のクリスタルなどがモジュール内に搭載されているので、Arduinoのスケッチを書き込むことによりESP-01単体で動かすことも出来ます。
Wi-Fi機能を持った小型Arduinoとして動かすことが出来るということですね。
ESP-01にスケッチを書き込み、簡単なLED点灯テストを以前やってみました。
小型モジュールですが4本のGPIO端子(入出力端子)を使うことが出来ます。
この投稿をInstagramで見る
開発環境もArduino IDEが使えるので、普段Arduinoを使われている方は簡単に試すことが出来ます。
スケッチの書き込みや接続方法に関して詳しくはこちらの記事を参考にして下さい!
そして今回はこのESP-01を使った作例に多くのコメントやDMを頂いたことから、ESP-01にスケッチを書き込みWi-Fi機能を使いスマホアプリから操作してみたいと思います。
スマートフォンアプリ『RemoteXY』を使う!
Wi-Fi接続でのやり取りはPCやスマホのブラウザから操作やモニターしたり出来ますが、操作画面(UI)に少し凝ったものを作ろうと思うとHTMLなどの知識も必要となってきます。
今回はスマートフォン用のアプリを使って、そのあたりは簡単に行います。
Arduinoや他のマイコンボードでも同様ですが、無線モジュール(Wi-FiやBluetoothなど)を使ったやり取りで使えるスマートフォン用のアプリはいろいろとあります。
『Blynk』は非常にメジャーなアプリなので使われている方多いと思います。
またArduino公式のクラウド経由でのやり取りが行える『IoT Remote』といったアプリもあります。
そして今回は『RemoteXY』というスマホアプリを使ってみたいと思います。
Blynkのようにスマホ側のUIを簡単に作ることが出来ます。
そしてArduino側(今回ESP-01に書き込みます)のスケッチも分かりやすく、アプリも安価(または無料)で試すことが出来るのでマイコンボードを制御するスマホアプリとしていろいろと試せるかと思います。
スマホアプリRemoteXYを使いESP-01を動かす手順
ESP-01をWi-Fi端末として動かすのは簡単です!
Wi-Fiアクセスポイント等の設定をスケッチに記述してESP-01に書き込んであげれば機能させることが出来ます。
そして今回スマホ用アプリ『RemoteXY』を使い動かそうと考えています。
スマホ側のUIや必要となるWi-Fiアクセスポイントの設定など面倒な項目はスマホアプリ側のサイトで作れるので、あとは用途や必要に応じてスケッチを追加&修正するだけなので比較的簡単に出来ます。
ESP-01にスケッチを書き込みRemoteXYで操作するまでの手順はこのようになります。
順を追ってやっていきましょう!
- RemoteXYのWebサイトでベースとなるスケッチの作成
- スケッチの追加&修正
- ESP-01にスケッチを書き込む
- ESP-01と各デバイスとの接続
- RemoteXYでESP-01をWi-Fi経由で操作する
【手順①】RemoteXYのWebサイトでベースとなるスケッチの作成
それでは実際に作業を行っていきます。
今回こちらの動画を例に進めていきます。
ESP-01に接続した温湿度センサー(DHT11)をスマホでモニターするというものです。
この投稿をInstagramで見る
サーボモーターやLEDも同時に制御していますが、簡単にするため今回サーボモーターはカットしました。
ESP-01の接続はこのような回路を想定しています。(後で詳しく見ていきます)
ESP-01はGPIO0~GPIO3までの計4本のGPIO端子(入出力端子)を使うことが出来ます。
GPIO0はLEDと接続しスマホから点灯のON/OFF制御、GPIO2は温湿度センサーDHT11からの値を取得するのに使います。
Wi-Fi接続で必要となってくるSSIDやアクセスポイントなどの設定、スマホアプリで使うボタン配置などUIはRemoteXYのWebベージから作成できます。
ここでベースとなるスケッチを作成し、必要に応じてスケッチの追加&修正をしていく形となります。
RemoteXYのサイトにアクセスしてベーススケッチを作成します。
参考 RemoteXYトップページRemoteXY [START NOW!]から無料で試すことが出来ます。ここからスマホアプリRemoteXYとESP-01をWi-Fi接続するための各種設定やアプリ側のUIを作っていきます。
マイコンボード&無線機器の選択
まずスケッチを書き込むマイコンボードと使用する無線モジュールの選択です。
画面右の[Configuration]の項目を設定していきます。
今回ESP-01はWi-Fiアクセスポイントとして使うので、[Connection]の項目は[Wi-Fi access point]を選択します。
次に書き込むボード[Board]ですが、ESP-01はESP8266が搭載されたWi-Fiモジュールなので[ESP8266 based board]を選択し、無線モジュール[Module]の項目は[WiFi on chip]となります。
使用するIDE(総合開発環境)は[Arduino IDE]を選択します。
以上がESP-01にスケッチを書き込み、Wi-Fi機能を使う設定となります。
問題なければ[Apply]をクリックし次の項目に進みます。
Wi-Fiアクセスポイントの設定
次に[Module interface]の項目からWi-Fiアクセスポイントの設定を行います。
デフォルトではSSID名は[RemoteXY]、パスワードは[12345678]となっています。
特に変える必要はありせんが、今回パスワードのみ[123456789]にしました。(パスワードは8桁以上必要です)
ポート設定[Port]は特に変える必要はありません。
アプリのUI設定
次に[View]の項目からアプリのベースカラーや向きなどを変えることが出来ます。
アプリのベースカラーは[Background color]から水色に設定してみました。
[Orientation]でスマホの向きを縦置き・横置き・両対応に設定できます。
今回は横置きに設定。
[Access password]はアプリ使用時に必要となってくるパスワードです。
今回[12345]を設定しました。
これで基本設定は完了です!
ここから各種ボタンを配置していきスマホのUIを作っていきます。
画面左端にある各種項目をドラッグ&ドロップで配置していくだけなので直感的に行えると思います!
今回の作例では、LEDのON/OFF判定に[Push switch]、DHT11センサーから取得した温湿度を表示するのに[Text string]を使いました。(文字は[Label]を使っています)
各項目をスマホ画面にドラッグ&ドロップで配置します。
サイズや配置を調整し今回このようなスマホ画面を作りました。
配置した各ボタンをクリックすると[Element]の項目から色や向き・名称などを変更する事も出来ます。
今回[Push switch]に割り当てるデジタルピンだけ設定しました。
ESP-01のGPIO0に接続したLEDを点灯させる項目です。
その他項目は使用用途によって変わってくるので、このあとのスケッチの追加&修正の項目で行います。
以上問題なければ、画面右上の[Get source Code]をクリックするとベースとなるスケッチが表示されます。
このスケッチをコピーしてArduino IDEの新規スケッチにペーストします。(ZIPファイルでダウンロードすることも出来ます)
このままではまだうまく動作しませんが、一応出力されたベースとなるスケッチを載せておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /* -- 温湿度&LED -- This source code of graphical user interface has been generated automatically by RemoteXY editor. To compile this code using RemoteXY library 3.1.8 or later version download by link http://remotexy.com/en/library/ To connect using RemoteXY mobile app by link http://remotexy.com/en/download/ - for ANDROID 4.11.1 or later version; - for iOS 1.9.1 or later version; This source code is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. */ ////////////////////////////////////////////// // RemoteXY include library // ////////////////////////////////////////////// // RemoteXY select connection mode and include library #define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT #include <ESP8266WiFi.h> #include <RemoteXY.h> // RemoteXY connection settings #define REMOTEXY_WIFI_SSID "RemoteXY" #define REMOTEXY_WIFI_PASSWORD "123456789" #define REMOTEXY_SERVER_PORT 6377 #define REMOTEXY_ACCESS_PASSWORD "12345" // RemoteXY configurate #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = // 81 bytes { 255,1,0,22,0,74,0,16,21,0,67,4,49,11,50,18,2,26,11,67, 4,48,42,51,18,2,26,11,10,48,1,11,41,41,4,26,31,79,78,0, 31,79,70,70,0,129,0,44,3,29,8,2,230,184,169,229,186,166,40,226, 132,131,41,0,129,0,44,34,28,8,2,230,185,191,229,186,166,40,37,41, 0 }; // this structure defines all the variables and events of your control interface struct { // input variables uint8_t pushSwitch_1; // =1 if state is ON, else =0 // output variables char text_1[11]; // string UTF8 end zero char text_2[11]; // string UTF8 end zero // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #define PIN_PUSHSWITCH_1 D0 void setup() { RemoteXY_Init (); pinMode (PIN_PUSHSWITCH_1, OUTPUT); // TODO you setup code } void loop() { RemoteXY_Handler (); digitalWrite(PIN_PUSHSWITCH_1, (RemoteXY.pushSwitch_1==0)?LOW:HIGH); // TODO you loop code // use the RemoteXY structure for data transfer // do not call delay() } |
【手順②】スケッチの追加&修正
ベースとなるスケッチが完成しました。
スケッチを見るとWi-Fiアクセスポイントの設定はこのあたりですね。
1 2 3 4 5 | // RemoteXY connection settings #define REMOTEXY_WIFI_SSID "RemoteXY" #define REMOTEXY_WIFI_PASSWORD "123456789" #define REMOTEXY_SERVER_PORT 6377 #define REMOTEXY_ACCESS_PASSWORD "12345" |
スマホ側のUI(ボタン配置等)はこのあたりに書かれています。
1 2 3 4 5 6 7 8 | // RemoteXY configurate #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = // 81 bytes { 255,1,0,22,0,74,0,16,21,0,67,4,49,11,50,18,2,26,11,67, 4,48,42,51,18,2,26,11,10,48,1,11,41,41,4,26,31,79,78,0, 31,79,70,70,0,129,0,44,3,29,8,2,230,184,169,229,186,166,40,226, 132,131,41,0,129,0,44,34,28,8,2,230,185,191,229,186,166,40,37,41, 0 }; |
Wi-Fiアクセスポイントの設定やスマホ側のUIは自動的に作成してくれるので便利ですね。
あとは用途に応じてスケッチの追加&修正作業を行っていきます。
単純なON/OFF判定は既にスケッチに書き込まれています。
void setup()内のpinMode()の設定。
1 | pinMode (PIN_PUSHSWITCH_1, OUTPUT); |
void loop()内のdigitalWrite関数によるLEDの点灯部分です。
1 | digitalWrite(PIN_PUSHSWITCH_1, (RemoteXY.pushSwitch_1==0)?LOW:HIGH); |
ここで1ヶ所スケッチを修正しておきます。
ベーススケッチを見ると接続ピン「D0」という記述で指定されていますが、ESP8266ではコンパイルエラーとなるので「0」に修正しておきます。
1 | #define PIN_PUSHSWITCH_1 0 |
今回の例ではあと温湿度センサーの値を読み取りテキストとしてスマホ側に表示させます。
温湿度センサーDHT11を動かすのに必要なスケッチを追加します。(GPIO2に接続)
以下のスケッチを各所に追加しました。
1 2 3 4 | #include <DHT.h> #define DHT_PIN 2 #define DHT_MODEL DHT11 DHT dht(DHT_PIN, DHT_MODEL); |
1 | dht.begin(); |
1 2 3 4 | float Humidity = dht.readHumidity(); float Temperature = dht.readTemperature(); dtostrf(Temperature, 0, 1, RemoteXY.text_1); dtostrf(Humidity, 0, 1, RemoteXY.text_2); |
温湿度センサーの使い方はこちらの記事を参考にして下さい。
またRemoteXYの各種ボタンの使い方や詳しい内容はこちらを参考にして下さい。
参考 How it worksRemoteXYスケッチの追加&修正を行い完成したスケッチがこちらになります。(コピペで使えます)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | // ESP8266(ESP-01)をRemoteXYで操作する! // https://burariweb.info // RemoteXY select connection mode and include library #define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT #include <ESP8266WiFi.h> #include <RemoteXY.h> // RemoteXY connection settings #define REMOTEXY_WIFI_SSID "RemoteXY" #define REMOTEXY_WIFI_PASSWORD "123456789" #define REMOTEXY_SERVER_PORT 6377 #define REMOTEXY_ACCESS_PASSWORD "12345" // RemoteXY configurate #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = // 81 bytes { 255,1,0,22,0,74,0,16,21,0,67,4,49,11,50,18,2,26,11,67, 4,48,42,51,18,2,26,11,10,48,1,11,41,41,4,26,31,79,78,0, 31,79,70,70,0,129,0,44,3,29,8,2,230,184,169,229,186,166,40,226, 132,131,41,0,129,0,44,34,28,8,2,230,185,191,229,186,166,40,37,41, 0 }; // this structure defines all the variables and events of your control interface struct { // input variables uint8_t pushSwitch_1; // =1 if state is ON, else =0 // output variables char text_1[11]; // string UTF8 end zero char text_2[11]; // string UTF8 end zero // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) ///////////////////////////////////////////// // END RemoteXY include // ///////////////////////////////////////////// #define PIN_PUSHSWITCH_1 0 #include <DHT.h> #define DHT_PIN 2 #define DHT_MODEL DHT11 DHT dht(DHT_PIN, DHT_MODEL); void setup() { RemoteXY_Init (); pinMode (PIN_PUSHSWITCH_1, OUTPUT); dht.begin(); } void loop() { RemoteXY_Handler (); digitalWrite(PIN_PUSHSWITCH_1, (RemoteXY.pushSwitch_1==0)?LOW:HIGH); float Humidity = dht.readHumidity(); float Temperature = dht.readTemperature(); dtostrf(Temperature, 0, 1, RemoteXY.text_1); dtostrf(Humidity, 0, 1, RemoteXY.text_2); } |
【手順③】ESP-01にスケッチを書き込む
スケッチが完成しました。
それではこのスケッチをESP-01に書き込みます。
今回スマートフォンアプリRemoteXYを使うため、「RemoteXYライブラリ」をArduino IDEにインストールしておく必要があります。
[スケッチ]→[ライブラリをインクルード]→[ライブラリを管理]へと進みます。
検索ボックスから[remotexy]で検索するとライブラリを見つけることが出来ます。
これをインストールしておきます。
準備は以上です。
それではスケッチの書き込みを行います。
ESP-01へのスケッチ書き込みには、USB-シリアル変換モジュールを使います。
またArduinoを経由して書き込むことも出来ます。
接続はこのようになります。
ESP-01の起動モードや接続、Arduinoを経由したスケッチの書き込み方法など詳しくはこちらのお記事も参考にして下さい。
接続が完了したらスケッチの書き込みです。
Arduino IDEの[ボード]の設定は[Generic ESP8266 Module]を指定します。
[シリアルポート]は接続しているUSB-シリアル変換モジュールです。
以上、[ボード][シリアルポート]の指定が出来たらあとは通常の手順で[アップロード]ボタンをクリックしてESP-01にスケッチの書き込みが行なえます。
【手順④】ESP-01と各デバイスとの接続
ESP-01にスケッチの書き込みが完了しました。
これでESP-01はこれ単体でWi-Fi機能が使えるマイコンボードとして動きます。
そして接続です。
今回GPIO0はLEDのON/OFF制御、GPIO2は温湿度センサーDHT11からの値を取得するために使用するので接続はこのようになります。
CH_PDピンは常にHIGH(3.3V)で使います。
今回使用している温湿度センサーDHT11はモジュール化されたものを使っています。
プルアップ抵抗が内蔵されているため上記回路図では入れていません。
温湿度センサーDHT11の接続方法に関してはこちらの記事を参考にして下さい。
【手順⑤】RemoteXYでESP-01をWi-Fi経由で操作する
それでは実際にスマホアプリRemoteXYからArduinoを操作してみます。
RemoteXYアプリのインストールはこちらから出来ます。
iPhone・Android両スマホに対応しています。
ESP-01に通電(3.3V)するとESP-01は単体でWi-Fiアクセスポイントとして機能します。
スマホのWi-Fi設定へと進みます。(今回iPhoneを使っています)
ネットワークの項目に設定したSSID名が表示されるのでこれをタップします。(今回デフォルトのRemoteXYとしています)
設定したパスワード[今回123456789で設定]を入力し[接続]をタップします。
ネットワークに繋がった事を確認しアプリへと進みます。
次にスマホのRemoteXYアプリを立ち上げ、画面右上の[+]をタップし[WiFi point]を選択します。
[Connect]をタップして設定したパスワード[今回12345を設定]を入力するとESP-01との接続が完了します。先程Webページで作成したボタン等を配置した画面が表示され、ESP-01を操作することが出来ます。
どうですか、下記動画のように上手く動いたでしょうか?
ESP-01は計4本のGPIOピンが使えます。
今回、LEDのON/OFF制御と温湿度センサーの値を表示させるのに2本使っています。
下記動画のようにサーボモーターを追加したり、用途により他のセンサーを使ったりとアイデア次第で面白く使えそうですね!
この投稿をInstagramで見る
以後使用は30秒に制限されてしまいますが、簡単なテスト動作では30秒あれば十分だと思います。
再度接続すればまた30秒テストすることが出来ます。
制限なく使用するにはサブスク購入する必要がありますが(3ヶ月で370円)、他のスマホアプリと比べると安価なのでWi-Fi接続の基本を学習するのに便利なアプリだと思います。
ESP-01を接続して使う拡張モジュールもあります!
ESP-01は無線機能を持たないArduinoと接続してWi-Fiモジュールとして使ったり、今回ご紹介したようにESP-01にスケッチを書き込み単体で動かすこともできます。
まさにミニArduinoって感じで非常に面白いモジュールです。
そしてESP-01を接続して使う拡張モジュールも多数販売されています。
今回行った温湿度センサーが組み込まれたモジュールもあります。
他にもリレーモジュールやネオピクセルLEDを制御するものなど販売されています。
ESP-01にスケッチを書き込みこれらモジュールに取り付ければ、あとはWi-Fi経由でモニターしたり制御するといった用途で使えます。
電源さえあれば完全にスタンドアロンで動いてくれるので面白いですね!
最後に!
SNSでESP-01やスマホアプリについてのコメントが多かったことからまとめてみました。
今回スマホアプリRemoteXYを使いESP-01に書き込んだスケッチを動かしてみました。
スケッチをできるだけ簡単にするためスマホアプリを使いWi-Fiアクセスポイントとして使いましたが、PCのブラウザから常にモニターしたりと・・・使い方はいろいろと考えられますね。
またArduinoと接続してWi-Fiモジュールとして使うことも出来ます。
小型モジュールなので既に製作したものへの組み込みも簡単に行なえます。
スマホの加速度センサーを使うことも出来るので、こういったロボを動かす場合にすごく面白く便利ですね!
この投稿をInstagramで見る
ESP-01はアイデア次第で面白く使える便利なWi-Fiモジュールです!
ESP-01リレーをAmazonで購入したのですが、Amazonのサイトの説明では上手く制御できませんでした。しかし、貴殿のこの記事できっちり制御出来るようになりました。本当にありがとうございました。
お役に立てて何よりです!
小型で便利なWi-Fiモジュールですよね(^o^)