ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介

ss_wroom_howto00 ESP8266 ( ESP-WROOM-02 )

今回は、スイッチサイエンスさんで扱っている ESPr Developer (ESP-WROOM-02 ( ESP8266 ) 開発ボード)の使い方を説明していきたいと思います。
といっても、今までの ESP-WROOM-02単体よりは遙かに簡単に扱えるので、今まで使っていた方々には説明不要かもしれません。
とにかく圧倒的に使いやすくなりましたが、一から仕組みを理解しながら制作したい方には物足りないかもしれません。
でも、あまり時間が取れなく、パッと使いたい方にはとても重宝するモジュールですよ。
今まで苦労してきたWROOMの扱いが全てクリアされてます。脱帽です。

この記事が、何と、スイッチサイエンスさんウェブショップのESP-WROOM-02開発ボードページにリンクされました!
ありがとうございました!!

 

というわけで、今回は初めて使う人向けにもこのモジュールをザッと説明します。

これはAmazonさんなどでも販売しております。

ESP-WROOM-02開発ボード
スイッチサイエンス(Switch Science)
ESPr Developer(ピンソケット実装済)
スイッチサイエンス(Switch Science)

もちろんスイッチサイエンスさんのページで直売もしております。
かなり売れているようで、在庫切れになっている場合がありますのでご注意ください。
これには2.54mmピンヘッダは付属しておりませんのでご注意ください。別途購入する必要があります。

このモジュールには主に以下のICが回路に入ってます。

  • ESP-WROOM-02 ( ESP8266 ) 本体
  • 3.3V対応USBシリアル変換IC FT231XS
  • 5V→3.3V 電源レギュレーター XC6222B (最大出力電流700mA)

電源容量も全く問題ない余裕の容量です。やっぱりWROOMには500mA以上欲しいと思いますので、かなり厳選してパーツを選んでいる感じがしますね。
2.54mm変換ボード付WROOMだけで 1000円くらいしますので、USBシリアル変換や電源レギュレーターなどを購入したりすると 2000円 くらいになってしまいます。
とすると、ここまでパッケージされていた方が使い勝手がいいですね。

では、この使い方について説明します。

※ この記事を書いた当初の ESP-WROOM-02 は、Flashメモリサイズが 4MB でした。
しかし、現在は 2MB が流通していますので注意してください。
以下のページを参照して、Flashメモリサイズを確認しておくことを強くお勧めします。

ESP-WROOM-02 ( ESP8266 ) チップ・メモリ・MACアドレス情報確認方法
(2017/10/2)

 

スポンサーリンク

ピンヘッダのハンダ付け

別途購入した2.54mmピンヘッダをニッパで切り取り、下図のようにハンダ付けします。

UART(シリアル) ATコマンド通信の方法

1.USBでパソコンと接続

下図のようにブレッドボードに設置し、microUSB と パソコンを接続します。

※パソコンにUSBで接続する場合は、USBハブは使わず、必ず直接接続してください
USBハブでは電流量が足りなくなる場合があるためです。

 

接続したらWindows8以上ならUSBドライバが自動インストールされますので、終わるまでしばらく待ちます。
それが終わると、ArduinoIDEのCOMポートが使用可能になります。
USBUARTシリアルのATコマンド通信を始めるにはこれだけ接続すればOK!!
Arduino UNO などの別途ハードウェアは不要です。
実に簡単!!

2.Arduino IDE シリアルモニター起動

次にUSBをPCと接続した状態で、Arduino IDE を起動します。

(参考)
私はArduino IDEバージョン 1.8.2 以上を使ってます。
日本語 Windows の場合、1.8.2 以上のシリアルモニターでは UTF-8 コード文字列の日本語漢字表記が可能ですが、1.8.1 以下のシリアルモニターは Shift_JISコードです。
この記事を書いた当初は 1.8.1 以下を使っていましたので表示が違っていることをご了承ください。

 

起動したら、下図のようにツールメニューのポートをご自分の環境のCOMポートを選択して下さい。
※USBハブは電流供給が足りない場合があります。その場合はCOMポートとして認識されないので、パソコンのUSBポートに直接接続してください。

そして次に下図のようにシリアルモニターを起動します。

3.シリアルモニターの通信速度等の設定

シリアモニターを開いたら、このようにCR(キャリッジリターン)とLF(ラインフィード)を選択。
通信速度を115200 bps に設定します。
以前の記事でも述べましたが、WROOMはシリアル通信では 115200bps 通信がデフォルトだからです。
また、ATコマンド通信はコマンドの後にCRとLFを送信しなければならないので、ここで設定しておけば、自動的に送信してくれます。

4.ATコマンドの送受信

まず、下図のリセットスイッチを押します。

すると下図のように文字化けデータが表示されます。
この文字化けデータはWROOMは電源起動直後はかなり遅いビットレート76800bpsで通信してくるため、シリアルモニターの115200bpsでは読み取れないのです。この文字列は無視してOKです。
その後、「ready」と表示されればWROOMと正常にUART(シリアル)通信できます。
「ready」以降に115200bpsで送信されてくるので、シリアルモニターで判読可能になります。
そうしたら、コマンド入力欄に「AT」と入力しエンターキーまたは送信ボタンをクリックします。

下図のように、空行の後に「OK」と表示されれば、ATコマンドも正常に送受信できているという証拠です。

次に AT+GMR と入力するとESP-WROOM-02のATコマンドのバージョンおよびファームウェアバージョンを確認できます。
今回購入したものはATコマンドバージョンが0.40 でファームが1.3.0でしたが、こちらのページでは2015/11/18時点で ATコマンドおよびファームのバージョンは 1.4.0 となっていました。ファームのアップデート方法は近々説明しようと思ってます。

ATコマンドの英語版マニュアルは以下のページにありますので、ご参照ください。
http://espressif.com/en/products/hardware/esp8266ex/resources

また、もし、うまく動作しない場合は、以下のトラブルシューティングを参照してください。
ESP8266, ESP-WROOM-02, ESPr Developer トラブルシューティングまとめ

このATコマンド通信というものの用途はいったい何かというと、主に別途Arduino UNOなどのハードウェアとシリアル通信して、そのデータをWROOMでWi-Fiで飛ばすような時に使うみたいです。
ですから、後述するフラッシュに直接Aruduinoスケッチを書き込む場合にはATコマンドは使用できません。
このATコマンドはWROOMをいろいろな動作モードにチェンジすることができます。
まだ実験していないのですが、もしかしたらATコマンドで動作モードを変えた後にフラッシュで直接Arduinoスケッチを書き込むといろいろとオモシロイことができるのかもしれません。
いつか実験したいと思います。

UART(シリアル)通信のATコマンドについては以上です。
実際の工作例は過去記事を参照してみてください。
ただ、Arduino とシリアル通信する場合は、Arduino側のソフトウェアシリアルの速度が115200bpsに対応しておりませんのでご注意ください。その場合は過去記事のようにハードウェアシリアルとソフトウェアシリアルの接続コードを差し替えるか、WROOMの通信速度をATコマンドを使って9600bpsに落としてください。
通信速度(baudrate)を変えるコマンドは しえすた さんから教えていただきました。
AT+UART_DEF=9600,8,1,0,3
という風に入力すると変えられるようです。ですが、しばらくATコマンドを使っておらず、まだ私は試していません・・・。申し訳ございません・・・m__m
最近は後述するフラッシュに直接Arduinoスケッチを書き込んでいます。

少し前までは初めてのATコマンド通信という記事にあるようにATコマンドを成功させるだけでも一苦労でした。 しかし、このスイッチサイエンスさんの開発ボードはATコマンド通信は何のトラブルもなく楽チンです。しかも初期立ち上げ以外は文字化けもありません。
これはおすすめボードですよ。

ESP-WROOM-02開発ボード
スイッチサイエンス(Switch Science)

ESPr Developer(ピンソケット実装済)
スイッチサイエンス(Switch Science)

Arduinoスケッチをフラッシュに直接書き込み、ESP-WROOM-02をArduino化する

最近は私はもっぱらこの方法でしかWROOMを使っておりません。
ESP-WROOM-02をArduino化してしまうと、ATコマンドには戻れませんね。戻る必要が無いかもしれません。
さらに、もはやArduinoハードウェアは不要のような気がしてくるほど、この方法はポテンシャルがスゴイです。
最初はとっつきにくかったのですが、スイッチサイエンスさんの開発ボードを使うとかなりサクッと簡単になりました!!

因みに、この方法を使うとフラッシュメモリを全て書き換えてArduino化することになるので、ATコマンドは使えなくなります。
再度ATコマンドに戻りたい場合はATコマンド仕様のフラッシュに書き換えなければなりませんのでご注意ください

1.Arduino IDEにESP8266ボードをインストール

まずは、Arduino.cc ページのArduino IDE をパソコンに予めインストールしておきます。
(2018/9/13時点で絶好調のバージョンは1.8.6以上です)
インストールの方法については、こちらの記事
●Arduino IDE に Stable ( Staging )版 ESP8266 ボードをインストールする方法
をご覧ください。

2.スケッチをコンパイル書き込み

※ 現在流通している ESP-WROOM-02 の Flashメモリサイズは、ほとんどが2MBです。
この記事を書いた当初は 4MB でしたので、その設定でこの記事を書いています。
以下のページを参照して、Flashメモリサイズを確認しておくことを強くお勧めします。

ESP-WROOM-02 ( ESP8266 ) チップ・メモリ・MACアドレス情報確認方法

(2017/10/2)

 

ESP8266ボードもインストールして、設定が済んだらスマホブラウザに Hello World というテキストを表示させてみましょう。

以下のソースコードをコピペして、Arduino IDEのスケッチへ貼り付けてください。
(2018/09/13修正)
【ソースコード】 (※無保証 ※PCの場合、ダブルクリックすればコード全体を選択できます)

#include <ESP8266WiFi.h>

//ご自分のルーターのSSIDを入力してください
const char* ssid = "xxxx";
//ご自分のルーターのパスワード
const char* password = "xxxx";

boolean Ini_html_on = false;//ブラウザからの初回HTTPレスポンス完了したかどうかのフラグ

WiFiServer server(80);
WiFiClient client;

void setup() {
  Serial.begin(115200);
  // Connect to WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}
//************メインループ********************************
void loop() {
  if(Ini_html_on == false){
      Ini_HTTP_Response();
  }else if(client.available()){
    Serial.print(client.read());
  }
  delay(1);//これは重要かも。
}
//*****初回ブラウザからのGET要求によるHTMLタグ吐き出しHTTPレスポンス*******
void Ini_HTTP_Response()
{
  client = server.available();//クライアント生成
  delay(1);
  String req;

  while(client){
    if(client.available()){
      req = client.readStringUntil('\n');
      Serial.println(req);
      if (req.indexOf("GET / HTTP") >= 0 || req.indexOf("GET /favicon") >= 0){//ブラウザからリクエストを受信したらこの文字列を検知する
        //Google Chromeの場合faviconリクエストが来るのでそれも検出する
        Serial.println("-----from Browser FirstTime HTTP Request---------");
        Serial.println(req);
        //ブラウザからのリクエストで空行(\r\nが先頭になる)まで読み込む
        while(req.indexOf("\r") != 0){
          req = client.readStringUntil('\n');//\nまで読み込むが\n自身は文字列に含まれず、捨てられる
          Serial.println(req);
        }
        req = "";
        delay(10);//10ms待ってレスポンスをブラウザに送信

        //メモリ節約のため、Fマクロで文字列を囲う
        //普通のHTTPレスポンスヘッダ
        client.print(F("HTTP/1.1 200 OK\r\n"));
        client.print(F("Content-Type:text/html\r\n"));
        client.print(F("Connection:close\r\n\r\n"));//1行空行が必要
        //ここからブラウザ表示のためのHTML吐き出し
        client.println(F("<!DOCTYPE html>"));
        client.println(F("<html>"));
        client.println(F("<body>"));
        client.println(F("<font size=30>"));
        client.println(F("Hello World"));
        client.println(F("</font>"));
        client.println(F("</body>"));
        client.println(F("</html>"));

        delay(10);//これが重要!これが無いと切断できないかもしれない。
        client.stop();//一旦ブラウザとコネクション切断する。
        delay(10);
        Serial.println("\nGET HTTP client stop--------------------");
        req = "";
        Ini_html_on = false;  //一回切りの接続にしたい場合、ここをtrueにする。                
      }
    }
  }
}

4行目と5行目にそれぞれご自分のWi-FiルーターのSSID、パスワードにそれぞれ書き換えてください。

その後、コンパイルするとこのような画面になればOKです。

完了したら間髪入れずに即シリアルモニターを立ち上げます。
するとこんな感じに表示されます。

スマホブラウザとのコネクション

※お勧めブラウザは Google Chrome です。
Microsoft Edge では表示できませんのでご注意ください。
(2017/4/11時点)

このローカルIPアドレスをスマホブラウザのURL入力欄に下図のように入力します。

するとシリアルモニターにはこんな感じで表示されます。

これはGoogle Chromeの場合ですが、ブラウザからGETリクエストメッセージを受信しています。
受信したらWROOMからHTTPレスポンスヘッダを含んだHTMLタグをブラウザへ送信して、コネクション切断します。
すると、ブラウザに Hello World と表示されるはずです。

iOSのSafariでも同様に表示されると思いますので、持っている方は試してみてください。

もし、うまく動作しない場合は、以下のトラブルシューティングを参照してください。
ESP8266, ESP-WROOM-02, ESPr Developer トラブルシューティングまとめ

これを過去の記事でATコマンドでやりましたが、この方が遙かに簡単ですね。
Arduino UNOではメモリがギリギリでしたが、ESP-WROOM-02 はメモリが膨大ですので、余裕~~です。

双方向ストリーミング通信WebSocketを試してみる

※お勧めブラウザは Google Chrome です。
Microsoft Edge では表示できませんのでご注意ください。
(2017/4/11時点)

上記のHello World では物足りない方には双方向ストリーミング通信のWebSocketをやってみましょう。

まず、下図のように接続して、USBでパソコンとESP-WROOM-02開発ボードを接続してみてください。

予め、ご自分のWi-FiルーターにはWROOMにアクセスできるようにセットアップを済ましておいてください。
そして、このWebSocketのページのソースコードをスケッチにコピペして、ご自分のルーターのSSID、パスワード、ローカルIPアドレスに書き換えて、コンパイルしてWROOMに書き込んでください。
(※ソースコードが長いので、テキストの最初をクリックして、コードの最後をシフトキーを押しながらクリックするとソースコードが全て選択されます)

ローカルIPアドレスは予めルーター側で割り当ててあれば問題ないのですが、DHCPサーバで自動割り当てにしている場合はSSIDとパスワードだけ書き換えて、ローカルIPアドレスは”XXX.XXX.XXX.XXX”のままにしておいてコンパイルしてください。
すると、シリアルモニターに下図のように表示されます。

このIPアドレスをメモっておいて、再度ソースプログラムスケッチのローカルIPアドレスを書き換えればOKです。

コンパイルでこの開発ボードのスゴイところは、何度も書き込みし直しても、リセットしたり、USBを抜いたり、GPIO #0 を差し替えてたりする必要が無くなっていることが分かると思います。これは素晴らしいですね!!

そしたら、Google ChromeなどのスマホブラウザのURL入力欄に先ほど打ち込んだご自分のWROOMのローカルIPアドレスを入力するとこのようにLED調光コントロールできると思います。

因みに過去の記事にあるように、スマホは出来るだけ最新の高速CPUの物を使用して、ブラウザやOSはできるだけ最新のものを使用してくださいね。

また、この WebSocket プログラムはまだ安定して使えるものではありません。
私は Arduino IDE ライブラリを自作して、もっとバージョンアップする度に安定化させましたので、以下のページも合わせてご参照ください。
EasyWebSocket BETA 1.3 をアップしました

トラブルシューティング

ESPr Developer のトラブルシューティングについては、以下のページを参照してください。
コンパイルできない、動作が安定しないなどの対処方法を列挙してます。

ESP8266, ESP-WROOM-02, ESPr Developer トラブルシューティングまとめ

以上です。
どうですか?
このクセのあるデバイス ESP-WROOM-02 がとても使いやすくなっていると思いませんか?
これで、他の電子工作の実験が早くできそうです。
ということで、このスイッチサイエンスさんのESP-WROOM-02開発ボードの使い方をザッと紹介しました。
もっとイイ使い方があったらまたご紹介する予定です。
因みに、WebSocket通信のソースコードも近々ライブラリ化する予定ですので、しばらくお待ちください。

ライブラリ作成しました!!
最新記事ではバージョンアップして、格段に使いやすくなりました。LEDを3つコントロールできて、WebSocket通信がサクサク動きます。
現在BETA1.51です。
https://www.mgo-tec.com/blog-entry-easywebsocket-beta13.html

 

Amazon.co.jp 当ブログのおすすめ

スイッチサイエンス ESPr Developer 32 Type-C SSCI-063647
スイッチサイエンス
¥2,420(2024/03/28 13:45時点)
ZEROPLUS ロジックアナライザ LAP-C(16032)
ZEROPLUS
¥22,504(2024/03/28 20:55時点)
Excelでわかるディープラーニング超入門
技術評論社
¥1,700(2024/03/28 09:40時点)

コメント

  1. Manabu より:

    楽しく拝見させていただいてます。早速購入しました。
    ESP FLASH DOWNLOAD TOOLでファームウェアのバージョンアップを行ったところ、少々ハマってしまったので、コメントさせて頂きます。Arduino IDEとは関係なく申し訳ありません。
    ESP FLASH DOWNLOAD TOOLでSTARTボタンを押す前に、IO0スイッチを押した状態で、RESETボタンを押して離し、IO0スイッチを押した状態のまま、ESP FLASH DOWNLOAD TOOLのSTARTボタンを押さないと、ファームウェアの書き込みが出来ませんでした。
    週末にArduino IDEとWebSocketを試したいと思います。

    • mgo-tec mgo-tec より:

      記事をお読みいただき、ありがとうございます。
      実は、私もファームウェアアップデートはハマリまして、GPIO#0を押したまままにしなければいけないことは体験していました。ただ、アップデート開始したらボタンを離しても問題なかったと思います。押したままだとちょっと辛いですからね。
      ただ、それでも私の方はうまくアップデートできなかったんです。
      ですから、それの方法について記事を書けなかったんです。
      ただ、ATコマンドは最近殆ど使っておらす、Arduinoスケッチを直に書き込んでいるので、アップデートしなくてもいいかな・・・、と思ってます。
      Arduino IDE でスケッチを書き込むときは、「WebSocketライブラリ、ベータのベータバージョンを作ってみました」記事でも書いてありますが、IDEのESP8266ボードをStagingバージョンにして、「ツール」メニューの「Reset Method」をnodemcuにすると、GPIO#0やリセットスイッチを押さなくてもバンバン書き込めます。Stableバージョンでも、SPIFFSファイルシステムを使わなければ、同じように書き込めます。FLASH DOWNLOAD TOOL使用に限ってはスイッチサイエンスさんの開発ボードはほんの少しだけ使いにくいかも知れませんね。その他は格段に使いやすいですが・・・。

      • otto より:

        FLASH DOWNLOAD TOOLでのファームウェアアップデートですが、STARTボタンを押した直後にリセットパルスが一瞬出て
        ファームウェアの書き込みモードが解除されてしまいます。
        (オシロで確認しています)
        よって、対策としては GND-RESET間に0.1uFのセラコンを
        入れる事で解決します。Arduino IDEからの書き込みも問題ありません。
        開発ボードもArduino互換ボードも同じ回路なので同様の対策で
        OKです。

      • otto より:

        ESP FLASH DOWNLOAD TOOLでファームウェアのバージョンアップ
        ですが、STARTボタンを押した直後に一瞬リセットが掛かり
        ファームウェアの書き込みモードが解除される事をオシロで確認しました。
        これがファームウェアの書き込みに失敗する原因です。
        対策としては、GND – RESET 間に0.1uFのセラコンを接続する事で解決します。

        Arduino IDE でスケッチを書き込む時も問題無い事を確認しています。
        ESP-WROOM-02開発ボードおよびESP-WROOM-02 Arduino互換ボードは同じ
        回路ですから対策は同じ、GND – RESET 間に0.1uFのセラコンを接続する、でOKです

        なお、ESP DOWNLOAD TOOL は、Ver2.4を使いました。

        スイッチサイエンスさんの検証が不十分だと感じました。

        • mgo-tec mgo-tec より:

          コメント投稿ありがとうございます!!!
          とても有益な情報、感謝いたしますm_ _m
          へぇ~、そうだったんだ・・・と感心してしまいました。
          やっぱり不具合の時はオシロで確認が原則でしたね。自分も反省です・・・。
          しばらく当方では不具合が無く、FLASH DOWNLOAD TOOLも使っておりませんでした。
          今取り込み中の作業が終わったら是非試してみたいと思います。
          結果が分かり次第、コメントか記事でお知らせしたいと思っています。

  2. pikapika より:

    ありがとうございます。参考にさせていただいてます。
    ESP-WROOM-02 開発ボードを購入し早速Hello Worldをコピペし
    コンパイルしてみたところ何度やっても
    exit status 1
    ‘Ini_HTTP_Response’ was not declared in this scope
    が出て書き込みまで至りません。
    IDEはccの1.6.7でATコマンドまでの確認はできています。
    ソースはSSIDとパスワードを書き換えただけです。
    (仕様ぽいですがLチカを書き込んだらATコマンドが使えなくなってますが)
    なにかアドバイス有りませんでしょうか?
    よろしくお願いします。

    • mgo-tec mgo-tec より:

      pikapikaさん

      コメント有難うございます。
      早速、Arduino IDE ver 1.6.7 で試してみました。
      当方でも同じ症状が確認できました。

      やはり、ESP8266ボードを使用する場合は Arduino IDE 1.6.5 でないと動かないようです。
      過去のバージョンは以下のアドレスからダウンロードできます。
      https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

      1.6.5 で再度試したら問題なく動きました。
      GitHubのArduino core for ESP8266 WiFi chip ページでも1.6.5を推奨しているようです。
      当方のIDEリンクページでも1.6.7のページへ誘導していたのが悪かったですね。
      即訂正します。失礼いたしました。

      ちなみに、現在のESP8266ボードのバージョンではツールメニューの Reset Method は “nodemcu” にしておくと、リセットボタンを押さなくても書き込めます。

      では、これで試してみて、まだ不具合ありましたらご連絡ください。

    • mgo-tec mgo-tec より:

      pikapikaさん

      もう一つ答え忘れてました。

      ESP8266ボードをインストールして、Arduinoスケッチを書き込むと、ATコマンドは使えなくなります。要するにESP-WROOM-02が全てArduino化してしまったわけです。
      もし、またATコマンドに戻りたい場合はATコマンド仕様フラッシュに書き換えなければなりません。
      その戻し方は当ブログでは紹介しておりません。ネット検索するといろいろなサイトで見つかると思いますので、ご確認してみてください。

  3. pikapika より:

    早速、確認いただきありがとうございました。
    1.6.5で問題なく動作しました。
    ようやく第一歩が踏み出せた気がします。
    これからも拝見させていただきますのでよろしくお願いします。

    • mgo-tec mgo-tec より:

      pikapikaさん

      動いて良かったですね。
      でも、1.6.5 限定という仕様もなんとか改善してほしいと個人的に思ってます。

      これからも当ブログをよろしくお願いします。

  4. Masa より:

    素晴らしい記事をありがとうございます!
    私はMAC PROで行いましたが、全く問題なく無事にHello worldがでました!
    スムーズにできて感動しております。

    1点だけ、IPアドレスをたたき、Hello worldが出た後、
    再度リロードで表示させようとすると、アクセスできなくなります。
    リセットボタンを押すと同じようにアクセスできるのですが、
    2回目以降のrequestを受け付けません。
    何か原因などわかりましたら、ご教授いただけると幸いです。

    • mgo-tec mgo-tec より:

      Masaさん

      仕事中でお返事遅くなり申し訳ございません。
      MACで動くかどうか心配だったのですが、動いて安心しました。
      ご報告ありがとうございます。

      さて、Hello Worldプログラムの再接続は想定してませんでした。
      すぐに次のステップに進むだろうと思い込んでました。
      大変失礼いたしました。

      ブラウザのURL入力欄で再接続できるようにするためには、
      88行目のIni_html_on = true; を
      Ini_html_on = false;
      と変更すれば、再接続できると思います。
      試してみてください。

      • Masa より:

        お返事いただいてありがとうございます!
        falseにすると、まさにwebサーバとなりました!
        素敵な記事をありがとうございました。
        これからも拝見させていただきます。
        よろしくお願いします。

        • mgo-tec mgo-tec より:

          Masaさん

          再接続できて良かったです。
          こちらこそ、これからもどうぞよろしくお願いします。

  5. 船長 より:

    こんばんわ。
    私もボードを入手してやり始めました。楽しいですね。
    ところで、”‘Ini_HTTP_Response’ was not declared in this scope” エラーですが、呼ばれる関数がメインルーチンの後にあるから出るようです。IDEは1.6.7で、後方参照に対するコンパイラのチェックが厳しいんでしょうね。

    解決法は、呼ばれる関数をメインのloop() より前に置けばいいだけです。無事コンパイル通って表示できました。

    もっと大きなプログラムなら、関数はライブラリ化して、最初にインクルードするというスタイルだから、なのかもしれませんね。
    では。

    • mgo-tec mgo-tec より:

      船長さん

      いろいろとバタついていてお返事遅くなり、申し訳ございません。

      もの凄く有益な情報ありがとうございました。
      早速、私も1.6.7 で void Ini_HTTP_Response(); をloop()の前に置いてコンパイル実行してみました。
      見事! 問題なく動きました!!
      昔ながらのC言語と同様の方式に変わったんですね・・・。

      他のサンプルスケッチで見てみたら、何でメインループの前に関数宣言を置いているのか疑問だったんです。
      1.6.7の仕様をちゃんと読んでませんでした。

      これから、1.6.7も視野に入れながら開発していきたいと思います。
      ありがとうございました!!!

    • mgo-tec mgo-tec より:

      船長さん

      Arduino1.6.8 でも問題なく動作するようになりました。
      以下の記事で紹介しております。
      Arduino15フォルダなどを削除して再インストールすればOKということが分かりました。
      https://www.mgo-tec.com/blog-entry-wroom-arduino-ide168.html

  6. kato より:

    mgo-tec様

    ブログを拝見させて頂きESP-WROOM-02 開発ボードを利用しているのですが、ESP-WROOM-02にスケッチの書き込みが出来なくなってしまいまいした。
    もし宜しければココを確認するなど良いなど御座いましたらご指摘頂けると幸いです。

    ###エラー内容
    スケッチ例のBlinkを書き込もうとした場合
    “`
    スケッチが プログラムストレージ領域の 219,219バイト (50%) を使用しています。最大は 434,160バイト です。
    グローバル変数が 31,416バイト (38%) の 動的メモリを使用しており、ローカル変数に 50,504 バイトが残っています。最高は 81,920バイトです。。
    Uploading 223360 bytes from to flash at 0x00000000
    erasing flash
    size: 036880 address: 000000
    first_sector_index: 0
    total_sector_count: 55
    head_sector_count: 16
    adjusted_sector_count: 39
    erase_size: 027000
    espcomm_send_command: sending command header
    espcomm_send_command: sending command payload
    setting timeout 15000
    setting character timeout 150
    done
    setting timeout 1
    setting character timeout 1
    done
    warning: espcomm_send_command: didn’t receive command response
    warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
    closing bootloader
    error: espcomm_upload_mem failed
    “`

    error: espcomm_upload_mem failed との事なので書き込みが出来ていないのかなーと。
    ※error: espcomm_open failedのエラーはないのでopenは出来ているのかなーと。

    電源はPCからのUSBですが先日まで同条件で行っていたので、大丈夫かとは考えていますが。。。

    • mgo-tec mgo-tec より:

      katoさん

      当ブログをご覧いただきありがとうございます。
      このエラーは初めて見ました。
      もう一度Arduino IDE のボードマネージャーの設定を見直してみてください。
      マイコンボードが Generic ESP8266 になっていますでしょうか?
      FLASHサイズもできるだけ大きい値にしてみてください。
      特にReset Method が nodemcu になっていますでしょうか?
      その他の設定も再確認してみてください。
      ボードマネージャーでインストールしたものを一旦削除して、最新ボード(2016/4/12現在で2.1.0)でインストールし直してみてください。

      また、ESP-WROOM-02 のシリアル入出力端子に何か別のものが接続されているとアップロードできませんので抜いてください。TXD, RXDという端子です。

      それでもダメなら、USBの電流供給量が足りないかもしれません。
      または、Arduino IDE 1.6.5 ならば、以下のリンクページを参照していただき、IDE 1.6.8 にしたら上手くいく可能性があります。
      https://www.mgo-tec.com/blog-entry-wroom-arduino-ide168.html

      それでもダメなら、もしかしたらハードが壊れているかも・・・。
      今、私が思いつく対処はこんなところですが・・・。

  7. kato より:

    mgo-tec様

    ご返答有難う御座います。
    以下確認しました。
    Generic ESP8266 になっていますでしょうか?
    > はい。Generic ESP8266となります。

    FLASHサイズもできるだけ大きい値にしてみてください。
    > いくつかの変更してみましたが結果変わらずですね。。。

    Reset Method が nodemcu になっていますでしょうか?
    > “nodemcu”となります。併せて手動?の”ck”にしてio0のon, offでも試しましたが結果変わらず。。。

    最新ボード(2016/4/12現在で2.1.0)でインストールし直してみてください。
    > 再インストール及び再起動してみましたがダメでした。。。stable, staging両方試したり、バージョンを下げたのを試したりも行いましたがダメでした。。。

    ESP-WROOM-02 のシリアル入出力端子に何か別のものが接続されているとアップロードできませんので抜いてください。TXD, RXDという端子です。
    >全ての入出力端子を抜いて、USBで本体とPCがのみがつながっている状態となります。

    その他として
    USBポートを変えてみたり、USBケーブルを変更してみましたがダメでした。。。
    電流の供給量を計る物を持っていないので何ともですが、2-3日前までPCからの供給で書き込み出来ていたので同じ状況なので大丈夫かなーと考えておりますが。。。

    Arduino IDE 1.6.5 ならば、以下のリンクページを参照していただき、IDE 1.6.8
    >1.6.5でしたので1.6.8をインストール及びボードも再インストールなど一通り行いましたがダメでした。
    1.6.5と1.6.8の変わった点として
    “`
    warning: espcomm_send_command: didn’t receive command response
    warning: espcomm_send_command(FLASH_DOWNLOAD_BEGIN) failed
    closing bootloader

    “`
    1.6.5の時は最後に表示されていた”error: espcomm_upload_mem failed”の表示がなくなりました。
    ※出力されるエラー内容は同じです。

    やはりハードが壊れている可能性が高いですかね。。。
    色々ご指摘頂き本当に有難う御座います。

    • mgo-tec mgo-tec より:

      なるほど・・・。
      すべて効果無しでしたか・・・。

      メッセージから見ると、肝心のチップのESP8266が起動していない感じですね。
      USBにプラスして電流容量に余裕のある(例えば1Aくらい)ACアダプター外部電源からも供給してみるとかでしょうか・・・。
      (スイッチサイエンスさんのホームページではVINに 3.7V~6V とあります。)

      また、もうすでに試していると思いますが、Reset Method を”ck” にして、IO0のスイッチを押しながら書込みをしてみてください。書込みが終わるまで、押しっぱなしです。

      あとは、他の方がブログ等で挙げている方法でFLASHダウンロードツールを使用してファームウェアをアップデートしてみるしかないでしょうか。
      これについては現段階では私はまだ試しておりませんので、アドバイスできずに申し訳ありません。

      それでもダメなら、ちょっとお手上げですね・・・。
      これでお力になれなかったら申し訳ございません。

      • mo より:

        kato様と同じ症状で悩まされていましたが、
        mgo-tec様の忠告の「IO0のスイッチを押しながら書込み」で
        書き込みすることができました。

        ありがとうございました。

        • mgo-tec mgo-tec より:

          moさん

          コメントありがとうございます。
          使われているESPr Developer にRev.3 の印刷があるものでしょうか?
          そうだとすると、katoさんと同じ症状は特殊というよりか、何か原因がありそうですね。
          IO0スイッチを「押しながら書き込み」で全て解決できれば良いのですが、それ以外はちょっと分からないですね。

          • mo より:

            mgo-tec様

            ESPr Developer にRev.3 の印刷があります。
            開発ボードもそうですが、ESP8266は個体差というか製品ごとに癖?があるような気がします。
            すぐにうまくいくものと、ATコマンドやらリセットなど散々試してうまくいくものなど、一様ではない印象を受けています。

          • mgo-tec mgo-tec より:

            moさん

            そうですか・・・。
            動作が安定しない原因は、USBから供給される電流が少ない場合があります。
            例えば、USBハブを使っている場合は電流量が少ないので動作が不安定になるようです。
            時には300mAを超える場合がありますので、必ずパソコンのUSBポート(MAX 500mA)に直挿しするか、大容量モバイルバッテリーに接続するか、スマホ充電器を使うと動作が安定すると思います。

            それでも動作がおかしい場合は、私にはお手上げです。
            私も4台くらいESPr Developer を使っておりますが、全て安定動作しております。
            (最近はATコマンドは全く使っておりませんが・・・)

  8. xion より:

    記事大変参考になりました!

    私も,先日ESP-WROOM-02開発ボードを購入してArduino環境で遊んでいます.

    環境は

    Mac OSX Yosemite 10.10.5
    Arduino IDE 1.6.9
    ESP Community 2.2.0
    ESP-WROOM-02

    なのですが,Reset Method:nodemcu
    を設定しても手動で書き込みモードにしないと書き込めません.
    いろいろ,サイトを見たのですが解決方法が見つかりませんでした...

    もし,解決方法を知ってい方がいましたら教えてください.

    • mgo-tec mgo-tec より:

      xionさん

      コメント投稿ありがとうございます。
      ですが、残念ながら私はMACは持ち合わせておりません。
      すべてWindowsPCなんです。
      ですから、MAC環境は全く分からないんです。
      お役に立てず申し訳ございませんm_ _m

  9. fuyacho より:

    mgo-tec様

    ブログを拝見させて頂きESP-WROOM-02 の練習をやろうとしていますが、初めでつまずいてしまいました。ARDUINO 1.6.10をインストールし(1.6.8が見つからないため)、”ツール”→”ポート”と進もうとしたら、”ポート”という項目が見当たりません。”Upload speed”の下の項目は”シリアルポート”となっています。また、1.6.10では”ツール”の下に”Debug Port”とか”Debug Level”とかの項目が追加されています。この辺を適切に選択する必要があるのか。。。。

    本ブログの”お知らせ”に1.6.10動作確認したとありますが、その手順を教えて頂けませんでしょうか?

    以上、よろしくお願いいたします。

    • mgo-tec mgo-tec より:

      fuyachoさん

      当ブログをご覧いただきありがとうございます。
      大変スミマセンでした。
      ATコマンドの記事の画像が古かったので、たった今1.6.10の画面に差し替えました。
      ATコマンドに関しては、Debug port などは設定しなくてもよいです。
      シリアルポートののみを使います。

  10. fuyacho より:

    fuyachoです。

     USBケーブルをWINDOWSPC->USBHUB→(USB CABLE)→ESP-WROOM-02と接続していたのを、

    WINDOWSPC→ESP-WROOM-02としたらCOMポートがToolの下に出てきました。

    またトラブったら教えてください、今回は自己解決でした。

    fuyacho

    • mgo-tec mgo-tec より:

      なるほど・・・。
      USBハブを使う方もいらっしゃることを考えてませんでした。
      確かに、USBハブは電源供給が足りないので、COMポート認識しない可能性が大きいですね。
      記事に注意事項として追加しておきました。
      ご指摘ありがとうございました。

  11. 鈴木 より:

    電子工作初心者ですが、参考にさせていただき助かってます。
    ESPr One+AruduinoIDEで遊んでます。

    基本的な質問で恐縮なのですが、
    スマホとかで周りのWi-Fi APを探したとき、ESPr One自体が
    「ESP_082EDC」とネットワーク選択一覧に出てしまうのですが
    AP機能を無効にか、ステルスモードにするか、SSIDパスワード
    を設定するか、したいのですが、方法をご教示いただきたくお願い申し上げます。

    • mgo-tec mgo-tec より:

      鈴木さん

      当ブログをご覧いただき、ありがとうございます。

      ATコマンドで制御する場合は、Wi-Fiアナライザーなどで見るとアクセスポイントとしてESP_…と出ますね。
      今、私は全くATコマンドを使用しておらず、ESPrにArduino IDEに直接スケッチを書き込んでいます。
      その場合、ESPr自身がアクセスポイントになるモードのスケッチを書き込むとWi-Fiアナライザーで検知しますが、ステーションモードというものでスケッチを書き込むと検知しません。
      このブログでは殆どステーションモードで紹介しております。
      (EasyWebSocket でAPモード対応した記事もあります)
      ATコマンドよりも直接スケッチを書きこんだ方が遙かに使い勝手が良いですよ。
      この記事より先では、SSIDとパスワードを入力できるスケッチも沢山ありますので、よろしかったらご覧ください。
      例えば、これ→ https://www.mgo-tec.com/blog-entry-easywebsocket-beta13.html
      ちなみに、ステルスモードは使ったことはありません。

      もし、何かわからないことがあれば、コメントくださいませ。

  12. 鈴木 より:

    ご回答ありがとうございます。
    私はネット上の例題を真似てESPrにArduino IDEに直接スケッチを書き込んでるつもりなのですが。。。ステーションモードというものを手掛かりにもう一度見直してみます。

    • mgo-tec mgo-tec より:

      そうですか・・・。
      当ブログで紹介している記事のソースコードでコンパイルしても、Wi-FiアナライザでESP_082EDCというSSIDが出るようだったら、よろしかったらその記事を教えてください。
      こちらでも試してみます。

  13. bolcof より:

    mgo-tec様

    ブログとても参考にさせていただいています。
    ESP-WROOM-02を2台使ってラジコン的なものを作ろうとしています。

    しかし双方向通信をしようとしてWebSocketを使った際、どうしても「WS.close.DisConnected」と出てしまい、ブラウザとの通信ができません…。
    WROOM-02に書き込んだHTMLは正常に表示されていて、シリアルモニタにも解説と違うような表示はなさそうです。
    同じLANにつないでいて、IPアドレスも間違ってはいないと思うのですが、何かエラーの心当たりございますでしょうか…?

    使っているのは
    ・Arduino 1.6.5
    ・ESPr Developer
    ・iPhone6のSafari
    です。

    • mgo-tec mgo-tec より:

      bolcofさん

      当ブログをご覧いただき、ありがとうございます。
      ESPr Developer 2台でラジコンということは、間にルーターを通して通信するということでしょうか?
      それとも、SoftAP モードを使ってルーターを介さないで通信するということでしょうか?

      ブラウザにESPrから送ったHTMLページが表示されているのだとしたら、WebSocketだけの問題です。
      EasyWebSocketライブラリを使っていますでしょうか?
      使っているのならば、忘れがちなのは spiffs_01.txt ファイルの
      ws://xxx.xxx.xxx.xxx
      のところのIPアドレスを変えることです。

      その他、iOS Safari は残念ながらWebSocket通信が良く途切れます。
      EasyWebSocket はSPIFFSファイルシステムを使う最新版バージョンは1.39です。
      それを使うと途切れが少なくなります。
      Androidの最新スマホでGoogle Chromeならば殆ど途切れません。
      iOS版Google ChromeはSafariと変わらずWebSocketは途切れやすいです。
      やはりOSが問題なんでしょうか・・・。

      Arduino IDE も最新バージョンを使って、ESP8266ボードも最新のものをインストールすると若干解消されます。
      Arduino IDE を再インストールして、ボードマネージャーで最新のESP8266ボードをインストールする場合には気を付けていただきたいことがあります。
      Windowsの場合、Arduino15フォルダを削除してからインストールすることです。
      それに関しては以下の記事を参照してください。
      https://www.mgo-tec.com/esp8266-board-install01-html

      それでも動かない場合はまたコメントお待ちしております。

      • bolcof より:

        mgo-tec様

        せっかく返信いただいたのに返答遅くなりすみません…。
        コメントを見失っていました。

        少し距離があるので、間にルーターを通して通信するつもりでした。
        これ以前の記事を読んでうなっていたので、EasyWebSocketを使って頑張ってみます!

        ブラウザなどについても詳しく教えていただきありがとうございます!!!

        • mgo-tec mgo-tec より:

          bolcofさん

          いえいえ、逆にご返信ありがとうございます。
          EasyWebSocket 是非試してみてください。
          ちゃんと動いてくれることを願っております。

  14. 匿名 より:

    Arduinoスケッチをフラッシュに直接書き込み、ESP-WROOM-02をArduino化する
    ESP WR002M-02 開発Module(swcience rev.4購入)使用して
    Board のip address を取得後、pc ブラウザ上でip addressを記入しても
    ブラウザ(Micro Soft Edge使用)->ESP BoardとConecting できないみたいです。
    なにが原因なのか教えていただけないでしょうか。
    尚、IDE Tool 上のBoard Maneger 上、Board Generic Esp 8266を指定し
    設定は下記のようです。
     ①Flush Mode:”QIO”
    ②Flush Freq:80Mhz
    ③pc Freq:80Mhz
    ④Flush Size:4M(3MSPIFs)
    ⑤Debug Port:Serial
    ⑥Debug Level:なし
     ⑦Reset Methode:nodemcu
    ⑧UpLoad Speed:115200
    で設定し、Compile 完了
    Program 動作 :IP Address 取得できていますが
    ブラウザでip Address 記入後、ESPWR002M とConnecting出来ないようです。
    以上、宜しくおねがいします。

    • mgo-tec mgo-tec より:

      匿名さん

      記事をご覧いただき、ありがとうございます。

      当方でも確認したところ、Microsoft Edge ではセキュリティが高く、表示できないようです。
      アドレス入力欄に about:flags と入力して、
      「ローカルホスト ループバックを許可する 」
      にチェックしても、表示できませんでした。

      Microsoft Edge は電子工作ユーザーには上手くできないことが多くて、私も困りました。

      お勧めブラウザは Google Chrome です。
      私はスマホもPCも全てこれを使ってます。
      これでも動作しない場合はまたご連絡ください。

  15. fulta より:

    mgo-tec さんおいそがしいなかありがとうございました

    残念ながら、サーチを延々繰り返すだけで、void Ini_HTTP_Response()の中身を実行してくれないようです。

    又、基本的なところでもうしわけありませんがGoogle Chromeでも動作しない点と、動作メカニズムにつきまして教えていただけませんでしょうか。

    program で取得したip addressの参照先はESPr Developper ですので
    Flush Memory に書き込んだprogram 以外ないようにおもいますので
    program 上の void Ini_HTTP_Response()の中身の
    HTTPテキストまたわ、絵文字を見つけたらの条件を満たさないような気がしますが、基本的なことでもうしわけありませんがどのように解釈すればよいか教えていただけませんでしょうかよろしくおねがいします。

    • mgo-tec mgo-tec より:

      そうですか・・・。

      おそらく、そちらのネットワーク環境が問題の可能性があります。
      もしかしたら、ご自分のルーターのファイアウォールに引っかかってしまっているかもしれませんので、そちらも確認してみてください。

      また、ルーターに MACアドレスフィルタリングがかかっている場合も考えられます。

      また、Windows10 ならば、
      ウィンドウアイコン → 設定 → ネットワークとインターネット → 共有の詳細オプションを変更する
      の中の
      「ネットワーク探索を有効にする」」
      にチェックが入っているか確認してみてください。

      動作メカニズムは、http通信ハンドシェイクと同じです。

      1.ルーターのアクセスポイントにコネクション。
      2.loop関数内で、ブラウザからのコネクションを待っています。
      3.ブラウザにURLを入力することによって、ESPr Developer にGETリクエストが送信される。
      4.client.available() が true になる。
      5.client.readStringUntil関数で、文字列を改行(‘\n’)まで読み込む。
      6.文字列中に GET / HTTP か、GET /favicon という文字列があったら、リクエストがあったと判断する。
      7.文字列を最後まで全て読み込む。
      8.その後、レスポンスヘッダ(HTTP/1.1 200 OK…etc)をブラウザへ送信。
      9.レスポンスヘッダの後、空行(\r\n\r\n) を送信。
      10.その後すぐに HTMLタグを送信。
      11.コネクションを必ずクローズする。

      以上です。
      これでも接続できない場合は、そちらのネットワークセキュリティが高すぎる可能性があり、当方では分からないかもしれません。
      また何かありましたらご連絡ください。

    • mgo-tec mgo-tec より:

      因みに、Windows10 Edge では、
      アドレス入力欄に about:flags と入力して、
      「ローカルホスト ループバックを許可する 」
      にチェックして、
      アドレス入力欄に IP アドレスを1回目入力しても何も表示されず、直ぐにもう1回入力したら、「Hello Wold」表示できました。

  16. fulta より:

    mgo_tec さんいつも忙しい中、回答いただきましてありがとうございます。
    やはりご指摘のようにWiFi環境が問題のようです。
    当方でしらべましたかぎり、下記の問題があります。
    私の環境ではespwr002mはESP_2A0009と認識されておりまして
    確かにInternetにつながりますが、ESP_2A0009をNETWORK接続しますと
    BuffaloRuterのip address 198.168.11.1が切断されまして、使用しています
    ブラウザのすべてがつかえなくなります->Ruterの根本がoff になるので
    当然かとおもいますが、ESP_2A0009をOFF すると、全てのブラウザは復活します。
    Program でip addressを取得しても、ESP_2A0009 ONではBUFFALOの
    大本が遮断されますから通信ができません。
    BUFFALO に問い合わせて、ESP_2A0009がOFF の状態では
    Internet 接続も正常にできる事からESPの使い方に問題があるのでは
    という指摘をうけてしまいました。
    尚、Security soft のFire Wall の影響も確認しましたが(Security Soft off)
    の状態でも、症状は改善されません。
    共存させる方法がありましたら、是非教えていただけませんでしょうか
    宜しくお願いいたします。

    • mgo-tec mgo-tec より:

      fultaさん

      お返事おそくなり、すみません。
      もしかしたら、ルーター、あるいはネットワークの設定で、接続できるデバイスの数を1台とかにしてしまっていたら、そうなるかも知れません。
      ESPr Developer は、ブラウザからのGETリクエストがあったら、通常よくあるWEBページを表示していだけなので、ESPr Developer の問題ではないような気がします。
      ただ、ESPr Developer Rev4 は試したことが無いので何とも言えませんが・・・。

      あと、もう一度、ルーターの詳細設定を見直していただき、あと、Windows のコントロールパネルのネットワーク設定を見直していただくとしか言えないです。
      謎ですねぇ・・・。

      私もいろいろ調べてみて、分かったらお知らせします。

  17. UNO_ONU より:

    こんにちは。

    こちらのブログを参考にして、無事に HelloWorld! できました。
    本当に感謝です。
    これから、ESP8266で何が出来るか自分でもわかりませんが、牛歩のごとく学び、疾風のごとくエラーに悩まされることになりそうです。

    ありがとうございます。

    • mgo-tec mgo-tec より:

      UNO_ONUさん

      当ブログをご覧いただき、こちらこそありがとうございます。

      動いて良かった!!!
      うまく繋がらない方がいらっしゃったので、他の方の環境ではどうなのか心配でした。
      ご報告、感謝いたします。
      m(_ _)m

  18. doppycat より:

    ESP8266初心者です。
    詳しい解説サイトありがとうございます。
    手順通り作業して、コンパイル後に間髪入れずにシリアルモニターを立ち上げても文字化けしたものがしばらく流れその後・・・・が延々と続くだけでローカルIPアドレスの取得ができません。
    いかんせん初心者なので大きな見落としなどあるのかもしれませんがご教示いただければ幸いです。
    IDEは最新の1.8.2
    WROOM-02はスイッチサイエンスさんの開発ボードRev.4
    を使用しています。

    • mgo-tec mgo-tec より:

      doppycatさん

      当ブログをご覧いただき、ありがとうございます。

      ….が永遠と続くというのは、Wi-Fiルーターに接続できていないと思われます。
      SSID および パスワードをもう一度確認してください。
      それと、ルーターのセキュリティで弾かれてしまっている可能性があります。
      MACアドレスフィルタリングが影響している可能性もあります。

      また、ルーターの設定によっては、接続できるデバイスの最大数を超えてしまっているかもしれません。
      その場合、ルーターの接続数を増やすなどの設定が必要です。

      以上を見直してもダメならまたご連絡ください。

      • doppycat より:

        早々のご回答ありがとうございます。
        ルーターに依存する部分もあるとのことですので参考になります。
        時間をかけて見直してみようと思います。

  19. spring より:

    突然で大変失礼致します。ESP-WROOM-02 開発ボードを2台購入し、互いにUDP通信を行っているのですが、例えば0x81,0x01,0x00,0xFFを送った場合、UDP.parsePacket()では0x00を受け取ることが出来ていません(0x81,0x01のみ受け取れているようです)。SDKなどでは、UDPの初期設定で0x00を受け取れる方法もあるようですが、もし解決策があるようでしたらご教授願います。

    • mgo-tec mgo-tec より:

      springさん

      当ブログをご覧いただき、ありがとうございます。
      ただ、私は UDP で相互通信したことがありません。
      UDP を使ったのは、NTPサーバーで時刻を補正するサンプルスケッチを使ったくらいです。
      私の場合は双方向通信では WebSocket を使っています。

      UDP通信については一から調べないと、正直わかりません。
      スイマセン。
      m(_ _)m
      分かり次第お知らせしたいと思いますが、今、別の仕事で手一杯で少々お時間をいただくことになりますのでご容赦くださいませ。

    • mgo-tec mgo-tec より:

      今、Arduino – ESP8266 の WiFiUDPSendReceiveString サンプルスケッチをザッと見てみました。
      char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
      のところが char 型だと、0x00 は’\0’と同じで、それは文字の終端コードですので、それ以降のデータは無視されると思われます。
      char型文字列は、’\0’までを文字と認識するように規定されています。
      よって、int型に変更してみてはいかがでしょうか?
      ソースコードを見ただけですので、実験して確かめた分けではありませんが、見当違いでしたらスミマセン・・・。

      • spring より:

        mgo-tec様
        ご教授ありがとうございます。所用の為、少し時間がかかりますが、試してみたいと思います。結果についてご連絡差し上げますので、ご参考にして頂ければ幸いです。ちなみにudpなる人物は私の知人で、別途同時期にたまたまご質問させて頂いていたとのことです。ご迷惑をお掛け致しました。

        • mgo-tec mgo-tec より:

          いえいえ。
          なるほど、そういうことだったんですね。
          そういうことでしたら、そのコメント内容は同じですので、削除させていただきます。

          私も取組中の作業が終わり次第、検証してみたいと思います。

          • spring より:

            mgo-tec様
            ご連絡が遅くなりました。
            ・0x00はUDP.parsePacket()のイベントは発生しない(戻り値なし)
            ・上記戻り値を無視して、UDP.read()で読み出しを試みたが、やはり0x00は受け取れていない。
            ・ini型にしても結果は同様。
            との結果となりました。

            とりあえず、下記のような暫定対策で何とか出来たので、ご参考にして頂ければ幸いです。
            ■構成
            PC ⇔ 開発ボード ←・・UDP・・→ 開発ボード ⇔ 装置
            ■暫定対策
            ①PC⇔開発ボード間で送られる0x00を、開発ボード内で適当なHEXに 変換。
            ②UDP送信を開始
            ③装置側についている開発ボードで、適当なHEXを0x00に変換。
            ④装置側へSerial通信(Serialなら0x00の送受信は可能)
            言葉足らずの中、ご意見をいただき、ありがとうございました。

          • mgo-tec mgo-tec より:

            springさん

            なかなか忙しくて、UDP を一から勉強するのに時間がかかってしまいました。
            普段、リアルタイム通信は WebSocket を使っているので、突っ込まれるとそれ以上答えられませんが、とりあえず、ザッとやってみました。
            Wi-Fiルーターを介するスケッチですが、以下ならば 0x00 も受信できました。
            送信データは byte型にして、受信側も byte型にしています。

            【送信側 ESPr Developer スケッチ】

            #include <ESP8266WiFi.h>
            #include <WiFiUdp.h>
            
            const char* ssid = "xxxxxxxx";
            const char* password = "xxxxxxxx";
            
            unsigned int localPort = 8888;
             
            WiFiUDP UDP;
            
            static const char *udpReturnAddr = "192.168.0.19"; //送る相手のアドレス。
            static const int udpReturnPort = 8889;
             
            void setup() {
              Serial.begin(115200);
              Serial.println();
             
              WiFi.begin(ssid, password);
             
              while (WiFi.status() != WL_CONNECTED) {
                delay(500);
                Serial.print(".");
              }
            
              Serial.println();
              Serial.println(F("WiFi connected"));
              delay(1000);
            
              IPAddress myIP = WiFi.localIP();
              Serial.println(myIP);
              delay(10);
              
              UDP.begin(localPort);
            }
             
            void loop() {
              byte pBuf[4] = {0x81, 0x01, 0x00, 0xff};
               UDP.beginPacket(udpReturnAddr, udpReturnPort);
                UDP.write(pBuf,4);
                UDP.endPacket();
                delay(3000); 
            }

            【受信側 ESPr Developer スケッチ】

            #include <ESP8266WiFi.h>
            #include <WiFiUdp.h>
            
            const char* ssid = "xxxxxxxx";
            const char* password = "xxxxxxxx";
            
            unsigned int localPort = 8889;
             
            WiFiUDP UDP;
            byte packetBuffer[255];
            
            static const char *udpReturnAddr = "192.168.0.24"; //送信されてくるデバイスのアドレス。
            static const int udpReturnPort = 8888;
             
            void setup() {
              Serial.begin(115200);
              Serial.println();
             
              WiFi.begin(ssid, password);
             
              while (WiFi.status() != WL_CONNECTED) {
                delay(500);
                Serial.print(".");
              }
            
              Serial.println();
              Serial.println(F("WiFi connected"));
              delay(1000);
            
              IPAddress myIP = WiFi.localIP();
              Serial.println(myIP);
              delay(10);
              UDP.begin(localPort);
            }
             
            void loop() {
              int packetSize = UDP.parsePacket();
             
              if (packetSize) {
                int len = UDP.read(packetBuffer, packetSize);
                Serial.print(UDP.remoteIP());
                Serial.print(" / ");
                for(int i=0; i<len; i++){
                  Serial.print(packetBuffer[i], HEX);
                  Serial.print(',');
                }
                Serial.println();
              }
              yield();
            }

            これで、受信側のシリアルモニターに 81, 1, 0, FF と表示されますので試してみて下さい。
            それ以上の質問されると、知らない事ばかりなので、お答えできない場合があります。
            UDP 勉強にあまり時間を割くことができない状態なので、何卒ご容赦くださいませ。

  20. spring より:

    mgo-tec様
    今回の件に関して、自分の勉強不足を痛感致しました。
    頂いたソースコードを基準に手を加えていきたいと思います。
    お忙しい中、ご検討頂き誠にありがとうございました。

    • mgo-tec mgo-tec より:

      いえいえ、これで動いてくれるとイイですね。
      私もこの件を機会に UDP の有用性を実感しましたので、逆に感謝したいと思います。
      ありがとうございました。
      m(_ _)m

  21. kubo より:

    mgo-tec様
    本日、注文していたESP-WROOM-02Dがスイッチサイエンスさんから届き、さっそく本ブログを参考にさせていただきました。非常に助かっております。ありがとうございます。

    ところで、Windows10のGoogle Chromeに”Hello World”を表示させることはできたのですが、URL入力の右にある右回りアイコンで再読み込みをさせると、「192.168.0.9を待機しています…」と出て更新されません(末尾9は勝手に割り当てられた番号)。Chromeのバージョンは69.0.3497.92です。これは、当方の環境だけで起きる事象でしょうか?

    ちなみに、Windows10のIE(version 11.0.85)、iPhone6のSafariでは、この問題は生じておりません。

    何か解決の糸口となるような情報がないかと思っております。以上、よろしくお願いいたします。

    • mgo-tec mgo-tec より:

      kuboさん

      記事をご覧いただき、ありがとうございます。

      私はもう ESP32 や M5Stack ばかり開発していて、ESP-WROOM-02 ( ESP8266 )の開発はしばらく手を付けいない状態です。
      1年前頃からでしょうか。
      Flashが 4MBから2MBに仕様が変更されてから、もうESP8266には戻れなくなってしまいました。

      とりあえず、私が試したところ、Google Chrome ver 69.0.3497.92 でも問題無く動作していました。
      ただ、ESP-WROOM-02D というものは使ったことが無いので、それで動作するかどうかわかりません。

      また、とりあえず、この記事のスケッチを修正してみました。
      </font>が無いことに気が付きました。
      それと、念のためbody要素も加えました。
      それと、client.stop()の前後にdelay(10)を入れてみました。

      これで、私の環境では、Windows 10 PC上の Google Chrome ver 69.0.3497.92 で問題無く動作しています。
      Arduino IDE は 1.8.6
      Arduino core for the ESP8266 のバージョンは 2.4.2
      ブラウザの更新ボタンも問題ありません。
      Microsoft Edge でも問題無く動作していました。

      これで試してみて下さい。

  22. kubo より:

    mgo-tec様

    早速のご返答ありがとうございます。ご提案に基づいてスケッチを修正したところ、「待機」の頻度は減りましたが、完全には無くなりませんでした。そこで、Windows7のChromeで動かしたところ、「待機」は全く出ていません。ちなみに、EdgeはOKです。ということで、Chrome側に問題があるようです。

    ありがとうございました。
    追記:ESP8266で一区切りがついたら、ESP32でトライしようと考えています。

    • mgo-tec mgo-tec より:

      kuboさん

      良く分かりませんね。
      何でしょうかね?
      もしかしたら、Chrome 拡張機能で、セキュリティーソフトをインストールしているせいかも知れません。
      私は、ブラウザは Google Chrome しか使いませんので、Chrome が使えないというのは困ってしまいます。
      原因が分かったら教えて頂けるとありがたいです。

  23. ita より:

    mgo-tec様

    電子工作初心者ですがご指導お願いします。
    ESP-WROOM-02 開発ボード(swcience rev.4)でArduinoシリアル経由によるATコマンドで、
    自宅WiFiルーター接続しURLのHTMLGet出来ていました。

    その後Arduino化しました。(自分のミスでやってしまった)
    使用IDE Verは1.8.15です。Windows10です。

    しかしその後WiFi接続が不可となってしまいました。
    その部分のスケッチは

    WiFi.begin(toSSID,ssidPASSWD);
    while (WiFi.status() != WL_CONNECTED){
    delay(1000);
    Serial.print(“.”);}

    でいつまでたってもシリアルモニター………のままです。

    当然 toSSIDと ssidPASSWDは ATコマンドの時と同じだし、Arduino化後の「チップ・メモリ・MACアドレスを読み取る」記事の情報と
    ATコマンドで接続した時のシリアル情報IPアドレスは一致しています。
    WiFi.mode(WIFI_STA);を追加してテストしても同じです。
    WiFi.printDiag(Serial);で出てくる情報は

    Mode: NULL
    PHY mode:N
    Channel:1
    AP id:0
    Status:255
    Auto connect:1
    SSID (0):
    Passphrase (0):
    BSSID set:0

    です。(中身が理解できてません)
    自宅WiFiルーターのDHCP割当数とかIP割当数は超えていないし、WiFiルーターの接続ログにも出ていません。(ATコマンド時は出ていた。)
    ちなみにミニUSBのシリアルドライバーはFTDI社から手動でインストールしています。(ATコマンド時はMicrosoftの標準ドライバー)
    お忙しい所すみません。

    • mgo-tec mgo-tec より:

      itaさん

      お手数をおかけしてすみません。
      コメントに書き込んでいただき、ありがとうございます。

      私の手持ちのESPr Developer dev3 で確認したところ、特に問題無く動作しましたが、Arduino core for the ESP8266が大幅に変わっていて、私自身もどうしたら良いか戸惑ってしまいました。
      環境は以下です。

      ●ESPr Developer Rev.3
      ●Arduino IDE ver 1.8.15
      ●Arduino core for the ESP8266 stable v3.0.2

      以下のボード設定で行いました。

      ボード:"Generic ESP8266 Module"
      Builtin Led: "2"
      Upload Speed: "921600"
      CPU Frequency: "160MHz"
      Crystal Frequency: "26 MHz"
      Flash Size: "2M(FS:64KB OTA-992KB)"
      Flash Mode : "QIO(fast)"
      Flash Frequency: "80MHz"
      Reset Method: "dtr (aka nodemcu)"
      Debug port : "Disabled"
      Debug Level: "なし"
      IwIP Variant: "v2 Lower Memory"
      VTables: "Flash"
      C++ Extentions: "Disabled (new aborts on oom)"
      Stack Protection: "Disabled"
      Erase Flash: "Only Sketch"
      Espressif FW: "nonos-sdk 2.2.1+100(190703)"
      SSL Support: "All SSL ciphers (most compatible)"
      MMU: "32KB cache + 32KB IRAM (balanced)"
      Non-32-Bit Access: "Use pgm read macros for IRAM/PROGMEM" 
      シリアルポート: ご自分の環境のUSBポート

      ボード設定については、私もわからないことが多々ありました。
      何となくの設定です。

      なお、こちらの記事のESP8266のチップ情報を使う用途としては、アクセスポイントルーターのセキュリティで、MACアドレスフィルタリングをかけたい場合にESP8266のWiFi機能のMACアドレスを確認するためのものです。
      ですから、MACアドレスフィルタリングしていない場合は、特に確認する必要は無いと思います。

      以上のボード設定でもWiFiに接続できず、ルーターのDHCP最大数を超えておらず、ファイアウォールも問題無ければ、WiFi.begin関数の直前にWiFi.disconnect(true);
      という関数を置いてみて下さい。
      以下の感じです。

      WiFi.disconnect(true);
      WiFi.begin(ssid, password);

      これは、ESP32のトラブルシューティングで、WiFiアクセスポイントにつながらない場合の対処方法例です。
      以上、試してみて下さい。

      • ita より:

        mgp-tec様へ
        お忙しい所お騒がせして申し訳ありませんでしたが、自己解決しました。
        ATコマンド方式のWiFi接続暗号化方式は(WEP)であるが
        ArduinoIDE方式のWiFi接続暗号化方式は(WPA2/WPA)であるらしい。
        それにより自宅WiFiルーター設定が異なるのに
        ATコマンド方式のSSID名とパスワードでArduinoIDE方式へ記載したため、WiFi.status()関数の返り値がWL_NO_SSID_AVAILであった。
        ありがとうございました。

        • mgo-tec mgo-tec より:

          itaさん

          おーー!
          そうだったんですか!
          しばらくATコマンドやっていなかったので、それは知りませんでした。
          長らく更新していませんでしたが、ESP8266トラブルシューティング記事に追加させていただこうと思います。
          逆に教えて頂きありがとうございました。

          ところで、2MBメモリのESP-WROOM-02では、4MB時代に作った私の記事のプログラム(スケッチ)では動かない場合もあります。
          特に、WiFiでSSL通信させる場合はすぐに限界に達しますので、ESP32に移行することをお勧めしますよ~。
          (^^)

  24. teinende より:

    はじめまして。最近ESP-WROOM-02を購入し始めましたが
    TCP/IPやWEBなどの智識がなくうまく動作しません。
    下記のようにATコマンドでPCから直接ESPにアクセスしているのですが、PCのWiFi選択で”ESP8266″を選択するとパスワードを聞かずに接続されます。
    パスワードを有効にするにはどうすれば良いでしょうか。教えていただけるとありがたいです。よろしくお願いいたします。
    設定内容:
    設定:AT+CWSAP_CUR="ESP8266","654321",1,0
    確認:AT+CWSAP_CUR?
       戻り:+CWSAP_CUR:"ESP8266","654321",1,0,4,0
    設定:AT+CIPMUX=1
    設定:AT+CIPSERVER=1,80

    WiFi設定に”ESP8266”が表示されますが、暗号化の所が”-“になっており、パスワードを聞いてきません。(パスワードなしで接続になります)
    コマンド:AT+CWSAP_CUR="ESP8266","654321",1,0
       の:暗号化方式のパラメータを”3”や”2”にして
       みましたが、ERRORになり設定できませんでした。
    よろしくお願いいたします。

    • mgo-tec mgo-tec より:

      teinendeさん

      記事をご覧いただき、ありがとうございます。
      ただ、この記事は2015年の記事ですから、ソフトもハードもかなりバージョンアップしていて、当時の情報ではまともに動かない場合があることをご了承ください。もうATコマンドもすっかり忘れてしまいました。
      個人的な意見で言いますと、ATコマンドよりもESP8266をArduino化して、C言語でプログラミングした方が遙かに簡単で使いやすいですよ。
      Wi-Fiもサクサク動きます。
      Twitter界隈でもATコマンド使っている人は全く見かけませんので、Arduino言語(C言語)の方が情報豊富です。

      さて、ESP8266のWiFiには、ESP8266自体がWiFiルータになるsoftAPモードと、外部ルータに接続できるStationモードという2つのモードがあります。おそらく、APモードの192.168.4.1に接続しているのではないですか?
      その場合、ESP8266自体にパスワード設定していないので、パスワード無しで接続できてしまうと思います。
      softAPモードのESP8266にパスワード設定するには、以下の公式リンクに書いてあります。
      https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Examples/TCP-IP_AT_Examples.html#esp32-as-a-tcp-client-in-single-connection
      これによると、まず、以下のコマンドでsoftAPモードにして、
      AT+CWMODE=2
      その後、接続端末数を決め
      AT+CIPMUX=1
      以下のようにSSIDとパスワードを書き込むようです。
      AT+CWSAP="適当なSSID","適当なパスワード",5,3
      5と3の意味はわかりません。
      これで試してみてはいかがでしょうか?
      なお、softAPモードはWiFi性能があまり良くありませんので、Stationモードで外部ルータを使った方がお勧めですよ。

  25. teinende より:

    mgp-tec様

     お忙しい所、早々のご教示ありがとうございました。
    パスワード、暗号化に関係する所のマニアルを良く見直ししました。
    結果、パスワードの桁数が8桁以上必要でした。
     【AT+CWSAP_CUR="ESP8266","12345678",1,0】
    取り敢えず、これで動作確認してみます。(良かった…)

     お勧めして頂いた”C言語”ですが、私、使用したことがなく サンプル
    など見ていますと、なかなか理解できないところがあり手が出ていない段階です。ですが、前から習いたいと思っていたのでこれを機に少しずつやってみます。(ちなみに”AT”コマンドは昭和の時代に外付けモデムで通信した経験から まずはATで と思った次第です。昭和かよ!でした。)

     ありがとうございました。

    • mgo-tec mgo-tec より:

      teinendeさん

      そういえば、8桁以上でした。すっかり忘れていました。
      これはArduinoのC言語でも同じでした。
      正常に動いて良かったですね。

      追伸:
      昭和ではATコマンドがあったんですね~。ちょっと驚きです。
      (^^)

タイトルとURLをコピーしました