Dnes si ukážeme možnosť nahratia skompilovaného programu - tzv. strojového kódu do Arduina, ktorý je pre bežného používateľa nečitateľný. Obsahuje však inštrukcie, ktoré daný mikrokontróler vykonáva. Strojový kód má výhodu predovšetkým v tom, že si ho vie do Arduina nahrať ktokoľvek, kto má k nemu prístup bez toho aby mal doinštalované knižnice, ktoré musia byť častokrát v presných verziách, aby boli navzájom kompatibilné a kód mohol byť skompilovaný.
Strojový kód má garanciu funkčnosti na každej platforme (pre ktorú bol skompilovaný). Takto je možné jeden firmvér klonovať na stovky zariadení, ktoré budú totožne fungovať. Pre proces uploadu (flashovania) využijeme nástroj XLoader pre Windows, ktorý je vhodný aj pre laikov, nakoľko ponúka jednoduché grafické rozhranie. Tento nástroj, podobne ako Arduino IDE využíva nástroj avrdude, ktorý umožňuje nahrať skompilovaný program do mikrokontroléru prostredníctvom USB-UART rozhrania.
Medzi výhody XLoadera patrí predovšetkým to, že je prenositeľný a je plug n' play aplikáciou. Nevyžaduje inštaláciu, je vybavený dynamickým discoverom COM portov. Hodí sa tak ako prenositeľný nástroj na USB kľúč, alebo dostupný na Dropboxe, ktorý si vieme jednoducho naklonovať do každého počítača, ktorý využívame. Discover COM portov znamená, že Arduino (alebo AVR čip s USB-UART prevodníkom) sa ihneď zobrazí v ponuke COM portov po pripojení do USB portu počítača.
Štandardne XLoader ponúka možnosť zvolenia si cieľovej dosky (čipu AtMega) pre Arduino Uno (AtMega328), Duemilanove/Nano (AtMega328 / AtMega168), Mega (AtMega1280 / AtMega2560). Ďalším dôležitým parametrom je cesta, prostredníctvom ktorej je možné nastaviť cieľový firmvér, ktorý chceme do mikrokontroléru nahrať.
Cesta ostáva nastavená aj po zatvorení okna (aplikácie) XLoader. Teda aj pri opätovnom zapnutí programu je stále nastavená posledná známa cesta k firmvéru. Posledným parametrom je rýchlosť nahrávania nového firmvéru, štandardne 115200 baud / s.
Poďme ale pekne poporiadku...
V prvom rade potrebujeme projekt, ktorý je skompilovaný a ktorý chceme nahrať do Arduina. Využijeme projekt Ethernet termostat vo free verzii, ktorý má dostupné strojové (.hex) kódy v Github repozitári: https://github.com/martinius96/termostat-ethernet/
Po stiahnutí a rozbalení archívu môžeme vidieť v archíve dostupných 6 strojových kódov, ktoré majú príponu (formát) .hex. Strojové kódy sú rozdelené na základe pridelenej IP adresy - staticky (192.168.4.1 / 192.168.1.254 - obe s 24-bit maskou), dynamicky prostredníctvom DHCP servera v sieti, ale taktiež aj podľa použitého Ethernet shieldu. Na výber sú možnosti pre Ethernet Wiznet W5100 alebo W5500 shield / modul.
Na základe schémy zapojenia dostupnej v repozitári, respektíve aj na webovej stránke projektu https://martinius96.github.io/termostat-ethernet/zapojenie.html si do Arduina zasunieme Ethernet shield (v našom prípade Wiznet W5100) a dátový vývod D5 - emulovanú OneWire zbernicu pripojíme k teplotnému senzoru Dallas DS18B20, ktorý v systéme slúži ako riadiaca teplota pre termostat. Napájanie 5V spojíme s Vcc DS18B20 a vzájomne prepojíme i zem - GND vývody.
Arduino prostredníctvom USB kábla spojíme s počítačom (môžeme pripojiť aj Ethernet shield) prostredníctvom Ethernet kábla do LAN siete / lokálne do počítača. Po otvorení XLoadera vidíme, že sa Arduino ukázalo na porte COM7. Zvolíme si cieľovú platformu na Uno pre AtMega328 čip a zvolíme si cestu k firmvéru. Vidíme, že v predmetnom tutoriáli využívame firmvér: static_W5100_4_1.hex. Teda Ethernet shield bude mať IP adresu 192.168.4.1 / 24. (Pre testovacie účely sme spojili Arduino s počítačom, ktorý má prednastavenú statickú IP adresu 192.168.4.2 / 24) a bude tak možné pripojiť sa na Ethernet shield bez nutnosti mať Arduino v LAN sieti.
Po kliknutí na Upload sa začne automatizovane firmvér - strojový kód nahrávať. O úspešnosti nahratia firmvéru informuje hláška, ktorá nahradí výpis Uploading.... s informáciou o počte uploadnutých bajtov. Firmvér je týmto nahratý a Arduino ihneď spustí (nabootuje) nový firmvér termostatu.
Po spustení nového firmvéru je zmenu vidieť aj na komunikačných LED diódach Ethernet shieldu, ktorý komunikuje s Arduinom po SPI zbernici. Termostat využíva HTTP webserver - beží vo webovom rozhraní, kde môže byť jeho autometický režim konfigurovaný prostredníctvom HTML formulára. Konfigurovať je možné cieľovú teplotu a hysterézu.
Webaplikácia termostatu je dostupná na adrese: http://192.168.4.1. Pre náročnejších používateľov, ktorí chcú svoj termostat ovládať cez internet je možné verejnú IP na routri prostredníctvom port forwardingu presmerovať na Arduino, avšak tento variant nemusí byť úplne bezpečný, preto sa odporúča využiť VPN spojenie, alebo ovládať termostat výhradne z domácej LAN siete.
O všetkých technických detailoch, počte webových stránok bežiaciach na Arduino webserveri a ich funkčnosti sa môžete dočítať v samostatnom článku na:
http://deadawp.blog.sector.sk/blogclanok/13223/izbovy-termostat-arduino-ethernet.htm
Video tutoriál pre nástroj XLoader:
Nástroj AVRDUDE je možné používať aj priamo cez konzolu, je však nutné presne definovať do príkazu pre nahrávanie aj COM port, čo môže byť otravné na hľadanie. XLoader je vhodná alternatíva, ktorá prináša jednoduché grafické rozhranie, 100% prenositeľnosť, plug n' play prvky a možnosť jednoduchého uploadu firmvéru v strojovom kóde do mikrokontroléru.