Arduino szoftver alapok

Alapvető tudnivalók, tippek és trükkök az Arduino szoftverfejlesztése körül.

Az Arduino programozására a legegyszerűbb mód a saját IDE-jének a használata. Ez teljesen ingyen letölthető az Arduino oldaláról, innen: https://www.arduino.cc/en/Main/Software.

Az Arduino IDE telepítése lépésről lépésre 1

Attól függően, hogy milyen operációs rendszerünk van, válasszunk egy telepítőt a jobb oldali oszlopból.

Az Arduino IDE telepítése lépésről lépésre 2

A projekt ingyenes, de sokan és sokat dolgoztak rajta, az ő munkájukat támogathatjuk ezen az oldalon keresztül, vagy csak egyszerűen letölthetjük a telepítőt.

A Windowson (és a Chrome böngészőn) a képernyő bal alsó sarkában látható az, hogy hol tart a letöltés:

Az Arduino IDE telepítése lépésről lépésre 3

Ha a letöltés véget ért, kattintsunk rá egyszerűen erre a mezőre, ezzel elindítjuk az Arduino telepítését. Először a licenc-figyelmeztető ablak jelenik meg:

Az Arduino IDE telepítése lépésről lépésre 4

Ettől nem kell megijedni, a progarmot teljesen legálisan töltöttük le és ingyen lehet használni, de a kereskedelmi felhasználásának van néhány feltétele, de ez minket nem nagyon érint. Az I agree lenyomásával elfogadjuk a feltételeket. A következő oldalon a telepítés komponenseit lehet kiválasztani:

Az Arduino IDE telepítése lépésről lépésre 5

Itt érdemes egyszerűen mindent így hagyni, ahogy felkínálja, és a Next-re kattintani. Az ezt követő oldalon a telepítési útvonalat lehet megváltoztatni.

Az Arduino IDE telepítése lépésről lépésre 6

Ha nem okoz problémát az "alap" beállítási útvonal, érdemes ezt így hagyni, és a Install-lal folytatni a telepítést. A voltaképpeni telepítés csak ezeket a kiválasztásokat követően kezdődik el:

Az Arduino IDE telepítése lépésről lépésre 7

Ha a telepítési folyamat véget ért, a Close gomb színe szürkéből fekete színbe vált, az ablakot be lehet vele zárni, a telepítés végére értünk.

Ha valamilyen rejtélyes oknál fogva az Arduino nem eleve magyarul települt a gépünkre, ezen viszonylag egyszerűen tudunk segíteni. Miután elindítottuk az Arduino-t, a első menü-pontra kell kattintanunk:

Az Arduino magyarra kapcsolása 1

Itt például a menü németre van állítva. A utolsó-előtti menüpont minden esetben a beállítások, németül például Voreinstellungen. Erre kell kattintani, és ennek az ablaknak kell megjelennie:

Az Arduino magyarra kapcsolása 2

Itt a fenti nyelv-kiválasztó mezőben egyszerűen ki kell keresnünk a magyar nyelvet:

Az Arduino magyarra kapcsolása 3

Miután újraindítjuk a programot, annak magyarul kell megjelennie.

Mindaddig, amíg nincs a board-unk a PC-hez csatlakoztatva, a "Port" menüpontnak szürkének kell lennie:

Az Arduino csatlakoztatása a PC-hez 1

Ha a board-ot csatlakoztatjuk az USB-porton keresztül a PC-hez, egyrészt a Windows jellegzetes hangjelzést ad (bimbam), majd az Arduin IDE-nek is fel kell ismernie azt:

Az Arduino csatlakoztatása a PC-hez 2

Itt értelemszerűen válasszuk azt az USB portot, ahol az IDE felismerte az Arduino board-unkat!

Ha ez megtörtént, a board típusát kell csak beállítanunk ugyanebben a menüben:

Az Arduino csatlakoztatása a PC-hez 3

Persze Murphy törvénye itt is játszik; hiába csinálunk mindent úgy, ahogy le van írva, csak nem jön össze a kapcsolat. Erre az esetre készítettem egy rövid check-list-et, remélem segít:

1. Vegyünk egy mély levegőt
Vagy kettőt. Nyugodjunk meg, vigyük le a kutyát sétálni, nézzünk be a hűtőbe, van e valami érdekes (nincs), etessük meg a papagájokat..

2. Nyissuk meg a Windows "Device Manager"-ét, konkrétan a csatlakozókat nézzük meg:

Device Manager

Itt szerepelnie kell az USB portnak a számával együtt (COM8), és annak is, hogy melyik driver "olvassa" ezt: USB-SERIAL CH340.

3. Nyilván ugyanezt a portot kell beállítani az Arduino port-jánál, valahogy így:

port beállítás

4. Ha a driver látható, meg minden, de az Arduino-ban a "port" pont szürke marad.

az Arduino-ban a "port" pont szürke marad

  • Ebben az esetben a legvalószínűbb, hogy az Arduino nem ismeri vagy nem ismeri fel a csatlakoztatott board-ot. A telepített borad-ok listája itt található meg az Arduino IDE-ben: Tools / Board:xx / Boards Manager... A board-ot ezesetben telepíteni kell (Wemos D1, ESp8266,..)
  • Megnyekkent az Arduino IDE-nk, vagy a Windows-unk. Újraindítás, újratelepítés, ilyesmi..

5. Ha egyáltalán nincs itt semmi port kilistázva
(erről úgy győződhetünk meg, hogy többször kihúzzuk és visszadugjuk az Arduino USB csatlakozóját. ekkor (alapbeállítással) egy rövid kling-kling hanggal nyugtázza a gépünk, hogy történt valami. Ha ez a hang nincs és a lista sem változik, akkor ezek a lehetőségek vannak:

  • Hibás az USB vezeték, vagy nem csatlakozik rendesen
  • Az USB-vezeték csak töltésre alkalmas, nincs benne adat-vezeték (cseréljük ki, és adjuk a kutyának, hogy rágja már szét, mert egyébként két hét múlva ismét ezzel fogjuk magunkat megszívatni)
  • Hibás vagy halott az Arduino-nk (Fogyócikk, csere. Ez is mehet a kutyának, mert két hét múlva ugyanennél a pontnál fogunk felüvölteni.
  • Hibás a PC USB-portja. Használjunk másik portot.

6. Ha a port szerepel, az USB ki-be húzkodásánál eltűnik, majd újra megjelenik, a PC is rendesen pittyog eközben, de nincs ott a CH340, vagy valami ilyesmi:

  • Az Arduino az IDE telepítésekor külön rákérdez az (alap) driver telepítésére, ezt engedélyezni kell neki
  • Speciális board-oknál (például WEMOS D1), hogy a driver elkeveredik. Ilyenkor érdemes a neten rákeresni a szükséges driverre (google a legjobb barátod). Azért segítek, a Wemos-hoz konkrétan ezt (CH340G) kell telepíteni: https://wiki.wemos.cc/downloads
  • A feleslegesen telepített driverek nem sok vizet zavarnak, de adott esetben sok káromkodás előzhető meg velük
  • A driverek elavulhatnak, mint bármi, ez is okozhat gondot (→ google)

7. Azért reméltem, hogy nem jutsz el eddig a pontig. Nincs több ötletem.

A soros monitor az Arduino IDE-n, vagy mint a lenti képen látható, a jobb felső ikonnal hívható, vagy az "Eszközök" + "soros monitor" pont alatt is megtalálható vagy az alábbi billentyűzet-kombinációval is elérhető: Ctrl + Shift + M. Arduino IDE soros monitor hívása

Ha a funkciót meghívjuk, az alábbi ablak fog kinyílni:

Arduino IDE soros monitor

Ennek funkciói:

SzámaMegnevezéseLeírása
1Soros port számaA port, amire a monitor megnyílt. Ha nem stimmel, az "Eszközök" "Port" -nál módosítható.
2Küldő-ablakA board felé küldendő üzenetet ide kell begépelni/bemásolni. A board, ha nem tudja olvasni az üzenetet, vagy nem kezeli le azt, a puffer-területen fog az várakozni.
3KüldésA küldő-ablak tartalmának a küldése.
4MonitorA board felől a soros porton érkező adatok itt jelennek meg. Ha ennek a tartalma zavaros, akkor vagy az átviteli sebesség (7), vagy a küldött formátum (6) nem stimmel. Ha ez üres marad, akkor a kapcsolat nem jött létre, vagy a board nem küld semmit sem.
5Automatikus görgetésEz, ha be van kapcsolva, mindig az utoljára érkező üzenetet jeleníti meg. Kikapcsolt állapotában a monitor böngészhető, nem ugrik el mindig a legutolsó üzenethez.
6Formázókarakterek megjelenítéseAz üzenetekkel érkező formázókarakterek megjelenítése választható ki.
7Átviteli sebességAzt a sebességet kell beállítani, amivel a board küldi/fogadja az üzeneteket.
Praktikusan a Serial.begin(n); sebességet kell itt is kiválasztani, például (alapértelmezetten) a Serial.begin(9600); esetén a 9600-at.

Az ablak alkalmazására példaprogram: soros monitor.

Fájl menü

Fontos megjegyezni, hogy az Arduino világában a szerkesztett programok "vázlat" (angolul sketch) névre hallgatnak.

MenüpontLeírásMegjegyzés
ÚjÚj ablakban, új vázlat létrehozása.
MegnyitásEgy, már létező vázlat megnyitása.A projektek alapértelmezés szerint a Windowsban a Dokumentumok / Arduino könyvtárban találhatók meg.
Legutóbbi megnyitásaA legutóbbi vázlatok ismételt megnyitása.
VázlatfüzetA vázlatok listája.
PéldákAz Arduino alap-példatára.Kezdőknek érdemes ezt átböngészni.
BezárásA vázlat zárása.
MentésA vázlat mentése.
Mentés másként..A vázlat mentése más néven vagy más helyre.
OldalbeállításNyomtatási kép szerkesztése, megtekintése.
NyomtatásNyomtatás.
BeállításokBeállítások: nyelv, szerkesztő-állítások, további fordítási opciók megadása.Kezdőként nem nagyon érdemes hozzányúlni.
KilépésKilépés a programból.

Szerkesztés menü

A szerkesztés tipikusan az a menü, amit szinte soha nem szokás megnyitni, mert egyszerűbb és gyorsabb a szerkesztő-billentyűkombinációkat megjegyezni, amik ráadásul szinte minden programnál azonosak.

MenüpontBillentyűkombinációLeírásMegjegyzés
VisszavonásCtrl+Z
ÚjraCtrl+Y
KivágásCtrl+X
MásolásCtrl+C
Másolás fórumraCtrl+Shift+C
Másolás HTML-kéntCtrl+Alt+C
BeillesztésCtrl+V
Összes kijelöléseCtrl+A
Ugrás a sorhozCtrl+L
Megjegyzés/-visszavonásCtrl+\
Behúzás növeléseTab
Behúzás csökkentéseshift+Tab
Fontméret növeléseCtrl+Plusz
Fontméret csökkentéseCtrl+Minusz
KeresésCtrl+F
Következő kereséseCtrl+G
Előző kereséseCtrl+Shift+G

Vázlat menü

Ebben a menüben találhatók a program szintaktikai ellenőrzésével és letöltésével kapcsolatos funkciók. Mivel gyakorlatilag mindegyik elérhető a fejléc ikonjaiból vagy billentyűkombinációkból, ezért nem ez a menü a legfrekventáltabb az IDE-n.

MenüpontBillentyűkombinációLeírásMegjegyzés
Ellenőriz/FordítCtrl+RFordítás indításaA fejlécről a pipa ikonnal indítható:
FeltöltésCtrl+UFeltöltés a board-raA fejlécről a nyíl ikonnal indítható:
Néha előfordul, hogy a funkció némi várakozás után rejtélyes hibát dob, hogy a letöltés miért nem sikerült. Ilyenkor először érdemes a letöltést 1-2-szer megismételni, és ha ilyenkor is sikertelen, valami más hibára gyanakodni.
Feltöltés programozót használvaCtrl+Shift+UFeltöltés az ISP porton keresztülSpeciális illesztő-vezetéket igényel.
Lefordított bináris exportálásaCtrl+Alt+SA program exportálása bináris (.hex) formátumban.A részletes leírást lásd itt: Arduino Hexa-fájl export-import
Vázlat mappa mutatásaCtrl+KMegnyitja a programot is tartalmazó könyvtárt.
Könyvtár tartalmazásaKönyvtárkezelésAhogy a fenti ábrán is látszik, egy lenyíló menüt nyit meg, ahol kiválaszthatunk egy könyvárat, melynek a hívását beilleszti a kódunkba. Ebből a menüből intézhetjük a könyvtárak telepítését illetve karbantartását is, lásd bővebben: Könyvtár telepítése / karbantartása
Fájl hozzáadása… Forrásprogram hozzáadásaA megadott forrásprogramot az Arduino IDE vázlat-könyvtárába másolja.

Könyvtár telepítése az IDE-be

A programok futtatásához szükséges könyvtárakat (lib-eket) a legegyszerűbb talán ZIP formátumból telepíteni. A ZIP az alábbi fájlokat tartalmazza:

Könyvtár telepítése az IDE-be

fájl / könyvtárleírás
"examples" könyvtárA példaprogramok (.pde) itt találhatók, ezek akár több alkönyvtárat is kitölthetnek. A telepítés végeztével ezek a "Fájl" / "Példák" felugró menüben, legörgetve a "példák egyéni könyvtárakból" pont alatt lesznek elérhetők.
keywords.txtA könyvtár beforgatásához szükséges kulcsszavak.
nnn.cppC forráskód
nnn.hC forráskód fejlécek
readme.txt (opcionális)A könyvtár leírása

A fentieknek megfelelő kötött struktúrájú lib-ek a "vázlat" menü "könyvtár tartalmazása" menüpont alatt, a ".ZIP könyvtár hozzáadása.." pont alatt telepíthetők. Egy némileg speciális mód, ha ezeket a könyvtárakat a Github-ról telepítjük:

Könyvtár telepítése a GitHub-ról lépésről lépésre

A Github (a Google után, persze) a legjobb barátod, ha Arduino-val foglalkozol. Amikor az új szenzorod megérkezik hosszú hajóútját követően Kínából, és még mielőtt nekiveselkednél, hogy programot írj a kiértékelésére, jusson eszedbe, hogy nem te vagy az első, aki vett ebből a csodakütyüből.

Nyilván először itt, az OB121-en érdemes körbenézned, hátha már előkerült itt is a téma, de ha nem, kattints át a Github-ra, és keress ott. Vegyük például a DHT22-es páratartalom-mérő szenzort, ezt itt:

DHT11

Mondjuk a képen pont egy DHT11-es látható, de ez a mi szempontunkból tök mindegy, ugyanis mindkettő teljesen ugyanúgy néz ki. A szenzorok leírását már nagyjából megoldottam, itt találhatók: Arduino páratartalom-mérés

Ezen az oldalon már azt is kigyűjtöttem - hogy neked ezzel se kelljen fáradnod - hogy a szenzorhoz az alábbi könyvtárt kell telepítened:

Illetve várj, ez így nem igaz. Csak a Github-on is egy adott technikai feladatra is több megoldás is szokott létezni. Ebből egyet megtaláltam, leteszteltem és működött. Nyilván ez nem azt jelenti, hogy csak ez az egy megoldás létezne, hanem csak azt, hogy ez nekem működött.

Szóval, az oldal valahogy így néz ki:

Könyvtár telepítése a GitHub-ról 1.

1: Jól látható, hogy az adott szenzorhoz még néhány példaprogrammal is megszántak minket a fejlesztők. Ez nagyon jó, hiszen azonnal ki is próbálhatjuk a kütyünket.

2: A sarokban, a "clone or download" parancsra kattintva egy ablak jön fel:

Könyvtár telepítése a GitHub-ról 2.

Itt érdemes a "download zip" opciót választanunk, és valahová a gépünkre lementenünk a zip fájlt - lehetőség szerint olyan helyre, ahol egy kicsit később ismét meg fogjuk találni.

3: Már itt, az oldalon figyelmeztetnek a szerzők, hogy ez bizony nem egy egyedülálló könyvtár, társát, a "Adafruit united sensor library" is le kell hozzá töltenünk. Nem baj, ha ezt elfelejtjük, mert egyrészt én is figyelmeztetlek rá a leírásnál, de legkésőbb az Arduino fordító is szólni fog érte. Szóval, egyszerűbb ezt is egy zip-be letölteni.

Ideje elindítani az Arduino IDE-nket. Sorry, de valamilyen rejtélyes oknál fogva én a német nyelvű változatát telepítettem fel - de szerintem ez még mindig előnyösebb, mint mondjuk a koreai. Szóval skeccs - könyvtár - .zip könyvtár telepítés:

Könyvtár telepítése a GitHub-ról 3.

Itt ki kell választani a korábban lementett zip-eket, és ki kell várni a telepítés végét. Ha esetleg már létezik az adott könyvtár, akkor először azt természetesen törölni kell. Ha minden jól ment, akkor egyrészt az új könyvtár is beilleszthetővé válik:

Könyvtár telepítése a GitHub-ról 4.

De ami talán még fontosabb, a példaprogram könyvtár is elő fog bukkanni:

Könyvtár telepítése a GitHub-ról 5.

Most már csak a vezetékezést kell hibátlanul megoldani, ebben segíteni fog ez az oldal: Arduino páratartalom-mérés és már mehet is a méricskélés:

Könyvtár telepítése a GitHub-ról 6.

Könyvtár karbantartása (aktualizálása) az IDE-ben

Habár jellemzően az IDE maga is szokott figyelmeztetni minket, ha a könyvtáraink aktualizálásra szorulnak, ezt mi is ellenprizni tudjuk, illetve kezelhetjük a már feltelepített könyvtárakat. Ez a funkció a Vázlat menü Könyvtár tartalmazása menüpontra kattintva felnyíló ablak első pontja: Könyvtárak kezelése:

Könyvtár karbantartása (aktualizálása) az IDE-ben

Ebben az ablakban a típusnál szűrhetünk az összes / frissíthető / telepítve kritériumokra. Amelyik könyvtár nem aktuális, ott megjelenik az istallálás lehetősége. Amennyiben az IDE nem éri el a szervert (lásd fenn a képen), akkor azt üzenettel jelzi (piros, lent).

Az ablak az "OK" majd "Bezárás" gombokkal zárható.

Könyvtár törlése az Arduino IDE-ből

Ha már eluntuk az adott könyvtárat, vagy nem működik, vagy mondjuk újra kell telepíteni, akkor ezt az alábbi módon villámgyorsan megtehetjük. Windows-on. Saját gép → Dokumentumok → Arduino. Itt kikeressük a törlésre ítélt könyvárt, töröljük, és ennyi.

A hexa fájl az Arduino IDE-ből a Vázlat menüpont alatt a "Lefordított bináris exportálása" alatt végezhető el. Az így generált hexa fájl magába foglalja a teljes beforgatott könyvtár-rendszert és az összes vonatkozó fájlt az adott verzióval, magyarul az adott vázlat azonnal letölthető és futtatható változatát hozza létre.

  • Előnye, hogy azonnal futtatható, nem kell a könyvtár- és verziókövetéssel bajlódni, módosításoktól védett.
  • Hátránya, hogy a verziókövetésre nem alkalmas, kódja nem módosítható.

Alkalmazására egy jó példa a CNC-vezérlő GRBL projekt. Ebben az esetben az Arduino egyszerűbb, legfeljebb 3-tengelyes vezérlése alkalmazható, pusztán a G-fájlokat kell neki letölteni. A GRBL nyitott projekt, azaz a forráskódja is elérhető, de sokkal egyszerűbb a kész és hexába fordított projektet egyszerűen az oldalról letölteni és az adott board-ra feltölteni. A projekt itt érhető el: https://github.com/grbl

Az IDE export funkció egy új könyvtárt generál és abba 3 fájlt hoz létre:

  • Az aktuális projekt IDE mentését (nnn.ino)
  • Egy standard hexa fájlt (nnn.standard.hex)
  • Egy bootloader-es hexa fájlt (nnn.ino.with_bootloader.standard.hex

A két utóbbi hexa fájl között az a különbség, hogy az első a kód letöltésével a bootloader-t felülírja és kvázi letiltja, így a soros kommunikáció a board-on nem lesz használható vele, a második magába integrálja és használhatónak "hagyja" a soros kommunikációt.

A hexa fájlok letöltésére nagyon sok megoldás kínálkozik, ezek közül csak az egyik - igaz, szinte a legismertebb - az XLoader. Az XLoader innen tölthető le: http://xloader.russemotto.com/

XLoader

A program használata rendkívül egyszerű és könnyen kiismerhető, nem is pocsékolok rá több karaktert..

int sensorPin = A0;
int sensorValue = 0;
int ledPin = 13;      // select the pin for the LED

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("Read Analog Test by OB121.com");
  Serial.println("-------------------");
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);
  delay(1000);
}

Ez a szkennerprogram az Arduino-ra kapcsolt és azzal kommunikálni képes I²C egységek címeinek a feltárására alkalmas.

A szkennelést nyilván úgy érdemes végrehajtani, hogy szépen sorban, egyik I²C résztvevőt a másik után a buszra kapcsolunk. Így a címkonfliktusok is viszonylag egyszerűen kiszűrhetők. A szerial képernyőt se feledjük el 115.200-ra állítani az IDE-n.

// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011

#include <Wire.h>

void setup() {
  Serial.begin (115200);

  // Leonardo: wait for serial port to connect
  while (!Serial) 
    {
    }

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  
  Wire.begin();
  for (byte i = 8; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {}

Az eredmény valami ilyesmi lesz, ha minden jól megy, és valóban csatlakozik a résztvevő a buszra:

I2C scanner. Scanning ...
Found address: 39 (0x27)
Done.
Found 1 device(s).

A németben a technikát Flankenauswertung névvel illetik, gyakran magyarul is megjelenik a "flankézés" kifejezés az élfigyelés helyett. Gyakorlatilag arról van szó, hogy a nyomógomb lenyomása vagy elengedése nincs szinkronban a program ciklusidejével, ezért ennek az állapotváltozását külön változóval rögzíteni kell.

Fel- vagy lefutóél figyelés

Az ESP8266 AT parancsok a már "történelmi" Hayes (modem) parancskészleten alapulnak, azoktól meglepően kevés eltéréssel. A parancsokat minden esetben "sortörés" és "új sor" prefixekkel kell zárni. Ha ez nem állítható be, akkor az ASCII-s "/r/n" sorzárással is lehet próbálkozni. Ha a kék led a parancs kiadása után felvillan, az azt jelenti, hogy a modul fogadta a parancsot és válaszolt. A parancsok karakterei között nem szabad szóközt (vagy bármi mást) hagyni.

Sajnos, ez a "/r/n" prefix a legtöbb UART monitorprogramon kifog, nekem legalábbis nem sikerült például a puTTY-ot rávennem a kommunikációra.

Ellenben viszont a Termite egy remek megoldást kínál a PC-ESP8266 kommunikációra, a program innen tölthető le: https://www.compuphase.com/software_termite.htm

Ne feledjük:

  • az ESP-k alapból 115200 baud-dal kommunikálnak
  • a tápjuk és a TX, RX jelszintjük is a 3,3V-os TTL logikát alkalmazza, az 5V-os (vezetékes) kapcsolatokhoz illeszteni kell ezeket

A program beállítási lehetőségei:

Termite beállítási lehetőségei

Fontos beállítás, hogy az Append CR-LF be legyen jelölve, így "tudja" ugyanis a Termite a "/r/n"-t lekezelni.

A program monitor módja:

Termite monitor mód

A fenti példában egy ESP-01 "bejelentkezése" látható.