W tym temacie przedstawię LilyGO T-CAN485, czyli płytkę developerską opartą o ESP32, przeznaczoną do pracy z magistralami RS485 i CAN. T-CAN485 dodatkowo oferuje pracę na napięciu zasilania do 12V, złącze USB-C wraz z konwerterem USB na UART CH9102 do łatwiejszego programowania, slot na kartę microSD, opcjonalne złącze antenowe do polepszenia zasięgu Wi-Fi, pojedynczą kolorową diodę WS2812 oraz wyprowadzone GPIO.
Dodatkowo na płytce są dwa wyspecjalizowane układy do komunikacji przemysłowej. Pierwszy to VP231, transceiver can:
Drugi to MAX13487E - RS485:
Szczegółowy opis wyprowadzeń:
T-CAN485 dostępny jest do kupienia za około 70 zł.
Zobaczmy w praktyce, co za tę kwotę dostajemy. Produkt zapakowany jest w solidne, plastikowe pudełeczko, które można bez obaw schować do torby na laptopa czy nawet do większej kieszeni.
W środku jest też wydruk z opisem płytki, który tu też wcześniej zamieściłem.
Sama płytka też jest szczegółowo opisana, złącza są podpisane od strony druku.
Płytkę łatwo programuje się z dodatkiem PlatformIO w Visual Studio Code.
Pełna dokumentacja oraz przykłady programów znajdują się na oficjalnym repozytorium producenta:
https://github.com/Xinyuan-LilyGO/T-CAN485
Definicje pinów
Oto indeksy pinów komunikacyjnych i kontrolnych RS485 i CAN - przekopiowane z powyższego repozytorium, dla Waszej wygody:
Kod: C / C++
Uruchomienie RS485
RS485 to standard komunikacji szeregowej oparty na różnicowej transmisji danych. Charakteryzuje się dużą odpornością na zakłócenia i możliwością pracy na długich przewodach (nawet setki metrów). Dzięki temu jest szeroko stosowany w automatyce przemysłowej, inteligentnych budynkach, licznikach energii czy systemach HVAC. Na bazie RS485 działa m.in. popularny protokół Modbus RTU.
Na płytce T-CAN485 układ MAX13487E zapewnia automatyczne sterowanie kierunkiem transmisji (brak konieczności ręcznego przełączania DE/RE), co znacznie ułatwia programowanie. Dzięki temu wystarczy zainicjalizować port UART i można od razu wymieniać dane z urządzeniami na magistrali.
Poniższy przykład wysyła wpisaną na sztywną ramkę modbus i wyświetla odpowiedź:
Kod: C / C++
Uruchomienie CAN
CAN to magistrala komunikacyjna stworzona głównie z myślą o motoryzacji. Pozwala na niezawodną wymianę danych pomiędzy wieloma urządzeniami (sterowniki ECU, czujniki, moduły komfortu) bez konieczności stosowania centralnego kontrolera. Wyróżnia się mechanizmem arbitrażu, dzięki któremu kilka urządzeń może próbować nadawać jednocześnie – a magistrala automatycznie przydzieli pierwszeństwo ramce o najważniejszym identyfikatorze.
ESP32 obsługuje CAN sprzętowo poprzez kontroler TWAI, a na płytce T-CAN485 dodano transceiver ME2107 zapewniający zgodność sygnałową. Dzięki temu możemy w prosty sposób podłączyć płytkę na przykład do instalacji samochodowej (11-bitowe ID, 500kb/s).
Poniższy przykład jednocześnie odbiera i nadaje ramki z przykładowymi danymi:
Kod: C / C++
W osobnym temacie pokażę komunikację pomiędzy dwoma tak połączonymi płytkami (masa jest wspólna przez USB):
Uruchomienie WS2812
WS2812 to indywidualnie adresowalna dioda LED RGB. Można jej nadać dowolny kolor poprzez złożenie na siebie barw czerwonej, zielonej i niebieskiej. Często występuje w postaci pasków (adresowalne jednym pinem), ale tu jest jedna - np. do komunikowania statusu płytki.
Do obsługi WS2812 można użyć biblioteki FastLED.
Kod: C / C++
Uruchomienie karty SD
Karta SD to świetny sposób na zapis dużych ilości danych. Komunikacja z kartą odbywa się poprzez SPI. Biblioteka SD zapewnia nam dostęp do systemu plików na karcie, możemy tworzyć, edytować, listować i usuwać pliki.
Kod: C / C++
Uruchomienie antenki
Postępuj zgodnie z tematem o antence:
Jak podłączyć zewnętrzną antenę do ESP32? Złącze IPEX i zworki - lepszy zasięg WiFi
Normalnie podłączona jest antenka znajdująca się na PCB. Aby przełączyć się na zewnętrzną, trzeba przelutować malutką zworkę.
Wrażenia z użytkowania
Płytka ma jeden problem, który powtarza się przy różnych projektach - ESP ma kłopoty z zasilaniem. Doświadczyłem tego przy różnych kabelkach USB. Rozwiązaniem jest dolutowanie kondensatora, tak jak pokazałem już w innym temacie:
https://www.elektroda.pl/rtvforum/topic4135784.html#21645913
Bez tego często dostaję błędy brownout i to nawet nie tylko na własnych programach, ale też np. na WLED.
Podsumowanie
Bardzo wygodna i przydatna płytka, choć na jej niekorzyść przemawia fakt, że dosłownie za 5 - 15 zł można kupić proste transceivery RS485 lub CAN. Osobiście i tak wolę gotowca - wygodniej się z niego korzysta, nie lubię wielokrotnie przenosić zbyt złożonych konstrukcji na płytce stykowej, kabelki się wtedy odłączają, tracą kontakt i tylko utrudniają pracę.
To oczywiście nie koniec przygody z tą płytką, osobno pokażę przykład komunikacji CAN pomiędzy dwoma takimi płytkami. Planuję też zrobić analogiczną demonstrację z RS485, ale w tym przypadku raczej użyję płytek z Waveshare z wyświetlaczem - chcę zrobić taki prosty dwukierunkowy tekstowy chat na wyświetlaczach dotykowych.
Czy korzystaliście z RS485 lub z CAN we własnych projektach, a jeśli tak, to do czego?
Fajne? Ranking DIY Pomogłem? Kup mi kawę.