24 praktyczne porady związane z projektami Arduino i ESP

Dzisiejszy wpis będzie nietypowy. Spróbuję stworzyć listę doświadczeń podsumowujących kilka lat amatorskiego tworzenia projektów opartych o Arduino, ESP8266 i ESP32. Mam świadomość, że wiele osób podchodząc do pierwszych projektów zastanawia się, jak rozwiązać różne kwestie techniczne i musi wybrać jakąś drogę. Nie zawsze jest to łatwe i nawet nie zawsze wiadomo o co zapytać. Dlatego postaram się zebrać moje doświadczenia w postaci listy praktycznych porad.

Arduino Leonardo i jeden z modułów ESP32

Oczywiście nie należy traktować tej wiedzy, jako prawdy objawionej i jedynej słusznej, jak zresztą żadnych rad znalezionych w Internecie. To tylko owoc moich doświadczeń, mój wybór, na pewno wiele rzeczy da się zrobić inaczej i usprawnić. Poza tym wypracowywanie własnej ścieżki, to także przyjemna część tej zabawy.

Trzeba też mieć świadomość, że doświadczenia dotyczą w głównej mierze projektów związanych z tzw. inteligentnym domem, czyli automatyką budynkową lub „Internetem rzeczy”. Budowane urządzenia w przeważającej większości komunikują się za pośrednictwem sieci komputerowej – Ethernet lub WiFi. Dla innych typów projektów niektóre porady mogą nie mieć zastosowania.

Rodzina modułów ESP

1. Zdecyduj – przewody czy radio?

Na początek kilka słów, dlaczego zestawiam ze sobą Arduino i ESP. Mimo dużych różnic technicznych, obie platformy z punktu widzenia projektanta są bardzo podobne. Dla projektów, które ze specyficznych powodów nie wymagają większej mocy obliczeniowej, mój wybór między ESP8266/ESP32 a 8-bitowym Arduino sprowadza się do pytania, czy potrzebuję połączenia bezprzewodowego z siecią. Jeżeli urządzenie ma łączyć się przez WiFi, to naturalnym wyborem jest ESP, w przeciwnym wypadku zwykle wybieram Arduino z modułem Ethernetowym, chociaż jest to droższe rozwiązanie.

Ja jestem zwolennikiem używania sieci przewodowej, tam gdzie się tylko da. Oczywiście wiele osób może powiedzieć, że przestarzałe podejście i WiFi jest naturalnym wyborem. Pamiętajmy jednak o tym, że połączenia przewodowe są bardziej odporne na zakłócenia. Poza tym źródeł fal radiowych mamy wkoło wystarczająco dużo nawet bez naszych urządzeń. Do tego dokładając kolejne nadajniki zmniejszamy pojemność i prędkość naszej sieci WiFi.

Oczywiście nie to, znaczy, że WiFi należy odrzucić zupełnie. To fantastyczna technologia, bardzo ułatwia tworzenie przenośnych urządzeń lub ich instalację w miejscach, gdzie trudno doprowadzić przewody. Natomiast zawsze trzeba zachować umiar i dobierać środki do możliwości i potrzeb.

Pamiętajmy też, że WiFi i Ethernet to nie jest jedyny wybór. W specyficznych przypadkach używam też innych rodzajów komunikacji, jak choćby transmisja szeregowa lub przesyłanie komend przez moduły pracujące na częstotliwości 433MHz, jednak to margines moich projektów. Warto jednak zawsze pamiętać, że są inne opcje, które w niektórych przypadkach mogą być znacznie lepsze.

2. Wybierz, jak zaprogramujesz urządzenia

Jeżeli rozpoczynasz zabawę z programowaniem Arduino, zwykle naturalnym wyborem jest Arduino IDE i język C. I jest to także mój wybór. Polecam standardowe IDE, ze względu na prostotę, popularność i elastyczność. Z użyciem IDE bez problemu zaprogramujesz Arduino, ESP8266, ESP32 i nie tylko. Natomiast trzeba wiedzieć, że masz bardzo wiele alternatyw. Po pierwsze możesz pozostać przy narzeczu C, tylko użyć innego IDE, jak choćby PlatformIO. Jeżeli natomiast odrzucasz z tym momencie programowanie zupełnie, to możesz wybrać różne edytory wizualne, jak choćby Visuino. Jak i to jest na początek zbyt złożone, to w przypadku automatyki domowej możesz rozważyć użycie gotowych, konfigurowalnych projektów, jak choćby ESPHome (dla ESP). Można też pójść w drugą stronę – programować, ale w innym języku np. Lua lub MicroPython.

Pozostanie przy ekosystemie Arduino ma jednak tę zaletę, że nasze programy są w dużej mierze przenośne i nie potrzeba dużego nakładu pracy, żeby przejść z Arduino na ESP, gdy okaże się, że potrzebne jest połączenie bezprzewodowe.

Natomiast najważniejsze jest, żeby wybrać jakieś stabilne i przyszłościowe środowisko. Tak, żeby wprowadzenie poprawek czy wymiana uszkodzonego sprzętu za kilka lat, nie było problemem. Muszę przyznać, że Arduino IDE póki co mnie nie zawiodło i nadal jestem w stanie obsługiwać moje pierwsze urządzenia i programy, które powstały prawie 10 lat temu.

3. Używaj mniejszych modułów

Pro Mini i Pro Mega 2560
Pro Mini i Pro Mega 2560

Oryginalne Arduino Uno, czy Mega 2560 są wspaniałymi urządzeniami do prototypowania. Możemy, zwykle z użyciem płytek stykowych, zbudować urządzenie, zaprogramować, a następnie przetestować. Zwykle jednak duże wymiary sprawiają, że nie nadają się one do wielu zastosowań i dlatego są niepraktyczne. Oczywiście bywa i tak, że nie jest to duża przeszkoda, ale zwykle do gotowego urządzenia dużo lepiej zastosować na przykład Arduino Pro Mini, zamiast Uno. Gdy koniecznie potrzebujemy wyjść lub pamięci Arduino Mega, to mamy do wyboru Pro Mega 2560. W przypadku Arduino, wybierając małą płytkę zachowujemy praktycznie pełne możliwości dużej wersji (z drobnymi wyjątkami, o czym później).

Wemos D1 mini
Wemos D1 mini

Jeżeli chodzi o ESP, to praktycznie wszystkie moduły są niewielkich rozmiarów. Natomiast jedne są mniejsze od innych, chociaż jest to okupione zwykle mniejszą liczbą wyjść. Dlatego inaczej niż w przypadku Arduino, tutaj powinniśmy zwracać baczną uwagę na nasze potrzeby z tym względzie. Miniaturowy ESP-01 nadaje się tylko do niektóry zastosowań przez minimalną liczbę pinów, ale już Wemos D1 mini, to dobry kompromis rozmiaru do możliwości, odpowiedni do wielu projektów.

4. Zadbaj o dobre zasilanie

Czym zasilać nasze urządzenia, to temat rzeka. Twórcy Arduino dali nam dość sporą dowolność. Możemy skorzystać z zbudowanego stabilizatora napięcia i podłączyć do odpowiedniego złącza zasilacz nawet do 12V. Możemy też podpiąć stabilizowane napięcie, z którym pracuje nasz układ, czyli 3,3V lub 5V. Ja zwykle używam w projektach tej drugiej opcji, za źródło przyjmując stabilizowany zasilacz na szynę DIN lub małą przetwornicę DC-DC typu „step down”, czasem w połączeniu z zasilaczem buforowym dla zapewnienia pracy po zaniku napięcia w sieci, a czasem ze zwykłymi, popularnymi zasilaczami. Przy okazji polecam starszy wpis o zasilaniu awaryjnym.

Różne przetwornice prądu stałego

Jeżeli chodzi o zasilanie układów ESP, to najczęściej posiadają one złącze micro-USB, a ja zwykle używam normalnej „ładowarki” do telefonu lub power banku przy urządzeniach przenośnych. Oczywiście są też inne wersje, łącznie ze zintegrowanymi układami obsługującymi akumulatory li-ion, ale bardzo rzadko mam potrzebę ich użycia.

Najważniejsze jest natomiast, żeby nasze źródło było stabilne i dostarczało wystarczająco dużo prądu. W przeciwnym wypadku możemy mieć problemy ze stabilnością pracy urządzenia, szczególnie gdy w sieci pojawią się zakłócenia, spowodowane np. załączaniem bądź wyłączaniem różnych urządzeń.

5. Używaj rozłączalnych połączeń

Zarówno Arduino, jak i układy ESP posiadają wyprowadzenia w standardowym rozstawie 2,54mm (0,1 cala). Oczywiście jesteśmy w stanie przylutować przewody na stałe, ale poza przypadkami, gdy bardzo zależy nam na rozmiarze urządzenia, dużo lepiej sprawdzają się tzw. goldpiny. Najczęściej są one dostarczane razem z płytką i możemy je wlutować na dwa sposoby. Warto się zastanowić, która dla nas będzie właściwsza.

Dlaczego połączenia powinny się łatwo rozłączać? Po pierwsze i najważniejsze – łatwo wyjmiemy układ do programowania lub wymienimy na nowy, już zaprogramowany. Bez problemu wprowadzimy też modyfikacje lub naprawę, gdy coś się uszkodzi. Im większy projekt, tym jest to istotniejsze.

Zaciskarka do złącz goldpin / dupont

Gdy więcej pracujemy ze złączami dupont, powinniśmy zastanowić się nad zakupem zaciskarki. Pozwoli ona samodzielnie przygotowywać przewody, chociaż oczywiście można też kupić gotowe.

6. Nie używaj pojedynczych przewodów

Praca z Arduino zwykle rozpoczyna się od płytki stykowej i pojedynczych przewodów. To bardzo wygodne, ale w gotowych projektach dużo praktyczniejsze jest, gdy na bazie goldpinów tworzymy łącza wielokrotne. Ma to kolosalne znaczenie, gdy musimy na chwilę rozłączyć nasz układ – do programowania, wymiany lub modyfikacji.

Arduino Pro Mini z dołączonymi przewodami do modułu Ethernet

Ja zwykle grupuję złącza funkcjonalnie. Przykładowo, żeby podłączyć moduł Ethernet do Arduino (choćby Pro Mini) potrzebujemy 3 pinów dla szyny SPI (11, 12, 13), do tego jedno wyjście wyboru urządzenia (w moim przypadku 10 – żeby było blisko). Ja zawsze też łączę reset modułu Ethernet z Arduino i wybieram do tego pin zaraz przy SPI, czyli w tym wypadku A1. Dzięki temu moduł sieci komputerowej podłączony jest jedną wtyczką. Podobnie, gdy mam na przykład moduł z kilkoma przekaźnikami, to one też mają jedno wspólne podłączenie, maksymalnie dwa, gdy inaczej się nie da.

Dodatkowo zawsze staram się, żeby ta część wtyczki, przy której widać metalowe części połączenia była skierowana do środka płytki. Oznacza to zwykle, że mały trójkącik, będący wskaźnikiem pierwszego pinu, połączony jest z wyjściem o niższym numerze, choć nie w każdym przypadku.

7. Zwracaj uwagę na kolory przewodów

Najważniejsze jest, żeby nie pomylić zasilania, w tym różnych napięć i masy. Właściwie dla prądu stałego naturalny kolorem do oznaczenia masy jest czarny i staram się go używać. Jednak w praktyce nie zawsze mamy odpowiednią liczbę przewodów w dowolnie wybranym kolorze, dlatego często stosuję również kolor niebieski. Do zasilania, szczególnie podstawowym napięciem, czyli zwykle 5V używam koloru czerwonego. Jeżeli mam inne napięcia, to czasem dokładam fiolet i pomarańcz.

Gdy podłączam jakiś moduł złączem wielokrotnym, to staram się, żeby miał on swój kolor, jednak pierwszy przewód jest w innym kolorze dla łatwiejszego rozróżnienia. Wtedy bardzo łatwo przywrócić połączenia, na przykład na podstawie zdjęcia zrobionego telefonem.

Skąd brać przewody, poza zamówieniem gotowych? Ja najczęściej używam przewodów alarmowych, które mają rozróżnialne kolory żył. Gdy ma się zaciskarkę dupont, można przy przygotować kabelki potrzebnej długości. Oczywiście można też używać gotowców, zmieniając tylko pojedyncze wtyczki na wielokrotne.

8. Wygodnie podłączaj zasilanie

Szyny zasilania dla średniego projektu

Gdy rozpoczyna się tworzenie własnych projektów z większą liczbą elementów, szybko okazuje się, że wszystkie moduły trzeba jakoś zasilić. Nie bez powodu płytki stykowe mają wiele wyprowadzeń napięcia. Gdy tworzymy gotowe urządzenie, okazuje się, że jakoś trzeba połączyć ze sobą w grupy wszystkie czerwone i czarne przewody. Ja przygotowuję zlutowane razem szyny goldpinów na uniwersalnej płytce PCB. Dzięki temu mam zasilanie w jednym miejscu i muszę tylko pilnować, żeby wtyczki były wetknięte właściwą stroną, w czym oczywiście pomagają kolory.

Bardzo często używam też termometrów Dallas DS18B20, dlatego zazwyczaj wyprowadzam też serię złącz z masą, zasilaniem i dodatkowo wyprowadzeniem jednego wyjścia, podciągniętym do zasilania za pomocą rezystora. Więcej na temat termometrów DS18B20 można poczytać w opisie jednego z moich projektów.

9. Wybierz właściwą obudowę

Najprostszym wyborem dla projektu jest zwykle użycie obudowy uniwersalnej, bądź po prostu natynkowej puszki hermetycznej. I w wielu wypadkach jest to dobry wybór, bo nie wymaga wiele pracy, choć często jest mało elegancki. Do mocowania modułów często wtedy używa się kleju na gorąco lub kawałka jakiegoś materiału (jak PVC), do którego można przykręcić moduły, najlepiej z użyciem jakichś dystansów.

Dla projektów, dla których wielkość obudowy nie ma znaczenia, ja zwykle preferuję małe rozdzielnice elektryczne z szyną DIN. Pozwala to wygodnie połączyć elementy elektryczne, jak zabezpieczenia nadprądowe czy zasilacze i elektronikę, na specjalnych uchwytach przewidzianych dla standardowej szyny.

Nieocenioną pomocą przy budowie małych urządzeń jest drukarka 3d. Tak naprawdę przydaje się przy prawie każdym projekcie, choćby do wykonania mocowań elementów na szynie DIN, natomiast obudowy dokładnie dopasowane do potrzeb są nie do przecenienia. Opisywałem to wielokrotnie, choćby przy okazji projektów: uniwersalnego termometru, sterowania na 433MHz przez wifi, czy bezpośrednio przez przekaźnik, ale także wielu innych.

Obudowa z drukarki 3d dla D1 mini i dodatkowego modułu.

Moje projekty 3d udostępnione są bezpłatnie na portalu thingiverse.

10. Naucz się projektować płytki PCB

Powiem szczerze – od pewnego czasu większość projektów robię z użyciem modułów, przewodów i dedykowanych obudów wydrukowanych samodzielnie. Jeżeli jednak myślisz, o większej liczbie urządzeń, to warto rozważyć przygotowanie płytki PCB. Po pierwsze pozwala to uniknąć żmudnego zaciskania tych samych kabelków, po drugie bardziej eleganckie i wygodniejsze, gdy chcemy użyć większej liczby elementów elektronicznych.

Ja do projektowania płytek używam bezpłatnego programu Eagle, a ich wykonanie zlecam osobie, którą znalazłem na popularnym portalu aukcyjnym. W końcu nie zawsze wszystko trzeba robić samemu.

Płytkę PCB wykorzystałem choćby przy projekcie termometru WiFi, a bardziej złożonym przykładem jest sterownik do integracji domofonu 4+n z inteligentnym domem.

W tym momencie wielu osobom może pojawić się refleksja – skoro już projektujemy płytki PCB, to czemu ograniczać się do Arduino i nie przejść na budowę urządzeń z użyciem mikrokontrolerów? Ależ jak najbardziej można – droga wolna. Ja pozostałem przy Arduino i ESP, bo przy obecnych cenach i miniaturowych modułach nieliczne zalety bardziej profesjonalnego podejścia, nie przysłaniają jego wad. Oczywiście nie mówimy tu o masowej produkcji, tylko o pojedynczych urządzeniach.

11. Postaw na właściwy moduł Ethernet

Moduły ethernet oparte o w5100 i w5500

Modułów ethernet dla Arduino jest przynajmniej kilka. Przy moich projektach jest to zwykle podstawowy komponent, więc jego wybór jest istotny. W końcu od niego zależy stabilność całego projektu.

Eksperymentowałem z różnymi modułami, rozpoczynając od oryginalnego Ethernet Shielda, opartego na chipsecie Wiznet W5100. I jest to bardzo dobry wybór, nawet do dzisiaj. Nowszy shield oparty jest o Wiznet W5500, który w teorii jest jeszcze lepszym układem i w praktyce pewnie też. Ja używam w5100, bo nie potrzebuje on biblioteki Ethernet w wersji 2.0, która zabiera więcej miejsca w pamięci. Dodatkowo miałem drobne problemy ze stabilnością w5500 przy zakłóceniach w sieci elektrycznej.

Natomiast dawno już odrzuciłem tanie moduły oparte na układzie ENC28J60. Koszt jest mniejszy, ale znacznie większa część obsługi przerzucona jest z modułu na Arduino, w związku z czym i Ethernet i Arduino działają po prostu gorzej – mniej mocy obliczeniowej pozostaje dla nas.

12. Wybierz napięcie 3,3V lub 5V

Świat idzie do przodu, coraz bardziej liczy się energooszczędność i używanie napięcia 5V powoli odchodzi do lamusa. Co prawda zwykle i tak mamy dostęp do obu napięć, bo udostępnia je zarówno Arduino UNO, jak i Mega. ESP działa z kolei tylko na 3,3V, natomiast standardowo zasilane jest przez USB, więc dostęp do 5V i tak mamy. Ale już przy Arduino Pro Mini mamy dwie osobne wersje – na 3,3V i 5V. Wybierając wersję Pro Mini powinniśmy więc zwracać uwagę co kupujemy i z jakim napięciem pracują pozostałe podzespoły, które chcemy użyć w naszym projekcie.

13. Kup programator AVR

Programator usbasp z przewodem do programowania Arduino Pro Mini

Zarówno Arduino, jak i ESP są na tyle uniwersalne, że nie wymagają programatorów. Programujemy je przez port szeregowy, zwykle USB. Sytuacja trochę bardziej komplikuje się, gdy płytka nie ma USB, jak choćby Pro Mini. Możemy jednak użyć konwertera z USB na serial-ttl. Jednak dużo wygodniej jest użyć programatora AVR, choćby usbasp.

Ja mam przygotowany przewód łączący programator z wyprowadzeniami Arduino Pro Mini. Dzięki modułowym podłączeniom, które wcześniej opisywałem w prosty sposób mogę odłączyć inne moduły, podłączyć programator i wgrać nowy program.

Takie podejście, poza wygodą, ma dwie zasadnicze zalety – pozbywając się bootloadera, który jest potrzebny przy programowaniu przez port szeregowy oszczędzamy trochę pamięci, która w Pro Mini bywa na wagę złota. Poza tym, przynajmniej w starszych wersjach bootloaderów na małych Arduino był błąd, który powodował, że były problemy z użyciem watchdoga.

Kupując programator, warto zwrócić uwagę, żeby był on kompatybilny z napięciami 3,3V i 5V. To samo zresztą dotyczy konwertera portu szeregowego.

14. Konsoliduj różne funkcjonalności

Ta rada jest bardzo dyskusyjna i warto ją dobrze przemyśleć, bo każde podejście ma zarówno wady, jak i zalety. Budując urządzenia związane z inteligentnym domem, po jakimś czasie człowiek zaczyna się zastanawiać – ile to wszystko zużywa prądu? Jak już robimy urządzenie, które zużywa prąd, ma zasilacz generujący jakieś straty, zajmuje miejsce, to nic nie stoi na przeszkodzie, żeby robiło więcej rzeczy, o ile to jest oczywiście potrzebne. Przykładowo moje ostatnie urządzenie jest sterownikiem podlewania na kilka sekcji, dodatkowo obsługuje rolety, mierzy temperatury w kilku pomieszczeniach oraz ciśnienie atmosferyczne, powiadamia o przyjściu gości, jest wewnętrzną syreną alarmową oraz nadaje i odbiera sygnały na 433MHz. Wszystko to przy zużyciu prądu nie przekraczającym Bardzo uniwersalne i wygodne.

Z drugiej strony takie podejście ma też wady. Przede wszystkim jest niestandardowe, więc w razie awarii lub zmiany koncepcji nie będzie łatwo go zastąpić. Rośnie też poziom skomplikowania nie tylko samego urządzenia, ale też programu.

Ja jednak jestem zwolennikiem takiego podejścia przy rozwiązaniach inteligentnego domu. Znajduje się ono w pół drogi między system rozproszonym z setkami urządzeń w każdym miejscu a centralnym sterowaniem, które trudno wykonać, jeżeli nie myśli się o automatyce od etapu projektowania budynku.

15. Stosuj modułowość swojego kodu

W pewnym sensie remedium na problem rosnącego skomplikowania programów jest „modułowość” kodu. Przez lata wypracowuje się pewną bazę oprogramowania, protokół komunikacji i bardzo powtarzalne funkcje. Przykładowo używając prawie wszędzie termometrów DS18B20, bo w automatyce temperatura niesie informację o bardzo wielu rzeczach, mam funkcje, które odnajdują termometry, odczytują temperatury i wysyłają je do centralnego serwera. W nowym programie, w którym ma być obsługa termometrów umieszczam w początkowej części konfiguracyjnej stałą definiującą pin, na którym jest podłączona szyna one-wire. Następnie w dalszej części wklejam funkcje odpowiedzialne za obsługę. W funkcji setup() tylko wywołuję funkcję inicjującą, a w loop() – obsługującą odczyty i wysyłkę.

Analogicznie jest z innymi funkcjonalnościami – sterowaniem wyjściami, obsługą wejść, obsługą rolet czy podlewania. Na przykład rolety i podlewanie wymagają sekcji związanej z wyjściami, bo z niej korzystają.

Jest to bardzo wygodne i pozwala też łatwo wprowadzać zmiany do wielu istniejących projektów. Dlatego też nie miałem problemu, żeby zmienić sposób komunikacji z http i pakietów UDP na MQTT, także w urządzeniach, które powstały kilka lat wcześniej.

16. Nie nadużywaj funkcji delay()

Warunkiem działania modułowego programu jest brak blokowania przez funkcje delay(). Żaden z modułów nie powinien więc zawłaszczać procesora na dłuższy czas. Oczywiście nie zawsze jest to proste i oczywiste, a w szczególności Arduino, potrzebuje na niektóre operacje trochę czasu, ze względu na niewielką moc obliczeniową. Jednak kluczem do sukcesu jest pozbycie się nawyku używania delay(), przynajmniej na dłuższe okresy.

Więcej o podejściu do wielozadaniowości Arduino już pisałem, więc nie będę się powtarzał, natomiast moim zdaniem warto zrozumieć ideę, która za tym stoi, zamiast od razu zaczynać korzystać z bibliotek, które obsługują „timery”.

17. Zaprzyjaźnij się z watchdogiem

Jak już jesteśmy przy funkcji delay i utykaniu programu, nie sposób nie wspomnieć o mechanizmie watchdog, który jest powszechny w świecie informatyki i automatyki. Cóż to takiego? To taki stróż, możliwie niezależny od głównej części urządzenia/programu, który pilnuje czy pilnowany byt się przypadkiem nie zawiesił i w razie potrzeby go restartuje.

W szczególności watchdog jest dostępny w Arduino i w ESP. Jak to działa? W skrócie – tak jak wciskanie przycisku w serialu Lost w bunkrze. Jak się nie wciśnie co jakiś czas to wszystko wybucha. No dobra, nie do końca. Technicznie mamy po prostu jakiś licznik, który się zwiększa cały czas. Sami decydujemy jaki jest limit – czy to kilkaset ms czy może kilka sekund. Jak przez ten czas jawnie go nie zresetujemy w naszym programie, to urządzenie jest restartowane.

Oczywiście ktoś powie, że watchdog jest niepotrzebny, wystarczy dobrze pisać programy. Tylko nie do końca jest to prawda. Zawsze powinniśmy dbać o jakość i testowanie kodu, jednak w grę wchodzą jeszcze biblioteki, których używamy oraz niedoskonałości sprzętu i zasilania. A tak, w skrajnym wypadku urządzenie się po prostu zrestartuje. Ważne tylko, żeby ten restart był obsłużony i nie wpływał za bardzo na działanie naszego systemu.

Poza watchdogiem stosuję inne zabezpieczenia, np. restartowanie modułów ethernet w programie, gdy są problemy z komunikacją, a także restart całego urządzenia w przypadku, gdy przez dłuższy czas nie ma żadnej komunikacji. Jeżeli chcemy wykorzystać taki mechanizm, to oczywiście powinniśmy być pewni, że cykliczna komunikacja jest oczekiwana. U mnie niezależnie od wszystkiego centralny system wysyła komunikat „ping” do każdego z urządzeń i przy okazji monitoruje odpowiedzi.

Mam urządzenia, które działają od lat i nie były nigdy ręcznie restartowane z powodu problemów. Oczywiście mam też takie, które nie używają watchdoga, a mimo to są stabilne, jednak jeżeli mamy taki mechanizm, to czemu z niego nie skorzystać?

18. Rób kopie zapasowe

Jakże to banalne, przecież wszyscy wiedzą, że kopie zapasowe trzeba robić. A potem pada dysk w komputerze i okazuje się, że tak, ale ostatnio rok temu i nie do końca wiadomo gdzie. Nie będę się rozwodził na temat ważności backupów w IT, skupimy się wyłącznie na naszych programach.

Jeżeli konstruuje się jakieś urządzenie, które ma działać dłuższy czas, choćby wspomagać inteligentny dom i jest okno w jakiś sposób zaprogramowane, to należy mieć świadomość, że może się ono zepsuć za 5, 10, czy 20 lat. Dobrze byłoby móc je bez problemu naprawić – na przykład wymieniając główny moduł i na nowo go programując. Tylko jak mamy je zaprogramować, gdy nie mamy kodu programu? Żeby nie pisać programu na nowo, nie przypominać sobie, jak ono działało, warto mieć wszystkie programy gdzieś zgromadzone. I zrobioną kopię. I kopię z kopii…

19. Zgromadź jakiś zapas komponentów

Ktoś może powiedzieć, że po co mu program do Arduino, które zepsuje się za 15 lat, jak już nie będzie można kupić sprzętu albo cała platforma nie będzie działać? I tu dochodzimy do kolejnego problemu świata IT – czasu wsparcia. Nie bez powodu pisałem, że należy wybierać platformę, która jest stabilna i istnieje małe ryzyko, że stanowi tylko chwilową modę.

Ktoś może powiedzieć, po co mam myśleć o perspektywie 20-letniej, jak po takim czasie Arduino nie będzie już istnieć i nikt o nim nie będzie pamiętał. Wszystko będzie hiper-nowoczesne i bezprzewodowe. Czy aby na pewno? Historia Arduino sięga początków naszego wieku, a Ethernet, z którego korzystamy ma początki ponad 40 lat temu.

Niezależnie jednak od naszej wiary w wieczne trwanie danego standardu, warto zrobić jakiś zapas komponentów, choćby płytek ESP czy Arduino. Nic nie jest wieczne i może się okazać, że za 20 lat może być trudno je kupić.

20. Pamiętaj o dokumentacji

Wiem piszę o rzeczach oczywistych dla świata IT. Wszyscy wiedzą, jak potrzebna jest dokumentacja, a jak przychodzi co do czego to nie zawsze jest albo jakość nie jest wystarczająca.

Podstawowa dokumentacja może być zawarta w programie – opisujmy krótko czego dotyczy program, którego urządzenia, jakie wyjścia są użyte w jakim celu, a może nawet to, gdzie się kończą przewody w konkretnych kolorach, które dochodzą do naszej skrzynki. Często warto też zrobić sobie jakieś zdjęcie urządzenia, żeby w razie czego było widać podłączenia.

Gdy mamy dobrą dokumentację, to gdy za jakiś czas zdecydujemy się na zmianę rozwiązania na nowocześniejsze, to nie powinniśmy mieć z tym większych problemów.

Oczywiście mówię tu tylko o dokumentacji na nasze potrzeby, zupełnie niekomercyjnej.

21. Mądrze dobieraj protokoły

Dla mnie to zagadnienie ma dwa najważniejsze aspekty. Pierwszym jest standaryzacja, drugim dopasowanie do naszych potrzeb. Przy czym skupimy się wyłącznie na IP, mając w pamięci, że nie zawsze standard sieci komputerowej jest jedynym słusznym wyborem. Istnieje wiele innych metod komunikacji przewodowej czy bezprzewodowej.

Jakiś czas temu jednym z ważniejszych standardów dla inteligentnego domu stał się protokół MQTT. Osobiście jestem jego zwolennikiem, natomiast wcześniej stosowałem wiele własnych rozwiązań, choć zawsze opartych na istniejących standardach.

Miejmy jednak świadomość, że czasem nawet MQTT jest niepotrzebnym ciężarem, gdy zależy nam na prostocie lub oszczędności danych czy energii. Przykładowo implementacja serwera lub klienta http jest bardzo prosta na każdej z platform, a pozwala komunikować się z istniejącymi serwerami czy przeglądarkami www jako klientami.

Z drugiej strony najprostszym i często najbardziej efektywnym sposobem wysłania danych przez sieć IP jest pojedynczy pakiet UDP, który nie wymaga całej warstwy nawiązywania połączenia, choć nie gwarantuje doręczenia.

Tak wiec, zdecydowaniem jestem zwolennikiem trzymania się jednego standardu, tam gdzie to ma sens, ale także przeciwnikiem klapek na oczach. Korzystajmy mądrze ze wszystkich możliwości i dobierajmy rozwiązania do potrzeb.

22. Bierz pod uwagę zawodność swoich rozwiązań

Projektując jakiekolwiek urządzenie, trzeba sobie zadać pytanie – a co jeśli nie zadziała. I w zależności od odpowiedzi dobrać środki zapewniające niezawodność.

Podstawową zasadą w projektowaniu rozwiązań związanych z inteligentnym domem jest zachowanie wszystkich głównych funkcjonalności budynku przy awarii naszego systemu. Oczywiście liczę się z tym, że wszelkie funkcje automatyczne przestaną działać, ale nie może być tak, że przez to nie da się na przykład zapalić światła w domu, albo lodówka przestanie działać, albo drzwi nie będą zabezpieczone. To wymaga pewnych decyzji na etapie projektowania i często omijania dróg na skróty.

Drugim aspektem jest brak zaufania do siebie i swoich rozwiązań. Weźmy jako przykład sterowanie silnikiem rolet. Prosty napęd sterujemy dostarczając napięcie 230V na jedną bądź drugą żyłę zasilającą i zależnie od tego uruchamiamy podnoszenie lub opuszczanie rolety. Natomiast absolutnie nie można podać napięcia na obie żyły na raz. Jedynym akceptowanym przeze mnie rozwiązaniem jest więc użycie złącz NO (normalnie otwarte) i NC (normalnie zamknięte) tradycyjnego przekaźnika. Drugi przekaźnik (i to już może być SSR) steruje zasilaniem, natomiast za kierunek jest odpowiedzialny zawsze jeden. Wiem, że są osoby, które używają osobnych przekaźników dla każdego kierunku i tylko zabezpieczają w logice programu, że oba nie są aktywne, ale dla mnie jest to nie do przyjęcia. Prędzej czy później możemy się pomylić w programie czy podłączeniu, czy to za dziesiątym, setnym czy tysięcznym razem. Bądźmy bezpieczni już na etapie założeń.

23. Pomyśl o bezpieczeństwie (!!!)

Właściwie to pewnie ten punkt powinien być jako pierwszy. A z pewnością robiąc cokolwiek powinniśmy bezpieczeństwo rozważać na początku. Ponieważ jednak ludzie zwykle najwięcej zapamiętują z początku i końca tekstu, wiec umieściłem go tutaj, gdzie jest.

Bezpieczeństwo to temat niezwykle szeroki i wielowarstwowy. Zawsze należy brać je pod uwagę i szacować ryzyka. Nawet nie będę pisał o odpowiednim zabezpieczeniu naszych systemów przed niepowołanym dostępem, choć o tym też pamiętaj. Z całą pewnością najważniejsze jest bezpieczeństwo fizyczne – nasze i innych ludzi. Jeżeli ktoś rozważa użycie napięcia 230V lub choćby elementów, które mocno się nagrzewają, powinien wiedzieć co robi i wszystko dziesięć razy przemyśleć.

Nie należy zapominać o zabezpieczeniach – zarówno po stronie napięcia przemiennego, jak i stałego. Pamiętajmy, że jeżeli zabezpieczymy się od strony AC, to nawet umiarkowany prąd po tej stronie, może przełożyć się na dużo większe natężenie po stronie niskiego napięcia. Na tyle duże, że będzie mogło stopić przewody po stronie prądu stałego.

Zawsze stosujmy więc właściwe zabezpieczenia, obliczajmy czy przewody nie są za cienkie, a także sprawdzajmy wszelkie mocowania, żeby nie doprowadzić do zwarcia czy choćby możliwości niebezpiecznego iskrzenia.

A poza tym jeszcze raz – nie masz doświadczenia – nie twórz projektów dotykających czegoś co może być niebezpieczne. Zacznij od niższych napięć i wróć do swoich planów, jak już będziesz pewny tego, co robisz.

24. Znajdź swoją własną drogę

Przede wszystkim nie daj się zniechęcić ani wmówić sobie, że ktoś ma jedyną słuszną koncepcję na cokolwiek, włączając w to projektowanie. Pamiętaj, wszystko jest wykonalne, tylko czasem wymaga czasu i nauki na błędach. Zawsze jednak warto wysłuchać, jakie są czyjeś doświadczenia i wybrać z nich to, co najlepsze. I do tego właśnie chciałem zachęcić tym tekstem, absolutnie nie stawiając się w pozycji kogoś, kto poszedł najlepszą możliwą drogą. Znajdź swoją własną – ja tylko pokazałem swój kierunek.

Ten wpis został opublikowany w kategorii Arduino i oznaczony tagami , , , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

16 odpowiedzi na 24 praktyczne porady związane z projektami Arduino i ESP

  1. wizu pisze:

    24. W przypadku użycia ESP wykorzystaj ESPHome lub Tasmota. Zaoszczędzisz sporo czasu a niewiele tracisz.

    • techniczny pisze:

      Nawet jest to wspomniane w punkcie 2 😉

      • Zlecenie pisze:

        Cześć, szukam osoby takiej jak Ty by dokończyć projekt urządzenia na ESP32. Chętnie bym cię wprowadził w projekt byś mógł wycenić swoją pracę. Bardzo proszę daj znać na maila czy byłbyś zainteresowany.

        • techniczny pisze:

          Przykro mi, ale w obecnej chwili mam dość pracy zawodowej, a czasu raczej niedomiar, więc nie podejmuję się zleceń. Może jakiś czytelnik bloga się zgłosi 🙂

          • zlecenie pisze:

            Dziekuje za odpowiedz. Czy polecilbys moze sposob znalezienia dobrego inzyniera ktory dokonczy mi projekt urzadzenia z branzy farmaceutycznej? Dosyc proste sterowanie zaworem z pomiarem napiecia.

          • SpeX pisze:

            Spytaj na forum.kodujdlapolski.pl

  2. Maruda pisze:

    Bardzo dziękuję za wartościowy blog. Dopiero raczkuję w temacie majsterkowania i wszystkie informacje będą bardzo pomocne.

  3. KrzysztofB pisze:

    dzięki, przydatne uwagi

  4. Gburas pisze:

    Fajny tekst, ciekawy i przyjemny w odbiorze. Dużo się dowiedziałem ( poziom początkujący/laika). Pozdrawiam i dziękuję za Twoją pracę

  5. RF pisze:

    @techniczny. cześć, mogę się z Tobą skontaktować na priv, bo w komentarzu za duży essej by wyszedł :-/

  6. parkingowy pisze:

    Punkt 12-sty jest dwa razy, zatem są 24 porady 🙂
    Interesujący tekst, dzięki.
    Choć ogólnie automatyzacja domu mnie nie pociąga ze względu na mieszkanie w wynajmowanym mieszkaniu to czuję, że się nie powstrzymam od przeczytania przynajmniej zalinkowanych wpisów.

  7. Grzegorz pisze:

    fajnie się czyta, też prowadzę bloga o podobnej tematyce. fajnie poczytać o koncepcjach innych w budowaniu smarthome

  8. Radek pisze:

    Dzięki za artykuł. Pkt 8 to jes to czego szukałem 🙂 8. Wygodnie podłączaj zasilanie.
    Włśnie szukałem informacji jak połączyć w szafie wszystki/e zasilania np. 5V. Jakieś szyny, bloki, jakieś nie zbyt kosztone rozwiązania, ktoś coś?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *