Forbinder Arduino Nano med ESP8266 Wifi-modul

Jeg begyndte for nylig at lege med Arduinos for at forbinde et par sensorer op. Jeg brugte en Arduino Nano til at måle temperatur, fugtighed, lufttryk og lysniveau.

For at gemme dataene i en database brugte jeg en anden Arduino, som jeg forbandt til en Raspberry Pi, og lod de to Arduinos tale trådløst til hinanden via 433 MHz.

Det hele fungerer ret godt, men 433 MHz-kommunikationen er ikke ligefrem den mest pålidelige (jeg savner ofte en transmission). Da jeg snuble over ESP8266-modulet, virkede det som den optimale løsning til kommunikation. Hvor sej ville det være, hvis jeg bare kunne trække oplysningerne ud via et HTTP-opkald fra Raspberry Pi?

Efter at have leget rundt i mange timer og uploadet mange forskellige firmwares, blev jeg mere og mere frustreret, fordi jeg ikke kunne få det til at gøre noget, endelig har jeg det til at arbejde gennem et FTDI-modul tilsluttet sådan:

indtast billedbeskrivelse her

Jeg bruger et MB102 strømmodul til at levere de 3.3v, der kræves af ESP8266. Det viser sig, at du skal forbinde jorden fra MB102 til jorden på FTDI-modulet for at få et korrekt svar. Efter at have gjort det var jeg i stand til at sende AT-kommandoer og få de rigtige svar. Jeg kunne endda forbinde det til mit hjem-wifi.

Den næste ting jeg vil gøre er at forbinde det til Arduino. Jeg fandt et meget simpelt skema til det ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), hvor du forbinder RX til TX og TX til RX. Ved hjælp af MB102 forbandt jeg det sådan:

indtast billedbeskrivelse her

Jeg skulle tilsyneladende nu være i stand til at uploade en tom skitse til Arduino og derefter bruge den serielle skærm igen til at føle AT-kommandoen, nøjagtigt på samme måde som jeg gjorde det, når jeg brugte FTDI-modulet.

Problemet er, at jeg slet ikke får noget på denne måde. Jeg kan ikke engang se mine egne AT-kommandoer i konsollen. Jeg ser ESP8266 blinke hver gang jeg sender en kommando (jeg kan endda se, at den stadig er forbundet til min router, sandsynligvis huskede den den information, jeg sender gennem FTDI .. .?)

Spørgsmålet er, hvad går jeg galt? Jeg læste nogle indlæg om TX fra Arduino, der også var 5v, og at du skal gøre noget for at bringe det tilbage til 3.3v, men der er også mange selvstudier, der siger, at det ikke er nødvendigt.

Svar

Den nemmeste måde at arbejde med disse devuces på er at oprette forbindelse dem til et ekstra par Arduino-ben og brug SoftwareSerial til kommunikation (medmindre du bruger en af Arduinos med mere end en UART). SoftwareSerial arbejder op til 9600 baud på 16MHz-enheder, 4800 på 8MHz-enheder, så du skal bruge for at indstille ESP8266 til at imødekomme det. De leverer i øjeblikket med 115200 baud. Du kan bruge hardware-UART på stifter (0, 1), men derefter genprogrammerer Arduino betyder at afbryde & genforbinde ESP midlertidigt hver gang og bliver gammel ret hurtigt. >

Her er hvad jeg laver med nye ESPer (hvis du har gentaget din ESP, skal du downloade AT-instruktions-emulatoren og genblinke den 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 reference er her et link til ESP8266 AT Instruktionssæt .

Opdatering juni 2020: Ovenstående link blev brudt, nu rettet. Du kan også finde dokumentation på Espressifs github-konto (online læsbar, men ikke pdf, fra og med denne dato).

Kommentarer

  • Jeg har lige indset, at dette spørgsmål er uddybet fra arkivet med ubesvarede spørgsmål fra 6 måneder siden . Åh, ja – måske hjælper dette svar en anden nu eller snart.

Svar

Der kan være en problem med baudrate fra Nano FTDI-chip til RX / TX og ESP8266. Afbrydede du forbindelsen, da du uploade skitsen?

Hvad med at prøve dette i stedet?

Skål!

Kommentarer

  • Når jeg arbejder med ESP8266, fungerer det omkring 115200 baud, alt andet giver bare affald . Jeg ‘ har prøvet koden fra den linkede blog (ændrer kun baudhastigheden), jeg ser den ‘ sender kommando til ESP8266 (blåt lys blinker), men det mislykkes, når det forsøger at udføre Serial.find (” > “) kommando. Jeg ser også nou output fra ESP8266 overhovedet. Jeg frakoblede ESP8266, mens jeg uploader.

Svar

Snuble på god vejledning her, prøvet og det gør job: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/

Kommentarer

  • Det fungerer med undtagelse af CIOBAUD-kommandoen, der er blevet erstattet.Den aktuelle kommando for alle UART-funktioner er: AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol> eller AT+UART_DEF-9600,8,1,0,0 for at være kompatibel med SoftwareSerial. Udskift ” _DEF ” med ” _CUR ” hvis denne ændring kun er til sessionen; den første kommando gør det til opstartsstandard.
  • Venligst kan du udvide informationen fra den blog til dette svar, hvis linket dør, men også for at gøre det til et bedre svar

Svar

Ja, hvis du bruger forskellige strømkilder, skal grundene altid være forbundet, ellers ved kortene ikke hvad nul volt er.

TX af Arduino er 5v, du har brug for en niveauskifter for at konvertere 5v til 3.3v, noget 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 skal bruge en niveauskifter til at håndtere dette. Du kan brug den samme som anført ovenfor, fordi den kan konvertere 4 høje (5v) signaler til 4 lave (3,3v) signaler.

Folk siger, at du kan, så det med modstande, men jeg har også læst, at de fungerer ikke godt nok til at håndtere hurtige skiftende digitale signaler (så 300 Baud på din serie kan være OK, men ikke 115000 :))

People a Jeg siger også, at du ikke har brug for niveauomformere. Det er sande ting kan virke et stykke tid uden dem, men før eller senere kommer der noget at springe op. Forøgelse af spændingen vil fremskynde processen, så du kan forestille dig, hvad der vil ske, hvis du tilsluttede en 230v forsyning direkte til en USB-enhed.

Et sidste punkt, ved du, at ESP8266 er en 80 / 160MHz processor med 256 KB RAM, når du sammenligner det med dig, Arduino er ligesom at programmere din pc via din telefon. du kan prøve at forbinde ESP8266 via et FTDI-modul og programmere det via Arduino IDE i Arduino C. Det er meget nemmere end alle disse forbindelses ting.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *