OPTA i MicroPython – połączenie automatyki przemysłowej z Pythonem
Programowanie sterowników PLC zwykle kojarzy się z językami takimi jak Ladder, FBD czy Structured Text. Z kolei Python jest najczęściej kojarzony z aplikacjami uruchamianymi na komputerach, analizą danych czy sztuczną inteligencją. Co jednak, gdyby połączyć te dwa światy?
Okazuje się, że nie jest to wcale takie trudne. Programowalny przekaźnik logiczny Finder OPTA, opracowany we współpracy z Arduino, może być programowany nie tylko za pomocą klasycznych języków automatyki, ale również z wykorzystaniem Arduino/C++. Co więcej, dzięki dostępności firmware’u MicroPython możliwe jest wykorzystanie na tym urządzeniu również języka Python.
To ciekawe połączenie: z jednej strony mamy urządzenie przeznaczone do zastosowań automatyki, wyposażone w wejścia, wyjścia, komunikację Ethernet, RS-485 i – zależnie od wersji – Wi-Fi oraz Bluetooth, a z drugiej język, który pozwala bardzo szybko pisać i testować kod.

Źródło: Finder
W tym artykule przyjrzymy się bliżej samej OPTA, jej możliwościom oraz temu, dlaczego MicroPython może być interesującą alternatywą dla klasycznego sposobu programowania. W dalszej części pokażemy również krok po kroku, jak przygotować OPTĘ do pracy z MicroPythonem i uruchomić na niej pierwszy program.
Czym właściwie jest OPTA?
Finder OPTA to kompaktowy programowalny przekaźnik logiczny przeznaczony m.in. do zastosowań w automatyce przemysłowej, budynkowej i aplikacjach IoT. Urządzenie montowane jest na szynie DIN, dzięki czemu może być bezpośrednio umieszczone w szafie sterowniczej.
Pod względem sprzętowym OPTA oferuje znacznie więcej niż typowa płytka deweloperska. Urządzenie jest zasilane napięciem 12–24V DC i wyposażone w 8 wejść cyfrowych/analogowych oraz cztery wyjścia przekaźnikowe o maksymalnym prądzie przełączania 10 A na wyjście. Do dyspozycji użytkownika są również programowalny przycisk oraz diody LED, które mogą służyć m.in. do sygnalizacji stanu aplikacji.
Komunikacja – od Ethernetu po Wi-Fi
Jedną z mocniejszych stron OPTY są dostępne interfejsy komunikacyjne. Wszystkie wersje urządzenia wyposażono w port Ethernet ze złączem RJ45, który może być wykorzystywany m.in. do komunikacji Modbus TCP. W zależności od wariantu dostępny jest również interfejs RS-485, a wersja WiFi oferuje dodatkowo komunikację Wi-Fi oraz Bluetooth Low Energy.
Daje to sporo możliwości w praktycznych aplikacjach. OPTA może komunikować się np. z licznikami energii, panelami operatorskimi czy innymi urządzeniami automatyki za pomocą Modbus RTU, a przez Ethernet może wymieniać dane z systemami wykorzystującymi Modbus TCP.
W przypadku wersji wyposażonej w Wi-Fi można natomiast zrealizować komunikację bezprzewodową, co może być szczególnie interesujące w aplikacjach IoT czy systemach automatyki budynkowej.
USB-C nie tylko do programowania
Na przedniej części urządzenia znajdziemy również port USB-C. Służy on do programowania oraz komunikacji z komputerem, a także do zasilania OPTY podczas programowania. Trzeba jednak zwrócić uwagę na istotne ograniczenie: zasilanie przez USB-C nie jest przeznaczone do zasilania wyjść przekaźnikowych. Jeżeli chcemy sterować zewnętrznymi obciążeniami za pomocą wyjść przekaźnikowych, OPTA powinna być zasilana z zewnętrznego źródła 12–24 V DC.
W praktyce USB-C bardzo ułatwia jednak pierwsze eksperymenty. Przy testowaniu programu przy biurku nie musimy od razu podłączać pełnego zasilania do zacisków urządzenia – wystarczy połączenie z komputerem przez USB-C.

Interfejs sprzętowy Opty
Jeden sterownik, kilka sposobów programowania
Jedną z ciekawszych cech OPTY jest możliwość wyboru sposobu programowania. W zależności od wersji urządzenia użytkownik może korzystać z różnych środowisk i języków.
W przypadku wersji Arduino program można tworzyć w środowisku Arduino IDE, wykorzystując framework Arduino oparty na językach C/C++. OPTA może być również programowana za pomocą Arduino PLC IDE z wykorzystaniem języków zgodnych z normą IEC 61131-3, takich jak Ladder Diagram (LD), Function Block Diagram (FBD), Structured Text (ST), Sequential Function Chart (SFC) czy Instruction List (IL).
Drugi wariant urządzenia przeznaczony jest do pracy z platformą CODESYS. Jest to środowisko dobrze znane w świecie automatyki przemysłowej, umożliwiające programowanie sterowników z wykorzystaniem standardowych języków PLC, takich jak LD, FBD czy ST.
To ważna różnica, dlatego przed zakupem OPTY warto zwrócić uwagę na jej wariant. Poszczególne wersje urządzenia nie są bowiem po prostu identycznym sprzętem z inną nazwą – różnią się też środowiskiem programistycznym.
Warto również wspomnieć, że korzystanie z dedykowanego środowiska programistycznego nie wymaga wykupienia dodatkowej subskrypcji. Zarówno dla wersji przeznaczonej do Arduino PLC IDE, jak i dla wersji pracującej z CODESYS, wraz z urządzeniem otrzymujemy odpowiednią licencję produktową.

Środowisko PLC IDE do programowania w językach IEC 61131-3
Gdy podstawowe I/O to za mało
Jeżeli osiem wejść i cztery wyjścia okażą się niewystarczające, możliwości OPTY można rozszerzyć za pomocą modułów dołączanych przez złącze AUX.
Dostępne są trzy typy rozszerzeń: EMR, SSR oraz ANALOG. Do jednego modułu bazowego można dołączyć maksymalnie pięć modułów rozszerzeń, a poszczególne moduły można ze sobą łączyć w zależności od potrzeb aplikacji.
Rozszerzenie EMR
Moduł EMR zwiększa liczbę dostępnych sygnałów o 16 wejść cyfrowych/analogowych oraz 8 wyjść przekaźnikowych. Każde z wyjść przekaźnikowych może przełączać obciążenie o prądzie znamionowym do 6 A.
Rozszerzenie SSR
Wersja SSR również oferuje 16 wejść cyfrowych/analogowych oraz osiem wyjść, jednak zamiast przekaźników elektromechanicznych wykorzystuje wyjścia półprzewodnikowe. Ich maksymalny prąd znamionowy wynosi 3 A, a są one przeznaczone do przełączania obciążeń DC. Dzięki półprzewodnikowej konstrukcji moduł SSR może być interesujący w aplikacjach wymagających częstszego przełączania niż w przypadku klasycznych przekaźników.
Rozszerzenie analogowe
Jeszcze ciekawsze możliwości daje moduł analogowy. Udostępnia on 8 konfigurowalnych kanałów, które mogą pracować jako wejścia lub wyjścia. W przypadku wejść możliwy jest pomiar napięcia 0–10 V, prądu 0–20 mA oraz sygnałów z czujników rezystancyjnych, w tym PT100. Kanały mogą również pracować jako wyjścia analogowe napięciowe lub prądowe. Dodatkowo moduł wyposażono w 4 wyjścia PWM.
Dzięki temu moduł może znaleźć zastosowanie np. w układach regulacji temperatury, sterowaniu siłownikami czy płynnym sterowaniu urządzeniami wykonawczymi. Wyjścia PWM pozwalają natomiast realizować sterowanie mocą lub prędkością urządzeń wyposażonych w odpowiednie wejście sterujące.
Przy maksymalnej liczbie pięciu modułów rozszerzeń możliwości OPTY stają się już naprawdę duże. W przypadku modułów cyfrowych można uzyskać do 80 dodatkowych wejść i 40 dodatkowych wyjść, a wraz z wejściami i wyjściami znajdującymi się na module bazowym OPTY daje to odpowiednio 88 wejść i 44 wyjścia cyfrowe.
Co znajduje się wewnątrz OPTY?
Za możliwości obliczeniowe OPTY odpowiada mikrokontroler STM32H747XI firmy STMicroelectronics. I tutaj warto zatrzymać się na chwilę, ponieważ nie jest to mikroprocesor w znaczeniu typowym dla komputerów jednopłytkowych czy komputerów PC, lecz wydajny, dwurdzeniowy mikrokontroler (MCU).
STM32H747XI wyposażono w dwa rdzenie ARM Cortex-M: Cortex-M7 taktowany zegarem do 480 MHz oraz Cortex-M4 pracujący z częstotliwością do 240 MHz. Sam mikrokontroler posiada 2 MB pamięci Flash oraz 1 MB pamięci RAM. OPTA wyposażona jest dodatkowo w pamięć Flash QSPI o pojemności 16 MB.
Takie parametry mogą wydawać się bardzo duże jak na urządzenie pełniące funkcję przekaźnika logicznego. I właśnie tutaj zaczyna się robić ciekawie – ponieważ ten sam sprzęt może zostać wykorzystany do uruchamiania MicroPythona.
MicroPython – Python na sterowniku PLC?
Python zdobył ogromną popularność dzięki prostej składni i dużej liczbie dostępnych bibliotek. MicroPython wykorzystuje podobną składnię, ale został zaprojektowany specjalnie z myślą o mikrokontrolerach i systemach wbudowanych.
W przypadku mikrokontrolerów szczególnie ciekawy jest sposób pracy z kodem. W klasycznym środowisku programistycznym często wygląda to następująco:
kod źródłowy → kompilacja → wgranie programu → uruchomienie → test → poprawka → ponowna kompilacja.
MicroPython pozwala podejść do tego znacznie bardziej interaktywnie. Firmware zawiera interpreter, który wykonuje kod Pythona bezpośrednio na mikrokontrolerze. Do dyspozycji mamy również REPL (Read-Eval-Print Loop), czyli interaktywny tryb pracy, w którym możemy wpisywać pojedyncze polecenia i od razu obserwować ich działanie.
Jest to szczególnie wygodne podczas nauki i eksperymentowania z mikrokontrolerem. Zamiast od razu przygotowywać kompletny program, możemy zacząć od pojedynczego polecenia, sprawdzić jego działanie i stopniowo budować kolejne fragmenty kodu.
W przypadku OPTY możliwość uruchomienia MicroPythona jest szczególnie interesująca ze względu na zastosowany mikrokontroler STM32H747. To właśnie na nim uruchamiany jest firmware MicroPython, dzięki któremu możemy rozpocząć pracę z Pythonem bezpośrednio na urządzeniu.
Zaczynamy przygodę z MicroPythonem
Sama możliwość uruchomienia Pythona na OPTA to jednak dopiero początek. Aby rzeczywiście rozpocząć pracę, trzeba najpierw odpowiednio przygotować urządzenie, zainstalować firmware MicroPython oraz skonfigurować środowisko umożliwiające komunikację ze sterownikiem. Warto jednak zaznaczyć, że opisane dalej rozwiązanie dotyczy wariantu OPTA WiFi, dla którego dostępny jest gotowy firmware MicroPython.
Instalacja firmware’u MicroPython
Na początku OPTA musi zostać podłączona do komputera za pomocą przewodu USB-C. Połączenie to będzie potrzebne do zainstalowania firmware’u MicroPython oraz późniejszej komunikacji z urządzeniem.
Do wgrania firmware’u wykorzystamy narzędzie dfu-util. Jest to program implementujący protokół USB DFU (Device Firmware Upgrade), który umożliwia komunikację z urządzeniami znajdującymi się w trybie DFU oraz pobieranie i wgrywanie do nich oprogramowania. Narzędzie dfu-util można pobrać ze strony projektu: https://dfu-util.sourceforge.net/
W przypadku systemu Windows należy pobrać archiwum dfu-util-0.9-win64.zip, a następnie wypakować je w wybranym miejscu na komputerze. Aby można było uruchamiać program dfu-util bez podawania pełnej ścieżki do pliku, warto dodać go do zmiennej środowiskowej Path. W systemie Windows można to zrobić, wyszukując w menu Start opcję „Edytuj zmienne środowiskowe dla swojego konta”. Następnie w zmiennych użytkownika należy odnaleźć zmienną Path, wybrać opcję edycji i dodać ścieżkę do pliku dfu-util.exe. Po zapisaniu zmian należy zrestartować komputer, aby nowa zmienna środowiskowa została poprawnie zastosowana.
Gdy narzędzie jest już przygotowane, możemy przejść do instalacji firmware’u MicroPython na OPTA. Gotowy firmware dla Arduino OPTA WiFi jest dostępny na stronie projektu MicroPython: https://micropython.org/download/ARDUINO_OPTA/. Firmware można pobrać w postaci pliku .dfu i zapisać go na komputerze. Następnie OPTA powinna zostać przełączona w tryb bootloadera. W tym celu należy dwukrotnie szybko nacisnąć przycisk RESET znajdujący się na urządzeniu. Po wykonaniu tej czynności OPTA przechodzi w tryb bootloadera, w którym możliwe jest wgranie nowego firmware’u. Po prawidłowym przejściu do trybu bootloadera zielona dioda LED znajdująca się nad przyciskiem RESET zaczyna migać. Na stronie MicroPython znajduje się również przykładowa komenda służąca do instalacji firmware’u:

W naszym przypadku należy dostosować ją do lokalizacji pobranego pliku. Zamiast build-ARDUINO_OPTA/firmware.dfu wpisujemy ścieżkę do znajdującego się na komputerze pliku .dfu. W przypadku użycia systemu Windows najwygodniej będzie podać pełną ścieżkę do pliku. Dodatkowo należy usunąć z komendy parametr -w. Po dostosowaniu komenda może wyglądać na przykład tak:
dfu-util -a 0 -d 2341:0364 -D C:\MicroPython\firmware.dfu
Po jej wykonaniu dfu-util rozpocznie przesyłanie firmware’u do OPTA. W konsoli powinny pojawić się informacje o wykryciu urządzenia oraz postępie operacji. Po zakończeniu program wyświetli komunikat potwierdzający pomyślne zakończenie zapisu.

Wgrywanie firmware’u MicroPython na OPTA za pomocą narzędzia dfu-util
Co pojawia się po instalacji?
Gdy firmware MicroPython jest już zainstalowany, możemy odłączyć OPTA od komputera i ponownie podłączyć ją za pomocą USB-C.
Co ciekawe, system Windows wykrywa OPTĘ jako dysk. Po jego otwarciu znajdziemy kilka plików związanych z działaniem MicroPythona:
- boot.py – skrypt wykonywany podczas uruchamiania systemu MicroPython,
- main.py – główny plik programu użytkownika,
- README – plik zawierający informacje dotyczące systemu,
- pybcdc.inf – plik konfiguracyjny.
Z punktu widzenia użytkownika najważniejszy będzie oczywiście plik main.py. To właśnie w nim możemy umieszczać własny program, który będzie wykonywany przez OPTA.
Jak odwoływać się do elementów OPTY?
Przed rozpoczęciem programowania trzeba jeszcze zwrócić uwagę na jedną istotną rzecz. W MicroPythonie musimy posługiwać się odpowiednimi nazwami pinów mikrokontrolera STM32, aby móc sterować poszczególnymi elementami OPTA.
Na schemacie pinów OPTY znajdziemy oznaczenia odpowiadające bezpośrednio portom mikrokontrolera STM32H747. Przykładowo pierwszy z wbudowanych LED-ów jest przypisany do pinu PI_0. W kodzie MicroPythona nie używamy jednak pełnego oznaczenia PI_0. W tym przypadku stosujemy nazwę I0 – pomijamy literę P, która oznacza port mikrokontrolera. Analogicznie wygląda to w przypadku innych elementów.

Pinout OPTY
Pierwszy program – zapalamy LED
Skoro firmware jest już zainstalowany, możemy wreszcie przejść do ciekawszej części, czyli uruchomienia pierwszego programu.
Do pracy z MicroPythonem możemy wykorzystać m.in. Thonny IDE – proste i bezpłatne środowisko programistyczne przeznaczone m.in. do pracy z MicroPythonem. Oprócz edytora kodu oferuje ono również konsolę, przez którą możemy komunikować się bezpośrednio z urządzeniem. Po uruchomieniu Thonny należy wybrać odpowiedni interpreter MicroPython oraz port, przez który OPTA jest podłączona do komputera. Na początek nie będziemy jednak tworzyć żadnego rozbudowanego programu. Wykorzystamy interaktywną konsolę i spróbujemy po prostu zapalić jedną z wbudowanych diod LED.
Najpierw importujemy z modułu machine klasę Pin. Następnie tworzymy obiekt reprezentujący pierwszy LED. Przypisany jest on do pinu I0, który konfigurujemy jako wyjście. Teraz pozostaje już tylko wywołać metodę on():

Pierwszy test MicroPythona – sterowanie diodą LED z poziomu konsoli
Po wykonaniu ostatniej komendy, LED powinna zapalić się natychmiast.

Wynik działania testu
I właśnie w tym momencie widać jedną z największych zalet pracy z MicroPythonem. Nie trzeba tworzyć projektu, kompilować programu ani przechodzić przez cały proces wgrywania aplikacji. Wystarczy wpisać kilka poleceń w konsoli i niemal natychmiast można zobaczyć ich efekt na fizycznym urządzeniu.
Sterowanie LED-em za pomocą przycisku
Skoro udało się już zapalić LED pojedynczą komendą, możemy zrobić kolejny, niewiele bardziej skomplikowany eksperyment. Tym razem wykorzystamy wbudowany przycisk OPTA do sterowania diodą LED.
Do napisania programu możemy wykorzystać edytor znajdujący się w Thonny IDE. Program będzie odczytywał stan przycisku przypisanego do pinu E4 i na tej podstawie sterował diodą LED podłączoną do pinu I0.

Program w MicroPythonie sterujący diodą LED za pomocą wbudowanego przycisku
Program działa w nieskończonej pętli. W każdej iteracji sprawdzany jest stan przycisku. Gdy przycisk zostanie naciśnięty, jego stan zmienia się na niski (0), a program włącza diodę LED. Po zwolnieniu przycisku dioda zostaje wyłączona. Funkcja time.sleep(0.05) wprowadza opóźnienie 50 ms pomiędzy kolejnymi odczytami. Dzięki temu pętla nie wykonuje się niepotrzebnie z maksymalną możliwą częstotliwością.
Gdy program jest już gotowy, wystarczy uruchomić go za pomocą przycisku Run (zielony trójkąt) w Thonny IDE. Program zostanie przesłany do OPTA i rozpocznie wykonywanie. Nie trzeba długo czekać na efekt. Po naciśnięciu przycisku na OPTA dioda LED zapala się, a po jego zwolnieniu gaśnie.

Wynik działania programu
W ten prosty sposób wykonaliśmy pierwszy kompletny eksperyment z MicroPythonem na OPTA – od instalacji firmware’u, przez komunikację z urządzeniem, aż po sterowanie jego wbudowanymi elementami.
Podsumowanie
MicroPython pozwala w bardzo prosty sposób rozpocząć pracę z OPTA i szybko sprawdzać działanie kolejnych fragmentów kodu. Szczególnie dobrze widać to podczas pierwszych eksperymentów – pojedyncze polecenie wpisane w konsoli może niemal natychmiast wywołać reakcję fizycznego urządzenia.
W naszym przypadku wystarczyło kilka instrukcji, aby przejść od świeżo zainstalowanego firmware’u do sterowania wbudowaną diodą LED za pomocą przycisku. To dopiero początek możliwości, jakie daje połączenie OPTA z MicroPythonem, ale już na tym prostym przykładzie dobrze widać, jak szybko można przejść od napisanego kodu do jego działania na rzeczywistym urządzeniu. Pokazany przykład to dopiero pierwszy krok. MicroPython daje znacznie więcej możliwości – od obsługi wejść i wyjść po komunikację z zewnętrznymi urządzeniami. Bardziej rozbudowany przykład wykorzystania MicroPythona z OPTĄ można znaleźć również na portalu iAutomatyka, pod linkiem: https://iautomatyka.pl/finder-opta-i-micropython-praktyczne-podejscie-do-programowania-sterownikow/.
Inne źródła:
https://dfu-util.sourceforge.net/
https://micropython.org/download/ARDUINO_OPTA/
https://thonny.org/
dokumentacja opty: https://opta.findernet.com/pl/tutorial/user-manual

Przekaźniki PCB – klasyczny element w nowoczesnej elektronice
10 lat Finder Polska – jubileusz z perspektywą dalszego rozwoju
Efektywny dobór ergonomicznych obudów dla systemów automatyki budynkowej 

![https://www.youtube.com/watch?v=XkeyLmtLfxo O konkursie organizowanym przez firmę TRUMPF Huettinger i polskie uczelnie techniczne opowiada Alicja Peresada i prof. Jacek Rąbkowski oraz kilkoro nagrodzonych dyplomantów: mgr inż. Jakub Dobosz, inż. Maja Zielińska, dr inż. Jakub Kołodziej, dr inż Weronika Hryniewska-Guzik i dr inż. Grzegorz Bartyzel. Zapraszamy do obejrzenia filmu! [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/07/TRUMPF-czolowka.png)



