Jag började nyligen spela med Arduinos för att ansluta några sensorer uppåt. Jag använde en Arduino Nano för att mäta temperatur, luftfuktighet, lufttryck och ljusnivå.
För att lagra data i en databas använde jag en annan Arduino som jag kopplade till en Raspberry Pi och lät de två Arduinoerna prata trådlöst till varandra via 433 MHz.
Allt fungerar ganska bra, men 433 MHz-kommunikationen är inte precis den mest pålitliga (jag saknar ofta en överföring). När jag snubblade över ESP8266-modulen verkade det som den optimala lösningen för kommunikation. Hur coolt skulle det vara om jag bara kunde ta ut informationen via ett HTTP-samtal från Raspberry Pi?
Efter att ha lekt i många timmar, ladda upp många olika firmware, bli mer och mer frustrerad eftersom jag inte kunde få det att göra vad som helst, jag har äntligen att arbeta genom en FTDI-modul ansluten så här:
Jag använder en MB102-strömmodul för att tillhandahålla de 3.3v som krävs av ESP8266. Jag visar mig att du måste ansluta marken från MB102 till marken på FTDI-modulen för att få korrekt svar. Efter att ha gjort det kunde jag skicka AT-kommandon och få rätt svar. Jag kan till och med ansluta den till mitt hem-wifi.
Nästa sak jag vill göra är att ansluta den till Arduino. Jag hittade ett mycket enkelt schema för det ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), där du ansluter RX till TX och TX till RX. Med hjälp av MB102 kopplade jag den så här:
Tydligen borde jag nu kunna ladda upp en tom skiss till Arduino och sedan använda den seriella bildskärmen igen för att känna av AT-kommandot, exakt samma sätt som jag gjorde när jag använde FTDI-modulen.
Problemet är att jag inte får någonting alls på det här sättet. Jag ser inte ens mina egna AT-kommandon i konsolen. Jag ser ESP8266 blinka varje gång jag skickar ett kommando (jag ser till och med att den fortfarande är ansluten till min router, förmodligen kom den ihåg den information jag skickar via FTDI .. .?)
Frågan är, vad gör jag fel? Jag läste några inlägg om TX från Arduino som också var 5v och att du måste göra något för att få tillbaka det till 3.3v, men där finns också många självstudier som säger att det inte krävs.
Svar
Det enklaste sättet att arbeta med dessa devuces är att ansluta dem till ett extra par Arduino-stift och använd SoftwareSerial för att kommunicera (såvida du inte använder en av Arduinos med mer än en UART). SoftwareSerial fungerar upp till 9600 baud på 16MHz-enheter, 4800 på 8MHz-enheter, så du behöver för att ställa in ESP8266 så att den passar. De levererar för närvarande med 115200 baud. Du kan använda UART-maskinvaran på stiften (0, 1) men omprogrammering av Arduino betyder att du kopplar bort & återansluter ESP tillfälligt varje gång och blir gammal ganska snabbt.
Här är vad jag gör med nya ESP: er (om du har återblinkat din ESP, måste du ladda ner AT-instruktions-emulatorn och blixta igen med det först):
# 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
För framtida referens, här är en länk till ESP8266 AT Instruktionsuppsättning .
Uppdatering juni 2020: Länken ovan bröts, nu fixad. Du kan också hitta dokumentation på Espressifs github-konto (online läsbart, men inte pdf, från och med detta datum).
Kommentarer
- Jag insåg just att den här frågan har muddrats från arkivet med obesvarade frågor från 6 månader sedan . Åh, ja – kanske hjälper det här svaret någon annan nu eller snart.
Svar
Det kan finnas en problem med baudrat från Nano FTDI-chip till RX / TX och ESP8266. Kopplade du bort när du laddade upp skissen?
Vad sägs om att prova detta istället?
Skål!
Kommentarer
- När jag arbetar med ESP8266 fungerar det om 115200 baud, allt annat ger bara skräp . Jag ’ har provat koden från den länkade bloggen (ändrar bara överföringshastigheten), jag ser att den ’ sänder kommandot till ESP8266 (blått ljus blinkar), men det misslyckas när det försöker köra Serial.find (” > ”) kommando. Jag ser också nu-utdata från ESP8266 alls. Jag kopplade bort ESP8266 medan jag laddade upp.
Svar
Snubblade på bra handledning här, försökte och det gör jobb: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Kommentarer
- Det fungerar förutom kommandot CIOBAUD som har ersatts.Det aktuella kommandot för alla UART-funktioner är:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
ellerAT+UART_DEF-9600,8,1,0,0
för att vara kompatibelt med SoftwareSerial. Byt ut ” _DEF ” med ” _CUR ” om denna ändring endast gäller sessionen; det första kommandot gör det till startstart. - Kan du utöka informationen från den bloggen till detta svar om länken dör, men också för att göra det till ett bättre svar
Svar
Ja, om du använder olika strömkällor måste skälen alltid vara anslutna, annars vet inte korten vad noll volt är.
Arduino TX är 5v, du behöver en nivåväxlare för att konvertera 5v till 3.3v, något liknande detta ( 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 )
TX på ESP8266 är 3.3v och RX på Arduino är 5V och du behöver en nivåväxlare för att hantera detta. använd samma som listas ovan, eftersom det kan konvertera 4 höga (5v) signaler till 4 låga (3,3v) signaler.
Folk säger att du kan så det med motstånd, men jag har också läst att de fungerar inte tillräckligt bra för att hantera snabba digitala signaler (så 300 Baud på din serie kan vara OK, men inte 115000 :))
People a Jag säger också att du inte behöver nivåomvandlare. Det är sanna saker kan fungera ett tag utan dem, men förr eller senare kommer något att dyka upp. Ökning av spänningen kommer att påskynda processen så att du kan föreställa dig vad som händer om du anslöt en 230v-matning direkt till en USB-enhet.
En sista punkt, vet du att ESP8266 är en 80 / 160MHz processor med 256 kB RAM, när du jämför det med dig Arduino är som att programmera din PC via din telefon. du kan försöka ansluta ESP8266 via en FTDI-modul och programmera den via Arduino IDE i Arduino C. Det är mycket lättare än alla dessa anslutnings saker.