Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Komunikacja UART między dwoma mikrokontrolerami - ESP8266

mmaker 18 Jun 2018 22:08 1182 8
  • #1
    mmaker
    Level 19  
    Witam. Chciałbym unowocześnić mój stary projekt zestawu stereo w którym sterowanie oparte jest o mikrokontrolery Atmega32, dokładniej potrzebuję komunikacji bezprzewodowej między Wzmacniaczem a Subwooferem czyli pomiędzy jedną atmegą a drugą. Oba urządzenia już są przygotowane do wymiany danych przez UART. Chodzi tu o komendy włącz wyłącz, głośniej, ciszej, filtr, faza i inne - ogólnie transmisja w obie strony. Mam też 2 moduły ESP-07 do których odnosi się całe zapytanie i do których zrobiłem sobie adaptery TTL. Czy jest możliwość zestawienia transmisji przeźroczystej przez UART (Atmega->ESP->Router->ESP->Atmega, lub z pominięciem routera) tak aby nie używać komend AT bo szczerze mówiąc nieco mi to komplikuje całą sytuację. Jestem laikiem co do ESP zaś atmegi programuję w C.
  • #2
    Anonymous
    Anonymous  
  • #3
    mmaker
    Level 19  
    mam rozumieć że to wszystko da się zrobić za pomocą środowiska arduino?
  • #4
    PowracajacyBumerang
    Level 9  
    mmaker wrote:
    mam rozumieć że to wszystko da się zrobić za pomocą środowiska arduino?

    W Arduino IDE można pisać programy na ESP.
  • #5
    mmaker
    Level 19  
    Witam temat uważam za zamknięty. Udało mi się to zrobić przy pomocy poradnika i odpowiedniego kodu z internetu. Temat do zamknięcia ;)
  • #7
    mmaker
    Level 19  
    W skrócie dla mojego modułu ESP-07 (ale i dla wszystkich ESP) wygląda to tak:
    1. Pobieramy na komputer Arduino IDE z linku wybierając właściwą architekturę dla naszego komputera.

    2. Instalujemy oprogramowanie. Po instalacji uruchamiamy program Arduino, klikamy na Plik -> Preferencje i w polu "Dodatkowe adresy URL do menedżera płytek:" wklejamy tylko adres tego Linku, zatwierdzamy OK.

    3. W oknie głównym wybieramy menu Narzędzia -> Płytka: "Arduino/Genuino Uno" -> Menedżer płytek... W oknie menedżera przewijamy listę i szukamy pozycji "esp8266 by ESP8266 Community" jak na obrazku:
    Komunikacja UART między dwoma mikrokontrolerami - ESP8266
    Po wybraniu pozycji klikamy Instaluj.

    4. Po instalacji przechodzimy do menu "Narzędzia" przewijamy listę do dołu i wybieramy płytkę "Generic ESP8266 Module". Klikamy ponownie na menu "Narzędzia" w których pokazało nam się sporo ustawień do naszego modułu. Ja tylko wybrałem odpowiedni port COM.

    5. Teraz wystarczy wkleić gotowy kod w okno główne programu i wgrać go do naszego modułu zwierając GPIO0 do masy podczas podawania napięcia do modułu. Tym sposobem przechodzimy w tryb flashowania. Trzeba równierz pamiętać o prawidłowym podłączeniu linii TX i RX, czyli krzyżowo ;)
    Ja dla ułatwienia sobie życia zrobiłem adapter do poziomu TTL z konwerterem napięć i przyciskami do resetowania i flashowania modułu. Korzystałem z 2 adapterów USB to Serial (jeden samoróbka na FT232RL i drugi na PL2303) i oba działają ok.

    Oprogramowanie potrzebne w zależności jaką chcemy mieć konfigurację znajdziemy pod adresem https://circuits4you.com/2018/01/01/esp-to-esp-communication/

    Wystarczy skopiować kod, zmienić SSID na takie jakie nadaje nasz router, hasło, port po którym ma przebiegać komunikacja UDP, adres IP/Broadcast i ustawić sobie baudrate transmisji po UART. Wadą tego typu rozwiązania jest to że czasem może uciąć jeden lub 2 znaki z początku stringa, ale u mnie zdarzało się to bardzo rzadko. Ewentualnie trzeba sobie jakoś poradzić na docelowym urządzeniu.

    Link do tutoriala Arduino IDE ESP8266 w serwisie Youtube:
    https://www.youtube.com/watch?v=Ao5XcORsYxA
  • #8
    krzbor
    Level 25  
    Ciekawy kod do transmisji. Nie wiem jednak czy to będzie poprawnie działać. Przy prędkości 9600 mamy niecały znak na 1ms, a autor wprowadził do kodu delay(20). To delay umożliwia przesłanie raptem 50 znaków na sekundę. Według mnie ten delay jest całkowicie zbędny. Prędkość i tak będzie "stabilizowana" przez UART. Drugi problem to wyjątkowa nieekonomiczność transmisji - każdy pakiet UDP, który zawiera wiele bajtów koniecznych do transmisji niesie ze sobą tylko jeden bajt informacji. W UDP standardowo nie ma kontroli, czy pakiet doszedł, a kod nie rozwiązuje tego problemu programowo. W przypadku gdy wiemy co wymieniamy np. krótkie sekwencje (kilkaset bajtów) to znacznie lepszym rozwiązaniem jest zgromadzenie takiej sekwencji i wysłanie jej w jednym pakiecie. Mamy wówczas pewność, że pakiet dojdzie w całości lub wcale nie dojdzie. Można się nawet pokusić o potwierdzenie otrzymania pakietu i retransmisję.
  • #9
    jony15
    Level 24  
    A może takie moduly hc-12.