Daljinsko upravljanje MicroPythonom: mpremote¶
Alat naredbenog retka mpremote pruža integrirani skup uslužnih programa za daljinsku interakciju, upravljanje datotečnim sustavom i automatizaciju MicroPython uređaja putem serijske veze. Radi sa svim OpenMV Cam uređajima preko njihove USB serijske veze i predstavlja alternativu naredbenog retka za OpenMV IDE namijenjenu izradi skripti i radnim tokovima automatizacije.
Da biste koristili mpremote, prvo ga instalirajte putem pip-a:
$ pip install --user mpremote
Ili putem pipx:
$ pipx install mpremote
Najjednostavniji način za korištenje ovog alata je da ga jednostavno pozovete bez ikakvih argumenata:
$ mpremote
Ova naredba automatski otkriva i povezuje se s prvim dostupnim USB serijskim uređajem te pruža interaktivni terminal koji možete koristiti za pristup REPL-u i izlazu vašeg programa. Serijski portovi otvaraju se u isključivom načinu rada, pa će pokretanje druge (ili treće, itd.) instance alata mpremote povezati uređaj sa sljedećim serijskim uređajima, ako su dostupni.
Dodatno, pipx vam također omogućuje da izravno pokrenete mpremote bez prethodne instalacije:
$ pipx run mpremote ...args
Naredbe¶
mpremote podržava zadavanje niza naredbi u naredbenom retku koje će redoslijedom izvršiti razne radnje na udaljenom MicroPython uređaju. Pogledajte odjeljak s primjerima u nastavku kako biste stekli predodžbu o tome kako to funkcionira te za neke uobičajene kombinacije naredbi.
Svaka naredba je oblika <command name> [--options] [args...]. Za naredbe koje podržavaju više argumenata (npr. popis datoteka), popis argumenata može se završiti znakom +.
Ako naredba nije navedena, zadana naredba je repl. Dodatno, ako bilo koja naredba treba pristupiti uređaju, a ranije nije navedena nijedna naredba connect, tada se implicitno dodaje connect auto.
Kako bi se uređaj doveo u poznato stanje za bilo koju akcijsku naredbu (osim repl), nakon povezivanja mpremote će zaustaviti svaki pokrenuti program i izvršiti meko resetiranje uređaja prije pokretanja prve naredbe. To ponašanje možete kontrolirati pomoću naredbi resume i soft-reset. Za više pojedinosti pogledajte automatsko povezivanje i automatsko meko resetiranje.
Može se navesti više naredbi i one će se izvršavati uzastopno.
Cijeli popis podržanih naredbi je:
connect¶
Povezivanje s navedenim uređajem prema imenu:
$ mpremote connect <device>
<device> može biti jedan od:
list: popis dostupnih uređajaauto: povezivanje s prvim dostupnim USB serijskim portomid:<serial>: povezivanje s uređajem koji ima USB serijski broj<serial>(drugi stupac u izlazu naredbeconnect list)port:<path>: povezivanje s uređajem na zadanoj putanji (prvi stupac u izlazu naredbeconnect listrfc2217://<host>:<port>: povezivanje s uređajem korištenjem serijske veze preko TCP-a (npr. mrežni serijski port temeljen na RFC2217)bilo koje valjano ime/putanja uređaja, za povezivanje s tim uređajem
Napomena: Umjesto korištenja naredbe connect, postoji nekoliko unaprijed definiranih prečaca za uobičajene putanje uređaja. Na primjer, naredba prečaca a0 ekvivalentna je naredbi connect /dev/ttyACM0 (Linux), ili c1 za COM1 (Windows).
Napomena: Opcija auto otkriva samo USB serijske portove, tj. serijske portove koji imaju pridruženi USB VID/PID (npr. CDC/ACM ili FTDI uređaji). Ostale vrste serijskih portova neće biti automatski otkrivene.
disconnect¶
Prekid veze s trenutnim uređajem:
$ mpremote disconnect
Nakon prekida veze, omogućeno je automatsko meko resetiranje.
resume¶
Zadržavanje postojećeg stanja interpretera za sljedeće naredbe:
$ mpremote resume
Ovo onemogućuje automatsko meko resetiranje. Korisno je ako želite pokrenuti sljedeću naredbu na ploči bez prethodnog mekog resetiranja.
soft-reset¶
Izvođenje mekog resetiranja uređaja:
$ mpremote soft-reset
Ovo će isprazniti Python heap i ponovno pokrenuti interpreter. Također sprječava sljedeću naredbu da pokrene automatsko meko resetiranje.
repl¶
Ulazak u REPL na povezanom uređaju:
$ mpremote repl [--options]
Opcije su:
--escape-non-printable, za ispis bajtova/znakova koji se ne mogu ispisati u obliku njihovog heksadecimalnog koda--capture <file>, za bilježenje izlaza REPL sesije u zadanu datoteku--inject-code <string>, za određivanje znakova koji se umeću u REPL kada se pritisneCtrl-J. To vam omogućuje automatizaciju uobičajene naredbe.--inject-file <file>, za određivanje datoteke koja se umeće u REPL kada se pritisneCtrl-K. To vam omogućuje pokretanje datoteke (npr. one koja sadrži koristan kôd za postavljanje, ili čak programa na kojem trenutno radite).
Dok je naredba repl pokrenuta, možete koristiti Ctrl-] ili Ctrl-x za izlaz.
Napomena: Naziv „REPL” ovdje odražava uobičajenu uporabu ove naredbe za pristup petlji Read Eval Print Loop koja se izvodi na MicroPython uređaju. Strogo govoreći, naredba repl funkcionira samo kao terminal (ili „serijski monitor”) za pristup uređaju. Budući da ova naredba ne pokreće ponašanje automatskog resetiranja, to znači da ako se program trenutno izvodi, prvo ćete ga morati prekinuti pomoću Ctrl-C kako biste došli do REPL-a, što vam zatim omogućuje pristup stanju programa. Također možete koristiti mpremote soft-reset repl kako biste dobili „čisti” REPL s obrisanim cijelim stanjem programa.
eval¶
Procjena i ispis rezultata Python izraza:
$ mpremote eval <string>
exec¶
Izvršavanje zadanog Python koda:
$ mpremote exec <string>
Prema zadanim postavkama, mpremote exec će prikazati svaki izlaz izraza dok se on ne završi. Zastavica --no-follow može se navesti za trenutni povratak, ostavljajući uređaj da izvodi izraz u pozadini.
run¶
Pokretanje skripte iz lokalnog datotečnog sustava:
$ mpremote run <file.py>
Ovo će izvršiti datoteku izravno iz RAM-a na uređaju bez kopiranja u datotečni sustav. To je vrlo koristan način za iterativni razvoj jednog dijela koda bez brige o njegovom postavljanju u datotečni sustav.
Prema zadanim postavkama, mpremote run će prikazati svaki izlaz skripte dok se ona ne završi. Zastavica --no-follow može se navesti za trenutni povratak, ostavljajući uređaj da izvodi skriptu u pozadini.
fs¶
Izvršavanje naredbi datotečnog sustava na uređaju:
$ mpremote fs <sub-command>
<sub-command> može biti:
cat <file..>za prikaz sadržaja datoteke ili datoteka na uređajulsza popis trenutnog direktorijals <dirs...>za popis zadanih direktorijacp [-rf] <src...> <dest>za kopiranje datotekarm [-r] <src...>za uklanjanje datoteka ili mapa na uređajumkdir <dirs...>za stvaranje direktorija na uređajurmdir <dirs...>za uklanjanje direktorija na uređajutouch <file..>za stvaranje datoteka (ako već ne postoje)sha256sum <file..>za izračun SHA256 sume datotekatree [-vsh] <dirs...>za ispis stabla zadanih direktorija
Naredba cp koristi konvenciju u kojoj vodeća : predstavlja udaljenu putanju. Bez vodeće : označava lokalnu putanju. To se temelji na konvenciji koju koristi klijent Secure Copy Protocol (scp).
Tako na primjer, mpremote fs cp main.py :main.py kopira main.py iz trenutnog lokalnog direktorija u udaljeni datotečni sustav, dok mpremote fs cp :main.py main.py kopira main.py s uređaja natrag u trenutni direktorij.
Naredba mpremote rm -r prihvaća i relativne i apsolutne putanje. Koristite : za upućivanje na trenutni udaljeni radni direktorij (cwd) kako biste omogućili uklanjanje stabla direktorija sa zadane putanje uređaja (npr. /flash, /). Koristite -v/--verbose kako biste vidjeli datoteke koje se uklanjaju.
Na primjer:
mpremote rm -r :libsće ukloniti direktorijlibsi sve njegove podstavke s uređaja.mpremote rm -rv :/sdće ukloniti sve datoteke s montirane SD kartice i rezultirati neblokirajućim upozorenjem. Montiranje će se zadržati.mpremote rm -rv :/će ukloniti sve datoteke na uređaju, uključujući i one smještene u montiranim vfs sustavima poput/sdili/flash. Nakon uklanjanja svih mapa i datoteka, ovo će također vratiti pogrešku kako bi oponašalo ponašanje unix naredberm -rf /.
Upozorenje
Ne postoji podržan način za vraćanje datoteka uklonjenih naredbom mpremote rm -r :. Koristite uz oprez.
Naredba tree će ispisati stablo zadanih direktorija. Korištenjem opcije --size/-s ispisat će se veličina svake datoteke, ili koristite --human/-h za čitljiviji format. Napomena: Veličina direktorija ispisuje se samo kada datotečni sustav uređaja prijavi veličinu različitu od nule. Opcija -v može se koristiti za uključivanje imena serijskog uređaja u izlaz.
Sve ostale naredbe implicitno pretpostavljaju da je putanja udaljena, ali : se može opcionalno koristiti radi jasnoće.
Sve podnaredbe datotečnog sustava primaju više argumenata putanja, pa ako u nizu postoji još jedna naredba, morate koristiti + za završetak argumenata, npr.
$ mpremote fs cp main.py :main.py + repl
Ovo će kopirati datoteku na uređaj, a zatim ući u REPL. Znak + sprječava da se "repl" protumači kao putanja.
Naredba cp podržava opciju -r za rekurzivno kopiranje. Prema zadanim postavkama cp će preskočiti kopiranje datoteka na udaljeni uređaj ako se SHA256 hash izvorne i odredišne datoteke podudaraju. Za prisilno kopiranje bez obzira na hash koristite opciju -f.
Napomena: Radi praktičnosti, sve podnaredbe datotečnog sustava također su navedene kao alias regularnih naredbi, tj. možete napisati mpremote cp ... umjesto mpremote fs cp ....
df¶
Upit o slobodnom/iskorištenom prostoru uređaja:
$ mpremote df
Naredba df će ispisati statistiku veličine/iskorištenosti/slobodnog prostora za datotečni sustav uređaja, slično unix naredbi df.
edit¶
Uređivanje datoteke na uređaju:
$ mpremote edit <files...>
Naredba edit će kopirati svaku datoteku s uređaja u lokalni privremeni direktorij, a zatim pokrenuti vaš uređivač za svaku datoteku (definiran varijablom okruženja $EDITOR). Ako uređivač uspješno završi, ažurirana datoteka kopirat će se natrag na uređaj.
mip¶
Instaliranje paketa iz micropython-lib (ili s GitHuba) pomoću alata mip:
$ mpremote mip install <packages...>
Pogledajte Upravljanje paketima za više informacija.
mount¶
Montiranje lokalnog direktorija na udaljeni uređaj:
$ mpremote mount [options] <local-dir>
Ovo omogućuje udaljenom uređaju da vidi lokalni direktorij domaćina kao da je njegov vlastiti datotečni sustav. To je korisno za razvoj i izbjegava potrebu za kopiranjem datoteka na uređaj dok radite na njima.
Uređaj instalira upravljački program datotečnog sustava, koji se zatim montira u VFS uređaja kao /remote, a koji koristi serijsku vezu s alatom mpremote kao bočni kanal za pristup datotekama. Uređaju će trenutni radni direktorij (putem os.chdir) biti postavljen na /remote tako da će se uvozi i pristup datotekama odvijati ondje umjesto na zadanoj putanji datotečnog sustava dok je montiranje aktivno.
Napomena: Ako naredbu mount ne slijedi druga radnja u nizu, na kraj niza implicitno će se dodati naredba repl.
Tijekom korištenja, Ctrl-D će pokrenuti meko resetiranje kao i obično, ali će se montiranje automatski ponovno povezati. Međutim, ako jedinica ima main.py koji se pokreće pri pokretanju, ponovno montiranje ne može se dogoditi. U tom slučaju može se koristiti meko ponovno pokretanje u sirovom načinu rada: Ctrl-A Ctrl-D za ponovno pokretanje, zatim Ctrl-B za povratak na normalan repl, u kojem će trenutku montiranje biti spremno.
Opcije su:
-l,--unsafe-links: Prema zadanim postavkama bit će prijavljena pogreška ako uređaj pristupi datoteci ili direktoriju koji je izvan (jednu ili više razina direktorija iznad) lokalnog direktorija koji je montiran. Ova opcija onemogućuje tu provjeru za simboličke poveznice, omogućujući uređaju da slijedi simboličke poveznice izvan lokalnog direktorija.
unmount¶
Odmontiravanje lokalnog direktorija s udaljenog uređaja:
$ mpremote umount
Ovo se događa automatski kada se mpremote završi, ali se može koristiti u nizu za odmontiravanje ranijeg montiranja prije pokretanja sljedećih naredbi.
romfs¶
Upravljanje ROMFS particijama na uređaju:
$ mpremote romfs <sub-command>
<sub-command> može biti:
romfs queryza popis svih dostupnih ROMFS particija i njihove veličineromfs [-o <output>] build <source>za stvaranje ROMFS slike iz zadanog izvornog direktorija; zadana izlazna datoteka je izvor s dodatkom.romfsromfs [-p <partition>] deploy <source>za postavljanje ROMFS slike na uređaj; također će stvoriti privremenu ROMFS sliku ako je izvor direktorij
Podnaredbe build i deploy obje podržavaju opciju -m/--mpy za automatsko prevođenje .py datoteka u .mpy pri stvaranju ROMFS slike. Ova je opcija omogućena prema zadanim postavkama, ali radi samo ako je instaliran Python paket mpy_cross (npr. putem pip install mpy_cross). Ako paket nije instaliran, ispisuje se upozorenje i .py datoteke ostaju nepromijenjene. Prevođenje .py datoteka može se onemogućiti opcijom --no-mpy.
rtc¶
Postavljanje/dohvaćanje sata uređaja (RTC):
$ mpremote rtc
Ovo će uputiti upit RTC-u uređaja o trenutnom vremenu i ispisati ga kao datetime tuple.
$ mpremote rtc --set
Ovo će postaviti RTC uređaja na trenutno vrijeme glavnog računala.
sleep¶
Spavanje (odgoda) prije izvršavanja sljedeće naredbe:
$ mpremote sleep 0.5
Ovo će pauzirati izvršavanje niza naredbi za navedeno trajanje u sekundama, npr. kako bi se pričekalo da uređaj nešto napravi.
reset¶
Tvrdo resetiranje uređaja:
$ mpremote reset
Napomena: tvrdo resetiranje ekvivalentno je machine.reset().
bootloader¶
Ulazak u pokretač (bootloader):
$ mpremote bootloader
Ovo će natjerati uređaj da uđe u svoj pokretač (bootloader). Pokretač je specifičan za pojedinu ploču — pogledajte odjeljak Recovery and debug pins u brzom pregledu vaše ploče za pojedinosti.
Automatsko povezivanje i meko resetiranje¶
Povezivanje i prekid veze obavljaju se automatski na početku i kraju izvršavanja alata, ako takve naredbe nisu izričito zadane. Automatsko povezivanje će tražiti prvi dostupni USB serijski uređaj.
Nakon povezivanja s uređajem, mpremote će automatski izvršiti meko resetiranje uređaja ako je potrebno. To prazni Python heap i ponovno pokreće interpreter, osiguravajući da se sljedeći Python kôd izvršava u svježem okruženju. Automatsko meko resetiranje izvodi se prvi put kada se izvrši jedna od sljedećih naredbi: mount, eval, exec, run, fs. Nakon prvog mekog resetiranja, ono se neće ponovno automatski izvoditi sve dok se ne izda naredba disconnect.
Ponašanje automatskog mekog resetiranja može se kontrolirati naredbom resume. To može biti korisno za korištenje naredbe eval za pregled stanja uređaja. Naredba soft-reset može se koristiti za izvođenje izričitog mekog resetiranja usred niza naredbi.
Prečaci¶
Prečaci se mogu definirati pomoću sustava makronaredbi. Ugrađeni prečaci su:
devs: Alias zaconnect lista0,a1,a2,a3: Aliasi zaconnect /dev/ttyACMnu0,u1,u2,u3: Aliasi zaconnect /dev/ttyUSBnc0,c1,c2,c3: Aliasi zaconnect COMncat,edit,ls,cp,rm,mkdir,rmdir,touch: Aliasi zafs <sub-command>
Dodatni prečaci mogu se definirati u korisničkoj konfiguracijskoj datoteci mpremote/config.py, smještenoj u korisničkom konfiguracijskom direktoriju. Ispravna lokacija za svaki OS određuje se pomoću modula platformdirs.
To je obično: - $XDG_CONFIG_HOME/mpremote/config.py - $HOME/.config/mpremote/config.py - $env:LOCALAPPDATA/mpremote/config.py
Datoteka config.py trebala bi definirati rječnik pod nazivom commands. Ključevi tog rječnika su prečaci, a vrijednosti su ili niz znakova ili popis nizova znakova:
"c33": "connect id:334D335C3138",
Naredba c33 zamjenjuje se s connect id:334D335C3138.
"test": ["mount", ".", "exec", "import test"],
Naredba test zamjenjuje se s mount . exec "import test".
Prečaci također mogu prihvaćati argumente. Na primjer:
"multiply x=4 y=7": "eval x*y",
Pokretanje mpremote multiply 3 7 postavit će x i y kao varijable na uređaju, a zatim procijeniti izraz x*y.
Primjer datoteke config.py mogao bi izgledati ovako:
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.
}
Primjeri¶
mpremote
Povezivanje s prvim dostupnim uređajem i implicitno pokretanje naredbe repl.
mpremote a1
Povezivanje s uređajem na /dev/ttyACM1 (Linux) i implicitno pokretanje naredbe repl. Pogledajte prečace gore.
mpremote c1
Povezivanje s uređajem na COM1 (Windows) i implicitno pokretanje naredbe repl. Pogledajte prečace gore.
mpremote connect /dev/ttyUSB0
Izričito navođenje uređaja s kojim se povezuje i, kao gore, implicitno pokretanje naredbe repl.
mpremote a1 ls
Povezivanje s uređajem na /dev/ttyACM1 i zatim pokretanje naredbe ls.
Ekvivalentno je mpremote connect /dev/ttyACM1 fs ls.
mpremote exec "import micropython; micropython.mem_info()"
Pokretanje navedene Python naredbe i prikaz svakog izlaza. Ovo je ekvivalentno upisivanju naredbe na REPL upitu.
mpremote eval 1/2 eval 3/4
Procjena svakog izraza redom i ispis rezultata.
mpremote a0 eval 1/2 a1 eval 3/4
Procjena 1/2 na uređaju na /dev/ttyACM0, zatim 3/4 na uređaju na /dev/ttyACM1, uz ispis svakog rezultata.
mpremote resume exec "print_state_info()" soft-reset
Povezivanje s uređajem bez pokretanja mekog resetiranja i izvršavanje funkcije print_state_info() (npr. za pronalaženje informacija o trenutnom stanju programa), zatim pokretanje mekog resetiranja.
mpremote reset sleep 0.5 bootloader
Tvrdo resetiranje uređaja, čekanje 500 ms da postane dostupan, zatim ulazak u pokretač (bootloader).
mpremote cp utils/driver.py :utils/driver.py + run test.py
Ažuriranje kopije utils/driver.py na uređaju, zatim izvršavanje lokalne skripte test.py na uređaju. test.py se nikada ne kopira u datotečni sustav uređaja, nego se pokreće iz RAM-a.
mpremote cp utils/driver.py :utils/driver.py + exec "import app"
Ažuriranje kopije utils/driver.py na uređaju, zatim izvršavanje app.py na uređaju.
Ovo je uobičajen razvojni radni tok za ažuriranje jedne datoteke i zatim ponovno pokretanje programa. U ovom scenariju, vaš main.py na uređaju također bi sadržavao import app.
mpremote cp utils/driver.py :utils/driver.py + soft-reset repl
Ažuriranje kopije utils/driver.py na uređaju, zatim pokretanje mekog resetiranja za ponovno pokretanje programa, a zatim praćenje izlaza putem naredbe repl.
mpremote cp -r utils/ :utils/ + soft-reset repl
Isto kao gore, ali prvo ažurirajte cijeli direktorij utils.
mpremote mount .
Montiranje trenutnog lokalnog direktorija na /remote na uređaju i pokretanje repl sesije koja će koristiti /remote kao radni direktorij.
mpremote mount . exec "import demo"
Nakon montiranja trenutnog lokalnog direktorija, izvršava demo.py iz montiranog direktorija.
mpremote mount app run test.py
Nakon montiranja lokalnog direktorija app kao /remote na uređaju, izvršava lokalni test.py iz trenutnog direktorija domaćina bez kopiranja u datotečni sustav.
mpremote mount . repl --inject-code "import demo"
Nakon montiranja trenutnog lokalnog direktorija, izvršava demo.py iz montiranog direktorija svaki put kada se pritisne Ctrl-J.
Prvo ćete morati pritisnuti Ctrl-D za resetiranje stanja interpretera (što će sačuvati montiranje) prije nego što pritisnete Ctrl-J za ponovni uvoz demo.py.
mpremote mount app repl --inject-file demo.py
Isto kao gore, ali izvršava sadržaj lokalne datoteke demo.py na REPL-u svaki put kada se pritisne Ctrl-K. Kao gore, prvo koristite Ctrl-D za resetiranje stanja interpretera.
mpremote cat boot.py
Prikazuje sadržaj boot.py na uređaju.
mpremote edit utils/driver.py
Uređivanje utils/driver.py na uređaju pomoću vašeg lokalnog $EDITOR-a.
mpremote cp :main.py .
Kopiranje main.py s uređaja u lokalni direktorij.
mpremote cp main.py :
Kopiranje main.py iz lokalnog direktorija na uređaj.
mpremote cp :a.py :b.py
Kopiranje a.py na uređaju u b.py na uređaju.
mpremote cp -r dir/ :
Rekurzivno kopiranje lokalnog direktorija dir na udaljeni uređaj.
mpremote cp a.py b.py : + repl
Kopiranje a.py i b.py iz lokalnog direktorija na uređaj, zatim pokretanje naredbe repl.
mpremote mip install aioble
Instaliranje paketa aioble iz micropython-lib na uređaj. Pogledajte Upravljanje paketima.
mpremote mip install github:org/repo@branch
Instaliranje paketa s navedene grane na org/repo na GitHubu na uređaj. Pogledajte Upravljanje paketima.
mpremote mip install gitlab:org/repo@branch
Instaliranje paketa s navedene grane na org/repo na GitLabu na uređaj. Pogledajte Upravljanje paketima.
mpremote mip install --target /flash/third-party functools
Instaliranje paketa functools iz micropython-lib u direktorij /flash/third-party na uređaju. Pogledajte Upravljanje paketima.