Senden Sie AT-Befehle von Arduino Uno über einen SoftwareSerial-Port an ESP8266


8

TOR

Senden Sie von Arduino UNO über einen SoftwareSerial-Port AT-Befehle an ESP8266 und empfangen Sie Ergebnisse.

AKTUELLER STATUS

Ich sende entweder AT-Befehle und erhalte nichts zurück ( Verdrahtungsschema 1 ) oder ich sende AT-Befehle und erhalte Müll zurück ( Verdrahtungsschema 2 ).

Mit dem Arduino als Durchgang (wie im Tutorial im Abschnitt Ressourcen erläutert) kann ich AT-Befehle senden. Ich habe festgestellt, dass ich mit dem ESP8266 bei 115200 Baud kommunizieren kann.

Dies ist das Ergebnis des Laufens 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

VERKABELUNGSSYSTEM 1

!! Ich habe den grünen Draht an Pin 3 des Arduino Uno und den gelben Draht an Pin 2 angeschlossen. nicht 1 und 0 wie das Bild zeigt !!

Geben Sie hier die Bildbeschreibung ein

VERKABELUNGSSYSTEM 2

Gleiche Verkabelung wie oben, aber ich habe RX und TX vertauscht. Der grüne Draht ist an Pin 2 und der gelbe Draht an Pin 3 angeschlossen.

CODE

Dies läuft auf 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());
  }
}

ERGEBNISSE AUS DER LAUFSKIZZE

Verdrahtungsschema 1

Started

Verdrahtungsschema 2

Started
�����

Ich habe den ESP8266 anhand der Anweisungen getestet, die im Lernprogramm im Abschnitt Ressourcen, die ich verwendet habe, unten aufgeführt sind. Der ESP8266 funktioniert einwandfrei, wenn Anweisungen über die serielle Eingabeaufforderung gesendet werden.

RESSOURCEN, DIE ICH VERWENDET HABE http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

FRAGE

Weiß jemand, ob das, was ich versuche, möglich ist? Und wenn ja, was mache ich falsch?


Versuchen Sie, wie im PDF vorgeschlagen, Arduino als Bypass für die serielle Schnittstelle zu verwenden (verwenden Sie die Verbindungen wie im Bild). Stellen Sie nach dem Versuch Baud auf 115200 ein und testen Sie es mit dem seriellen Monitor. Sie müssen \ r \ n auch senden, wenn die Leitung endet. Wenn esp nicht reagiert, versuchen Sie es mit 9600 Baudrate. Wenn Sie eine gute Ausgabe erhalten, wechseln Sie zur seriellen Software mit der Arbeitsbaudrate. Sie können auch versuchen, die Firmware von esp auf die neueste Version zu aktualisieren, falls Sie dies noch nicht getan haben.
Brtiberio

Können Sie den Seriencode der Software veröffentlichen?
Magic-Mouse

@Personagem, danke. Ich habe diese Fehlerbehebung durchgeführt (dh überprüft, ob ich AT-Befehle senden kann, indem ich Arduino als Bypass verwende). Ich habe festgestellt, dass ich unter 115200 mit dem esp kommunizieren kann. Ich werde versuchen, die Firmware wie von Ihnen vorgeschlagen zu aktualisieren.
Paul

@ Magic-Mouse SoftwareSerial ist eine Bibliothek, die meiner Meinung nach von Arduino bereitgestellt wird. Vielen Dank für Ihre Hilfe bei der Frage, aber ich denke nicht, dass es hilfreich wäre, die Bibliothek hier zu veröffentlichen.
Paul

Ich weiß, was die serielle Softwarebibliothek ist. Ich möchte den Code sehen, in dem Sie die serielle Software verwenden.
Magic-Mouse

Antworten:


8

Weiß jemand, ob das, was ich versuche, möglich ist?

Absolut möglich :)

Und wenn ja, was mache ich falsch?

SoftwareSerial kann keine Baudrate von 115200 erreichen (obwohl dies als Einstellung "zugelassen" ist). Einige Berichte legen nahe, dass bis zu 57600 funktionsfähig sind, obwohl nach meiner Erfahrung 9600 für die Zuverlässigkeit am besten geeignet ist. Wie Sie die Baudrate des ESP8266 ändern, hängt von der Firmware-Version ab. Ich hatte Erfolg mit AT+IPR=9600. Sie müssen diesen Befehl nur einmal ausführen (es handelt sich um eine dauerhafte Einstellung). Basierend auf Ihrer Beschreibung würde ich vorschlagen, dass dies der wahrscheinlichste Schuldige ist, der die von Ihnen beschriebene "Müll" -Ausgabe verursacht.

Ein paar andere Anmerkungen:

  • Der ESP8266 wird mit 3v3 und nicht mit 5v betrieben. Sie sollten ihn also nicht direkt an die digitalen Pins anschließen. Sie müssen einen Logikpegelwandler durchlaufen. Wenn Sie 5 V ausführen, können Sie Ihren ESP8266 braten.
  • Der 3v3-Ausgang des Arduino hat nicht genügend Strom, um den ESP8266 zuverlässig zu unterstützen (50 mA Arduino gegenüber bis zu 300 mA für den ESP8266 von einigen Konten). Versuchen Sie, den ESP8266 über eine separate Versorgung zu betreiben. Es hat wahrscheinlich keine Auswirkungen auf einfache Befehle wie, ATaber wenn Sie versuchen, eine Verbindung zu einem Netzwerk usw. herzustellen, kann dies zu unerwarteten Geräte-Resets führen.
  • Wie von anderen angemerkt, müssen Sie \ r \ n senden - stellen Sie also sicher, dass Ihr serielles Fenster so eingestellt ist, dass beide gesendet werden (dies ist eine Dropdown-Liste im seriellen Fenster).

Bitte beachten Sie, dass AT + IPR manchmal ESP8266 blockieren kann. Weitere Details finden Sie unter: arduino.stackexchange.com/questions/24156/…
Emir

7

Nun, Sie können dies versuchen:

Laden Sie zunächst eine Blinkskizze auf Ihr Arduino hoch und verbinden Sie sie dann wie folgt mit Ihrem ESP8266: TX-TX und RX-RX.

Öffnen Sie nun den seriellen Monitor und senden Sie den AT-Befehl, um festzustellen, ob er reagiert. Wenn ja, können Sie es mit Ihrem Arduino steuern, indem Sie es wieder mit TX-RX und RX-TX verbinden.

PS: Vergessen Sie nicht, die im seriellen Monitor endende Zeile auf Newline oder Carriage Return zu setzen.

Verwenden Sie diesen Code, um eine Verbindung zum ESP8266 herzustellen:

#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);
  }  
}

Da die serielle Hardwareschnittstelle bei Verbindung mit dem Computer ausgelastet ist, müssen Sie eine andere serielle Schnittstelle verwenden, um mit Ihrem ESP8266 zu kommunizieren. In diesem Fall ist Software Serial praktisch.


Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - Aus der Bewertung
Ricardo

1
Ja, ich denke du hast recht. Ich habe meine Antwort bearbeitet.
Ikbel

@KiraSan warum ist Verzögerung (30) erforderlich?
Rahul Rastogi

@RahulRastogi Nur für dieses Beispiel können Sie die Verzögerung verwenden, damit das ESP antworten kann. 30 ms sind nur ein zufälliger Wert. In einem realen Programm sollten Sie dies jedoch vermeiden und einen anderen Mechanismus verwenden, um die Antwort zu überprüfen.
Ikbel

1

Weiß jemand, ob das, was ich versuche, möglich ist? Es ist möglich, ich habe es mit 2 Arduinos gemacht, bei denen einer ESP8266 simulierte (auf eBay-Bestellung warten).

Und wenn ja, was mache ich falsch?

Was Sie tun, ist auf den meisten Ebenen falsch, aber ich denke, Sie haben die meisten Probleme gelöst.

Eine Idee ist, diesen kleinen Kerl zu implementieren: Logic Level Shifter , der Ihnen später viele Probleme erspart.

In Ihrem "WIRING SCHEME 1" verwenden Sie die serielle Hardware-Schnittstelle des Arduino, um direkt mit dem Gerät zu kommunizieren, als wäre es über ein TTL-Kabel oder ein FTDI-Kabel verbunden.

Dies bedeutet, dass das Arduino-Gerät theoretisch von der Hardware liest, wenn es auch mit dem ESP8266 spricht. Wenn Sie ein anderes Arduino- oder TTL-Kabel haben, versuchen Sie, es an Gate 2 und 3 des "Haupt" -Arduinos anzuschließen, und Sie sollten ein ähnliches erhalten Ergebnis wie für Ihr Beispiel Ergebnis 2. Da würden Sie auf diese Weise Proxy durch das Arduino. Wenn nicht, wäre dies ein Ort, an dem Sie mit dem Debuggen beginnen können.

Außerdem kann ich Ihnen nur empfehlen, in einen TTL 3,3 V oder einen Logikpegelwandler zu investieren. Als ich mein Kabel bekam, funktionierte alles sofort.


1

Ich hatte auch viele Probleme. In meinem Fall werden Probleme fast durch den Wechsel von SoftwareSerial zu AltSoftSerial gelöst . Es schien, dass auf der Uno die serielle Bibliothek der Standard-Software für mich nicht funktionierte. Nach dem Wechsel bekam ich zum ersten Mal wieder Ergebnisse. (Ich habe auch Pegelverschiebung und externe Stromversorgung für 3,3 V verwendet)


Und mit fast gelöst meine ich - ich bekomme immer noch von Zeit zu Zeit Kauderwelsch auf dem Terminal. Selbst AltSoftSerial ist also keine perfekte Lösung. Ich habe das ESP-07 mit einer Datenrate von 115200 Bit / s verwendet.


Können Sie Ihrer Beschreibung hinzufügen? Es wäre hilfreich zu wissen, wie Sie die Verbindung zwischen dem Uno und dem ESP verkabelt haben. Vielen Dank!
dlu


0

Hier einige Tipps zur Verwendung des ESP8266-Moduls.

  1. Verwenden Sie keine serielle Software, da diese insbesondere bei höheren Baudraten unzuverlässig ist.

  2. Immer connect ESP - Modul an den Computer und testen Sie alle AT - Befehle vor interacing mit Arduino , um sicherzustellen , dass Sie in die richtige Richtung arbeiten

  3. Erstellen Sie eine Netzteilplatine , um das ESP-Modul mit der Arduino 5v-Versorgung kompatibel zu machen

Überprüfen Sie auch diesen Link für weitere Details

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.