Arduino UnoからSoftwareSerialポート経由でESP8266にATコマンドを送信します


10

ゴール

Arduino UNOから、ATコマンドをSoftwareSerialポート経由でESP8266に送信し、結果を受信します。

現在の状態

ATコマンドを送信して何も返さない(ワイヤリングスキーム1)、またはATコマンドを送信してガベージバックを返す(ワイヤリングスキーム2)。

Arduinoをパススルーとして使用して(リソースセクションにリストされているチュートリアルで説明されているように)、ATコマンドを送信できます。ESP8266と115200ボーで通信できることがわかりました。

これは実行した結果ですAT+GMR

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

配線図1

!! 緑のワイヤーをArduino Unoのピン3に、黄色のワイヤーをピン2に接続しています。写真が示唆するように1と0ではありません!!

ここに画像の説明を入力してください

配線図2

上記と同じ配線ですが、RXとTXを逆にしました。緑のワイヤーはピン2に接続され、黄色のワイヤーはピン3に接続されています。

コード

これはArduino Unoで実行されています

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

スケッチを実行した結果

配線スキーム1

Started

配線方式2

Started
�����

以下の「使用したリソース」セクションのチュートリアルに記載されている手順に従って、ESP8266をテストしました。ESP8266は、シリアルプロンプトを介して指示を送信するときに問題なく機能します。

私が使用したリソース http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

質問

私がやろうとしていることが可能かどうか誰かが知っていますか?もしそうなら、私は何を間違っていますか?


arduinoをシリアルのバイパスとして使用するには、PDFで提案されているように試してください(画像のように接続を使用します)。ボーを115200に設定して、シリアルモニターを使用してテストしてみてください。行末も\ r \ n送信する必要があります。espが応答しない場合は、9600ボーレートを試してください。良い出力が得られたら、動作するボーレートでソフトウェアシリアルに移動します。まだの場合は、espのファームウェアを最新バージョンに更新することもできます。
brtiberio

ソフトウェアのシリアルコードを投稿できますか?
Magic-Mouse

@Personagem、ありがとう。私はそのトラブルシューティングを行いました(つまり、Arduinoをバイパスとして使用してATコマンドを送信できることを確認しています)。私は115200でespと通信できることを発見しました。提案されたようにファームウェアを更新してみます。
Paul

@ Magic-Mouse SoftwareSerialは、Arduinoが提供するライブラリだと思います。質問にご協力いただきありがとうございますが、ここにライブラリを投稿することは役に立ちません。
Paul

私はソフトウェアシリアルライブラリが何であるかを知っています。ソフトウェアシリアルを使用するコードをseしたいと思います。
Magic-Mouse

回答:


9

私がやろうとしていることが可能かどうか誰かが知っていますか?

絶対に可能です:)

もしそうなら、私は何を間違っていますか?

SoftwareSerialは115200ボーレートに対応していません(これを設定として "許可"しているにもかかわらず)。いくつかのレポートでは、57600も実行可能であると示唆されていますが、私の経験では9600が信頼性に最適です。ESP8266のボーレートを変更する方法は、ファームウェアのバージョンによって異なります。で成功しましたAT+IPR=9600。このコマンドを実行する必要があるのは1回だけです(これは永続的な設定です)。あなたの説明に基づいて、これが、あなたが説明する「ゴミ」出力を引き起こしている可能性が最も高い犯人であることをお勧めします。

その他の注意点:

  • ESP8266は5vではなく3v3で動作するため、デジタルピンに直接接続しないでください。ロジックレベルコンバーターを実行する必要があります。5vを実行すると、ESP8266をフライできます。
  • Arduinoの3v3出力は、ESP8266を確実にサポートするには電流が不十分です(50mA Arduino vs一部のアカウントではESP8266の最大300mA)。別の電源でESP8266を実行してみてください。おそらく次のような単純なコマンドには影響しませんATが、ネットワークなどに接続しようとすると、予期しないデバイスのリセットが発生する可能性があります。
  • 他の人が指摘したように、\ r \ nを送信する必要があります—シリアルウィンドウが両方を送信するように設定されていることを確認してください(これはシリアルウィンドウのドロップダウンです)

1
AT + IPRがESP8266をブリックする場合があることに注意してください。詳細は次のとおり
Emir

7

さて、あなたはこれを試すかもしれません:

まずブリンクスケッチをArduinoにアップロードしてから、次のようにESP8266に接続します:TX-TXおよびRX-RX。

シリアルモニターを開いてATコマンドを送信し、応答するかどうかを確認します。その場合、TX-RXおよびRX-TXに配線し直すことにより、Arduinoを使用して制御できます。

PS:シリアルモニターの行を改行または改行に設定することを忘れないでください。

次のコードを使用して、ESP8266に接続します。

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

コンピュータに接続するとハードウェアシリアルインターフェイスがビジーになるため、ESP8266と通信するには別のシリアルインターフェイスを使用する必要があります。この場合、ソフトウェアシリアルが便利です。


このリンクは質問に回答する場合がありますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- レビューから
Ricardo

1
はい、私はあなたが正しいと思います。回答を編集しました。
Ikbel

@KiraSanなぜdelay(30)が必要なのですか?
Rahul Rastogi 2017

@RahulRastogiこの例では、遅延を使用してESPが応答できるようにすることができます。30msはランダムな値にすぎませんが、実際のプログラムではそれを回避し、別のメカニズムを使用して応答を確認する必要があります。
イクベル2017

1

私がやろうとしていることが可能かどうか誰かが知っていますか? 可能です。ESP8266をシミュレートしている2つのArduinoでそれを実行しました(ebayの注文を待っています)。

もしそうなら、私は何を間違っていますか?

あなたがしていることはほとんどのレベルで間違っていますが、私はあなたが最も整理されていると思います。

アイデアは、この小さなフェラを実装することです。ロジックレベルシフターは、後で多くの問題を解決します。

"WIRING SCHEME 1"では、arduinoのハードウェアシリアルポートを使用して、TTLケーブルまたはFTDIケーブルを介して接続されているかのようにデバイスと直接通信します。

これは、ESP8266を話しているときにarduinoデバイスが理論的にハードウェアから読み取ることを意味します。別のarduinoまたはTTLケーブルがある場合は、「メイン」のarduinoのゲート2および3に接続してみてください。あなたの例の結果と同様に結果2。そうでない場合は、デバッグを開始する場所になります。

それに加えて、TTL 3,3vまたはロジックレベルコンバーターのいずれかに投資することをお勧めします。ケーブルを入手したとき、すべてが箱から出して動作しました。


1

私も多くの問題を抱えていました。私の場合、問題はSoftwareSerialからAltSoftSerialに切り替えることでほぼ解決されます。Unoでは、標準のソフトウェアシリアルライブラリが機能していなかったようです。切り替えた後、私は初めて結果を取り戻し始めました。(3.3Vのレベルシフトと外部電源も使用しました)


そして、ほぼ解決したということは、私はまだ時々、ターミナルで意味不明なことをしています。したがって、AltSoftSerialでさえ完全なソリューションではありません。ESP-07を115200 bpsのデータレートで使用していました。


説明に追加できますか?UnoとESPの間の接続をどのように配線したかを知っておくと役に立ちます。ありがとう!
dlu 2015


0

ESP8266モジュールを使用する際のヒントをいくつか紹介します。

  1. ソフトウェアシリアルは、特に高いボーレートでは信頼できないため、使用しないでください。

  2. Arduinoとやり取りする前に、ESPモジュールを常にコンピューターに接続し、すべてのATコマンドをテストして、正しい方向で作業していることを確認してください

  3. ESPモジュールをArduino 5v電源と互換性のあるものにする電源アダプターボードを作成する

詳細については、このリンクもチェックしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.