Ik ben onlangs begonnen met spelen met Arduinos om een paar sensoren aan te sluiten. Ik heb een Arduino Nano gebruikt om temperatuur, vochtigheid, luchtdruk en lichtniveau te meten.
Om de gegevens in een database op te slaan, heb ik een andere Arduino gebruikt die ik op een Raspberry Pi heb aangesloten en de twee Arduinos laten praten draadloos met elkaar verbonden via 433 MHz.
Dat werkt allemaal best goed, maar de 433 MHz communicatie is niet bepaald de meest betrouwbare (ik mis vaak een uitzending). Toen ik de ESP8266-module tegenkwam, leek dit de optimale oplossing voor communicatie. Hoe gaaf zou het zijn als ik de informatie gewoon kon ophalen via een HTTP-oproep van de Raspberry Pi?
Na vele uren spelen, veel verschillende firmwares uploaden, raakte ik steeds meer gefrustreerd omdat ik niet kon krijg het om iets te doen, ik heb het eindelijk laten werken via een FTDI-module die zo is aangesloten:
Ik gebruik een MB102 voedingsmodule om de 3.3v te leveren die vereist is door de ESP8266. Ik blijkt dat je de aarde van de MB102 moet verbinden met de aarde van de FTDI-module om een goed antwoord te krijgen. Nadat ik dat had gedaan, kon ik AT-opdrachten verzenden en de juiste antwoorden krijgen. Ik zou hem zelfs op mijn wifi thuis kunnen aansluiten.
Het volgende dat ik wil doen, is hem op de Arduino aansluiten. Ik heb daarvoor een heel eenvoudig schema gevonden ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), waarbij je RX met TX en TX met RX verbindt. Met behulp van de MB102 heb ik hem als volgt aangesloten:
Blijkbaar zou ik nu in staat moeten zijn om een lege schets naar de Arduino te uploaden en dan de seriële monitor opnieuw te gebruiken om het AT-commando te detecteren, precies zoals ik het deed met de FTDI-module.
Het probleem is dat ik op deze manier helemaal niets krijg. Ik zie niet eens mijn eigen AT-opdrachten in de console. Ik zie de ESP8266 wel knipperen elke keer dat ik een opdracht verstuur (ik zie hem zelfs nog steeds verbonden met mijn router, waarschijnlijk herinnerde hij zich de informatie die ik via de FTDI stuur. .?)
De vraag is, wat ga ik fout? Ik heb een aantal berichten gelezen over de TX van de Arduino die ook 5v is en dat je iets moet doen om het terug te brengen naar 3.3v, maar daar zijn ook veel tutorials die zeggen dat het “niet vereist is.
Antwoord
De gemakkelijkste manier om met deze apparaten te werken, is door verbinding te maken ze aansluiten op een paar extra Arduino-pinnen en SoftwareSerial gebruiken om te communiceren (tenzij je een van de Arduinos met meer dan één UART gebruikt). SoftwareSerial werkt tot 9600 baud op 16 MHz-apparaten, 4800 op 8 MHz-apparaten, dus je zult om de ESP8266 hierop in te stellen. Ze verzenden momenteel op 115200 baud. Je kunt de hardware-UART op pinnen (0, 1) gebruiken, maar het opnieuw programmeren van de Arduino betekent dat je & loskoppelt en de ESP elke keer tijdelijk opnieuw aansluit, en het wordt behoorlijk snel oud. >
Dit is wat ik doe met nieuwe ESPs (als je je ESP opnieuw hebt geflashed, moet je de AT-instructieset-emulator downloaden en hem daarmee eerst opnieuw 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
Voor toekomstig gebruik is hier een link naar de ESP8266 AT-instructieset .
Update juni 2020: de bovenstaande link was verbroken, nu opgelost. U kunt ook documentatie vinden op Espressif “s github-account (online leesbaar, maar niet pdf, vanaf deze datum).
Reacties
- Ik realiseerde me net dat deze vraag is opgezogen uit het archief met onbeantwoorde vragen van 6 maanden geleden . Oh, nou, misschien helpt dit antwoord iemand anders nu of binnenkort.
Antwoord
Er kan een probleem met de baudrate van de Nano FTDI-chip naar de RX / TX en de ESP8266. Heb je de verbinding verbroken tijdens het uploaden van de sketch?
Wat dacht je ervan om dit te proberen?
Proost!
Reacties
- Wanneer ik met de ESP8266 werk, werkt het op 115200 baud, al het andere geeft gewoon rotzooi . Ik ‘ heb de code van de gelinkte blog geprobeerd (alleen de baudrate wijzigen), ik zie het ‘ s commando naar de ESP8266 verzenden (blauw lampje knippert), maar het mislukt wanneer het de Serial.find (” > ) commando. Ik zie ook nou de output van de ESP8266 dan ook. Ik heb de ESP8266 losgekoppeld tijdens het uploaden.
Antwoord
Ik kwam hier een goede tutorial tegen, probeerde het en het doet het job: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Reacties
- Dat werkt, behalve het CIOBAUD-commando dat is vervangen.Het huidige commando voor alle UART-functies is:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
, ofAT+UART_DEF-9600,8,1,0,0
om compatibel te zijn met SoftwareSerial. Vervang ” _DEF ” door ” _CUR ” als deze wijziging alleen voor de sessie geldt; het eerste commando maakt het de standaardinstelling voor inschakelen. - Kunt u de informatie van die blog uitbreiden naar dit antwoord als de link doodgaat, maar ook om er een beter antwoord van te maken
Antwoord
Ja, als je verschillende stroombronnen gebruikt, moet de aarding altijd aangesloten zijn, anders weten de borden niet wat nul volt is.
De TX van de Arduino is 5v, je hebt een level shifter nodig om 5v naar 3.3v om te zetten, zoiets als dit ( 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 )
De TX van de ESP8266 is 3.3v en de RX van de Arduino is 5V en je hebt een level shifter nodig om dit aan te kunnen. gebruik dezelfde als hierboven vermeld, want het kan 4 hoge (5v) signalen omzetten in 4 lage (3.3v) signalen.
Mensen zeggen dat je het zo kunt met weerstanden, maar ik heb ook gelezen dat ze presteren niet goed genoeg om snel schakelende digitale signalen te verwerken (dus 300 Baud op uw serienummer is misschien OK, maar niet 115000 :))
Mensen a Ik zeg dus dat je geen level convertors nodig hebt. Dat is waar dat misschien een tijdje zonder hen zou kunnen werken, maar vroeg of laat zal er iets knappen. Door de spanning te verhogen, wordt het proces versneld, zodat je je kunt voorstellen wat er gebeurt als je een 230 V-voeding aansluit rechtstreeks naar een USB-apparaat.
Een laatste punt, weet je dat de ESP8266 een 80 / 160MHz-processor is met 256 KB RAM, als je dat vergelijkt met je Arduino, is het alsof je je pc programmeert via je telefoon. je zou kunnen proberen om de ESP8266 te verbinden via een FTDI-module en deze te programmeren via de Arduino IDE in Arduino C. Het is een stuk eenvoudiger dan al deze verbindingsdingen.