Łączenie Arduino Nano z modułem Wi-Fi ESP8266

Niedawno zacząłem bawić się Arduino, aby podłączyć kilka czujników. Użyłem Arduino Nano do pomiaru temperatury, wilgotności, ciśnienia powietrza i poziomu światła.

Aby zapisać dane w bazie danych, użyłem innego Arduino, które podłączyłem do Raspberry Pi i pozwoliłem dwóm Arduino rozmawiać bezprzewodowo ze sobą przez 433 MHz.

To wszystko działa całkiem nieźle, ale komunikacja 433 MHz nie jest najbardziej niezawodna (często brakuje mi transmisji). Kiedy natknąłem się na moduł ESP8266, wydawało mi się, że jest to optymalne rozwiązanie do komunikacji. Jak fajnie by było, gdybym mógł po prostu wyciągnąć informacje przez połączenie HTTP z Raspberry Pi?

Po zabawie przez wiele godzin, ładowaniu wielu różnych oprogramowania sprzętowego, coraz bardziej irytuję się, ponieważ nie mogłem zmusić go do zrobienia czegokolwiek, w końcu mam go działającego przez moduł FTDI podłączony w ten sposób:

wprowadź opis obrazu tutaj

Używam modułu zasilania MB102, aby zapewnić napięcie 3,3 V wymagane przez ESP8266. Okazuje się, że trzeba podłączyć masę od MB102 do masy modułu FTDI, aby uzyskać jak najlepszą odpowiedź. Po wykonaniu tej czynności byłem w stanie wysyłać polecenia AT i uzyskiwać właściwe odpowiedzi. Mógłbym nawet podłączyć go do mojego domowego Wi-Fi.

Następną rzeczą, którą chcę zrobić, jest podłączenie go do Arduino. Znalazłem bardzo prosty schemat ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), w którym łączysz RX z TX i TX z RX. Używając MB102 podłączyłem go w ten sposób:

tutaj wprowadź opis obrazu

Najwyraźniej powinienem być teraz w stanie przesłać pusty szkic do Arduino, a następnie ponownie użyć monitora szeregowego, aby wykryć polecenie AT, dokładnie tak samo, jak to zrobiłem, używając modułu FTDI.

Problem w tym, że w ten sposób nic nie dostaję. Nie widzę nawet własnych poleceń AT w konsoli. Widzę, że ESP8266 miga za każdym razem, gdy wysyłam polecenie (nawet widzę, że jest nadal podłączony do mojego routera, prawdopodobnie pamiętał informacje, które wysyłam przez FTDI. .?)

Pytanie brzmi, co robię źle? Czytałem kilka postów, że TX z Arduino również jest 5v i że musisz coś zrobić, aby przywrócić 3,3v, ale tak jest też wiele samouczków, które mówią, że nie jest to wymagane.

Odpowiedź

Najłatwiejszym sposobem pracy z tymi diabłami jest połączenie je na zapasową parę pinów Arduino i do komunikacji używaj SoftwareSerial (chyba że „używasz jednego z Arduino z więcej niż jednym UART). SoftwareSerial działa z prędkością do 9600 bodów na urządzeniach 16 MHz, 4800 na urządzeniach 8 MHz, więc będziesz potrzebować ustawić ESP8266, aby to uwzględnić. Obecnie wysyłają z prędkością 115200 bodów. Możesz użyć sprzętowego UART na pinach (0, 1), ale wtedy przeprogramowanie Arduino oznacza odłączenie & ponownego tymczasowego podłączenia ESP za każdym razem i dość szybko się starzeje.

Oto, co robię z nowymi ESP (jeśli ponownie sflashowałeś swój ESP, musisz najpierw pobrać emulator zestawu instrukcji AT i ponownie go flashować):

# 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 

Poniżej znajduje się łącze do zestawu instrukcji ESP8266 AT .

Aktualizacja czerwiec 2020 r .: powyższy link był uszkodzony, teraz naprawiono. Dokumentację można również znaleźć pod adresem konto github Espressifa (do odczytu online, ale nie pdf, od tej daty).

Komentarze

  • Właśnie zdałem sobie sprawę, że to pytanie zostało wydobyte z archiwum pytań bez odpowiedzi sprzed 6 miesięcy . No cóż – może ta odpowiedź pomoże komuś innemu teraz lub wkrótce.

Odpowiedź

Może istnieć problem z szybkością transmisji z układu Nano FTDI do RX / TX i ESP8266. Czy rozłączyłeś się podczas przesyłania szkicu?

A może zamiast tego spróbujesz tego ?

Na zdrowie!

Komentarze

  • Kiedy pracuję z ESP8266, działa on z prędkością 115200 bodów, wszystko inne po prostu marnuje . ' wypróbowałem kod z połączonego bloga (tylko zmieniając szybkość transmisji), widzę, że ' wysyła polecenie do ESP8266 (miga niebieskie światło), ale kończy się niepowodzeniem przy próbie wykonania Serial.find (” > „) polecenie. Nie widzę też wyjścia z ESP8266 w ogóle. Odłączyłem ESP8266 podczas przesyłania.

Odpowiedź

Natknąłem się na dobry tutorial tutaj, wypróbowałem i robi to praca: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/

Komentarze

  • To zadziała z wyjątkiem polecenia CIOBAUD, które zostało zastąpione.Bieżące polecenie dla wszystkich funkcji UART to: AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol> lub AT+UART_DEF-9600,8,1,0,0, aby były zgodne z SoftwareSerial. Zamień ” _DEF ” na ” _CUR ” jeśli ta zmiana dotyczy tylko sesji; pierwsze polecenie powoduje, że jest to domyślne ustawienie przy włączaniu zasilania.
  • Czy możesz rozszerzyć informacje z tego bloga do tej odpowiedzi, jeśli link umrze, ale także aby była lepsza.

Odpowiedź

Tak, jeśli używasz różnych źródeł zasilania, uziemienie zawsze musi być podłączone, w przeciwnym razie płyty nie będą wiedzieć, co zero woltów to.

TX Arduino to 5V, potrzebujesz przełącznika poziomu, aby przekonwertować 5v na 3,3v, coś takiego ( 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 ESP8266 ma 3,3 V, a RX Arduino ma 5 V i będziesz potrzebować przełącznika poziomu, aby sobie z tym poradzić. Możesz użyj tego samego, co wymieniono powyżej, ponieważ może on konwertować 4 sygnały wysokie (5 V) na 4 sygnały niskie (3,3 V).

Ludzie mówią, że można to zrobić z rezystorami, ale czytałem też, że nie działają wystarczająco dobrze, aby obsłużyć szybkie przełączanie sygnałów cyfrowych (więc 300 bodów na twoim serialu może być OK, ale nie 115000 :))

Ludzie a Powiedzmy też, że nie potrzebujesz konwerterów poziomów. To prawda, może działać przez chwilę bez nich, ale prędzej czy później coś pęknie. Zwiększenie napięcia przyspieszy proces, więc możesz sobie wyobrazić, co się stanie, jeśli podłączysz zasilanie 230 V bezpośrednio do urządzenia USB.

Ostatni punkt, czy wiesz, że ESP8266 to procesor 80/160 MHz z 256 KB pamięci RAM, porównując go z Arduino, przypomina to programowanie komputera przez telefon. możesz spróbować podłączyć ESP8266 przez moduł FTDI i zaprogramować go przez Arduino IDE w Arduino C. Jest to o wiele łatwiejsze niż wszystkie te połączenia.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *