WROOM 単体に Arduino スケッチで Wi-Fi ストリーミング

記事公開日:2015年8月23日
最終修正日:2017年10月7日

スポンサーリンク

最近は ESP-WROOM-02 ( ESP8266 )をさらに使い易くした ESPr Developer を使っています。
USB-シリアル変換、余裕のある容量の電源レギュレーター、ロジックレベル変換をパッケージにした ESP-WROOM-02 開発ボードです。
ATコマンドやWi-Fi通信が安定して実現できるので、超お勧めです。
こちらの記事も合わせてご覧ください。
ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介

今回は、ハードウェアのArduinoを一切使わず、ESP-WROOM-02(ESP8266)単体にArduinoスケッチを書き込み、Wi-Fi通信させてみました。
WROOMではNTPサーバーから時刻を取得し、iOSのSafariやAndroidのGoogle ChromeなどのスマートフォンブラウザにServer-Sent Eventsを使ってリアルタイムストリーミング表示させてみました。
見た目は地味ですが、やっている中身はスゴイです。
WroomForArduino_SSE_NTP01
今までは、ArduinoとWROOM(ESP8266)とシリアルUART通信で、ATコマンドで制御していましたが、ネットでも多くの情報があるとおりに、私もWROOM(ESP8266)に直接Arduinoスケッチをフラッシュに書き込んでみました。
つまり、ハードウェアのArduinoは不要なんです。
こんなちっちゃいものにArduinoとWi-fiモジュールが入っているので、メモリは容量無いだろうと思ってました。
が、しかし!!・・・・
実はArduino MEGA以上のSRAMを装備していたのです。
なんと
フラッシュメモリ  1MB (内19%はブートローダやWiFiで既に使用済み)
SRAM 81KB (内54%は使用済み)
もあるんです。
使用済みのところは、何も動作しない空スケッチをコンパイルした場合のメモリーで既に使用されているのです。
それでも、Arduino MEGAを遙かに超えるメモリーです。
私は何か間違えているんでしょうか・・・???
と思うくらいメモリーがスゴイんです。
SRAMなんかはMEGAが8KBですよ。
WROOMはその10倍です!
ウソでしょ・・・
54%使用済みとしても37kBもあるんです・・・。  ウソでしょ・・・。
何かの間違いかもと思いつつ、多量の文字列を扱うスケッチをコンパイルしてみたら、SRAMが54%から61%に増えただけでした。
こりゃぁ~、本物みたいです。
ということで、ArduinoUNOで苦労したメモリを顧みず、ガンガン文字列を貪欲にスケッチに書き込んでみました。
ATコマンドを一切使わず、NTPサーバーから時刻を取得し、WROOMからスマホブラウザにServer-Sent Eventsで時刻をストリーミング送信して表示させた動画はこんな感じです。

ブラウザからのコネクションもライブラリを使うサクッといきました。
メモリーが多量にあるので、ライブラリをガンガン使えます。
こりゃぁ、みなさんスゴイですよ!!
ただ、残念なのが、ADコンバーターが1ピンしかなく、しかも1Vまでしか使えないことです。
でも、ADコンバーターを外付けすればいいだけの話。
ま、何にしてもESP-WROOM-02(ESP8266)のポテンシャルには参りました・・・。
では、この使用方法を順番に解説していきましょう。
※Windowsの場合について説明します。

1.最新版 Arduino IDE をダウンロード

リンクは→こちら
ここはArduino.ccのホームページです。
必ず1.6.5 の方をダウンロードしてください
後でインストールする Arduino core for ESP8266 WiFi chip は他のバージョンではまず正常に動作しませんのでご注意ください。

1.6.12でも動作しました。

最近ちょこっと耳にしたのですが、Arduinoを立ち上げた数人の本家の方たちと、ハードウェア設計班とで分裂したらしいですね。
ですから、EthernetShiels2は IDE1.6.5では動作せず、Arduino.orgページのバージョンでないと動作しないなどの問題があるようです。
私は現在 ver1.7.6 と ver1.6.5 の両方を使い分けるので、Windows Installerはダウンロードしませんでした。
ZIPファイルをダウンロードして使い分けてます。
WROOM(ESP8266)は2015/8/22現在ではver 1.6.5 で動作するようなのでそれをダウンロードして、ZIPならばご自分の好きなフォルダに解凍してください。

2.Timeライブラリをダウンロードしてインストール

Arduino playgroundにあるTimeライブラリのホームページを開きます。
リンクは→こちら
次に下図のような表示のところをクリックします。
ws_Yahoo_message05
次にGitHubのところをクリック
ws_Yahoo_message06
次のようなところをクリックしてZIPファイルをダウンロードしてください。
Shinonome03
ZIPを解凍するとTime-masterフォルダがありますので、更にその中のTime-masterフォルダをIDEのlibrariesフォルダにフォルダごとコピーしてください。

WroomForArduino_SSE_NTP03
もし、IDEをWindows Installerでインストールした場合はC:\ドライブのProgram FilesフォルダにArduinoフォルダがあります。
この辺はインターネットに沢山の情報がありますので、分からない場合は検索してみてください。

3.Arduino IDEのボードマネージャーにESP8266をインストール

まず、以下のGitHubのESP8266ボードデータがあるホームページを開きます。
リンク→こちら
そのページの下図のところのテキストをコピーします。

WroomForArduino_SSE_NTP04

そしたら、Arduino IDE ver 1.6.5を起動して、下図の環境設定を選択。

WroomForArduino_SSE_NTP05

下図の部分に先ほどコピーしたテキストのリンクをペースト(貼り付け)ます。そしてOKをクリックします。
WroomForArduino_SSE_NTP06-1
次に下図のようにボードマネージャーを選択して開きます。
WroomForArduino_SSE_NTP07

次に下図のようにESP8266ボードをインストールします。
WroomForArduino_SSE_NTP08
するとこんな感じでインストール開始します。(ネットには接続しておいてください)
WroomForArduino_SSE_NTP09
終ったら、他のボードも念のため最新版にインストールしておいた方がいいと思います。

4.準備するもの

No品名個数参考購入先
1ESP-WROOM-021Amazon,マイクロテクニカ販売のものなど。
秋月さんや楽天でも売ってます。
2超小型USBシリアル変換モジュール
(3.3V対応)
1秋月電子通商
3三端子レギュレーター
TA48M033F
(秋月さんで購入すると電界コンデンサーとセラミックコンデンサー込でした)
1秋月電子通商
4電解コンデンサー
47uF 35V
1
5積層セラミックコンデンサー
0.1uF
2
6ブレッドボード1
7ジャンパーワイヤー等
8パソコン、USBケーブル,等
9最新のiOSやAndroidスマホ
および、SafariかGoogleChrome
10WROOMがマイクロテクニカ販売のものならば、
2mmピンヘッダ
2mmジャンパーピン
2.54mmピンヘッダ
1式
11リセット用超小型タクトスイッチ
2mmピンヘッダに合うもの
1

5.WROOM(ESP8266)のハンダ付け

まず、ESP-WROOM-02(ESP8266)を接続します。
私はamazonさんのマイクロテクニカさん販売のものを使いました。

これを購入すると取扱説明書がダウンロードできますので、その通りに接続します。
私の場合は説明書通りに2mmピンヘッダもハンダ付けしました。
※2mmピンヘッダおよび2mmジャンパーピン、超小型タクトスイッチ等は別途購入が必要です
下図のような感じです。
フラッシュダウンロードモード(書き込みモード)でジャンパーピンをセットします。

Pin No.Level
GPIO 15LOW
GPIO   2HIGH
GPIO   0LOW
ENHIGH

WroomForArduino_SSE_NTP10

6.各部品の接続

ブレッドボードに下図のように接続します。 シンプルですねぇ~!!
WroomForArduino_SSE_NTP11WroomForArduino_SSE_NTP12

全てできたら、USBケーブルをパソコンと接続する前にWROOMの電源ピンを外して、3.3Vが来ているか確認してからWROOMと接続した方が安全です。
全てOKならばUSBとパソコンを接続します。
ここで、疑問に思った方は鋭いです。
WROOM(ESP8266)は以前の記事で電源容量がキモとお伝えしました。
しかし、今回の接続では、USBシリアル変換モジュールの最大電流が 100mA なんです。
これでも、問題なく動作しました。
ん??  そうすると、そんなに電流無くてもいけるのかな???
この検証はいつか解決してみたいと思います。

7.Arduino IDEの設定

次にArduino IDE1.6.5を起動して、下図のようにツールメニューを設定します。
まずはボードはGeneric ESP8266 Moduleを選択。
WroomForArduino_SSE_NTP13
COMポートはご自分の環境に合わせて設定してください。私の場合はCOM3でした。
WroomForArduino_SSE_NTP14
その他は以下のように全て設定していきます。フラッシュメモリーはとりあえず最大を選んでみました。
WS_lib15
Reset Method を “nodemcu” にするとスイッチサイエンスさんの開発ボードを使うときはいちいちリセットボタンを押さずにバンバン書き込めるので便利です。
毎回リセットスイッチを押して再起動したい場合は”ck”にします。この図では”nodemcu”にしてますが、マイクロテクニカさんの場合は”ck”で良いと思います。
いろいろ変えて試してみてください。

次に書き込み装置を設定します。
とりあえず下図のように選択しました。
WroomForArduino_SSE_NTP16

スポンサーリンク


mgo-tec電子工作 関連コンテンツ ( 広告含む )

投稿者:

mgo-tec

Arduino , ESP32 ( ESP-WROOM-32 ) , ESP8266 ( ESP-WROOM-02 )等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしてます。 でも、少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持ってます。

「WROOM 単体に Arduino スケッチで Wi-Fi ストリーミング」への12件のフィードバック

  1. 参考にさせていただいています。
    一点、モジュールの個体差でしょうか
    我が家の環境では、
    while (millis() – beginWait < 1500) {
    の後に、delay(1);を挿入しないと
    NTPから取得したデータの更新が
    正常に機能せず、time関数の初期値で
    表示されていました。

  2. soarusさん
    貴重なコメントありがとうございました。
    当方の環境ではdelay(1);を入れなくても、iOS、Androidともに問題なかったので、他の方の環境で動くのかが疑問でした。
    動かなくて悩んでいる方にはとても助かる意見だと思います。
    早速、スケッチを追加修正させていただきました。
    当方の環境でもdelay(1);を追加しても問題なく動作しました。
    また何かありましたら、意見をお寄せください。

  3. とても興味深い記事だったので参考にさせていただいております。
    当記事の通りにセッティングを行い、プログラムをそのまま(SSID,PASSWARDは変えました)検証いたしましたところ、182行目の「setSyncProvider(getNtpTime); 」が引っ掛かってしまい、書き込むことができませんでした。
    どのようにしたら改善することができるのでしょうか。
    よろしくお願いします。

    -環境-
    windows7
    Arduino 1.6.7
    ↓エラーコード
    —————————————————————–
    C:\Users\aki\Documents\Arduino\ESP-WROOM-02\ESP-WROOM-02.ino: In function ‘void setup()’:
    ESP-WROOM-02:61: error: ‘getNtpTime’ was not declared in this scope
    setSyncProvider(getNtpTime);
    ^
    ESP-WROOM-02:61: error: ‘setSyncProvider’ was not declared in this scope
    setSyncProvider(getNtpTime);
    ^
    C:\Users\aki\Documents\Arduino\ESP-WROOM-02\ESP-WROOM-02.ino: In function ‘void loop()’:
    ESP-WROOM-02:67: error: ‘HTTP_Responce’ was not declared in this scope
    HTTP_Responce();
    ^
    C:\Users\aki\Documents\Arduino\ESP-WROOM-02\ESP-WROOM-02.ino: In function ‘void HTTP_Responce()’:
    ESP-WROOM-02:126: error: ‘SSE_Responce’ was not declared in this scope
    SSE_Responce();
    ^
    C:\Users\aki\Documents\Arduino\ESP-WROOM-02\ESP-WROOM-02.ino: In function ‘void SSE_Responce()’:
    ESP-WROOM-02:169: error: ‘hour’ was not declared in this scope
    if(hour()<10){
    ^
    ESP-WROOM-02:174: error: 'minute' was not declared in this scope
    if(minute()<10){
    ^
    ESP-WROOM-02:179: error: 'second' was not declared in this scope
    if(second()<10){
    ^
    ESP-WROOM-02:187: error: 'getNtpTime' was not declared in this scope
    setSyncProvider(getNtpTime);
    ^
    ESP-WROOM-02:187: error: 'setSyncProvider' was not declared in this scope
    setSyncProvider(getNtpTime);
    ^
    ESP-WROOM-02:195: error: 'year' was not declared in this scope
    sse_data += String(year())+"/"+String(month())+"/"+String(day());
    ^
    ESP-WROOM-02:195: error: 'month' was not declared in this scope
    sse_data += String(year())+"/"+String(month())+"/"+String(day());
    ^
    ESP-WROOM-02:195: error: 'day' was not declared in this scope
    sse_data += String(year())+"/"+String(month())+"/"+String(day());
    ^
    C:\Users\aki\Documents\Arduino\ESP-WROOM-02\ESP-WROOM-02.ino: In function 'time_t getNtpTime()':
    ESP-WROOM-02:229: error: 'sendNTPpacket' was not declared in this scope
    sendNTPpacket(timeServerIP);
    ^
    ESP-WROOM-02:242: error: 'SECS_PER_HOUR' was not declared in this scope
    return secsSince1900 – 2208988800UL + timeZone * SECS_PER_HOUR;
    ^
    exit status 1
    'getNtpTime' was not declared in this scope
    ——————————————————————————–

    1. A.koniさん

      コメントありがとうございます。
      おそらく、Arduino IDE が1.6.7であることが原因だと思います。
      Arduino core for ESP8266 WiFi chip は推奨Arduino IDE は1.6.5 です。
      1.6.7ではまず正常に動作しないようです。

      当方のブログでも、最新版IDEのページへリンクを貼っていましたので、修正しました。
      私も1.6.7の動作確認は最近までやっておらず、申し訳ございませんでした。
      その他のページでも1.6.5をインストールするように修正しています。
      Arduino core for ESP8266 WiFi chipも1.6.5限定でなく、他のバージョンでも動作するようにしてほしいですね。
      ご指摘ありがとうございました。

      1. 当方、1.6.9にて同じコンパイルエラーになっていました。
        #include を
        #include に変更するとコンパイル、動作ともにできました。
        最近Arduinoを始めたど素人ですが参考までに。

        1. kumaさん

          コメントありがとうございます。
          Sever-Sent Events はしばらく使ってなかったもので、不具合が分かりませんでした。
          Arduino Timeライブラリも知らぬ間に結構変更されていて、ライブライ使用方法も変わっていることに気がづきませんでした。
          kumaさんのコメント欄では<>の中の文字が消えてしまってますが、現在のTimeライブラリでは
          #include <Time.h> → #include <TimeLib.h>
          と変更しなければならないということでした。
          kumaさん、こういうことでよろしいでしょうか?
          当方でもArduno1.6.9でこのように変更したら動作しました。
          大変失礼いたしました。
          記事を修正したいと思います。

  4. 有用な記事ありがとうございます。
    ビギナー過ぎて良く分からず、基本的なことかと思いますが質問させてください!

    2.Timeライブラリをダウンロードしてインストール
    のところで”Time”をクリックしてダウンロードとありますが、クリックすると右記のページが開きます。”http://www.pjrc.com/teensy/td_libs_Time.html”
    このページにある” Teensyduino Installer”をクリックして、”http://www.pjrc.com/teensy/td_download.html”を開き、
    以下の環境の中から使っている環境のインストーラをダウンロードしてArduinoフォルダの中の”libraries”フォルダにコピーすれば良いという認識で合っていますでしょうか

    Macintosh OS-X Installer
    Linux Installer (32 bit)
    Linux Installer (64 bit)
    Windows XP / 7 / 8 / 10 Installer

    宜しくお願いいたします。

    1. かわさん

      記事をご覧頂きありがとうございます。
      ライブラリのページが知らぬ間に変わっている事が多く、私も困っております。

      今、多忙で記事訂正が出来ないのですが、Windowsであればこちらの記事のTimeライブラリインストールの節を参照してみて下さい
      (MACは持ち合わせておりませんので分かりません)
      https://www.mgo-tec.com/blog-entry-1616shinonome-ws-oled-news.html

      1. mgo-tecさん
        お忙しいところ迅速な返答ありがとうございます!
        リンク先確認いたします

        1. かわさん

          先のコメントのkumaさんの件で気付いたのですが、Timeライブラリの仕様が変更されておりました。
          #include <Time.h> → #include <TimeLib.h>
          と変更しないと動きません。
          記事も修正しました。
          これで試してみてください。

  5. Arduino IDE 1.6.7 にて setSyncProvider(getNtpTime); でコンパイルエラーが出る件。
    void setup()の前に、以下を記述するとコンパイルが可能です。

    void HTTP_Responce();
    void SSE_Responce();
    time_t getNtpTime();
    unsigned long sendNTPpacket(IPAddress& address);

    私の方では Arduino IDE 1.6.7 でコンパイルできましたが、間違いかもしれませんので、他の方で試されてお返事を頂けると幸いです。

    1. macsbugさん

      コメント投稿ありがとうございます。
      私は1.6.7はいろいろと問題があったので、今は使ってません。
      先のコメント投稿でもあったように、現在は1.6.9で快適に動作しております。
      setSyncProviderの件もTimeライブラリが知らぬ間にバージョンアップしていたりしてエラーになっていたようです。
      最新版をダウンロードした場合には
      #include<Time.h> → #include<TimeLib.h>に変更したら動作します。

      ただし、注意していただきたいのは、古いIDEをアンインストールする場合、Arduino15フォルダを削除せねばなりません。
      その方法はこちらの記事を参照にしてください。
      https://www.mgo-tec.com/esp8266-board-install01-html

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)