Jeg begynte nylig å leke med Arduinos for å koble noen få sensorer opp. Jeg brukte en Arduino Nano for å måle temperatur, fuktighet, lufttrykk og lysnivå.
For å lagre dataene i en database brukte jeg en annen Arduino som jeg koblet til en Raspberry Pi, og lot de to Arduinoene snakke trådløst til hverandre via 433 MHz.
Alt fungerer ganske bra, men 433 MHz-kommunikasjonen er ikke akkurat den mest pålitelige (jeg savner ofte en overføring). Da jeg snublet over ESP8266-modulen, virket det som den optimale løsningen for kommunikasjon. Hvor kult ville det være hvis jeg bare kunne hente ut informasjonen via en HTTP-samtale fra Raspberry Pi?
Etter å ha lekt i mange timer, lastet opp mange forskjellige firmware, ble mer og mer frustrert fordi jeg ikke kunne få det til å gjøre hva som helst, jeg endelig har det til å jobbe gjennom en FTDI-modul koblet opp slik:
Jeg bruker en MB102 strømmodul for å levere 3.3v som kreves av ESP8266. Det viser seg at du må koble bakken fra MB102 til bakken på FTDI-modulen for å få riktig respons. Etter å ha gjort det, var jeg i stand til å sende AT-kommandoer og få de riktige svarene. Jeg kan til og med koble den til hjemmet Wifi.
Den neste tingen jeg vil gjøre er å koble den til Arduino. Jeg fant et veldig enkelt skjema for det ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), hvor du kobler RX til TX og TX til RX. Ved hjelp av MB102 koblet jeg den slik:
Tilsynelatende burde jeg nå kunne laste opp en tom skisse til Arduino, og deretter bruke den serielle skjermen igjen for å føle AT-kommandoen, nøyaktig på samme måte som jeg gjorde det når jeg brukte FTDI-modulen.
Problemet er at jeg ikke får noe i det hele tatt på denne måten. Jeg ser ikke engang mine egne AT-kommandoer i konsollen. Jeg ser ESP8266 blinke hver gang jeg sender en kommando (jeg ser til og med at den fortsatt er koblet til ruteren min, sannsynligvis husket den informasjonen jeg sendte gjennom FTDI .. .?)
Spørsmålet er hva går jeg galt? Jeg leste noen innlegg om at TX fra Arduino også var 5v og at du må gjøre noe for å bringe den tilbake til 3.3v, men der er også mange opplæringsprogrammer som sier at det ikke er nødvendig.
Svar
Den enkleste måten å jobbe med disse devukene på er å koble til dem til et ekstra par Arduino-pinner og bruk SoftwareSerial for å kommunisere (med mindre du bruker en av Arduino-ene med mer enn en UART). SoftwareSerial fungerer opptil 9600 baud på 16MHz-enheter, 4800 på 8MHz-enheter, så du trenger for å stille inn ESP8266 for å imøtekomme det. De leverer for øyeblikket 115200 baud. Du kan bruke maskinvaren UART på pinner (0, 1), men omprogrammering av Arduino betyr å koble fra & Koble til ESP midlertidig hver gang, og blir gammel ganske raskt.
Her er hva jeg gjør med nye ESPer (hvis du har blinket ESP-en din på nytt, må du laste ned AT-instruksjonsemulatoren og blinke den 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
For fremtidig referanse, her er en lenke til ESP8266 AT Instruksjonssett .
Oppdatering juni 2020: Ovenstående lenke ble ødelagt, nå løst. Du kan også finne dokumentasjon på Espressifs github-konto (online lesbar, men ikke pdf, fra og med denne datoen).
Kommentarer
- Jeg skjønte nettopp at dette spørsmålet er blitt utmudret fra arkivet med ubesvarte spørsmål fra 6 måneder siden . Å, vel – kanskje dette svaret vil hjelpe noen andre nå eller snart.
Svar
Det kan være et problemet med baudratet fra Nano FTDI-brikken til RX / TX og ESP8266. Har du koblet fra når du lastet opp skissen?
Hva med å prøve dette i stedet?
Skål!
Kommentarer
- Når jeg jobber med ESP8266, fungerer det om 115200 baud, alt annet gir bare søppel . Jeg ‘ har prøvd koden fra den koblede bloggen (endrer bare overføringshastigheten), jeg ser den ‘ sender kommando til ESP8266 (blått lys blinker), men det mislykkes når den prøver å utføre Serial.find (» > «) kommando. Jeg ser også utdata fra ESP8266 overhodet. Jeg koblet fra ESP8266 mens jeg lastet opp.
Svar
Snublet over god veiledning her, prøvd og det gjør jobb: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Kommentarer
- Det fungerer bortsett fra CIOBAUD-kommandoen som er erstattet.Den nåværende kommandoen for alle UART-funksjoner er:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
, ellerAT+UART_DEF-9600,8,1,0,0
for å være kompatibel med SoftwareSerial. Bytt ut » _DEF » med » _CUR » hvis denne endringen bare er for økten; den første kommandoen gjør det til oppstartsstandard. - Vennligst kan du utvide informasjonen fra den bloggen til dette svaret hvis lenken dør, men også for å gjøre det til et bedre svar
Svar
Ja, hvis du bruker forskjellige strømkilder, må begrunnelsen alltid være tilkoblet, ellers vet ikke kortene hva null volt er.
TX av Arduino er 5v, du trenger en nivåskifter for å konvertere 5v til 3.3v, noe sånt som dette ( 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 er 3.3v og RX på Arduino er 5V, og du trenger en nivåskifter for å håndtere dette. Du kan bruk den samme som er oppført ovenfor, fordi den kan konvertere 4 høye (5v) signaler til 4 lave (3,3v) signaler.
Folk sier at du kan det med motstander, men jeg har også lest at de ikke presterer godt nok til å håndtere raske bytter av digitale signaler (så 300 Baud på serien din kan være OK, men ikke 115000 :))
People a Jeg sier at du ikke trenger nivåomformere. Det er sanne ting kan fungere en stund uten dem, men før eller siden vil noe skje. Å øke spenningen vil øke hastigheten på prosessen, slik at du kan forestille deg hva som vil skje hvis du kobler til en 230v forsyning direkte til en USB-enhet.
Et siste punkt, vet du at ESP8266 er en 80 / 160MHz prosessor med 256 kB RAM, når du sammenligner det med deg Arduino er som å programmere din PC via telefonen. du kan prøve å koble ESP8266 via en FTDI-modul og programmere den via Arduino IDE i Arduino C. Det er mye enklere enn alle disse tilkoblings tingene.