Zdalne sterowanie MicroPython: mpremote

Narzędzie wiersza poleceń mpremote udostępnia zintegrowany zestaw narzędzi do zdalnej interakcji z urządzeniem MicroPython, zarządzania jego systemem plików oraz automatyzacji przez połączenie szeregowe. Działa ze wszystkimi kamerami OpenMV Cam poprzez ich połączenie szeregowe USB i stanowi alternatywę w wierszu poleceń dla OpenMV IDE w przepływach pracy związanych ze skryptami i automatyzacją.

Aby korzystać z mpremote, najpierw zainstaluj je za pomocą pip:

$ pip install --user mpremote

Lub za pomocą pipx:

$ pipx install mpremote

Najprostszym sposobem użycia tego narzędzia jest wywołanie go bez żadnych argumentów:

$ mpremote

To polecenie automatycznie wykrywa i łączy się z pierwszym dostępnym urządzeniem szeregowym USB oraz udostępnia interaktywny terminal, którego możesz używać do dostępu do REPL i wyjścia swojego programu. Porty szeregowe są otwierane w trybie wyłącznym, więc uruchomienie drugiej (lub trzeciej itd.) instancji mpremote połączy się z kolejnymi urządzeniami szeregowymi, jeśli takie są dostępne.

Dodatkowo pipx pozwala również na bezpośrednie uruchomienie mpremote bez wcześniejszej instalacji:

$ pipx run mpremote ...args

Polecenia

mpremote obsługuje przekazywanie serii poleceń w wierszu poleceń, które wykonują różne działania po kolei na zdalnym urządzeniu MicroPython. Zobacz sekcję przykładów poniżej, aby zorientować się, jak to działa, oraz poznać kilka typowych kombinacji poleceń.

Każde polecenie ma postać <command name> [--options] [args...]. W przypadku poleceń obsługujących wiele argumentów (np. listę plików) listę argumentów można zakończyć znakiem +.

Jeśli nie określono żadnego polecenia, domyślnym poleceniem jest repl. Dodatkowo, jeśli któreś polecenie wymaga dostępu do urządzenia, a wcześniej nie określono żadnego connect, to niejawnie dodawane jest connect auto.

Aby wprowadzić urządzenie w znany stan dla dowolnego polecenia akcji (z wyjątkiem repl), po połączeniu mpremote zatrzyma każdy działający program i wykona miękki reset urządzenia przed uruchomieniem pierwszego polecenia. Możesz kontrolować to zachowanie za pomocą poleceń resume i soft-reset. Zobacz automatyczne połączenie i automatyczny miękki reset, aby uzyskać więcej szczegółów.

Można określić wiele poleceń, które zostaną wykonane sekwencyjnie.

Pełna lista obsługiwanych poleceń to:

connect

Połącz z określonym urządzeniem według nazwy:

$ mpremote connect <device>

<device> może być jednym z:

  • list: wyświetl dostępne urządzenia

  • auto: połącz z pierwszym dostępnym portem szeregowym USB

  • id:<serial>: połącz z urządzeniem o numerze seryjnym USB <serial> (druga kolumna w wyjściu polecenia connect list)

  • port:<path>: połącz z urządzeniem o podanej ścieżce (pierwsza kolumna w wyjściu polecenia connect list

  • rfc2217://<host>:<port>: połącz z urządzeniem za pomocą portu szeregowego przez TCP (np. sieciowy port szeregowy oparty na RFC2217)

  • dowolna prawidłowa nazwa/ścieżka urządzenia, aby połączyć się z tym urządzeniem

Uwaga: Zamiast polecenia connect dostępnych jest kilka predefiniowanych skrótów dla typowych ścieżek urządzeń. Na przykład polecenie skrótu a0 jest równoważne connect /dev/ttyACM0 (Linux), a c1 odpowiada COM1 (Windows).

Uwaga: Opcja auto wykryje wyłącznie porty szeregowe USB, tj. port szeregowy, który ma powiązany identyfikator USB VID/PID (czyli urządzenia typu CDC/ACM lub FTDI). Inne typy portów szeregowych nie zostaną wykryte automatycznie.

disconnect

Rozłącz bieżące urządzenie:

$ mpremote disconnect

Po rozłączeniu włączany jest automatyczny miękki reset.

resume

Zachowaj istniejący stan interpretera dla kolejnych poleceń:

$ mpremote resume

To wyłącza automatyczny miękki reset. Jest to przydatne, jeśli chcesz uruchomić kolejne polecenie na płytce bez wcześniejszego wykonywania jej miękkiego resetu.

soft-reset

Wykonaj miękki reset urządzenia:

$ mpremote soft-reset

Spowoduje to wyczyszczenie sterty Pythona i ponowne uruchomienie interpretera. Zapobiega to również wyzwoleniu przez kolejne polecenie automatycznego miękkiego resetu.

repl

Wejdź do REPL na podłączonym urządzeniu:

$ mpremote repl [--options]

Opcje to:

  • --escape-non-printable, aby drukować niedrukowalne bajty/znaki jako ich kod szesnastkowy

  • --capture <file>, aby przechwycić wyjście sesji REPL do podanego pliku

  • --inject-code <string>, aby określić znaki wstrzykiwane do REPL po naciśnięciu Ctrl-J. Pozwala to zautomatyzować często używane polecenie.

  • --inject-file <file>, aby określić plik wstrzykiwany do REPL po naciśnięciu Ctrl-K. Pozwala to uruchomić plik (np. zawierający przydatny kod konfiguracyjny, a nawet program, nad którym aktualnie pracujesz).

Gdy polecenie repl jest uruchomione, możesz użyć Ctrl-] lub Ctrl-x, aby je zakończyć.

Uwaga: Nazwa „REPL” odzwierciedla tutaj typowe użycie tego polecenia do uzyskania dostępu do pętli Read Eval Print Loop działającej na urządzeniu MicroPython. Ściśle rzecz biorąc, polecenie repl działa po prostu jako terminal (lub „monitor szeregowy”) zapewniający dostęp do urządzenia. Ponieważ to polecenie nie wyzwala zachowania automatycznego resetu, oznacza to, że jeśli program jest aktualnie uruchomiony, musisz go najpierw przerwać za pomocą Ctrl-C, aby dostać się do REPL, co następnie pozwoli ci uzyskać dostęp do stanu programu. Możesz również użyć mpremote soft-reset repl, aby uzyskać „czysty” REPL z wyczyszczonym całym stanem programu.

eval

Oblicz i wydrukuj wynik wyrażenia Pythona:

$ mpremote eval <string>

exec

Wykonaj podany kod Pythona:

$ mpremote exec <string>

Domyślnie mpremote exec wyświetli całe wyjście wyrażenia aż do jego zakończenia. Można podać flagę --no-follow, aby natychmiast powrócić i pozostawić urządzenie wykonujące wyrażenie w tle.

run

Uruchom skrypt z lokalnego systemu plików:

$ mpremote run <file.py>

Spowoduje to wykonanie pliku bezpośrednio z pamięci RAM na urządzeniu bez kopiowania go do systemu plików. Jest to bardzo przydatny sposób na iterowanie podczas tworzenia pojedynczego fragmentu kodu bez konieczności martwienia się o wdrażanie go w systemie plików.

Domyślnie mpremote run wyświetli całe wyjście skryptu aż do jego zakończenia. Można podać flagę --no-follow, aby natychmiast powrócić i pozostawić urządzenie wykonujące skrypt w tle.

fs

Wykonaj polecenia systemu plików na urządzeniu:

$ mpremote fs <sub-command>

<sub-command> może być:

  • cat <file..>, aby pokazać zawartość pliku lub plików na urządzeniu

  • ls, aby wyświetlić bieżący katalog

  • ls <dirs...>, aby wyświetlić podane katalogi

  • cp [-rf] <src...> <dest>, aby skopiować pliki

  • rm [-r] <src...>, aby usunąć pliki lub foldery na urządzeniu

  • mkdir <dirs...>, aby utworzyć katalogi na urządzeniu

  • rmdir <dirs...>, aby usunąć katalogi na urządzeniu

  • touch <file..>, aby utworzyć pliki (jeśli jeszcze nie istnieją)

  • sha256sum <file..>, aby obliczyć sumę SHA256 plików

  • tree [-vsh] <dirs...>, aby wydrukować drzewo podanych katalogów

Polecenie cp używa konwencji, w której wiodący znak : reprezentuje ścieżkę zdalną. Brak wiodącego : oznacza ścieżkę lokalną. Opiera się to na konwencji stosowanej przez klienta Secure Copy Protocol (scp).

Na przykład mpremote fs cp main.py :main.py kopiuje main.py z bieżącego lokalnego katalogu do zdalnego systemu plików, natomiast mpremote fs cp :main.py main.py kopiuje main.py z urządzenia z powrotem do bieżącego katalogu.

Polecenie mpremote rm -r akceptuje zarówno ścieżki względne, jak i bezwzględne. Użyj :, aby odnieść się do bieżącego zdalnego katalogu roboczego (cwd), co pozwala usunąć drzewo katalogów z domyślnej ścieżki urządzenia (np. /flash, /). Użyj -v/--verbose, aby zobaczyć usuwane pliki.

Na przykład:

  • mpremote rm -r :libs usunie katalog libs i wszystkie jego elementy podrzędne z urządzenia.

  • mpremote rm -rv :/sd usunie wszystkie pliki z zamontowanej karty SD i spowoduje wyświetlenie nieblokującego ostrzeżenia. Zamontowanie zostanie zachowane.

  • mpremote rm -rv :/ usunie wszystkie pliki na urządzeniu, w tym te znajdujące się w zamontowanych systemach vfs, takich jak /sd czy /flash. Po usunięciu wszystkich folderów i plików zwróci również błąd, naśladując zachowanie uniksowego rm -rf /.

Ostrzeżenie

Nie istnieje obsługiwany sposób przywracania plików usuniętych przez mpremote rm -r :. Używaj z rozwagą.

Polecenie tree wydrukuje drzewo podanych katalogów. Użycie opcji --size/-s spowoduje wydrukowanie rozmiaru każdego pliku, a użycie --human/-h pozwoli zastosować bardziej czytelny dla człowieka format. Uwaga: rozmiar katalogu jest drukowany tylko wtedy, gdy system plików urządzenia zgłosi rozmiar różny od zera. Opcji -v można użyć, aby uwzględnić nazwę urządzenia szeregowego w wyjściu.

Wszystkie pozostałe polecenia niejawnie zakładają, że ścieżka jest ścieżką zdalną, ale znaku : można opcjonalnie użyć dla jasności.

Wszystkie podpolecenia systemu plików przyjmują wiele argumentów ścieżki, więc jeśli w sekwencji jest kolejne polecenie, musisz użyć +, aby zakończyć argumenty, np.

$ mpremote fs cp main.py :main.py + repl

Spowoduje to skopiowanie pliku na urządzenie, a następnie wejście do REPL. Znak + zapobiega interpretowaniu "repl" jako ścieżki.

Polecenie cp obsługuje opcję -r umożliwiającą rekurencyjne kopiowanie. Domyślnie cp pominie kopiowanie plików na zdalne urządzenie, jeśli skrót SHA256 pliku źródłowego i docelowego są zgodne. Aby wymusić kopiowanie niezależnie od skrótu, użyj opcji -f.

Uwaga: Dla wygody wszystkie podpolecenia systemu plików są również udostępnione jako zwykłe polecenia, tj. możesz napisać mpremote cp ... zamiast mpremote fs cp ....

df

Sprawdź wolne/zajęte miejsce urządzenia:

$ mpremote df

Polecenie df wydrukuje statystyki rozmiaru/zajętości/wolnego miejsca systemu plików urządzenia, podobnie jak uniksowe polecenie df.

edit

Edytuj plik na urządzeniu:

$ mpremote edit <files...>

Polecenie edit skopiuje każdy plik z urządzenia do lokalnego katalogu tymczasowego, a następnie uruchomi twój edytor dla każdego pliku (zdefiniowany przez zmienną środowiskową $EDITOR). Jeśli edytor zakończy działanie pomyślnie, zaktualizowany plik zostanie skopiowany z powrotem na urządzenie.

mip

Zainstaluj pakiety z micropython-lib (lub GitHub) za pomocą narzędzia mip:

$ mpremote mip install <packages...>

Zobacz Zarządzanie pakietami, aby uzyskać więcej informacji.

mount

Zamontuj lokalny katalog na zdalnym urządzeniu:

$ mpremote mount [options] <local-dir>

Pozwala to zdalnemu urządzeniu widzieć lokalny katalog hosta tak, jakby był jego własnym systemem plików. Jest to przydatne podczas tworzenia oprogramowania i pozwala uniknąć konieczności kopiowania plików na urządzenie podczas pracy nad nimi.

Urządzenie instaluje sterownik systemu plików, który następnie jest montowany w VFS urządzenia jako /remote i wykorzystuje połączenie szeregowe z mpremote jako kanał poboczny do dostępu do plików. Bieżący katalog roboczy urządzenia (poprzez os.chdir) zostanie ustawiony na /remote, dzięki czemu importy i dostęp do plików będą odbywać się tam zamiast w domyślnej ścieżce systemu plików, dopóki montowanie jest aktywne.

Uwaga: Jeśli po poleceniu mount nie następuje kolejna akcja w sekwencji, na końcu sekwencji niejawnie dodawane jest polecenie repl.

Podczas użytkowania Ctrl-D wyzwoli miękki reset jak zwykle, ale montowanie zostanie automatycznie ponownie połączone. Jeśli jednak jednostka ma plik main.py uruchamiany przy starcie, ponowne montowanie nie może nastąpić. W takim przypadku można użyć miękkiego restartu w trybie surowym: Ctrl-A Ctrl-D, aby ponownie uruchomić, a następnie Ctrl-B, aby wrócić do normalnego repl, w którym to momencie montowanie będzie gotowe.

Opcje to:

  • -l, --unsafe-links: Domyślnie zostanie zgłoszony błąd, jeśli urządzenie uzyska dostęp do pliku lub katalogu znajdującego się poza (o jeden lub więcej poziomów katalogów wyżej) zamontowanym katalogiem lokalnym. Ta opcja wyłącza to sprawdzanie dla dowiązań symbolicznych, pozwalając urządzeniu podążać za dowiązaniami symbolicznymi poza katalogiem lokalnym.

unmount

Odmontuj lokalny katalog ze zdalnego urządzenia:

$ mpremote umount

Dzieje się to automatycznie po zakończeniu działania mpremote, ale można to wykorzystać w sekwencji do odmontowania wcześniejszego montowania przed uruchomieniem kolejnych poleceń.

romfs

Zarządzaj partycjami ROMFS na urządzeniu:

$ mpremote romfs <sub-command>

<sub-command> może być:

  • romfs query, aby wyświetlić wszystkie dostępne partycje ROMFS i ich rozmiar

  • romfs [-o <output>] build <source>, aby utworzyć obraz ROMFS z podanego katalogu źródłowego; domyślnym plikiem wyjściowym jest źródło z dołączonym .romfs

  • romfs [-p <partition>] deploy <source>, aby wdrożyć obraz ROMFS na urządzeniu; jeśli źródłem jest katalog, utworzy również tymczasowy obraz ROMFS

Podpolecenia build i deploy obsługują opcję -m/--mpy, która automatycznie kompiluje pliki .py do .mpy podczas tworzenia obrazu ROMFS. Ta opcja jest domyślnie włączona, ale działa tylko wtedy, gdy zainstalowano pakiet Pythona mpy_cross (np. przez pip install mpy_cross). Jeśli pakiet nie jest zainstalowany, drukowane jest ostrzeżenie, a pliki .py pozostają bez zmian. Kompilację plików .py można wyłączyć opcją --no-mpy.

rtc

Ustaw/odczytaj zegar urządzenia (RTC):

$ mpremote rtc

Spowoduje to odpytanie RTC urządzenia o bieżący czas i wydrukowanie go jako krotki datetime.

$ mpremote rtc --set

Spowoduje to ustawienie RTC urządzenia na bieżący czas komputera hosta.

sleep

Uśpij (opóźnij) przed wykonaniem następnego polecenia:

$ mpremote sleep 0.5

Spowoduje to wstrzymanie wykonywania sekwencji poleceń na określony czas w sekundach, np. aby poczekać, aż urządzenie coś wykona.

reset

Wykonaj twardy reset urządzenia:

$ mpremote reset

Uwaga: twardy reset jest równoważny machine.reset().

bootloader

Wejdź do bootloadera:

$ mpremote bootloader

Spowoduje to wejście urządzenia do jego bootloadera. Bootloader jest specyficzny dla płytki — szczegóły znajdziesz w sekcji Recovery and debug pins w krótkim przewodniku swojej płytki.

Automatyczne połączenie i miękki reset

Połączenie i rozłączenie są wykonywane automatycznie na początku i na końcu działania narzędzia, jeśli takie polecenia nie zostaną podane jawnie. Automatyczne połączenie wyszuka pierwsze dostępne urządzenie szeregowe USB.

Po połączeniu z urządzeniem mpremote automatycznie wykona jego miękki reset, jeśli będzie to potrzebne. Czyści to stertę Pythona i ponownie uruchamia interpreter, zapewniając, że kolejny kod Pythona wykonuje się w świeżym środowisku. Automatyczny miękki reset jest wykonywany przy pierwszym uruchomieniu jednego z następujących poleceń: mount, eval, exec, run, fs. Po wykonaniu miękkiego resetu po raz pierwszy nie zostanie on ponownie wykonany automatycznie, dopóki nie zostanie wydane polecenie disconnect.

Zachowaniem automatycznego miękkiego resetu można sterować za pomocą polecenia resume. Może to być przydatne do użycia polecenia eval w celu sprawdzenia stanu urządzenia. Polecenia soft-reset można użyć do wykonania jawnego miękkiego resetu w środku sekwencji poleceń.

Skróty

Skróty można definiować za pomocą systemu makr. Wbudowane skróty to:

  • devs: alias dla connect list

  • a0, a1, a2, a3: aliasy dla connect /dev/ttyACMn

  • u0, u1, u2, u3: aliasy dla connect /dev/ttyUSBn

  • c0, c1, c2, c3: aliasy dla connect COMn

  • cat, edit, ls, cp, rm, mkdir, rmdir, touch: aliasy dla fs <sub-command>

Dodatkowe skróty można zdefiniować w pliku konfiguracyjnym użytkownika mpremote/config.py, znajdującym się w katalogu konfiguracji użytkownika. Poprawna lokalizacja dla każdego systemu operacyjnego jest określana za pomocą modułu platformdirs.

Jest to zazwyczaj: - $XDG_CONFIG_HOME/mpremote/config.py - $HOME/.config/mpremote/config.py - $env:LOCALAPPDATA/mpremote/config.py

Plik config.py powinien definiować słownik o nazwie commands. Klucze tego słownika to skróty, a wartości to łańcuch znaków lub lista łańcuchów:

"c33": "connect id:334D335C3138",

Polecenie c33 jest zastępowane przez connect id:334D335C3138.

"test": ["mount", ".", "exec", "import test"],

Polecenie test jest zastępowane przez mount . exec "import test".

Skróty mogą również przyjmować argumenty. Na przykład:

"multiply x=4 y=7": "eval x*y",

Uruchomienie mpremote multiply 3 7 ustawi x i y jako zmienne na urządzeniu, a następnie obliczy wyrażenie x*y.

Przykładowy plik config.py mógłby wyglądać tak:

commands = {
    "c33": "connect id:334D335C3138", # Connect to a specific device by ID.
    "bl": "bootloader", # Shorter alias for bootloader.
    "double x=4": "eval x*2",  # x is an argument, with default 4
    "wl_scan": ["exec", """
import network
wl = network.WLAN()
wl.active(1)
for ap in wl.scan():
    print(ap)
""",], # Print out nearby WiFi networks.
    "wl_ipconfig": [
"exec",
"import network; sta_if = network.WLAN(network.WLAN.IF_STA); print(sta_if.ipconfig('addr4'))",
], # Print ip address of station interface.
    "test": ["mount", ".", "exec", "import test"], # Mount current directory and run test.py.
    "demo": ["run", "path/to/demo.py"], # Execute demo.py on the device.
}

Przykłady

mpremote

Połącz z pierwszym dostępnym urządzeniem i niejawnie uruchom polecenie repl.

mpremote a1

Połącz z urządzeniem pod /dev/ttyACM1 (Linux) i niejawnie uruchom polecenie repl. Zobacz skróty powyżej.

mpremote c1

Połącz z urządzeniem pod COM1 (Windows) i niejawnie uruchom polecenie repl. Zobacz skróty powyżej.

mpremote connect /dev/ttyUSB0

Jawnie określ, z którym urządzeniem się połączyć, i jak powyżej, niejawnie uruchom polecenie repl.

mpremote a1 ls

Połącz z urządzeniem pod /dev/ttyACM1, a następnie uruchom polecenie ls.

Jest to równoważne mpremote connect /dev/ttyACM1 fs ls.

mpremote exec "import micropython; micropython.mem_info()"

Uruchom określone polecenie Pythona i wyświetl całe wyjście. Jest to równoważne wpisaniu polecenia w wierszu poleceń REPL.

mpremote eval 1/2 eval 3/4

Oblicz po kolei każde wyrażenie i wydrukuj wyniki.

mpremote a0 eval 1/2 a1 eval 3/4

Oblicz 1/2 na urządzeniu pod /dev/ttyACM0, a następnie 3/4 na urządzeniu pod /dev/ttyACM1, drukując każdy wynik.

mpremote resume exec "print_state_info()" soft-reset

Połącz z urządzeniem bez wyzwalania miękkiego resetu i wykonaj funkcję print_state_info() (np. aby uzyskać informacje o bieżącym stanie programu), a następnie wyzwól miękki reset.

mpremote reset sleep 0.5 bootloader

Wykonaj twardy reset urządzenia, poczekaj 500 ms, aż stanie się dostępne, a następnie wejdź do bootloadera.

mpremote cp utils/driver.py :utils/driver.py + run test.py

Zaktualizuj kopię utils/driver.py na urządzeniu, a następnie wykonaj lokalny skrypt test.py na urządzeniu. test.py nigdy nie jest kopiowany do systemu plików urządzenia, lecz jest uruchamiany z pamięci RAM.

mpremote cp utils/driver.py :utils/driver.py + exec "import app"

Zaktualizuj kopię utils/driver.py na urządzeniu, a następnie wykonaj app.py na urządzeniu.

Jest to typowy przepływ pracy podczas tworzenia oprogramowania polegający na zaktualizowaniu pojedynczego pliku i ponownym uruchomieniu programu. W tym scenariuszu twój plik main.py na urządzeniu również wykonywałby import app.

mpremote cp utils/driver.py :utils/driver.py + soft-reset repl

Zaktualizuj kopię utils/driver.py na urządzeniu, następnie wyzwól miękki reset, aby ponownie uruchomić program, a potem monitoruj wyjście za pomocą polecenia repl.

mpremote cp -r utils/ :utils/ + soft-reset repl

To samo co powyżej, ale najpierw zaktualizuj cały katalog utils.

mpremote mount .

Zamontuj bieżący lokalny katalog jako /remote na urządzeniu i uruchom sesję repl, która będzie używać /remote jako katalogu roboczego.

mpremote mount . exec "import demo"

Po zamontowaniu bieżącego lokalnego katalogu wykonuje demo.py z zamontowanego katalogu.

mpremote mount app run test.py

Po zamontowaniu lokalnego katalogu app jako /remote na urządzeniu wykonuje lokalny test.py z bieżącego katalogu hosta bez kopiowania go do systemu plików.

mpremote mount . repl --inject-code "import demo"

Po zamontowaniu bieżącego lokalnego katalogu wykonuje demo.py z zamontowanego katalogu za każdym razem, gdy zostanie naciśnięte Ctrl-J.

Najpierw musisz nacisnąć Ctrl-D, aby zresetować stan interpretera (co zachowa montowanie), a następnie nacisnąć Ctrl-J, aby ponownie zaimportować demo.py.

mpremote mount app repl --inject-file demo.py

To samo co powyżej, ale wykonuje zawartość lokalnego pliku demo.py w REPL za każdym razem, gdy zostanie naciśnięte Ctrl-K. Jak powyżej, użyj najpierw Ctrl-D, aby zresetować stan interpretera.

mpremote cat boot.py

Wyświetla zawartość boot.py na urządzeniu.

mpremote edit utils/driver.py

Edytuj utils/driver.py na urządzeniu za pomocą swojego lokalnego $EDITOR.

mpremote cp :main.py .

Skopiuj main.py z urządzenia do lokalnego katalogu.

mpremote cp main.py :

Skopiuj main.py z lokalnego katalogu na urządzenie.

mpremote cp :a.py :b.py

Skopiuj a.py na urządzeniu do b.py na urządzeniu.

mpremote cp -r dir/ :

Rekurencyjnie skopiuj lokalny katalog dir na zdalne urządzenie.

mpremote cp a.py b.py : + repl

Skopiuj a.py i b.py z lokalnego katalogu na urządzenie, a następnie uruchom polecenie repl.

mpremote mip install aioble

Zainstaluj pakiet aioble z micropython-lib na urządzeniu. Zobacz Zarządzanie pakietami.

mpremote mip install github:org/repo@branch

Zainstaluj pakiet z określonej gałęzi w org/repo na GitHub na urządzeniu. Zobacz Zarządzanie pakietami.

mpremote mip install gitlab:org/repo@branch

Zainstaluj pakiet z określonej gałęzi w org/repo na GitLab na urządzeniu. Zobacz Zarządzanie pakietami.

mpremote mip install --target /flash/third-party functools

Zainstaluj pakiet functools z micropython-lib do katalogu /flash/third-party na urządzeniu. Zobacz Zarządzanie pakietami.