ESP-WROOM-02とArduinoで初めてのATコマンド通信

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

https://www.mgo-tec.com/blog-entry-ss-wroom-howto01.html

以下、古い記事のままで、当時は私も初心者で良く分からず、そして現在販売のパーツでは動作しない場合があります。

 

スポンサーリンク

こんばんは。
話題の格安技適認証済みのESP-WROOM-02 (チップはESP8266) とArduino UNO で、やっとATコマンドWi-Fi 通信ができました。
最初はシリアル(UART)通信すらできなくて、故障かと思って放ったらかしてたのですが、
データシートとマニュアルをもう一度見直して、ようやく出来ましたのでご報告します。

これの大きなポイントは電源容量でした。
ESP WROOM-02 は電源が3.3Vです。
ですから、最初はArduino UNO の3.3V電源から取っていたんです。
ですが、シリアル(UART)通信すらできないんです。
ATコマンドをいくらシリアルモニターで入力しても全然ダメでした。
シリアル信号を5Vから3.3Vにロジックレベル変換してもダメでした。
電源起動時に信号が出ているのは確認できたのですが、Arduinoからの信号が全然受け付けてくれませんでした。
そこで、WROOM-02 と ESP8266チップのデータシートをもう一度ちゃんと読み直すと、消費電力のところで、
802.11b転送時に標準値170mAも消費すると書いてありました。
しかも標準値ですから、最大値はもっと消費してるでしょう。
ということは、Ardunoの3.3Vは最大50mAしか出力しませんので、当然動かないわけです。
Ethernet Shield のSDカードも電源容量だったのですが、これに気付くまでにまた時間がかかってしまいました。
シリアル通信だけでもまずはやろうとして、Wi-Fiで通信しなければそんなに電力食わないだろうと思い込んでました。
そこで、秋月さんで購入できる 500mA 3.3V レギュレーターを購入して、Arduinoの5V電源から取ってみました。
そしたらやっとシリアル通信ができたのですが、今度はWi-Fi通信ができません。
これも、ArduinoのUSBだけでは電源容量が足りないのが原因だったんです。
そこで、12V 1A のACアダプターも同時に挿して使いました。
そうしたら、やっと、やっと、Wi-Fi 通信ができました。 長かった・・・。
WROOM-02はamazon さんで購入しました。 マイクロテクニカさんが取扱い店のもので、ハンダ付けがとても大変でした。
今では基板もハンダ付けしてあるものしか販売していないようですので、今から購入する方は気にしなくてよいでしょう。
(※2015年当初とはタイプが異なっています)


では、これの使い方について、私のやった方法をざっと説明します。

準備するもの

Arduino UNO

Arduino Uno Rev3 ATmega328 マイコンボード A000066 白
Arduino (アルドゥイーノ)
¥4,880(2024/03/19 14:35時点)

ESP-WROOM-02

Amazonのマイクロテクニカ販売のもの

ACアダプター 1個

7~12V以上、出力1Aぐらいのもの

3端子レギュレーター TA48M033F 1個

秋月電子通商で購入すると、0.1uF と 47uFコンデンサーが付いてました

2電源8ビット幅双方向ロジックレベル変換モジュール 1個

秋月電子通商

47uF電界コンデンサ 1個

0.1uF積層セラミックコンデンサ 2個

10kΩ以上 固定抵抗 1個

ピンヘッダ、ジャンパーピン、タクトスイッチ等

●2mmピンヘッダ
●2mmジャンパーピン
●2.54mmピンヘッダ
●リセットスイッチ用超表面実装タクトスイッチ(2mmピッチに合うもの)2個

ブレッドボード、ジャンパーコード類、USBケーブル等

1.WROOMをハンダ付け

まず、ブレークボード付きESP-WROOM-02をマイクロテクニカさんのホームページからマニュアルをダウンロードして、その通りにハンダ付けします。これはフラックスを使わないとできませんでした。かなり難しいですが、今はハンダ付け済みしか売っていないので、問題ないでしょう。
ジャンパーピンやリセットスイッチは無くても、ハンダショートや手動でリード線でリセットさせるということもできなくはないです。
私は上の写真のように作りました。
マイクロテクニカさんのマニュアルには、
GPIO 15 ピン - LOW
GPIO 0ピン - HIGH
GPIO 2ピン - HIGH
に接続すると、購入時のファームウェアで起動するモードだそうです。
付属のブレークボードでは、プルアップ抵抗はありませんので、LOWはGND、HIGHは3.3Vに繋がっています。
次に忘れがちなのが、ENピンを3.3Vに接続しないと起動しませんのでご注意。
ブレークボードにENパッドが出てますので、ハンダショートします。
以下に接続回路図がありますので、それもご参照ください。
※リセットボタンは、必ずプルアップ抵抗をハンダ付けして、ボタンが押されたときに 3.3V と GND がショートしないようにしてください

2.ロジックレベル変換のハンダ付け

次にロジックレベル変換モジュールにヘッダピンをハンダ付けします。
秋月さんで購入したものはヘッダピンが付いてました。
以下のように、ブレッドボードに挿してハンダ付けするとやりやすいです。
あまり、コテを長くつけすぎると、ブレットボードも溶けますので気を付けてください。

3.配線する

次に、以下のように配線します。
(※配線図を変更しました。ロジックレベル変換モジュールがうまく起動していない現象が出たため、ロジックレベル変換モジュールのGNDとOEピンの接続方法を変更しました。2015/8/22)

ここで気を付けてほしいのは、
Arduino のUSBにプラスして、必ず7~12V 1AくらいのACアダプターから先に接続して、その後にプラスしてUSBを接続してください。
ブレッドボードへはArduino電源5Vから取ります。
WROOM-02の TX RX には必ずロジックレベル変換した3.3V信号に接続します。間違えて5Vを入力すると故障するかもしれませんのでご注意を。
ちなみに、お分かりかと思いますが、WROOMの電源ピンは、3.3Vが来ているかどうかテスターで確認してからWROOM-02に接続してください。
私はレギュレーターの3番ピンをGNDに繋ぐのを忘れて、4Vを入力しそうになりました・・・。
あと、もう一つ。
以下で通信し始める時、ロジックレベル変換モジュールが起動していない場合があります。
その場合は、ロジックレベル変換器のOEピンの接続を一旦外して、再度接続してみてください。
そうすると、ロジックレベルの出力がONになります。
これは、電源起動後に自動でLOWにするようにArduinoのDigitalPINでコントロールしても良いと思います。

※リセットボタンは、必ずプルアップ抵抗をハンダ付けして、ボタンが押されたときに 3.3V と GND がショートしないようにしてください。
この回路図は古いままで、良く分からず作成した当時のものです。

 

4.Arduinoにスケッチを書き込む

次にArduino にサンプルコードを書き込みます。
Arduino IDE の「ファイル」メニューの「スケッチの例」の 「SoftwareSerial」 の 「SoftwareSerialExample」を開きます。
私の場合はそのサンプルプログラムを以下のように書き換えました。
【ソースコード】 (※無保証 ※PCの場合、ダブルクリックすればコード全体を選択できます)

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3); // RX, TX
void setup()
{
  Serial.begin(115200);
  while (!Serial) {
  ; // wait for serial port to connect. Needed for Leonardo only
  }
  mySerial.begin(115200);
}
void loop()
{
  if(mySerial.available())
  Serial.write(mySerial.read());
  if (Serial.available())
  mySerial.write(Serial.read());
}

このソースの意味は、電源を投入するとまず、76.8kbps でメッセージが送信されてきます。
それは無視してもいいもので、その後に115200bpsで通信するので、すべて115200にしました。
これをコンパイルしてArduinoに書き込みます。

5.シリアルモニターの設定

シリアルモニターを起動して、モニター設定を以下のように変えます。

シリアル送信するとき、コマンド末尾にキャリッジリターンとラインフィードコマンドの \r\nを送らなければいけないので、この設定にすればATコマンドにEnterキーだけ押せばOKで楽です。

6.WROOMの動作確認

ESP-WROOM-02 をリセットします。
本当は電源を投入後に起動メッセージが流れた後にすぐに通信ができるはずなんですが、
なぜかウンともスンともいいませんので、リセットボタンを押します。
リセットボタンが無ければ、リード線でRSTとGNDをショートしてWROOMをリセットしてください。
そうすると、以下のように表示されます。

最初の文字化けは76.8kbpsのメッセージですので、必ず文字化けしますので問題ありません。
そのメッセージも見たければ、それに近い数字のビットレートにプログラムとシリアルモニターの数値を変えてください。
でも、また元に戻すのを忘れずに・・・
※ここでうまく通信できない場合は、上記のようにロジックレベル変換モジュールの出力がONになっていない場合があります。
その場合、ロジックレベル変換モジュールのOEピンを一旦外して、再度接続してみてください。
これらもいちいち手動で面倒ですから、Arduinoのデジタルピンでリセット制御した方が良いと思います。

7.ATコマンドの動作確認

次にシリアルモニターに AT と入力してEnterキーを押すと(送信ボタンでも良い)以下のような OK と返ってくれば、問題なくシリアル通信ができます。

8.ルーター(アクセスポイント)設定の確認

次に以下のように AT+CIFSR を入力するとWROOM-02のMACアドレスが確認できます。
もし、ご自分のルーターでアクセス制限をかけてる場合はこれを参考に設定してください。
ファイアウォール等はこのデバイスを通過できるようにルーターの設定を変えてください。

文字化けしている場合は、何回か同じコマンドを出していると正常に表示してくれる時があります。
文字化けはArduinoのSoftwareSerialが115200bpsに対応していないのが原因です。
詳しくは以下の記事を参照してください。
ESP-WROOM-02(ESP8266) とArduino UNO のシリアル(UART)通信で注意すること
Wi-Fi LEDスイッチがようやくできました。(ESP-WROOM-02とArduinoとAndroidブラウザ使用)
もし、文字化けしないものを見たいのであれば、USBシリアル変換モジュールで3.3V対応のものを使用して、WROOMのTXピンから出力されているのをフリーソフトのTeraTermなどでモニターすれば問題なく見ることができます。

9.WI-Fi通信設定

アクセスポイントに入るために、SSIDやパスワードを以下のように入力します。

AT+CWJAP="SSID","パスワード"

というコマンドです。

WIFI CONNECTED
WIFI GOT IP
と表示されれば、Wi-Fiが使用できます。
ここまでできれば、あとはマニュアルに従っていろいろと操作すれば、Wi-Fi通信できると思います。
私の場合、Ethernet Shield で使ったプログラムをこれに移植させたいと思っています。
とりあえず、今回はここまでです。
因みに、再起動するときに、電源を入れな直してもWROOMが起動しなかった場合は次の方法を試してみてください。

私も何回か起動しなくなり、何度電源入れ直しても立ち上がらないということがありました。
このロジックレベル変換モジュールなどとArduinoと結線していると、電源を抜いても浮遊電圧があるようで、ロジックレベルが上がっているのかも知れません。(←実はArduino側に問題がありました。USBを挿したままと外した場合とではArduinoの起動状態が変わるようです)
試しに、WROOMのRST側の電圧を測りながらアダプターやUSBを抜き差ししてみたところ、Arduino側のUSBを抜くとロジック電圧が下がっていきました。特に、USBはパソコン側を抜いてもダメで、Arduino側を抜くことです。下がった状態で電源を入れることが良いのかもしれません。
また、ロジックレベル変換のTX(送信)、RX(受信)の5V側と3.3V側をテスターで測りながら電源を入れたり切ったりしてみてください。RXとTXが5V側は直流レンジで5V付近を、3.3V側は3.3V付近を示していれば問題なく動作すると思います。
通常、WROOM(ESP8266)は3.3V電源を投入して、GPIOやENピン設定が問題なく接続できていれば、殆ど不良無く動作していますので、不具合はArduinoかロジックレベル変換が問題であることが多いということが分かってきました。
あまりまだ詳しく解析できてませんが、これで試してみてください。
また何か進展ありましたらご報告します。
ATコマンドを使わずとも、もっと楽な方法がありました。
以下、関連記事をご参照ください。

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

その他、関連記事
https://www.mgo-tec.com/blog-entry-jr-train-message-board-01.html
https://www.mgo-tec.com/blog-entry-easywebsocket-beta13.html
https://www.mgo-tec.com/blog-entry-wroom-esp8266-bme280-ssd1351-sd.html
https://www.mgo-tec.com/blog-entry-neopixel-paper-illumination01.html

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

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

コメント

  1. mgo-tec より:

    匿名さん
    当ブログをお読み頂きありがとうございます。
    まず、以下のご確認をお願いします。
    ●wroomのENピン、各GPIOピンのHigh、Lowの接続。
    ●ご自分のルーターの設定を確認してみてください。MACアドレスアクセス制限やパスワード、WROOMのローカルIPアドレス(DHCPサーバーが割当てたものなど)など。
    ●ルーターが問題なければ、ルーターをまず立ち上げて、5~10分くらい待ち、Arduino側のUSBを外した状態で、7~12V 1A程度のACアダプターをArduinoに接続して30秒くらい待ちます。
    ●次にArduino側のUSBを接続してパソコンと接続。
    ●シリアルモニターを起動して、右下のCR+LRと115200baudに設定してあるのを確認してください。
    ●リセットボタンを押します。
    ここまでは問題ないでしょうか?

  2. mgo-tec より:

    なるほど、問題ないとすれば、こちらでも検証してみます。しばらくお待ち下さい。

  3. mgo-tec より:

    mySerial.read();が-1の場合は文字が読み取れる文字が無いということだと思います。
    電源立ち上げ時の文字化けが出ているということはシリアル通信が生きていると思いますので、ATコマンドがうまく送れていない可能性があります。
    今、当方でいろいろとバタついておりまして、ようやく今から検証に入れるようになった状態です。申し訳ございません。
    明日には何らかの回答をしたいと思いますので、もうしばらくお待ちください。

  4. mgo-tec より:

    いろいろ検証してますが、1つ発見しました。
    接続図で、ArduinoからのGNDからWROOMのGNDまでの距離が長すぎたり、枝分かれや数珠つなぎをすると、リセットしても文字化けコードすら出現しません。
    ArduinoからWROOMまでのGNDラインを直接に接続し、ArduinoのGND端子にできるだけ近く短い電線で接続してみてください。 そうすると電源再起動後、リセットすると文字化けコードが出ると思います。WROOMは瞬間的に大きな電流が流れることが原因だと思います。 文字化けコードの最後に"ready"が出ればATコマンドが使えます。
    もし、"ready"が出ていなければ、別のファームウェアを入れ込んでしまったとかが考えられます。
    私の場合は、ESP8266 for Arduino をWROOMに入れたのを忘れていて、ATコマンドモードで使用しようとしたら、ATコマンドを受け付けないことがありました。
    その場合、元のファームウェアを入れなおさなければならないのです。
    とりあえず、これでどうでしょうか?

  5. mgo-tec より:

    あと、もう一つ。
    起動後、電源を入れたまま、シリアルレベル変換モジュールのOEピンのGNDラインを一旦外し、再度接続してみてください。そのモジュールの起動がONになっていない場合があります。電源起動後にWROOMからのTX信号ラインをテスターの直流レンジで測ってみると3.3Vになっていても、シリアルレベル変換モジュールの5V出力で5V付近まで電圧が上がっていないと、Arduino側で受信できません。起動直後になぜかそうなってしまうパターンが見受けられました。
    今、いろいろ実験中ですので詳細はまた報告します。

  6. mgo-tec より:

    お返事遅くなり申し訳ございません。
    ESP8266 for Arduinoは誤りで、
    Arduino core for ESP8266 でした。
    GitHubというArduino関連のツールが沢山あるホームページにWROOM(ESP8266)関連もたくさんあります。
    要するに、Arduinoのハードウェアを使わなくてもWROOMのフラッシュに直接Arduinoのスケッチを書き込めるのです。
    ATコマンドは使いません。
    ネットでも結構情報あります。
    その記事を未完成ですが、たった今アップしました。
    参考にこちらへどうぞ
    http://mgo-tec.com/blog-entry-50.html

  7. mgo-tec より:

    ATコマンドのロジックレベルコンバーターのOEピンは抵抗が無しで、直にGNDに接続しても動作すると思います。
    試してみてください。
    通常、LOWというとプルダウン抵抗を入れるのでそうしてみました。
    これでも動かなかったら、またご相談ください。

  8. mgo-tec より:

    ご質問していただけることは私にとって有難い事ですので、どうぞご遠慮無くドシドシ質問してください。
    Arduinoが熱を持ってしまうということですね。
    12VのACアダプターを使っていれば、Arduino基板上の3端子レギュレータは自然と発熱します。触れないくらい熱いです。50~60℃くらいにはなります。レギュレータで12Vから5Vまで降圧しているので、その分の損失が熱として発散します。
    ただ、ArduinoマイコンCPU自体はそれほど発熱しません。レギュレータ部分だけです。
    7V ACアダプターでも意外と発熱します。
    絶対に間違えても5Vや3.3V電源ラインを直接GNDに接続しないでください。即壊れます!
    それをしてなければ、Arduino基板上レギュレータが、60℃を超えなければ、概ね問題ないと思います。
    ただ、熱いので、Arduinoの下に燃えにくい、熱に強い板などを敷くと良いです。
    私は、レギュレータに放熱フィンをつけたりしました。
    本当は電源だけ別に自作したいと思っています。

  9. mgo-tec より:

    なるほど。
    Arduino UNOのACアダプター接続部分が熱くなるのはおかしいですね。そのすぐ近くにある基板上の3端子レギュレーターは触ると火傷するくらい熱いですが、コネクターは熱くなりません。
    また、WROOM自身もそんなに熱くなりません。
    触れないくらい熱くなるのは何かがおかしいです。
    WROOMのGNDを接続したら電圧が下がるのもおかしいです。
    GNDを接続したら、他の電圧が下がるということは、おそらく電源ラインがGNDとショートしてしまっている可能性があります。
    そのまま続けたら壊れますし、すでに壊れているところが有るかも知れません。
    ACアダプターにはヒューズが入っているので、大参事にはならないですが、場合によっては火を噴く可能性があります。
    イラストの接続図のWROOMの電源3.3Vライン(茶色)と水色のGNDラインは接続してはいけません。
    試しに、ACアダプターやUSBを抜いた状態で、イラストのように結線した状態で、WROOMの3.3VピンとGNDピンの抵抗値をテスターで測ってください。私の場合は28KΩを表示しました。数十kΩの抵抗値が出ていればOKです。もし、殆ど0V付近だったならば完全にショートしています。
    他の機器も熱で部品が焼き切れて、ショートしてしまっている場合があります。あまりに常識外れに熱くなった機材は故障したと思って交換した方が良いかもしれません。
    おわかりかと思うのですが、回路図の常識として、イラストの図の水色と茶色のラインがクロスしているところがありますが、ここは接続しません。●の部分が接続するポイントです。電源ラインとGNDラインはショート接続してはいけません。必ず抵抗などの負荷が挟んでなければなりません。
    以上を確認してみてください。

  10. mgo-tec より:

    匿名さん
    うまく動作できたんですね!!
    いゃ~~、我ながらホッとしました。
    やっぱ、WROOMが熱で故障したのかもしれませんね。
    いゃ~、動いて良かったです。
    また何かありましたら、遠慮なくご連絡ください。

  11. nattou より:

    記事を読んで興味が湧き、Arduinoを購入しました。ありがとうございます。
    ところで質問があります。WROOMをリセットする際、RSTとGNDを短絡し、離したときにシリアルモニタに化けた文字列が表示されますがそれで正解なのでしょうか?
    その後、記事に掲載されておりますreadyは表示されず、ATを送っても返答がありません。
    CRおよびLF、115200bpsに設定しております。何かお心当たりのことがありましたら、アドバイスをいただけませんでしょうか。

  12. mgo-tec より:

    nattou さん
    記事をお読みいただき、ありがとうございます。
    > WROOMをリセットする際、RSTとGNDを短絡し、離したときにシリアルモニタに化けた文字列が表示されますがそれで正解なのでしょうか?
    はい! 文字化けで正解です。
    WROOMは再起動の際、76.8kbpsで起動レスポンスデータが送られてきますので、Arduinoのシリアルモニターの115200bpsでは速度が合わないので文字化けします。
    > その後、記事に掲載されておりますreadyは表示されず、ATを送っても返答がありません。
    文字化けデータが表示されているっていうことは、Arduinoに関してはWROOMからのシリアル受信はできているということです。
    Arduinoからの送信が上手くいっていないということだと思います。
    もしテスターがありましたら以下のポイントを直流電圧レンジで測ってみてください。
    ●Arduino側から出ているTX信号の5V側信号 → 5V近辺ならOK
    ●WROOMのRX側3.3V信号  → 3.3V近辺ならOK
    もし、ArduinoからのTX信号が1V以下なら、記事に書いてある通りに電源を起動し直してください。ACアダプターとUSBの挿し方がキモです。 それと、ルーターは早めに立ち上げておくことです。
    それと、ACアダプターの最大電流値が1Aくらいで、7V~12Vのものを使うというところもキモです。
    もし、WROOM側のRX信号が1V以下で、ArduinoのTX側が5Vならば、シリアル変換モジュールが起動していないと思いますので、OEピンを挿し直してください。
    それでもだめなら、もう一度WROOMのGPIOピンの接続を確かめてみてください。ENピンと15番と2番と0番の接続です。私の場合はENピンをハンダ付けし忘れてハマったということがありました。

  13. nattou より:

    迅速なご回答、ありがとうございました。下記2点を確認しました。
    ●Arduino側から出ているTX信号の5V側信号→5V
    ●WROOMのRX側3.3V信号→0V
    ご助言いただきましたとおり、OEピンの挿し直しを行ってみましたが、0Vのままです。
    また、ENピンは短絡、15番はL、2番はH、0番はHでした。
    Arduinoの3番の出力も0Vでしたが、これはよいのでしょうか?

  14. mgo-tec より:

    ちょっと矛盾しておりますね・・・
    > ●Arduino側から出ているTX信号の5V側信号→5V
    という結果と
    > Arduinoの3番の出力も0Vでしたが、これはよいのでしょうか?
    という結果はおかしいですね。
    Arduinoの3番はTX信号ですので、ロジックレベル変換の5V側と接続されているので同じ電圧になるはずです。
    ということは、ロジックレベル変換へのピンを外してArduinoの3番ピンの電圧を測ったということでしょうか?
    それならば、Arduino側がおかしいということになります。
    Arduinoの3番をプログラムで送信指令を出してますので、必然と5Vになります。
    もし、ロジックレベル変換と接続して0Vになったのでしたら、ロジックレベル変換がおかしいということになります。
    そうすると5Vから0Vへ短絡していることになるので、パーツが故障しかねません。
    異常な熱が出ていませんでしょうか?
    > ●WROOMのRX側3.3V信号→0V
    これではATコマンドを受信できません。WROOMのRX(受信)側は3.3Vにならなければいけないのです。
    もし、Arduinoの3番から5V出ていれば、ロジックレベル変換で3.3Vになるはずですが・・・。
    その信号がWROOMのRX(受信)に接続されなければならないのですが・・・。

  15. nattou より:

    大変失礼いたしました。0Vなのは、Arduinoの3番ピンでなく2番ピンでした。(3番ピンからは5V出力されておりました)
    また、Arduinoの3番ピンと2番ピンの配線を逆にしており、記事のとおりに接続しなおし、リセット、ATコマンドを送ったところ、OKが返ってきました。
    記事を参考に、次のステップへ進みたいと思います。
    ずっともやもやしておりましたので、とてもうれしいです。

  16. mgo-tec より:

    それはそれは良かった!
    私も何度も間違えましたから気持ちはよく分かります。
    この先もまたまだいろんな機能があってオモシロイですよ!
    また何かありましたら遠慮無くご連絡下さい。

  17. しえすた より:

    有益な情報ありがとうございます!レベル変換に困っていたので非常に助かりました。
    ところで、このモジュールですがATコマンドリファレンス[1]に「AT+UART_CUR」や「AT+UART_DEF」というのが準備されていて、UARTな通信速度を変更できるようです。

    # すでにご存知でしたらすみません。

    [1]http://www.wless.ru/files/WiFi/ZhiJieTong/LM03_AT_Instruction_Set_V0_22.pdf

    • mgo-tec mgo-tec より:

      しえすた さん

      こちらこそ有益な情報ありがとうございました。
      このデータシートは最新ですね!
      知りませんでした・・・。
      シリアルの通信速度が変えられないかと随分さがしたんですが、やっぱり出来るようになってたんですね!
      近々、ソフトウェアシリアルで速度を落として実験したいと思います。ピン差し替えと文字化けから解消できそうですね。
      ありがとうございました!

  18. san より:

    突然すいません。
    この記事を読んでArduinoとESP-WROOM-02を使ってwifi通信に挑戦していますがなかなかできずに困っています。
    一度ATとうってOKがかえってきて接続できたのですがなぜか接続が突然切れて接続できない状態に陥りました。
    WROOMをリセットすると文字化けした文字は送られているので上記のコメント通りArduinoからの送信がうまくいっていないと思われます。
    コメント通りに電源を入れてみたりしていますができないです。
    テスターで実際に測ってみるとArduinoのTX側は4.5V付近で WROOMのRX側は2.5V付近でした。
    できない原因がまったくわからないのでお知恵を拝借したいです。

    • mgo-tec mgo-tec より:

      sanさん

      当ブログをご覧いただき、ありがとうございます。
      最近、全くATコマンドを使ってなかったので、久々にATコマンドの記事を見返している次第です。

      まず、一度OKが返ってきて、突然切れたということは、供給電流が足りない可能性があります。
      確認済みかと思いますが、1A程度のACアダプターをArduino側で使って、回路通りの3端子レギュレーターからESP-WROOM-02の電源に3.3Vを供給しておりますでしょうか?
      念のため、ご存じだと思いますが、Arduno UNO の3.3Vは使わないでください。50mAしか電流供給ができません。

      その他、全ての配線が問題なければ、次のことを試してみてください。

      まず、以下の記事を読んでみてください。
      https://www.mgo-tec.com/blog-entry-45.html
      ATコマンド通信の注意事項が書いてあります。

      次に、ESP-WROOM-02から出るTx信号をロジックレベル変換を通さずに直接Arduino UNOの2番ピンへ接続してください。
      Arduino UNO の入力は5V以下ならば問題ないので、ある程度は信号をキャッチできます。
      それでもう一度ATコマンドを試してみてください。(文字化けは多少は必ず発生します)

      このATコマンド通信はロジックレベル変換との相性や電源問題もあるのですが、実はArduino UNO のSoftwareSerial通信が115200に対応していないこともあっていろいろ問題ありなのです。
      ですから、現在はATコマンドを一切使わずにスイッチサイエンスさんのESPr Developer(ESP-WROOM-02開発ボード)を使ってArduinoIDEでスケッチを直接書き込んで使用しております。
      そちらの方もぜひ参照してみてください。
      https://www.mgo-tec.com/blog-entry-ss-wroom-howto01.html

  19. san より:

    素早く対応してくださりありがとうございます。
    さっそく教えていただいた方法を試してみたのですが、
    文字化けした文字がでてくるだけでreadyと表示されません。
    一度接続できた後回路をいじったのは、先ほどのご指摘通り直接2番ピンに接続したくらいなのにできないので謎が深まるばかりです。
    やはり電源に問題があるのでしょうか?
    (現在使用しているアダプターは12V、1Aのものを使用しております。 )

    • mgo-tec mgo-tec より:

      なるほど・・・。
      文字化けデータがESP-WROOM-02のリセットボタンを押したときだけ出るのであれば、考えられる原因は、
      ●Arduino IDE のシリアルモニターの右下隅のセレクトを「CRおよびLF」にして、速度が「115200bps」になっていますか?
      私はよく忘れていてセレクトしてなくてReadyが返ってきてるのに文字化けしていて分からないことが多々ありました。
      ●ESP-WROOM-02のジャンパーピンのENピン接続、GPIO#15、GPIO#2、GPIO#0 はそれぞれ記事どおりに接続されてますでしょうか?
      ●ロジックレベル変換のOEピンを外してリセットしてみましたでしょうか?

      もし、文字化けデータが延々とリセットし続けてシリアルモニターに流れ出てくるようなら、ESP-WROOM-02で例外エラーが発生しています。
      その場合はESP-WROOM-02側のリセットボタンを押せば大抵直るのですが、治らない場合はArduino UNO側のUSBを抜いてからACアダプターを抜き、数十秒待ってからACアダプターを入れて、Arduino UNO側のUSBを挿します。
      その後にシリアルモニターを立ち上げてみてください。

      その他は、Arduino IDE をArduino.ccページの最新バージョンにしてみるとかでしょうか?
      後は、考えられるのはハンダ付け不良か、ESP-WROOM-02自体が故障しているかでしょうか・・・。

  20. san より:

    教えていただいたやり方をやってみましたがダメでした…
    私はESP-WROOM-02がmgo-tecさんのような型ではなくT字型のもの
    使っておりましてリセットボタンがないのです。
    (t字型のマニュアルがあってそれの通りに回路を組んでいます。)
    もしかしたらリセットがうまくいってないのかな、と思いました。
    マニュアルにはGNDとRSTをショートさせリセットさせると書いてあって、なにぶん私はこの分野に不慣れなものですからショートさせるやり方がよくわかっていないので、本当にリセットできているのか不安です…(恥ずかしながら、前どうやったらうまくいったのかよく覚えていないんです)

    • mgo-tec mgo-tec より:

      リセットはRSTとGNDをジャンパワイヤーなどで一瞬接続してすぐに離します。これでリセットがかかります。
      くれぐれもショート(接続)しっ放しにしないようにしてください。
      私の場合は超小型の表面実装タクトスイッチをハンダ付けしてますので、スイッチを押したら直ぐに離します。
      これでもダメならちょっと分からないですね・・・。
      もしかしたら、先のステップに進んだ方がすんなりと解決する可能性もあります。

  21. san より:

    昨日は丁寧に対応して下さりありがとうございました。
    なにをしてもだめだったのでESP-WROOM-02を買い直したところ
    無事できました。
    何らかの原因で壊れてしまっていたようです。
    ここ数日のもやもやが晴れました。
    ご協力ありがとうございました!

    • mgo-tec mgo-tec より:

      それはそれは、良かったのか悪かったのか・・・。
      実は、私の使っているESP-WROOM-02開発ボードも個体差があるのか、今までファイルをフラッシュにアップロードできていたのに急にできなくなったりと、今とても困っていてモヤモヤ状態です。
      結局電流消費が関係しているかもしれませんが、やはりまだこれは安定したデバイスではないのかも知れませんね。

  22. you-j より:

    突然すいません、教えてください
    アルディーノ とesp8266 wifiシールドを使ってライブラリーを使うように
    アルディーノとesp8266 を直接つなぐ場合
    ライブラリーをそのまま使うには、どんなつなぎ方をすればいいですか?

    • mgo-tec mgo-tec より:

      you-jさん

      記事をご覧頂き、有り難うございます。

      まず教えて頂きたいのですが、製品はどのWi-Fiシールドを使っているのでしょうか?
      それと、ライブラリはどれを使おうとしているのでしょうか?

      • you-j より:

        返信ありがとうございます
        wifiシールドは使ってなくて、
        WiFi モジュール ESP-WROOM-02 に直接アルディーノをつなげてソフトウエアーシリアルでつなげてますが、アルディーノの本家のライブラリをいろいろ使うにはピンを合わせる必要がありますよね?

        • mgo-tec mgo-tec より:

          Arduino とUARTシリアル通信するだけで、SoftWare Serial を使うだけなら、Arduino 側でピン設定をしてやれば良く、3.3Vロジックレベル変換して、ESP-WROOM-02のシリアルTX, RX へ接続すれば良いです。
          ただ、この次以降の記事を読み進んでいってもらえると分かるのですが、Arduino UNO からロジックレベル変換デバイスを使ったり、電源を差し替えたり、大容量ACアダプターが必要だったりと、とても面倒です。
          しかも、Arduino UNO のソフトウェアシリアルは115200bps に対応していないので、ESP-WROOM-02 側でいろいろと操作しなければなりません。
          かなり散々な苦労した割には大したことはできません。

          私の場合は、Arduino とESP-WROOM-02 のソフトウェアシリアル通信は早めに見切りをつけて、ESP-WROOM-02 をArduino化して使いました。
          例えば、以下の記事を参照してください。
          ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介
          ESP-WROOM-02 は電源がシビアですので、もっと手軽に扱えるようにパッケージされた、ESPr Developer というものを使うと、簡単にArduino IDE でWi-Fi通信できます。
          しかもArduino UNOより安く、高速で、メモリも多いでので、超おすすめです。
          これでいかがでしょうか?

  23. you-j より:

    言われたとおり開発の手軽さでespr_developerボードはもう既に使ってます。入出力ポートの数が足りなくてアルディーノをメインに通信だけesp8266 に任せたくて、しかしライブラリーがうまく使えないので困ってます、wifiシールドを買えば済む話しですが、、、
    何とかシールドに使っているピンに合わせれば、使えるのかと考えてみたのですが、ネット調べてもよくわからなかったので
    効いてみました。

    • mgo-tec mgo-tec より:

      仕事中で返信が遅れてスミマセン。

      なるほど、ESPr Developer を使ってらっしゃるのなら、お話が早いです。
      Arduino UNOの場合、ソフトウェアシリアルを例えばGPIO#2,#3にして、速度を9600bpsにして、ESPr Developerのシリアルの速度も9600bpsにすれば通信出来ると思います。
      ただ、ESPr DeveloperのTx,Rx端子を使ってしまうと、Arduino IDEからのコンパイル書き込み時はジャンパー線をいちいち外さないといけないと思いますので、別のピンに設定した方がよいと思います。(私はやったこと無いです)

      ライブラリはどれを使ってらっしゃるのか分からないのですが、ESPr Developerだけである程度完結させて、必要なデータだけシリアル通信でArduinoへ渡せば良いと思いますがいかがでしょうか。

      または、ESPr Developer のGPIOピンについてですが、デジタルの単なるHigh Lowレベル出力なら、GPIOエクスパンダーを使えば、ピンを増やせます。
      以下の記事を参考にしてください。

      ESP-WROOM-02 ( ESP8266 )の GPIO を増設して キャラクタディスプレイ 8bitモード制御してみた

  24. you-j より:

    ありがとうございますGPIOエクスパンダーしらなかったです、勉強してみます

  25. coolboy より:

    突然申し訳ございません。
    手順9のWi-Fi接続ができません。
    ATコマンドもWi-Fiコマンドだけエラーが返ってきます。
    原因がわからずに困っています。
    助言お願い致します。

    • mgo-tec mgo-tec より:

      coolboyさん

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

      AT+CWJAP=”SSDI”,”password”
      というコマンドが効かないということですね。
      その他のコマンドは実行できているということですね。

      では、エラーメッセージは何と表示されていますか?
      (例)
      +CWJAP:2
      ERROR
      みたいなものです。

      • coolboy より:

        ERRORと表示されます。

        • mgo-tec mgo-tec より:

          お返事おそくなり申し訳ございません。

          しばらくATコマンドは使っていないので、検証が遅くなりました。
          当方で試したところ、ERROR というメッセージだけ出る場合はコマンド入力を誤った時でした。
          例えば、
          AT+CWJAP=”SSID”,”パスワード”
          というようにダブルクォーテーションを全角にしてしまった場合です。
          このブログ記事では、ダブルクォーテーションについてはHTMLのコマンドと誤認識してしまう文字化けを防ぐために、記事中の文章については全角にしておりました。
          それをコピペしてしまうと、ERROR になります。
          よって、ダブルクォーテーションは半角に修正してください。
          ソースコード内はすべて半角になっています。

          ということで、そういうことも有り得るかと思い、たった今、記事中文章を修正して、半角にしました。

          ルーターの設定で弾かれてしまう場合は +CWJAP:1 などとエラーメッセージが出ますので、ERRORだけのメッセージならばコマンド入力で何らかの誤りがあるのではないかと思われます。

          また、Arduino UNO との ATコマンド通信は動作が不安定なので、あまりお勧めできません。
          私の場合は、ESP-WROOM-02 を速めに Arduino化して、ESP-WROOM-02 だけで開発しました。
          以下の記事をご参照ください。

          https://www.mgo-tec.com/blog-entry-50.html

          この記事のように接続して、Arduino化する前であれば、その回路のまま安定したATコマンド通信ができます。
          Arduino UNOにこだわらないのであれば、ESP-WROOM-02 ( ESP8266 )をArduino化した方が遙かに使いやすいです。

          そして、もっと使いやすいデバイスが ESPr Developer ( ESP-WROOM-02 開発ボード )です。
          以下の記事を参照いただければ、とっても簡単にATコマンド通信ができます。
          これを使ってしまうと、ATコマンドとはすぐに「おさらば」してしまうでしょう。

          https://www.mgo-tec.com/blog-entry-ss-wroom-howto01.html

  26. amagoe より:

    記事を拝見させていただきました。大変参考になりました。
    以下の記述について、少しご質問させてください。
    >Arduino のUSBにプラスして、必ず7~12V 1AくらいのACア
    >ダプターから先に接続して、その後にプラスしてUSBを接続して
    >ください
    接続順をUSB→ACアダプタにした場合はどのような問題があるでしょうか。

    • mgo-tec mgo-tec より:

      amagoeさん

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

      この記事は、Arduino に関してまだ良く分からない状態で実験していた頃のものです。
      今は、ESP-WROOM-32 というマイコンに専念していて、Arduino に関してはあまり解明せずに現在まで至っています。
      ですから、正確な回答ではないかも知れませんのでご容赦ください。

      まず、以下の記事を参照してみてください。

      https://www.mgo-tec.com/blog-entry-44.html
      https://www.mgo-tec.com/blog-entry-45.html

      Arduino の GPIOピンの電圧をテスターで測定しながら、ACアダプターとUSBの抜き差しの順番をいろいろ変えてみると分かると思います。
      挿す順序、抜く順序でArduino のGPIO出力電圧が正常に出ているか出ていないかが分かります。

      Arduino IDE のバージョンによっても変わるかも知れません。
      この当時は ver 1.6.5 あたりだったと思います。
      現在は修正されているかも知れません。

      ESP-WROOM-02 と Arduino を ATコマンドで通信することはエラーが多いのであまりお勧めできません。
      ESP-WROOM-02 ( ESP8266 )を Arduino化して、直接スケッチを書きこんだ方が遙かに簡単です。

      全ての設定が簡単なスイッチサイエンス製開発ボード、ESPr Developer を使うことをお勧めします。
      ご参考程度に以下の記事を参照してみてください。

      https://www.mgo-tec.com/blog-entry-ss-wroom-howto01.html

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