ESP-01をWiFiBridgeで使って見ました。
ESP-01の次の応用として、ESP-01にWiFiとUartのBridgeを行う機能を
搭載してスマホからホストPC経由のWiFiでfirmataを搭載したUNOを
コントロールする方法を検討して見ました。ホストPC用にはJavaScriptを
利用したNode.jsとJohnny-fiveが用意されていて、これらを利用すると
上手くWiFiのIOTが実現できるのが判りました。Arduinoは懐が深い様です。以下が検討した内容です。
<ESP-01 の WiFi Bridge での利用>
ESP-01をWiFiとUartを繋ぐBridgeとして利用し、従来はPCのUSBから
USBtoTTLのデバイスを繋いで利用していたUNOのfirmataを、同じ様に
WiFiを通して利用する方法を検討しました。
[全体の構成]
1.UNOには「StandardFirmata」を実装
2.ESP-01にはWiFiをUartに変換するBridge機能を実装
(今回開発したもの)
3.ホストPCにはNode.jsを実装し、合わせて次の3つのパッケージも
インストール (etherport-client, socket.io, johnny-filve)
4.HTTPサーバとしてはApacheを実装し、http.conf を必要に応じて
編集してHTTPサーバのルートにHTMLとJavaScriptのファイルを置く
5.ESP-01+UNO、HTTPサーバルートのJavaScriptファイルを
起動して、スマホからHTTPサーバを呼び出す
[使用した主要部品]
1.ESP-01 WIFI 基板
2.Arduino UNO
3.Proto shield for UNO & MEGA
4.SSD1306 0.96" OLED (I2C対応品)
(SSH1106 1.3" OLED でも可能、また、無しでもシリアルモニタ
から割り付けIP等の確認が可能)
5.手作りのオリジナルI/Oテスト基板
(Red & Green LED, slide switch, pre-set resister が実装)
[動作状況]
動作状況は次のURLから確認できます。
<関連資料>
ESP-01のWiFiBridgeのコード作成には次のURLからのものを参考に
しました。 (UNOからのUart受信部分を変更して、ネットワークの
SSIDとパスワードの設定機能とOLEDへの表示機能を追加しました。)
URL : https://github.com/NaoNaoMe/ESP8266-WiFi-UART-transparent-bridge
Node.js URL : https://nodejs.org/
Johnny-five URL : http://johnny-five.io/
Apache URL : http://httpd.apache.org/
JavaScriptのリファレンスとしては次のものを参考にしました。
URL : http://rfs.jp/sb/javascript
URL : http://www.tohoho-web.com/js/
Node.jsとSocket.ioの使い方に関しては次のものを参考にしました。
URL : http://l-w-i.net/t/arduino/socketio_001.txt
WiFiからJohnny-fiveをコントロールする方法は次のものを参考に
しました。
URL : http://make.kosakalab.com/make/electronic-work/js_robotics_wifi/
<テスト内容と結果>
ESP-01のWiFiBridgeでの利用に関しては次の様な内容で、スマホから
WiFiでUNOに目的の動作を行わせる事にしました。
1.UNOに接続されたLEDのON/OFFの制御
2.スマホのスライドバーでのUNOに接続されたLEDの明るさの制御
3.スマホからUNOに接続されたアナログおよびデジタル入力の確認
動作させた結果としては、次の様なものでした。
1.WiFiBridgeを利用した場合でも、ホストPCのHTTPサーバのHTML
ファイルへの記述内容で様々な表現ができる事が判りました。
2.また、socket.ioを利用する事により、スマホからの操作が時間遅れ
無しにWiFiBridgeの端末に伝えられる事も判りました。
3.WiFiBridge端末側の具体的な操作に関しては、ホストPC上に
置くので複雑な操作でも端末側のメモリへの心配なしに使える
ので、その点は楽になると感じました。
4.でも、スマートな操作を実現するには、HTMLとJavaScriptに
対する知識が要求され、自分には更に勉強が必要な事が
判りました。(既にこの方面の知識が十分な方々には非常に
面白い手段かとも思いました。)
[テストでの機器の接続]
上記のUNOの0(RXD)と1(TXD)端子の接続に関しては、ESP-01側の
準備と設定が済んでWiFiBridgeの機能を利用する時のもので、ESP-01
側の準備と設定の段階では別の接続となります。(下記参照。初期段階
では、この部分が変更できる様にしている事が必要です。)
[起動方法]
テストの起動は次の操作で行います。
1.ESP-01にWiFiBridgeのプログラクを書き込む(下記参照)
2.Network SSID とその Password を設定(下記参照)
3.UNOにStandardFirmataを書き込む(書き込む時の配線は下記を
参照)
4.UNOのRXD/TXDの配線を元に戻して、UNOのリセットを押して
モジュール全体を再起動
5.ホストPCにNode.jsと追加パッケージをインストール(下記参照)
6.ホストPCにApacheをインストールしコンフィグレーション
ファイルを設定する(下記参照)
7.必要に応じて、PCからのWiFiBridgeの動作を確認(下記参照)
8.ホストPCのHTTPのルートにダウンロードしたファイル
(index.html/server.js)を置き、サーバを起動する
9.ホストPCのHTTPルートに有るserver.jsをコマンドプロンプトから
起動する
10.スマホからホストPCのHTTPルートを呼び出す。(ポート番号の
設定が必要)
http://192.168.xx.yy:8000/ ; (コードをそのまま利用する場合は
ポート番号は8000番)
(server.jsとApacheが起動していないとアクセスできません、
Apacheが動いているとポート番号無しでindex.htmlの内容のみは
表示されます。)
ホストPCのIPアドレスはコマンドプロンプトで「ipconfig/all」を
実行すれば確認可能です。
[コード類]
コード類は次のURLからダウンロードできます。
Code download URL : https://www.dropbox.com/s/vczhyigbx0x3qzl/WiFiUartBridge.zip?dl=0
その内容の内訳は次の様になります。
- ESP-01 /ESP-01_WiFi_Uart_Bridge --- ESP-01 WiFiBridge source code
/ESP-01_WiFi_Uart_Bridge_flasher --- ESP-01 WiFiBridge
binary code &
code write program
- UNO /UNO_TXD_release --- UNO set code for ESP-01 flash
writing period
- HostPC /Http_Server --- Put them to the Host HTTP server root
(HTML&JavaScript)
/LED_Blink --- Test JavaScript to blink LED on the UNO
with WiFi
<HostPC側の準備と設定>
[Node.jsのインストール]
1.上記のNode.jsのページからダウンロードしてインストール
2.コマンドプロンプトを起動して次の2つでバージョンが正しく
出るのを確認
node --version <--- Node.jsのバージョンを確認
npm --version <--- npmのバージョンを確認
3.追加で次の3つのパッケージをインスト―ル
npm -g install etherport-client
npm -g install socket.io
npm -g install johnny-five
4.上記のインストール先のパスを設定(システム環境変数に追加)
NODE_PATH = C:\User\xxxx\AppData\Roaming\npm\node_modules
[Apatcheのインストール]
1.上記のApacheのページからダウンロードして展開
2.展開後のApacheのフォルダを希望のディレクトリに配置
3.「(インストールしたディレクトリ)\Apachexx\conf\」に有る
「http.conf」を編集
(CドライブのルートにApachexxのフォルダを置けば編集は不要、 ドキュメントのルートはApachexx\htdocsとなります。)
4.配置と編集が完了したら、Apacheを起動
管理者モードでコマンドプロンプトを開いた後、
「Apachxx\bin」に移動して
httpd -k start <--- 起動
httpd -k stop [or shutdown] <--- 停止
(起動状態はPCの再起動後も継続されます。)
<ESP-01側の準備と設定>
[ESP-01とUNOのUart接続]
ESP-01とUNOのUartの配線は、WiFiBridgeの機能実装までに次の3の
状態に変更します。
1.接続の切り離し
UNOのflashにプログラムを書き込む時にこの状態にします。
2.TX/RXの入れ替え
USBtoTTLの出力をESP-01に接続して、ESP-01のflashへの
書き込みやESP-01にSSID/Passwordを設定する時にこの状態に
します。ただし、この状態の前には上記1の接続でUNOのTXDを
入力状態にしてUNOのTXDとESP-01のTXが競合しない為の
プログラムをUNOに書き込んで置く必要が有ります。
3.UNOとESP-01との正常接続
UNOとESP-01を接続してWiFiBridgeの機能を実現する時に
この状態にします。USBtoTTLの出力との競合に関しては、
USBtoTTLのチップの出力に1KΩの抵抗が挿入されているので、
それで対応させる事としています。
[ESP-01へのコードの書き込み]
ESP8266の開発環境をお持ちの方は、「ESP-01_WiFi_Uart_Bridge」の
コードを書き込む事でも対応可能です。開発環境をお持ちでない場合は、
次の方法でコンパイル済みのバイナリコードを書き込む事ができます。
1.Uartの接続を1にしてUNO_TXD_releaseのコードをUNOに
書き込む
次のESP-01への書き込み時にポート番号の設定が必要と
なりますので、ここで確認して置いて下さい。
2.次にUartの接続を2にして、ESP-01を書き込みモードに設定
書き込みモード:ESP-01 Reset SW と GPIO0 GND SW を押し、
先にESP-01 Reset SW を離す
3.Arduino IDE を閉じて、ESP-01_WiFi_Uart_Bridge_flasher\
esp8266_flasher.exeを開き、ポート番号、書き込みファイルを
設定して「Download」を実行してバイナリコードのESP-01への
書き込みを行う
[Network SSID & Password の設定]
1.Uartの接続を1にしてUNO_TXD_releaseのコードをUNOに
書き込む(上記の1と同じ)
2.書き込み後、Uartの接続を2にする。(ESP-01の書き込み後は、
そのまま利用可能)
3.Arduino IDE を起動してシリアルモニタを開き、57600bpsを
設定する
4.ESP-01 Reset Switch を押して、ESP-01を再起動する
5.シリアルモニタ上にSSID/Password 設定モードにする問い
合わせが出るので"y"を押す(5秒以内に)
6.以後、画面に従ってネットワークの SSID とパスワードを
設定する。(SSID/Passwordは記憶されるので、ネットワーク
を変えない限りは再設定不要)
7.SSID/Passwordの設定が終了したら、Uartの接続を一旦
切り離して1の状態にしてUNOにStandardFirmataを書き込む
8.StandardFirmataの書き込みが終了したら、Uartの接続を
本来の3に戻して、UNOのリセットでモジュール全体を
再起動させる。
<WiFiBridgeの動作確認>
WiFiBridgeの機能を直接ホストPCから確認するには次の2つが
利用できます。
1.Microsoftストアの「Windows Remote Arduino Experience」を使う(無料)
アプリのインストールが完了して、WiFiBridgeのモジュールを
起動したら、アプリを開きNetworkの接続でWiFiBridgeに
割り当てられたIPアドレスとポート番号を設定して
「Connect」を押します。
接続が完了したら、画面が次の様に変わり、UNOの各ポートが
画面上からコントロールできます。
2.テスト用のLED_Blink(Lチカ)を利用する
ダウンロードしたHostPC\LED_Blink フォルダにこちらで
利用したチェック用のスクリプトが有ります。このファイルの
IPアドレス(とポート番号)の部分をご利用のアクセスポイント
から割り振られたものに変更してNode.jsから実行すると確認
できます。(コマンドプロンプトから「node WiFi_blink.js」 を
実行)
<その他>
今回利用した部品のいくつかは先のESP-01のATコマンドの検討で
使用したものを流用しています。その為、テスト基板の回路図やOLEDの
改造等はここでは書いていません。必要で有ればこちらの記事で御確認
下さい。(Related article is here.)
搭載してスマホからホストPC経由のWiFiでfirmataを搭載したUNOを
コントロールする方法を検討して見ました。ホストPC用にはJavaScriptを
利用したNode.jsとJohnny-fiveが用意されていて、これらを利用すると
上手くWiFiのIOTが実現できるのが判りました。Arduinoは懐が深い様です。以下が検討した内容です。
<ESP-01 の WiFi Bridge での利用>
ESP-01をWiFiとUartを繋ぐBridgeとして利用し、従来はPCのUSBから
USBtoTTLのデバイスを繋いで利用していたUNOのfirmataを、同じ様に
WiFiを通して利用する方法を検討しました。
[全体の構成]
1.UNOには「StandardFirmata」を実装
2.ESP-01にはWiFiをUartに変換するBridge機能を実装
(今回開発したもの)
3.ホストPCにはNode.jsを実装し、合わせて次の3つのパッケージも
インストール (etherport-client, socket.io, johnny-filve)
4.HTTPサーバとしてはApacheを実装し、http.conf を必要に応じて
編集してHTTPサーバのルートにHTMLとJavaScriptのファイルを置く
5.ESP-01+UNO、HTTPサーバルートのJavaScriptファイルを
起動して、スマホからHTTPサーバを呼び出す
[使用した主要部品]
1.ESP-01 WIFI 基板
2.Arduino UNO
3.Proto shield for UNO & MEGA
4.SSD1306 0.96" OLED (I2C対応品)
(SSH1106 1.3" OLED でも可能、また、無しでもシリアルモニタ
から割り付けIP等の確認が可能)
5.手作りのオリジナルI/Oテスト基板
(Red & Green LED, slide switch, pre-set resister が実装)
[動作状況]
動作状況は次のURLから確認できます。
<関連資料>
ESP-01のWiFiBridgeのコード作成には次のURLからのものを参考に
しました。 (UNOからのUart受信部分を変更して、ネットワークの
SSIDとパスワードの設定機能とOLEDへの表示機能を追加しました。)
URL : https://github.com/NaoNaoMe/ESP8266-WiFi-UART-transparent-bridge
Node.js URL : https://nodejs.org/
Johnny-five URL : http://johnny-five.io/
Apache URL : http://httpd.apache.org/
JavaScriptのリファレンスとしては次のものを参考にしました。
URL : http://rfs.jp/sb/javascript
URL : http://www.tohoho-web.com/js/
Node.jsとSocket.ioの使い方に関しては次のものを参考にしました。
URL : http://l-w-i.net/t/arduino/socketio_001.txt
WiFiからJohnny-fiveをコントロールする方法は次のものを参考に
しました。
URL : http://make.kosakalab.com/make/electronic-work/js_robotics_wifi/
<テスト内容と結果>
ESP-01のWiFiBridgeでの利用に関しては次の様な内容で、スマホから
WiFiでUNOに目的の動作を行わせる事にしました。
1.UNOに接続されたLEDのON/OFFの制御
2.スマホのスライドバーでのUNOに接続されたLEDの明るさの制御
3.スマホからUNOに接続されたアナログおよびデジタル入力の確認
動作させた結果としては、次の様なものでした。
1.WiFiBridgeを利用した場合でも、ホストPCのHTTPサーバのHTML
ファイルへの記述内容で様々な表現ができる事が判りました。
2.また、socket.ioを利用する事により、スマホからの操作が時間遅れ
無しにWiFiBridgeの端末に伝えられる事も判りました。
3.WiFiBridge端末側の具体的な操作に関しては、ホストPC上に
置くので複雑な操作でも端末側のメモリへの心配なしに使える
ので、その点は楽になると感じました。
4.でも、スマートな操作を実現するには、HTMLとJavaScriptに
対する知識が要求され、自分には更に勉強が必要な事が
判りました。(既にこの方面の知識が十分な方々には非常に
面白い手段かとも思いました。)
[テストでの機器の接続]
上記のUNOの0(RXD)と1(TXD)端子の接続に関しては、ESP-01側の
準備と設定が済んでWiFiBridgeの機能を利用する時のもので、ESP-01
側の準備と設定の段階では別の接続となります。(下記参照。初期段階
では、この部分が変更できる様にしている事が必要です。)
[起動方法]
テストの起動は次の操作で行います。
1.ESP-01にWiFiBridgeのプログラクを書き込む(下記参照)
2.Network SSID とその Password を設定(下記参照)
3.UNOにStandardFirmataを書き込む(書き込む時の配線は下記を
参照)
4.UNOのRXD/TXDの配線を元に戻して、UNOのリセットを押して
モジュール全体を再起動
5.ホストPCにNode.jsと追加パッケージをインストール(下記参照)
6.ホストPCにApacheをインストールしコンフィグレーション
ファイルを設定する(下記参照)
7.必要に応じて、PCからのWiFiBridgeの動作を確認(下記参照)
8.ホストPCのHTTPのルートにダウンロードしたファイル
(index.html/server.js)を置き、サーバを起動する
9.ホストPCのHTTPルートに有るserver.jsをコマンドプロンプトから
起動する
10.スマホからホストPCのHTTPルートを呼び出す。(ポート番号の
設定が必要)
http://192.168.xx.yy:8000/ ; (コードをそのまま利用する場合は
ポート番号は8000番)
(server.jsとApacheが起動していないとアクセスできません、
Apacheが動いているとポート番号無しでindex.htmlの内容のみは
表示されます。)
ホストPCのIPアドレスはコマンドプロンプトで「ipconfig/all」を
実行すれば確認可能です。
[コード類]
コード類は次のURLからダウンロードできます。
Code download URL : https://www.dropbox.com/s/vczhyigbx0x3qzl/WiFiUartBridge.zip?dl=0
その内容の内訳は次の様になります。
- ESP-01 /ESP-01_WiFi_Uart_Bridge --- ESP-01 WiFiBridge source code
/ESP-01_WiFi_Uart_Bridge_flasher --- ESP-01 WiFiBridge
binary code &
code write program
- UNO /UNO_TXD_release --- UNO set code for ESP-01 flash
writing period
- HostPC /Http_Server --- Put them to the Host HTTP server root
(HTML&JavaScript)
/LED_Blink --- Test JavaScript to blink LED on the UNO
with WiFi
<HostPC側の準備と設定>
[Node.jsのインストール]
1.上記のNode.jsのページからダウンロードしてインストール
2.コマンドプロンプトを起動して次の2つでバージョンが正しく
出るのを確認
node --version <--- Node.jsのバージョンを確認
npm --version <--- npmのバージョンを確認
3.追加で次の3つのパッケージをインスト―ル
npm -g install etherport-client
npm -g install socket.io
npm -g install johnny-five
4.上記のインストール先のパスを設定(システム環境変数に追加)
NODE_PATH = C:\User\xxxx\AppData\Roaming\npm\node_modules
[Apatcheのインストール]
1.上記のApacheのページからダウンロードして展開
2.展開後のApacheのフォルダを希望のディレクトリに配置
3.「(インストールしたディレクトリ)\Apachexx\conf\」に有る
「http.conf」を編集
(CドライブのルートにApachexxのフォルダを置けば編集は不要、 ドキュメントのルートはApachexx\htdocsとなります。)
4.配置と編集が完了したら、Apacheを起動
管理者モードでコマンドプロンプトを開いた後、
「Apachxx\bin」に移動して
httpd -k start <--- 起動
httpd -k stop [or shutdown] <--- 停止
(起動状態はPCの再起動後も継続されます。)
<ESP-01側の準備と設定>
[ESP-01とUNOのUart接続]
ESP-01とUNOのUartの配線は、WiFiBridgeの機能実装までに次の3の
状態に変更します。
1.接続の切り離し
UNOのflashにプログラムを書き込む時にこの状態にします。
2.TX/RXの入れ替え
USBtoTTLの出力をESP-01に接続して、ESP-01のflashへの
書き込みやESP-01にSSID/Passwordを設定する時にこの状態に
します。ただし、この状態の前には上記1の接続でUNOのTXDを
入力状態にしてUNOのTXDとESP-01のTXが競合しない為の
プログラムをUNOに書き込んで置く必要が有ります。
3.UNOとESP-01との正常接続
UNOとESP-01を接続してWiFiBridgeの機能を実現する時に
この状態にします。USBtoTTLの出力との競合に関しては、
USBtoTTLのチップの出力に1KΩの抵抗が挿入されているので、
それで対応させる事としています。
[ESP-01へのコードの書き込み]
ESP8266の開発環境をお持ちの方は、「ESP-01_WiFi_Uart_Bridge」の
コードを書き込む事でも対応可能です。開発環境をお持ちでない場合は、
次の方法でコンパイル済みのバイナリコードを書き込む事ができます。
1.Uartの接続を1にしてUNO_TXD_releaseのコードをUNOに
書き込む
次のESP-01への書き込み時にポート番号の設定が必要と
なりますので、ここで確認して置いて下さい。
2.次にUartの接続を2にして、ESP-01を書き込みモードに設定
書き込みモード:ESP-01 Reset SW と GPIO0 GND SW を押し、
先にESP-01 Reset SW を離す
3.Arduino IDE を閉じて、ESP-01_WiFi_Uart_Bridge_flasher\
esp8266_flasher.exeを開き、ポート番号、書き込みファイルを
設定して「Download」を実行してバイナリコードのESP-01への
書き込みを行う
[Network SSID & Password の設定]
1.Uartの接続を1にしてUNO_TXD_releaseのコードをUNOに
書き込む(上記の1と同じ)
2.書き込み後、Uartの接続を2にする。(ESP-01の書き込み後は、
そのまま利用可能)
3.Arduino IDE を起動してシリアルモニタを開き、57600bpsを
設定する
4.ESP-01 Reset Switch を押して、ESP-01を再起動する
5.シリアルモニタ上にSSID/Password 設定モードにする問い
合わせが出るので"y"を押す(5秒以内に)
6.以後、画面に従ってネットワークの SSID とパスワードを
設定する。(SSID/Passwordは記憶されるので、ネットワーク
を変えない限りは再設定不要)
7.SSID/Passwordの設定が終了したら、Uartの接続を一旦
切り離して1の状態にしてUNOにStandardFirmataを書き込む
8.StandardFirmataの書き込みが終了したら、Uartの接続を
本来の3に戻して、UNOのリセットでモジュール全体を
再起動させる。
<WiFiBridgeの動作確認>
WiFiBridgeの機能を直接ホストPCから確認するには次の2つが
利用できます。
1.Microsoftストアの「Windows Remote Arduino Experience」を使う(無料)
アプリのインストールが完了して、WiFiBridgeのモジュールを
起動したら、アプリを開きNetworkの接続でWiFiBridgeに
割り当てられたIPアドレスとポート番号を設定して
「Connect」を押します。
接続が完了したら、画面が次の様に変わり、UNOの各ポートが
画面上からコントロールできます。
2.テスト用のLED_Blink(Lチカ)を利用する
ダウンロードしたHostPC\LED_Blink フォルダにこちらで
利用したチェック用のスクリプトが有ります。このファイルの
IPアドレス(とポート番号)の部分をご利用のアクセスポイント
から割り振られたものに変更してNode.jsから実行すると確認
できます。(コマンドプロンプトから「node WiFi_blink.js」 を
実行)
<その他>
今回利用した部品のいくつかは先のESP-01のATコマンドの検討で
使用したものを流用しています。その為、テスト基板の回路図やOLEDの
改造等はここでは書いていません。必要で有ればこちらの記事で御確認
下さい。(Related article is here.)