Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Komunikacja UART między dwoma mikrokontrolerami - ESP8266

mmaker 18 Cze 2018 22:08 258 8
  • #1 18 Cze 2018 22:08
    mmaker
    Poziom 18  

    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.

    0 8
  • #2 19 Cze 2018 09:40
    3149400
    Użytkownik usunął konto  
  • #3 19 Cze 2018 15:51
    mmaker
    Poziom 18  

    mam rozumieć że to wszystko da się zrobić za pomocą środowiska arduino?

    0
  • #4 19 Cze 2018 16:47
    PowracajacyBumerang
    Poziom 7  

    mmaker napisał:
    mam rozumieć że to wszystko da się zrobić za pomocą środowiska arduino?

    W Arduino IDE można pisać programy na ESP.

    0
  • #5 22 Cze 2018 14:03
    mmaker
    Poziom 18  

    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 ;)

    0
  • #6 22 Cze 2018 20:19
    krzbor
    Poziom 16  

    Wątek ciekawy, wiele osób trafi tu w przyszłości. Może napiszesz więcej na ten temat i dołączysz linki do tych poradników i kodów. Zaoszczędzisz innym szukania.

    0
  • #7 23 Cze 2018 00:42
    mmaker
    Poziom 18  

    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

    1
  • #8 23 Cze 2018 12:54
    krzbor
    Poziom 16  

    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ę.

    0
  • #9 25 Cze 2018 11:16
    jony15
    Poziom 23  

    A może takie moduly hc-12.

    0
  Szukaj w 5mln produktów