Programovanie Arduino (a derivátov) bez Arduino IDE #2

Programovanie Arduino (a derivátov) bez Arduino IDE #2 
Richard Fabo Autor  Richard Fabo
  295 zobrazení
1
 0
Arduino a...
 Fórum

V dnešnej časti seriálu si povieme, ako funguje arduino-cli, program, ktorý umožňuje kompiláciu, nahrávanie, správu knižníc… to všetko pre svet Arduina a jeho kamarátov.

Obsah minulej časti + čo s tým originálnym IDE?

V minulej časti sme si stručne povedali, čo sa deje, ak si v Arduino IDE doinštalujeme vývojové dosky. A tiež, ako to môžeme spraviť ručne. A tiež, že to nie je síce kozmická veda, ale ručne je to možno zbytočne iritujúce. Keďže chceme programovať Arduiná a podobné vývojové dosky z iného prostredia, musíme sa zmieriť s tým, že alebo to spravíme ručne, dopomôžeme si arduino(m)-cli, alebo si necháme na disku i Arduino IDE a strpíme zaprataných cca 0,5 GB priestoru.

Alebo si originálne IDE nejako zoštíhlime, zmažeme to, čo vôbec nepotrebujeme k inštalácii dosiek a knižníc (tie si navyše môžeme inštalovať i pomocou arduino-cli). Dá sa okliešiť na cca 100 MB a to tak, že:

  • zmažeme hardware/tools a hardware/arduino (toto máme duplicitne v ~/.arduino15),
  • zmažeme tools a tools-builder (tools je opäť i ~/.arduino15, tools-builder obsahuje vstavaný preprocesor a ctags je v ~/.arduino15),
  • súčasťou Arduino IDE je aj celá java (laicky povedané, jedná sa binárky (java, javaws,…) a knižnice (adresár libs)). A tú ak máme inštalovanú aj niekde inde, tak adresár java môžeme symlinkovať aj na jej inú inštaláciu. Napr. ja som to spravil na Java 19 niekde inde na disku.

A už je to veselšie. Aj pri súčasnych veľkých diskoch ma vždy poteší, ak môžem nejaký priestor ušetriť. Mám z toho dobrý pocit, aj keď ten priestor reálne nepotrebujem. Možno sa jedná o nejaký odklon od normálnosti, alebo nevyliečená bolesť z minulosti. Erudovaná osoba by vedela zhodnotiť. Prinajhoršom, vždy si môžeme Arduino IDE stiahnúť, takže zásadné škody nehrozia.

Ako funguje arduino-cli

Skôr než sa pozrieme na praktické príklady použitia arduino-cli, v rýchlosti si povieme, ako a čo spomínaný program robí.

Súbor arduino-cli.yam

V ~/.arduino15 by sme takýto súbor mali mať. Ak chýba, dá sa vytvoriť pomocou arduino-cli config init.V ňom sú dôležité tieto riadky:

V náhľade z môjho súboru vidíme, že je tam definované, kde sa nachádza samotný ~/.arduino15 (a teda dôležité podadresáre v ňom), kde sa dočasne sťahujú nové knižnice a kde máme uložené naše programy. Ja mám historicky adresár ešte z čias v 1.5.7.

Adresáre hardware

Len pripomeniem, že základom sú adresáre
~/.arduino15/packages/<vývojová doska>/hardware/<architektúra>/<verzia>
Konkrétne napr.: ~/.arduino15/packages/industrialshields/hardware/avr/1.1.43.

Každá architektúra obsahuje tri dôležité súbory: boards.txt, platform.txt a programmers.txt. A z týcho súborov "čerpá" arduino-cli parametre pri zostavovaní príkazov pre kompiláciu a nahrávanie.

Súbor boards.txt obsahuje definície vývojových dosiek, napríklad množstvo pamäte, "fuses", rýchlosť procesora…
Súbor platform.txt obsahuje parametre pre avr-gcc, preprocesor i avrdude. Pohľadom na množstvo údajov nás poteší, že toto nemusíme ručne zadávať, ale že to niekto spravil za nás.
Súbor programmers.txt obsahuje definície externých programátorov, na napálenie bootloader-a a pod.

Proces kompilácie

V platform.txt vidíme nielen parametre pre preklad, linkovanie,… , ale aj postup, ako sa to vykonáva. Deje sa to v tejto postupnosti:

  • aplikácie makier preprocesora,
  • preklad C súborov (typicky prilinkované .c knižnice),
  • preklad C++ súborov (nielen náš .ino súbor, ale aj naše knižnice (.cpp) a hlavičkové súbory (.h)),
  • preklad S súborov (t.j. zdrojových súborov v assembleri pre AVR (AVRASM)),
  • vytvorenie archívov (pre spätnú kompatibilitu s IDE 1.6.5 a staršími),
  • kombinovanie kódu a objektov (je to mágia optimalizácie a usporiadania kódu a údajov s cieľom znížiť veľkosť konečnej binárky, napr. odstránenie nepotrebných častí kódu, zoskupenie súvisiacich častí kódu,…),
  • vytvorenie výstupných súborov (.epp, .hex),
  • uloženie .hex,
  • výpočet veľkosti, či sa to vôbec vojde do FLASH pamäte mikrokontroléra.

Tieto vytvorené súbory sa potom nachádzajú v /tmp/arduino/sketches/ a sú pripravené na nahratie.

Čo je to FQBN?

Je to skratka z Fully Qualified Board Name ("plne kvalifikovaný názov dosky"). Ide o jedinečný identifikátor konkrétnej dosky, ktorý zvyčajne obsahuje typ dosky, model mikrokontroléra, taktovaciu frekvenciu a ďalšie dôležité informácie. Je to jedným z nevyhnutných parametrov zadávaných pre arduino-cli, ktorý sa skladá z nasledovného: <výrobca>:<architektúra>:<označenie dosky>[=<ďalšie možnosti, napr. typ procesora>]

Doska FQBN
Arduino Uno arduino:avr:uno
Arduino Leonardo arduino:avr:leonardo
Arduino Uno WiFi arduino:avr:unowifi
Industrial Shields Ardbox Analog HF+ industrialshields:avr:ardbox:cpu=ardboxanaloghfplus232
Industrial Shields M-Duino 58+ industrialshields:avr:mduino:cpu=mduino58plus
Raspberry Pi Pico rp2040:rp2040:rpipico:flash=2097152_0,freq=133,opt=Small,rtti=Disabled,
  stackprotect=Disabled,exceptions=Disabled,dbgport=Disabled,dbglvl=None,
  usbstack=picosdk,ipstack=ipv4only

Tak OK, to Pico je trochu moc

Ako zistiť tieto FQBN?

Príkazom arduino-cli board listall zistíme FQBN pre všetky inštalované dosky. Pre dosky, kde sa nevyžaduje špecifikácia ďalších parametrov (napr. cpu), to postačuje. Teda všetky základné dosky Arduino, ale aj iné, napr. Adafruit.

Ako sme si povedali, dosky sú uvedené v súbore boards.txt. Konkrétne pre IndustrialShields: ~/.arduino15/packages/industrialshields/hardware/avr/1.1.43/boards.txt. Tam sa to dá pohľadať, ale spravme si to trochu krajšie:

Vylistovanie zoznamu cpu a názvov dosiek

sed -n -e '/^##/{n;n;/cpu/p}' boards.txt > extr01.txt

Časť súboru s vyextrahovanými cpu:

A vyextrahovaný cpu a názov dosky, oddelenej <tab>:

sed -n 's/.*\.cpu\.\(.*\)=\(.*\)/\1\t\2/p' extr01.txt > subor.txt

Opäť časť súbory po tomto príkaze:

Keď to skombinujeme, tak napríklad pre dosku Ardbox Analog HF w/ HW RS-485 (jedná sa o dosku s hardvérovým RS-485), máme FQBN: industrialshields:avr:ardbox:cpu=ardboxanaloghf485 A s týmto sa dá ďalej pracovať.

Kompilácia pomocou arduino-cli

Na úvod si opíšme základné príkazy arduino-cli. Tie sa zadávajú nasledovne: arduino-cli <príkaz> [prepínače], kde príkazy sa skladajú zvyčajne z viacerých slov. Nebudem uvádzať všetky príkazy, ale len tie, ktoré sa bežne používajú. Program rozpoznáva tieto prepínače:

prepínač prepínač opis
skrátene plný názov  
-b --fqbn plne kvalifikovaný názov dosky
-h –-help nápoveda
-p –-port adresa portu pripojenej doske, napr. /dev/ttyACM1
-P –-programmer typ programátora, napr. atmel_ice
-v –-verbose bohatší výstup
-t –-verify skontrolovanie nahranej binárky po nahratí

 

príkaz upresnenie opis príklad
board details vypíše informácie o doske arduino-cli board details -b arduino:avr:uno
  list vypíše zoznam pripojených dosiek arduino-cli board list
  listall vypíše zoznam inštalovaných dosiek arduino-cli board list all
  search hľadanie inštalovanej dosky arduino-cli board search uno
compile   preklad programu - bude uvedený nižšie -
core list vypíše zoznam nainštalovaných dosiek arduino-cli core list
  install stiahnutie a nainštalovanie dosky a závislostí arduino-cli core install arduino:samd
  search hľadanie v zozname dosiek na inštaláciu 1 arduino-cli core search industrialshields
  uninstall odinštalovanie dosky a závislosti arduino-cli core uninstall arduino:samd
  upgrade povýši verziu nainštalovaných dosiek arduino-cli core upgrade
daemon   spustenie arduino-cli na porte 50051 arduino-cli daemon
lib list vypíše zoznam nainštalovaných knižníc arduino-cli lib list
  examples vypíše zoznam príkladov pre všetky knižnice arduino-cli lib examples
  install nainštaluje knižnicu (možnosť zadania i git-u) arduino-cli lib install AudioZero
  search stiahne zoznam udržiavaných knižníc a umožní v ňom hľadanie arduino-cli lib search rs232
  uninstall odinštalovanie knižnice arduino-cli lib uninstall AudioZero
  upgrade povýši verziu nainštalovaných knižníc arduino-cli lin upgrade
monitor   spustí v konzole "serial monitor" arduino-cli monitor -p /dev/ttyACM0
upload   nahranie binárky do dosky - bude uvedené nižšie

 

Samotná kompilácia …je jednoduchá:

arduino-cli compile -b <FQBN> <program.ino> Prípadne môžeme použiť prepínať -v a kochať sa, ako ten šikovný arduino-cli krásne pracuje. Trochu konkrétneho výpisu (hodil by sa celý, ak by sme boli honorovaní od počtu riadkov):

Nahrávanie

Na začiatok jedno upozornenie. Ak používame originálne Arduino IDE, tak po stlačení tlačidla Upload sa zdrojový kód preložil a až potom nahral. Pri použití arduino-cli sa nahrá obsah v /tmp/arduino/sketches/. Takže ak si nie sme istí, či sme máme skompilovaný najaktuálnejší kód, je lepšie to pred nahrávaním spraviť. Syntax pre nahrávanie je:

~/.arduino15/arduino-cli upload -v -b <FQBN> -p <port> <program.ino>

Napríklad: ~/.arduino15/arduino-cli upload -v -b industrialshields:avr:mduino:cpu=mduino58plus -p /dev/ttyACM0 bf-220.ino

Obsah ďalšej časti

Nabudúce si v rýchlosti ukážeme, ako si spraviť Makefile, aby sme to mali predsa len trochu efektívnejšie.

Poznámky:

1 Ak sú pridané do arduino-cli.yaml napríklad tieto riadky:

Teraz by sa mohlo zdať, že ručné pridanie dosiek, ako sme to robili v prvej časti seriálu je zbytočné. Nie je tomu tak, pretože niektoré dosky nie sú k dispozícii s json opisom. A samozrejme, je to potrebné poznať, ak si vyrábame vlastnú dosku, alebo modifikujeme existujúcu (konkrétny príklad - keď sme požadovali v IndustrialShields úpravu plošného spoja, aby RS232/RS485 nebol pripojený na UART piny Leonardo-a, ale na iné, s využitím SoftwareSerial, tak dosky boli dávno vyrobené, predané, aplikované v stroji, ale nikto neaktualizoval softvérové náležitosti, tak sme to robili sami).

 

Máte aj vy zaujímavú konštrukciu, alebo článok?

Máte aj vy zaujímavú konštrukciu, alebo článok a chceli by ste sa o to podeliť s viac ako 200.000 čitateľmi? Tak neváhajte a dajte nám vedieť, radi ju uverejníme a to vrátane obrazových a video príloh. Rovnako uvítame aj autorov teoretických článkov, či autorov zaujímavých videí z oblasti elektroniky / elektrotechniky.

Kontaktujte nás!

ElektroLab potrebuje aj vašu pomoc / ElektroLab also needs your help
Podpor nás!   Support us!


Páčil sa Vám článok? Pridajte k nemu hodnotenie, alebo podporte jeho autora.
 

       

Komentáre k článku



Komentár môžete adresovať buď diskutujúcemu priamo pomocou tlačidla „Odpovedať“, alebo ho môžete adresovať všeobecne do poľa nižšie.

Zatiaľ nebol pridaný žiadny komentár k článku. Pridáte prvý? Berte prosím na vedomie, že za obsah komentára je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.
Pre komentovanie sa musíte prihlásiť.

Vaša reklama na tomto mieste



Vyhľadajte niečo na našom blogu

Máte záujem o reklamu?

PCBWay Promo

Máte záujem o reklamu?

PCBWay Promo

Máte záujem o reklamu?

PCBWay Promo

🎨 Rezistor
Pásiky: 4
Výsledok: 0.00 Ω ±1%
🔗 Zdieľať widget

💡 Vedeli ste, že…


Webwiki Button