ESP8266 搭載の WeMos D1 コピーボードを調べてみました
Arduino UNOを購入した時に合わせてWeMos D1のクローンも購入していて、
暫く忘れていたのですが、今回、手持ちのものを見直していた時に見つかったので
調べてみました。これはメインチップがESP8266でWiFiの機能が付いていて、
IOTでの利用に適したものでした。また、メモリのサイズも大きくUNOの時の様に
メモリの残りを気にしながらコードを書く事からは解放されました。ただし、
I/Oの数がUNOより少なく、UNOを完全に代替するものでは有りませんでした。
(その点はとても残念です。) こちらで調べた状況は次の様になります。
<WeMos D1 コピーボードの概要>
購入した開発用の「WeMos D1 コピーボード」はArduinoのUNOとの互換性を
考慮したもので、次の様なものでした。
1.WeMos D1ボードのコピー版(最初の写真はWebのカタログ)
2.メインチップとしてESP8266チップを搭載
3.Wifiの機能モジュールを搭載
4.Digital I/O - 11, Analog IN - 1
5.ポート出力は3.3V
6.ROM 1Mバイト、RAM 80Kバイト
<関連資料>
1.WeMos D1 カタログ
https://wiki.wemos.cc/products:d1:d1
2.ESP8266データシード
http://www.kyohritsu.jp/eclib/OTHER/DATASHEET/WIRELESS/esp8266exdata.pdf
3.ESP8266開発環境の構築
http://trac.switch-science.com/wiki/esp_dev_arduino_ide
4.グラフィックライブラリ(KMR-1.8 SPI LCD の表示利用)
Adafruit_GFX : URL https://github.com/adafruit/Adafruit-GFX-Library
Ucglib Arduino IDE のライブラリを管理よりインストール
5.ビットマップファイル作成ツール
画像データの補正と変換 : Windows OS の ペイント
画像データのサイズ変更 Caesium Image Compressor
URL https://saerasoft.com/caesium/
<開発環境の追加>
ESP8266のチップをArduinoのIDEで取り扱うには、コアにESP8266のボード
情報を追加する必要が有ります。ボードマネージャに提供元のURLを登録した
上で、ライブラリーマネージャーからインストールする事ができます。
詳しくは、上記関連資料の「ESP8266開発環境の構築」をご覧下さい。
<コード作成上の注意項目>
ESP8266はチップ内にハード的なウォッチドックタイマーが有り、長時間の
ループ処理が有ると、チップのリセットが発生します。ネット上の情報によると、
次の2つの方法が有効の様で、今回はそれらを適宜利用してリセットの発生を
回避しました。
1.ウォッチドックタイマーのリセット
yield() もしくは delay() 実行
2.ウォッチドックタイマーの長時間セット
ESP.wdtEnable(xxxx) xxxx : 設定時間(mS)
注意:上記2の処理をセットアップで行うと、書き込み時の最初のリセット時に
これが働いて、以後のフラッシュメモリへの書き込みが出来なくなる
様です。(その時は下記の対応が必要です。)
<途中からコードの書き込みができない時>
最初はコードの書き込みが出来ていても、書き込む内容によって、次から書き込み
ができない事が有りました。その場合は、Webからの情報による次の処理で対応
できました。
1.UNO互換でD8(ESP8266のGPIO0)ピンをGNDに接続
2.その状態でボード(CPU)のリセットを行う
3.書き込みの障害が出ていないコードを書き込む
4.以後は以前の通りの方法が可能となる
<ボード選択とサンプルスケッチ>
<テスト内容と結果>
テストとしは次の様な動作を目標としました。
1.KMR-1.8 SPI LCD をUNOで動作確認した内容をこのモジュールでも
動作させる
2.ESP8266のサンプルスケッチの「SDWebServer」をKMR-1.8 SPI LCDと
組み合わせて動作させる。
動作させた結果としては、次の様なものでした。
1.UNOの代わりの動作
そのままでは、途中でウォッチドックタイマーが働いてチップにリセットが
掛かって、動作が途中で止まりました。その為、止まった部分を確認しながら
適宜 delay(0) を挿入して、最後まで動作する様にしました。なお、スライド
ショーのソフトではSDの挿入確認を行っている部分で処理時間が時々長く
なるとリセットが掛かっていましたが、これに関しては、ウォッチドック
タイマーの時間を長く設定する事で回避しました。
2.SDWebServerの動作
KMR-1.8関連の初期設定をWifi 初期設定の前に行うと描画ができる様に
なりました。ただし、KMR-1.8関連の初期設定の後にdelay()を入れて
Wifi.begin()の処理が遅れると、Wifiのコネクトができなくなる様です。
今回はサンプルなので、上手く行く状態でOKとしましたが、本格的に利用
する場合には、初期設定のシーケンスの詳しい調査が必要だと思いました。
3.メモリの使用量
Blink(Lチカ)
flash memory 222,201/1,044,464 (21%); ram 31,576/81,920 (38%)
Ucglib slide show
flash memory 244,809/1,044,464 (23%); ram 37,268/81,920 (35%)
SDWebServer
flash memory 273,811/1,044,464 (26%); ram 41,912/81,920 (51%)
4.その他、チップからの出力が3.3Vなので、KMR-1.8 とはレベル変換の
抵抗無しで接続可能となりKMR-1.8 との相性はとても良いかと思いました。
[機器の接続]
[SDWebServer Client サンプル]
[コードとサンプル]
コードとビットマップファイルおよびSDWebServer動作確認時のSD用データ
関連の資料一式は次のURLからダウンロード可能です。なお、SDWebServerを
利用する場合は、スケッチ内のSSIDとそのパスワードをご利用中のWifiのものに
合わせて下さい。
関連資料一式
[動作状況]
動作状況は次のURLから確認できます。
暫く忘れていたのですが、今回、手持ちのものを見直していた時に見つかったので
調べてみました。これはメインチップがESP8266でWiFiの機能が付いていて、
IOTでの利用に適したものでした。また、メモリのサイズも大きくUNOの時の様に
メモリの残りを気にしながらコードを書く事からは解放されました。ただし、
I/Oの数がUNOより少なく、UNOを完全に代替するものでは有りませんでした。
(その点はとても残念です。) こちらで調べた状況は次の様になります。
<WeMos D1 コピーボードの概要>
購入した開発用の「WeMos D1 コピーボード」はArduinoのUNOとの互換性を
考慮したもので、次の様なものでした。
1.WeMos D1ボードのコピー版(最初の写真はWebのカタログ)
2.メインチップとしてESP8266チップを搭載
3.Wifiの機能モジュールを搭載
4.Digital I/O - 11, Analog IN - 1
5.ポート出力は3.3V
6.ROM 1Mバイト、RAM 80Kバイト
<関連資料>
1.WeMos D1 カタログ
https://wiki.wemos.cc/products:d1:d1
2.ESP8266データシード
http://www.kyohritsu.jp/eclib/OTHER/DATASHEET/WIRELESS/esp8266exdata.pdf
3.ESP8266開発環境の構築
http://trac.switch-science.com/wiki/esp_dev_arduino_ide
4.グラフィックライブラリ(KMR-1.8 SPI LCD の表示利用)
Adafruit_GFX : URL https://github.com/adafruit/Adafruit-GFX-Library
Ucglib Arduino IDE のライブラリを管理よりインストール
5.ビットマップファイル作成ツール
画像データの補正と変換 : Windows OS の ペイント
画像データのサイズ変更 Caesium Image Compressor
URL https://saerasoft.com/caesium/
<開発環境の追加>
ESP8266のチップをArduinoのIDEで取り扱うには、コアにESP8266のボード
情報を追加する必要が有ります。ボードマネージャに提供元のURLを登録した
上で、ライブラリーマネージャーからインストールする事ができます。
詳しくは、上記関連資料の「ESP8266開発環境の構築」をご覧下さい。
<コード作成上の注意項目>
ESP8266はチップ内にハード的なウォッチドックタイマーが有り、長時間の
ループ処理が有ると、チップのリセットが発生します。ネット上の情報によると、
次の2つの方法が有効の様で、今回はそれらを適宜利用してリセットの発生を
回避しました。
1.ウォッチドックタイマーのリセット
yield() もしくは delay() 実行
2.ウォッチドックタイマーの長時間セット
ESP.wdtEnable(xxxx) xxxx : 設定時間(mS)
注意:上記2の処理をセットアップで行うと、書き込み時の最初のリセット時に
これが働いて、以後のフラッシュメモリへの書き込みが出来なくなる
様です。(その時は下記の対応が必要です。)
<途中からコードの書き込みができない時>
最初はコードの書き込みが出来ていても、書き込む内容によって、次から書き込み
ができない事が有りました。その場合は、Webからの情報による次の処理で対応
できました。
1.UNO互換でD8(ESP8266のGPIO0)ピンをGNDに接続
2.その状態でボード(CPU)のリセットを行う
3.書き込みの障害が出ていないコードを書き込む
4.以後は以前の通りの方法が可能となる
<ボード選択とサンプルスケッチ>
<テスト内容と結果>
テストとしは次の様な動作を目標としました。
1.KMR-1.8 SPI LCD をUNOで動作確認した内容をこのモジュールでも
動作させる
2.ESP8266のサンプルスケッチの「SDWebServer」をKMR-1.8 SPI LCDと
組み合わせて動作させる。
動作させた結果としては、次の様なものでした。
1.UNOの代わりの動作
そのままでは、途中でウォッチドックタイマーが働いてチップにリセットが
掛かって、動作が途中で止まりました。その為、止まった部分を確認しながら
適宜 delay(0) を挿入して、最後まで動作する様にしました。なお、スライド
ショーのソフトではSDの挿入確認を行っている部分で処理時間が時々長く
なるとリセットが掛かっていましたが、これに関しては、ウォッチドック
タイマーの時間を長く設定する事で回避しました。
2.SDWebServerの動作
KMR-1.8関連の初期設定をWifi 初期設定の前に行うと描画ができる様に
なりました。ただし、KMR-1.8関連の初期設定の後にdelay()を入れて
Wifi.begin()の処理が遅れると、Wifiのコネクトができなくなる様です。
今回はサンプルなので、上手く行く状態でOKとしましたが、本格的に利用
する場合には、初期設定のシーケンスの詳しい調査が必要だと思いました。
3.メモリの使用量
Blink(Lチカ)
flash memory 222,201/1,044,464 (21%); ram 31,576/81,920 (38%)
Ucglib slide show
flash memory 244,809/1,044,464 (23%); ram 37,268/81,920 (35%)
SDWebServer
flash memory 273,811/1,044,464 (26%); ram 41,912/81,920 (51%)
4.その他、チップからの出力が3.3Vなので、KMR-1.8 とはレベル変換の
抵抗無しで接続可能となりKMR-1.8 との相性はとても良いかと思いました。
[機器の接続]
[SDWebServer Client サンプル]
[コードとサンプル]
コードとビットマップファイルおよびSDWebServer動作確認時のSD用データ
関連の資料一式は次のURLからダウンロード可能です。なお、SDWebServerを
利用する場合は、スケッチ内のSSIDとそのパスワードをご利用中のWifiのものに
合わせて下さい。
関連資料一式
[動作状況]
動作状況は次のURLから確認できます。