Nedávno jsem začal hrát s Arduinosem, abych připojil několik senzorů. Použil jsem Arduino Nano k měření teploty, vlhkosti, tlaku vzduchu a úrovně světla.
K uložení dat do databáze jsem použil jiné Arduino, které jsem připojil k Raspberry Pi, a nechal dva Arduina hovořit bezdrátově mezi sebou přes 433 MHz.
To vše funguje docela dobře, ale 433 MHz komunikace není zrovna nejspolehlivější (často mi chybí přenos). Když jsem narazil na modul ESP8266, vypadalo to jako optimální řešení pro komunikaci. Jak skvělé by bylo, kdybych mohl jednoduše vytáhnout informace prostřednictvím volání HTTP z Raspberry Pi?
Po mnoha hodinách hraní, nahrávání mnoha různých firmwarů, stále frustrovanější, protože jsem nemohl nechte to dělat cokoli, konečně to funguje prostřednictvím modulu FTDI připojeného takto:
Používám napájecí modul MB102 k zajištění 3,3 V vyžadovaného ESP8266. Ukázalo se, že musíte připojit zem z MB102 k zemi modulu FTDI, abyste získali správnou odpověď. Poté jsem byl schopen poslat AT příkazy a získat správné odpovědi. Mohl bych ho dokonce připojit k domácímu WiFi.
Další věc, kterou chci udělat, je připojit ho k Arduinu. Našel jsem pro to velmi jednoduché schéma ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), kde připojujete RX k TX a TX k RX. Pomocí MB102 jsem jej připojil takto:
Zdá se, že bych nyní měl být schopen nahrát prázdnou skicu do Arduina a poté znovu použít sériový monitor ke snímání AT příkazu, přesně tak, jak jsem to udělal při použití modulu FTDI.
Problém je v tom, že tímto způsobem vůbec nic nedostanu. V konzole nevidím ani své vlastní AT příkazy. Vidím ESP8266 blikat pokaždé, když posílám příkaz (vidím ho stále připojený k mému routeru, pravděpodobně si pamatoval informace, které posílám přes FTDI .. .?)
Otázka zní, v čem se mýlím? Přečetl jsem si několik příspěvků o tom, že TX z Arduina je také 5v a že je třeba něco udělat, abys to vrátil na 3,3v, ale tam je také mnoho tutoriálů, které říkají, že to není povinné.
Odpověď
Nejjednodušší způsob práce s těmito devucesy je připojení k náhradní dvojici pinů Arduino a ke komunikaci použijte SoftwareSerial (pokud nepoužíváte jeden z Arduinos s více než jedním UART). SoftwareSerial pracuje až 9600 baudů na zařízeních 16MHz, 4800 na 8MHz zařízeních, takže budete potřebovat nastavit ESP8266 tak, aby to vyhovovalo. V současné době dodávají s rychlostí 115 200 baudů. Můžete použít hardwarový UART na piny (0, 1), ale pak přeprogramovat Arduino znamená odpojit & pokaždé dočasně znovu připojit ESP a rychle zestárnout.
Tady je to, co dělám s novými ESP (Pokud jste znovu spustili svůj ESP, budete si muset nejprve stáhnout emulátor AT instrukční sady a znovu jej s tím přehodnotit):
# 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
Pro budoucí použití je zde odkaz na ESP8266 AT instrukční sadu .
Aktualizace červen 2020: Výše uvedený odkaz byl přerušen, nyní opraven. Dokumentaci najdete také na účtu Esithif s github (čitelný online, ale ne pdf, k tomuto datu).
Komentáře
- Právě jsem si uvědomil, že tato otázka byla vytěžena z archivu nezodpovězených otázek před 6 měsíci . No, dobře – možná tato odpověď pomůže někomu jinému teď nebo brzy.
Odpovědět
Možná existuje problém s přenosovou rychlostí od čipu Nano FTDI k RX / TX a ESP8266. Odpojili jste se při nahrávání náčrtu?
Co kdybyste místo toho vyzkoušeli toto ?
Na zdraví!
Komentáře
- Když pracuji s ESP8266, funguje to na 115200 baudů, všechno ostatní jen dává smetí . ‚ Vyzkoušel jsem kód z propojeného blogu (pouze změna přenosové rychlosti), vidím ‚ odesílání příkazu do ESP8266 (modré světlo bliká), ale selže, když se pokusí provést Serial.find (“ > „) příkaz. Také vidím žádný výstup z ESP8266. Během nahrávání jsem odpojil ESP8266.
Odpověď
Narazil jsem zde na dobrý tutoriál, vyzkoušel jsem to a úloha: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Komentáře
- To bude fungovat, kromě příkazu CIOBAUD, který byl nahrazen.Aktuální příkaz pro všechny funkce UART je:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
neboAT+UART_DEF-9600,8,1,0,0
, aby byl kompatibilní se softwarem SoftwareSerial. Nahraďte “ _DEF “ řetězcem “ _CUR “ pokud je tato změna pouze pro relaci; první příkaz z něj činí výchozí nastavení pro zapnutí. - Můžete rozšířit informace z tohoto blogu do této odpovědi, pokud odkaz zemře, ale také z toho udělat lepší odpověď
Odpověď
Ano, pokud používáte různé zdroje napájení, musí být vždy připojeny důvody, jinak desky nevědí, co nula voltů je.
TX v Arduinu je 5v, potřebujete převodník úrovní pro převod 5v na 3,3v, něco podobného ( 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 na ESP8266 je 3,3 V a RX na Arduinu je 5 V a k tomu budete potřebovat posunovač úrovně. Můžete použijte stejný, jak je uvedeno výše, protože dokáže převést 4 vysoké (5v) signály na 4 nízké (3,3v) signály.
Lidé říkají, že to můžete udělat s rezistory, ale také jsem četl, že oni nepracují dostatečně dobře na to, aby zvládly rychle se přepínající digitální signály (takže 300 Baud na vašem seriálu může být v pořádku, ale ne 115000 :))
Lidé Řekněme, že nepotřebujete převaděče úrovní. To jsou skutečné věci, které by mohly chvíli fungovat i bez nich, ale dříve či později něco praskne. Zvýšení napětí proces urychlí, takže si dokážete představit, co se stane, pokud připojíte napájení 230 V přímo na zařízení USB.
Poslední věcí je, že víte, že ESP8266 je procesor 80 / 160MHz s 256 kB RAM, když to porovnáte s Arduinem, je to jako programování vašeho PC přes telefon. Co můžete zkusit připojit ESP8266 přes FTDI modul a naprogramovat jej přes Arduino IDE v Arduino C. Je to mnohem jednodušší než všechny tyto věci připojení.