Ich habe kürzlich angefangen, mit Arduinos herumzuspielen, um ein paar Sensoren anzuschließen. Ich habe einen Arduino Nano verwendet, um Temperatur, Luftfeuchtigkeit, Luftdruck und Lichtstärke zu messen.
Um die Daten in einer Datenbank zu speichern, habe ich einen anderen Arduino verwendet, den ich mit einem Raspberry Pi verbunden habe, und die beiden Arduinos sprechen lassen drahtlos miteinander über 433 MHz.
Das funktioniert alles ziemlich gut, aber die 433 MHz-Kommunikation ist nicht gerade die zuverlässigste (ich vermisse oft eine Übertragung). Als ich auf das ESP8266-Modul stieß, schien es die optimale Lösung für die Kommunikation zu sein. Wie cool wäre es, wenn ich die Informationen einfach über einen HTTP-Aufruf vom Raspberry Pi abrufen könnte?
Nachdem ich viele Stunden herumgespielt, viele verschiedene Firmwares hochgeladen hatte, wurde ich immer frustrierter, weil ich es nicht konnte Lassen Sie es etwas tun, ich habe es endlich über ein FTDI-Modul, das wie folgt verbunden ist:
Ich verwende ein MB102-Leistungsmodul, um die vom ESP8266 benötigten 3,3 V bereitzustellen. Es stellt sich heraus, dass Sie die Erdung vom MB102 mit der Erdung des FTDI-Moduls verbinden müssen, um eine ordnungsgemäße Reaktion zu erhalten. Danach konnte ich AT-Befehle senden und die richtigen Antworten erhalten. Ich könnte es sogar mit meinem Heim-WLAN verbinden.
Als nächstes möchte ich es mit dem Arduino verbinden. Ich habe dafür ein sehr einfaches Schema gefunden ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), in dem Sie RX mit TX und TX mit RX verbinden. Mit dem MB102 habe ich es folgendermaßen verbunden:
Anscheinend sollte ich jetzt in der Lage sein, eine leere Skizze auf das Arduino hochzuladen und dann den seriellen Monitor erneut zu verwenden, um den AT-Befehl zu erfassen, genau so, wie ich es bei Verwendung des FTDI-Moduls getan habe.
Das Problem ist, dass ich auf diese Weise überhaupt nichts bekomme. Ich sehe nicht einmal meine eigenen AT-Befehle in der Konsole. Ich sehe, dass der ESP8266 jedes Mal blinkt, wenn ich einen Befehl sende (ich sehe sogar, dass er immer noch mit meinem Router verbunden ist, wahrscheinlich erinnerte er sich an die Informationen, die ich über das FTDI gesendet habe. .?)
Die Frage ist, was mache ich falsch? Ich habe einige Beiträge über den TX vom Arduino gelesen, der ebenfalls 5 V hat und dass Sie etwas tun müssen, um ihn wieder auf 3,3 V zu bringen, aber da Es gibt auch viele Tutorials, die besagen, dass dies nicht erforderlich ist.
Antwort
Der einfachste Weg, mit diesen Geräten zu arbeiten, besteht darin, eine Verbindung herzustellen sie an ein Ersatzpaar von Arduino-Pins anschließen und SoftwareSerial für die Kommunikation verwenden (es sei denn, Sie verwenden eines der Arduinos mit mehr als einem UART). SoftwareSerial arbeitet mit bis zu 9600 Baud auf 16-MHz-Geräten, 4800 auf 8-MHz-Geräten, sodass Sie es benötigen um den ESP8266 so einzustellen. Sie versenden derzeit mit 115200 Baud. Sie können den Hardware-UART an den Pins (0, 1) verwenden, aber wenn Sie den Arduino neu programmieren, müssen Sie die & trennen, um den ESP jedes Mal vorübergehend wieder anzuschließen, und er wird ziemlich schnell alt. P. >
Folgendes mache ich mit neuen ESPs (Wenn Sie Ihr ESP erneut geflasht haben, müssen Sie zuerst den AT-Befehlssatz-Emulator herunterladen und damit erneut flashen):
# To configure a new ESP module: # Connect the ESP and the FTDI as in your top diagram, set your # terminal-emulator to 115200 baud, and enter the following: AT # ESP should respond "OK" AT+RST # Resets the ESP AT+UART_DEF=9600,8,1,0,0 # Sets ESP UART: 9600,N,8,1,no flow ctl # Now change the terminal emulator baud rate to 9600 AT+CWMODE=1 # Set ESP to station mode (client) ATE0 # Set ESP"s echo off AT+CWLAP # List access points - after a short pause # the ESP returns a list of WiFi access points
Zum späteren Nachschlagen finden Sie hier einen Link zum ESP8266 AT-Befehlssatz .
Update Juni 2020: Der obige Link wurde unterbrochen, jetzt behoben. Dokumentation finden Sie auch unter Espressifs Github-Konto (online lesbar, aber nicht pdf, ab diesem Datum).
Kommentare
- Ich habe gerade festgestellt, dass diese Frage aus dem Archiv der unbeantworteten Fragen vor 6 Monaten ausgebaggert wurde . Na ja – vielleicht hilft diese Antwort jetzt oder bald jemand anderem.
Antwort
Möglicherweise gibt es eine Problem mit der Baudrate vom Nano FTDI-Chip zum RX / TX und zum ESP8266. Haben Sie beim Hochladen der Skizze die Verbindung getrennt?
Wie wäre es, wenn Sie stattdessen dies versuchen?
Prost!
Kommentare
- Wenn ich mit dem ESP8266 arbeite, funktioniert es mit 115200 Baud, alles andere gibt nur Müll . Ich ‚ habe den Code aus dem verknüpften Blog ausprobiert (nur die Baudrate wurde geändert). Ich sehe, dass ‚ den Befehl zum Senden an den ESP8266 sendet (blaues Licht blinkt), schlägt jedoch fehl, wenn versucht wird, Serial.find auszuführen (“ > „) Befehl. Ich sehe auch keine Ausgabe vom ESP8266. Ich habe den ESP8266 beim Hochladen getrennt.
Antwort
Stolperte über ein gutes Tutorial hier, versuchte es und es macht das Job: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Kommentare
- Das funktioniert mit Ausnahme des CIOBAUD-Befehls, der ersetzt wurde.Der aktuelle Befehl für alle UART-Funktionen lautet:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
oderAT+UART_DEF-9600,8,1,0,0
, um mit SoftwareSerial kompatibel zu sein. Ersetzen Sie “ _DEF “ durch “ _CUR “ wenn diese Änderung nur für die Sitzung gilt; Der erste Befehl macht es zum Standard beim Einschalten. - Bitte können Sie die Informationen aus diesem Blog in diese Antwort erweitern, wenn der Link stirbt, aber auch, um eine bessere Antwort zu erhalten
Antwort
Ja, wenn Sie verschiedene Stromquellen verwenden, muss die Erdung immer angeschlossen werden, sonst wissen die Karten nicht, was Null Volt ist.
Der TX des Arduino ist 5 V, Sie benötigen einen Pegelumsetzer, um 5 V in 3,3 V umzuwandeln, ungefähr so ( https://shop.pimoroni.com/products/adafruit-4-channel-i2c-safe-bi-directional-logic-level-converter?utm_medium=cpc&utm_source=googlepla&variant=302017581&gclid=CPqujsPxlc0CFcYcGwodb8YIoA )
Der TX des ESP8266 beträgt 3,3 V und der RX des Arduino beträgt 5 V, und Sie benötigen einen Pegelumsetzer, um dies zu handhaben Verwenden Sie dasselbe wie oben aufgeführt, da es 4 hohe (5 V) Signale in 4 niedrige (3,3 V) Signale umwandeln kann.
Die Leute sagen, dass Sie dies mit Widerständen tun können, aber ich habe auch gelesen, dass sie Nicht gut genug, um schnell umschaltende digitale Signale zu verarbeiten (300 Baud auf Ihrer Seriennummer sind möglicherweise in Ordnung, aber nicht 115000 :))
Personen a Sagen wir also, Sie brauchen keine Pegelwandler. Das ist wahr, Dinge könnten eine Weile ohne sie funktionieren, aber früher oder später wird etwas platzen. Durch Erhöhen der Spannung wird der Prozess beschleunigt, sodass Sie sich vorstellen können, was passieren wird, wenn Sie eine 230-V-Versorgung anschließen direkt an ein USB-Gerät.
Ein letzter Punkt: Wissen Sie, dass der ESP8266 ein 80/160-MHz-Prozessor mit 256 KB RAM ist, wenn Sie das mit Ihrem Arduino vergleichen, ist es so, als würden Sie Ihren PC über Ihr Telefon programmieren Sie könnten versuchen, den ESP8266 über ein FTDI-Modul anzuschließen und über die Arduino IDE in Arduino C zu programmieren. Es ist viel einfacher als all diese Verbindungsmaterialien.