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

記事公開日:2015年11月19日
最終修正日:2017年10月2日

スポンサーリンク

※ ESP-WROOM-02 の Flashメモリサイズが 4MB のはずが、実は 2MB だったという情報がありました。
以下のページを参照して、Flashメモリサイズを確認しておくことを強くお勧めします。

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

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

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

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

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

もちろんスイッチサイエンスさんのページで直売もしております。
かなり売れているようで、在庫切れになっている場合がありますのでご注意ください。
これには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円 くらいになってしまいます。
とすると、ここまでパッケージされていた方が使い勝手がいいですね。

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

ピンヘッダのハンダ付け

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

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

1.USBでパソコンと接続

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

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


SS_wroom02

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

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

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

私はこちらのArduino.cc ページのIDEバージョン 1.8.2 以上を使ってます。
また、日本語 Windows の場合、1.8.2 以上のシリアルモニターでは UTF-8 コード文字列の日本語漢字表記が可能ですが、1.8.1 以下のシリアルモニターは Shift_JISコードですのでご注意ください。

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

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

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

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

SS_wroom-howto05

4.ATコマンドの送受信

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

SS_wroom-howto06

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

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

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コマンド通信は何のトラブルもなく楽チンです。しかも初期立ち上げ以外は文字化けもありません。
これはおすすめボードですよ。

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

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

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

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

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

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

※ ESP-WROOM-02 の Flashメモリサイズが 4MB のはずが、実は 2MB だったという情報がありました。
以下のページを参照して、Flashメモリサイズを確認しておくことを強くお勧めします。

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

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

以下のソースコードをコピペして、Arduino IDEのスケッチへ貼り付けてください。

#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 JavaScript吐き出し
        client.println(F("<!DOCTYPE html>"));
        client.println(F("<html>"));
        client.println(F("<font size=30>"));
        client.println(F("Hello World"));
        client.println(F("</html>\r\n"));
  
        delay(1);//これが重要!これが無いと切断できないかもしれない。
        client.stop();//一旦ブラウザとコネクション切断する。
  
        Serial.println("\nGET HTTP client stop--------------------");
        req = "";
        Ini_html_on = false;  //一回切りの接続にしたい場合、ここをtrueにする。                
      }
    }
  }
}

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

その後、コンパイルするとこのような画面になればOKです。
SS_wroom-howto16
完了したら間髪入れずに即シリアルモニターを立ち上げます。
するとこんな感じに表示されます。
SS_wroom-howto17

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

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

このローカルIPアドレスをスマホブラウザのURL入力欄に下図のように入力します。
SS_wroom-howto18
するとシリアルモニターにはこんな感じで表示されます。
SS_wroom-howto19
これはGoogle Chromeの場合ですが、ブラウザからGETリクエストメッセージを受信しています。
受信したらWROOMからHTTPレスポンスヘッダを含んだHTMLタグをブラウザへ送信して、コネクション切断します。
すると、ブラウザに Hello World と表示されるはずです。
SS_wroom-howto15
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開発ボードを接続してみてください。

SS_wroom-howto11

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

ローカルIPアドレスは予めルーター側で割り当ててあれば問題ないのですが、DHCPサーバで自動割り当てにしている場合はSSIDとパスワードだけ書き換えて、ローカルIPアドレスは”XXX.XXX.XXX.XXX”のままにしておいてコンパイルしてください。
すると、シリアルモニターに下図のように表示されます。
SS_wroom-howto14
このIPアドレスをメモっておいて、再度ソースプログラムスケッチのローカルIPアドレスを書き換えればOKです。

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

そしたら、Google ChromeなどのスマホブラウザのURL入力欄に先ほど打ち込んだご自分のWROOMのローカルIPアドレスを入力するとこのようにLED調光コントロールできると思います。
SS_wroom-howto10
因みに過去の記事にあるように、スマホは出来るだけ最新の高速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です。
こちらのページをご覧ください。2016/7/11
EWS_Beta13_15

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

スポンサーリンク

さらに最新記事ではスマホ写真をWi-Fi送信してフルカラー有機EL ( OLED )に表示させたり、ツイッター記事自動取得やNTP時計、BME280搭載、温湿度・気圧センサーのグラフ表示、WEB連動4連ドットマトリックス電光掲示板電光掲示板も作りました。
以下の記事をご覧ください。

スマホのJPEG写真や画像をWi-Fiで飛ばして OLED ( 有機EL )に表示させてみた

Twitter 検索結果のツイートを有機EL ( OLED )に表示させてみた
twitter_ssd1351_04
NTP時刻・温度・湿度・気圧データのSDカードロガー制作。日本語フォントもSDカードから読み込む
SD_ntp_bme280_ssd1351_05
ESP-WROOM-02 と 極小OLED (有機EL) で Yahooニュース電光掲示板とNTP時計を表示させてみました
ws_OLED_SSD1306_09
自作LED電光掲示板に Yahooニュースや 天気予報 を表示させ、さらに NTP 時計機能追加しました
ws_Yahoo_message04

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







投稿者:

mgo-tec

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

「ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介」への60件のフィードバック

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

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

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

      2. 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を使いました。

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

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

  2. ありがとうございます。参考にさせていただいてます。
    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コマンドが使えなくなってますが)
    なにかアドバイス有りませんでしょうか?
    よろしくお願いします。

    1. 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” にしておくと、リセットボタンを押さなくても書き込めます。

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

    2. pikapikaさん

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

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

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

    1. pikapikaさん

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

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

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

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

    1. Masaさん

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

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

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

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

        1. Masaさん

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

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

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

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

    1. 船長さん

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

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

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

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

  6. 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ですが先日まで同条件で行っていたので、大丈夫かとは考えていますが。。。

    1. 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. 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”の表示がなくなりました。
    ※出力されるエラー内容は同じです。

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

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

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

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

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

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

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

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

        1. moさん

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

          1. mgo-tec様

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

          2. moさん

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

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

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

    私も,先日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
    を設定しても手動で書き込みモードにしないと書き込めません.
    いろいろ,サイトを見たのですが解決方法が見つかりませんでした...

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

    1. xionさん

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

  9. mgo-tec様

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

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

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

    1. fuyachoさん

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

  10. fuyachoです。

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

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

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

    fuyacho

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

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

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

    1. 鈴木さん

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

      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に直接スケッチを書き込んでるつもりなのですが。。。ステーションモードというものを手掛かりにもう一度見直してみます。

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

  13. mgo-tec様

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

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

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

    1. 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

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

      1. mgo-tec様

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

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

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

        1. 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出来ないようです。
    以上、宜しくおねがいします。

    1. 匿名さん

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

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

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

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

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

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

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

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

    1. そうですか・・・。

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

      また、ルーターに 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.コネクションを必ずクローズする。

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

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

  16. 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)
    の状態でも、症状は改善されません。
    共存させる方法がありましたら、是非教えていただけませんでしょうか
    宜しくお願いいたします。

    1. fultaさん

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

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

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

  17. こんにちは。

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

    ありがとうございます。

    1. UNO_ONUさん

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

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

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

    1. doppycatさん

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

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

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

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

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

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

    1. springさん

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

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

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

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

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

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

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

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

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

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

コメントを残す

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

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