Przejdź do głównej zawartości

CircuitPython na Black Pill - łatwe programowanie tanich mikrokontrolerów

Płytka Black Pill STM32F411 i logo CircuitPython
 

Python to wspaniały język programowania. Ma niski próg wejścia - każdy może się go nauczyć a ogromny ekosystem bibliotek pozwala, nawet początkującym, tworzyć przydatne programy. Co ciekawe, Python znajduje zastosowanie nie tylko na komputerach osobistych. Dzięki projektom takim jak MicroPython czy CircuitPython, możemy użyć tego języka do programowania urządzeń elektronicznych własnej konstrukcji. W tym wpisie pokażę jak zainstalować CircuitPython na mikrokonrolerze o wartości 3 USD.


Potrzebny sprzęt:

  1. Komputer z systemem GNU/Linux
  2. Mikrokontroler STM32F411CE
  3. Programator ST-LINK/V2
  4. Przewód USB A USB C
  5. Lutownica i odrobina stopu lutowniczego


Kupujemy mikrokontroler

Płytka STM32F411CE, zwana potocznie Black Pill, to konstrukcja produkowana głównie przez chińską firmę WeAct. W internecie łatwo trafić na "podróbki" tego produktu. Trzeba zaznaczyć, że oryginalny Black Pill kosztuje mniej niż trzy dolary a jego kopie potrafią być droższe. Ja np. kupiłem, w jednym z polskich sklepów internetowych, "podróbkę" za przeszło trzydzieści złotych a kilka dni później, w tej samej cenie sprowadziłem sobie dwie sztuki Black Pill od WeAct... z popularnego chińskiego serwisu. Magia importu - podróka jest droższa niż oryginał.

Czy jednak na pewno możemy mówić o "podróbce"? WeAct twierdzi, że płytki bez ich loga to produkty pirackie, ale chyba nie do końca tak jest, bo BlackPill jest konstrukcją open source. W Internecie sporo jest negatywnych opinii o "podróbkach" tych płytek - niektórzy twierdzą, że programator ST-Link odmawia współpracy z kopiami, inni wspominają o podrobionych procesorach (używam pojęcia procesor bo od poczatku słowo mikrokontroler stosuję w odniesieniu do całej płytki - ale tak: procesor to właściwie mikrokontroler a płytka to płytka lub moduł). Co prawda moja, kupiona w Polsce, piracka wersjia działa dobrze - rozumiem jednak, że bezpieczniej jest kupić produkt ze znaczkiem producenta. Na ilustracji poniżej widać moduł oryginalny, z logiem WeAct, oraz moduł "piracki", zawierający jedynie uniwersalne oznaczenie płytki PCB.

Zaznaczyć też trzeba, że płytki Black Pill wystepują obecnie w dwóch wersjach STM32F411CE i STM32F401CC. CircuitPython jest dostępny jedynie dla STM32F411CE. Na STM32F401CC można zainstalować MicroPython, ale nie jest to przedmiotem tego wpisu.

Uwaga: Black Pill należy samodzielnie zlutować. Niezbędne jest wlutowanie czterech pinów do wyprowadzeń na krótszym boku plytki - są one konieczne do zaprogramowania mikrokontrolera.


Kupujemy programator

Mimo, iż Black Pill posiada złącze USB, nie da się go wykorzystać do programowania układu (będzie to mozliwe po instalacji CircuitPythona). Płytki te programuje się najczęściej na dwa sposoby - za pomocą konwertera USB-UART, lub programatorem ST-LINK/V2. Opiszę ten drugi sposób. Programatory tego typu można nabyć za kilkanaście złotych.

Pobieramy Pythona

Na mikrokontrolerze STM32F411CE możemy zainstalować zarówno MicroPython jak i CircuitPython. CircuitPython jest specyficzną implementacją MicroPythona opracowaną przez firmę AdaFruit. Różnice między wersjami języka są nieznaczne. Opisuję CircuitPython dlatego, że jest on dostępny w wersji już skompilowanej dla Black Pill. Gotowy plik .BIN pobieramy ze strony https://circuitpython.org/board/stm32f411ce_blackpill/


Instalujemy oprogramowanie

Potrzebujemy dwóch rzeczy: zestawu reguł udev oraz narzędzia STM32 Cube Programmer.

Zestaw reguł udev dla st-link znajdziemy w repozytorium open source'owych wersji narzędzi do st-link. Te cztery pliki należy pobrać i wkleić do lokalizacji

/etc/udev/rules.d/

Właściwie cały ten tutorial można przeprowadzić w oparciu o znajdujące się w tym repozytorium otwartoźródłowe narzędzia, dedykowane programatorom st-link, jednak na dzień w którym pisze ten tekst narzędzie st-flash zawiera bug, posłuzymy się więc oficjalnym narzędziem - STM32 Cube Programmer.

Zatem pobieramy STM32 Cube Programmer, rozpakowujemy i instalujemy. Jest to aplikacja napisana w Javie, potrzebujemy więc środowiska uruchomieniowego. Ważna uwaga: powinniśmy korzystać z JRE od Oracle, STM32 Cube Programmer nie poleci na OpenJDK.
Jeżeli STM32 Cube Programmer został zainstalowany ale nie możesz go uruchomić, najprawdopodobniej musisz zainstalować Javę od Oracle. Najprościej:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java9-installer
sudo apt install oracle-java9-set-default
W tym momencie warto ponownie uruchomić komputer. Jeżeli wszystko przebiegło poprawnie to STM32 Cube Programmer powinien działać i rozpoznawać podłączony st-link.

Podłączenie programatora

Do zaprogramowania mikrokontrolera wykorzystamy cztery spośród pieciu pinów znajdujących sie w dolnym rzędzie, w programatorze st-link/v2. Zatem piny SWCLK, SWDIO, GND, 3,3V należy połączyć z ich odpowiednikami na krótszym boku płytki Black Pill.





Programujemy!

Po podłączeniu połączonego z mikrokontrolerem programatora do komputera możemy przystąpić do programowania. Linux prawdopodobnie nie zasygnalizuje obecności nowego urządzenia w porcie usb, ale STM32 Cube Programmer nie powinien mieć problemu z wykryciem urządzenia.
Uruchamiamy program.





Program powinien rozpoznać programator st-link i wyświetlić dopasowane ustawienia w tabeli po lewej stronie. Jeśli tak się nie stało klikamy przycisk przy polu Serial number. Jeżeli urządzenie zostało rozpoznane klikamy Connect i w głównym oknie powinniśmy zobaczyć zawartość pamięci mikrokontrolera.

Zawartość pamięci mikrokontrolera w oknie programu Cube

Następnie klikamy Open file i wskazujemy plik .bin.Przycisk Download pozwoli wgrać dane na mikrokontroler.


Gadamy z wężem!

Oprogramowanie powiadomi nas o poprawnym zapisie a mikrokontroler automatycznie się zresetuje. Możemy już pozbyć się programatora i podłączyć płytkę bezpośrednio przez USB. System zasygnalizuje podłączenie pamięci usb - nasz Black Pill będzie widoczny jako dysk o nazwie CIRCUITPY. Od tego momentu programowanie urządzenia jest dziecinnie proste - wystarczy na dysku CIRCUITPY umieścić plik z kodem Pythona. Bezpośrednio po uruchomieniu płytka szuka plików o nazwie code.py lub main.py.


Blink w CircuitPython

Jeżeli chcemy zobaczyć działanie CircuitPythona w praktyce wystarczy podłączyć Black Pill do komputera przez USB i na dysku CIRCUITPY, w pliku main.py umieścić kod:



import board
import digitalio
import time
  
led = digitalio.DigitalInOut(board.C13)
led.direction = digitalio.Direction.OUTPUT
  
while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)
    print('Hello World!')

Gdy zapiszemy plik, płytka uruchomi się ponownie i zacznie migać niebieską diodą. Ponadto na monitorze portu szeregowego będzie wypisywać Hello World!.


Monitorowanie portu szeregowego w Putty

Chcąc odczytać wyświetlane informacje, lub komunikować się z CircuitPythonem za pomocą portu klawiatury, potrzebujemy narzędzia, którym połączymy się z płytką. Na systemach Linux mamy szeroki wybór takiego oprogramowania. Jedną z opcji jest Putty.

Instalujemy program:

sudo apt install putty

Aby połączyć się z płytką musimy poznać nazwę portu, który wykorzystuje. Gdy płytka jest odłączona wpisujemy komendę:

ls /dev/ttyACM*

Możliwe, że nie zobaczymy żadnych wyników, ale możliwe też, że zobaczymy kilka ponumerowanych urządzeń. Następnie podłączamy Black Pill i wpisujemy tę samą komendę - tym razem na liście wyników powinna się pojawić nowa pozycja np. /dev/ttyACM0, /dev/ttyACM1 - nowa pozycja na liście wyników to port naszego mikrokontrolera.

Uruchamiamy Putty na uprawnieniach administratora...


sudo putty


Putty - połączenie z BlackPill

... wybieramy typ połączenia Serial, w Serial line wpisujemy namiary na port płytki, szybkość określamy na 115200. Klikamy Open i uruchomi się terminal do komunikacji z Pythonem. Jeżeli widzisz tylko czarne okienko, które nie reaguje to nic niezwykłego - stworzyliśmy monitor po uruchomieniu skryptu na mikrokontrolerze, może istnieć potrzeba wymuszenia ponownego uruchomienia programu zapisanego na płytce. Zrób to wprowadzając dowolną drobną zmianę w pliku z kodem - zapisanie pliku wymusi restart skryptu. Możesz np. usunąć a następnie przywrócić ostatnią linijkę kodu, odpowiedzialną za wysłanie tekstu (po drodze oczywiście zapisz plik).
Hello World w Circuit Python na płytce STM32F411

Ewentualne problemy


Może być tak, że komunikacja przez terminal będzie działać wolno lub zachowa się w inny, nieprzewidywalny, sposób. Podobno zdarza się to na skutek interakcji ze managerem modemów. Dzisiaj nikt już chyba nie wdzwania się w internety, więc spokojnie można usunąć modemmanager poleceniem:


sudo apt purge modemmanager

Jeżeli po podłączeniu urządzenie jest wykryte jako ttyACM* a mimo to nie możemy się z nim połączyć, najprawdopodobniej jest to kwestia uprawnień. W taki wypadku ustawmy je sobie poleceniem:


sudo chmod 666 /dev/ttyACM0

Źródła








Komentarze

  1. Co w przypadku jak stm32cubeprogrammer nie widzi zawartości płytki, a przyciskami zmienia stan świecenia diody?

    OdpowiedzUsuń

Prześlij komentarz

Popularne posty z tego bloga

Komponowanie muzyki a'la George R.R. Martin

Jakiś czas temu (raczej dawno) natknąłem się w internetach na wywiad z George'm R.R. Martin'em - pisarzem, autorem m.in. Gry o tron . Martin wspomniał, że swoje powieści pisze w systemie MS-DOS, w programie WordStar 4.0. Być może dzisiaj, dla wielu osób, nie jest to oczywiste, więc wyjaśnię, że zarówno system operacyjny MS-DOS, jak i edytor tekstu WordStar to oprogramowanie tyleż leciwe co, porównując do dzisiejszych standardów, prymitywne. George R.R. Martin korzysta z systemu z interfejsem tekstowym - bez grafiki, bez ikon, bez kursora myszy, bez klikania. Tylko tekst - czarne tło, białe komunikaty i komendy. Ms-DOS trafił na rynek w 1981 roku, jego ostatnia samodzielna wersja (6.22) ukazała się w roku 1994 (od wersji 7 DOS był tylko częścią systemów Windows) a ostatnia wersja, w ogóle, ukazała się w 2000 roku, jako część systemu Windows Me. Dlaczego George R.R. Martin wybiera tak przestarzałe oprogramowanie? Pisarz wyjaśnił, że takie środowisko pracy go nie rozpr...

Raspberry Pi PICO, MicroPython i VS Code

  Rok temu opisałem tanią, chińską płytkę, na której można zainstalować MicroPython i/lub CircuitPython . Oparty o układ STM32 BlackPill był moją ulubioną pythonową płytką zaledwie przez kilka miesięcy. Sytuacja zmieniła się w styczniu tego roku, kiedy to na rynek trafił Raspberry Pi PICO - układ posiadający szybszy procesor, więcej pamięci, w dodatku, dostępny w rozsądnej cenie. Raspberry Pi PICO jest układem dedykowanym dla MicroPython, instalacja węża jest banalnie prosta, nie wymaga żadnego dodatkowego oprogramowania. Wystarczy pobrać plik UF2, wcisnąć i przytrzymać przycisk BOOTSEL na płytce, gdy przycisk jest wciśnięty należy podłączyć Raspberry Pi PICO przez USB do komputera a nastepnie zwolnić przycisk. PICO zostanie wykryty jako nośnik pamięci, na który wystarczy skopiować plik UF2. Po ukończonym kopiiowaniu plytka automatycznie uruchomi sie ponownie i będzie gotowa do pacy z Pythonem. Aktualny plik UF2 MicroPython Aktualna wersja CircuitPython Oficjalny przewodnik po Ras...