Kábelmentes adatátvitel az Arduinóval
A Blynk lehetővé teszi, hogy mobilodon futó alkalmazást készíts, amivel vezeték nélkül is vezérelheted az Arduinót. Cikkünkben bemutatjuk, miként vetheted be a programot.
Vezeték nélküli adatátviteli formák számos változata közül választhatsz, ha mikrokontrolleredet szeretnéd egy külső eszközről vezérelni, az összes közül azonban talán a Bluetooth-technológia az, ami a legjobban használható, hiszen energiafogyasztása gazdaságos és könnyen integrálható a különféle projektekbe.
Számos hardveres kiegészítőt találhatsz, amelyek segítségével a wireless adatátvitelnek ezt a formáját azonnal élesítheted, sőt némely Arduino-verzióban beépítetten is elérhető ez a komponens, így még plusz kiegészítő vásárlására sem lesz szükséged, némi telepítgetést követően elkezdheted a fejlesztést. Cikkünkben bemutatjuk, hogyan érdemes belevágnod első BLE-kommunikációs folyamatod létrehozásába, ha egy Genuino 101-es mikrovezérlő és a Blynk szoftvercsomag a rendelkezésedre áll.
Szükséges komponensek
Alapvetően extra szenzorok nélkül érdemes elkezdened a Bluetooth-funkciók előcsalogatását, mivel a legtöbb esetben már önmagában a kapcsolat megteremtése is komolyabb munkát és hozzáértést igényel. Amire mindenképp szükséged lesz, az egy beépített Bluetooth-kontrollerrel rendelkező Genuino 101-es mikrovezérlő. Ezenkívül kell még egy okostelefon (Android és iOS egyaránt megfelel a célra), ennek felületére telepítsd a Blynk applikációt.
Ez a program ugyanis képes arra, hogy a GUI szerkesztőjének segítségével elkészíts egy applikációt, amelynek élesítésével - többek között - vezeték nélküli kapcsolaton keresztül vezérelheted az Arduinót. H
Ha szoftvert sikerült a készülékedre telepíteni, indítsd el számítógépeden az Arduino programozási környezetét, hiszen a kódolás megkezdése előtt a Blynkhez tartozó fejlesztői csomagokat egyaránt csatolnod kell az IDE-hez, hogy a későbbiekben problémamentesen használhasd őket.
Ennek megvalósításához a fejlesztői környezet megnyitása után navigálj a [Vázlat] menüponton keresztül a [Könyvtár tartalmazása] felületre, és itt válaszd a [Könyvtárak kezelése…] opciót. A felugró ablak keresőmezőjébe gépeld be a Blynk kulcsszót, majd a legelső találat legfrissebb verzióját installáld. A gyors telepítést követően már használhatod is a szoftverhez tartozó funkciókat, illetve a [Példák] között felbukkan néhány újdonság.
Amennyiben valamiért ebben a menüben nem találod a megadott csomagot, manuális telepítést kell végrehajtanod. Töltsd le a legfrissebb csomagot (hopp.pcworld.hu/15545), majd az IDE-ben válaszd a [Vázlatok]-ból a [Könyvtár tartalmazása] lehetőséget, majd itt a [.zip könyvtár hozzáadása…] sorra klikkelj. A felugró ablakban keresd meg a frissen lementett tömörített állományt, és az [Open]-t választva társíthatod a csomagot.
Próbaprojekt
A Bluetooth-kommunikáció élesítéséhez elsőként mindenképp egy mintakódot vegyél alapul, mivel így garantáltan egy olyan alkalmazást kapsz, amely működőképes, segítségével pedig könnyen ellenőrizheted a kapcsolódás sikeres végrehajtását. Az előre elkészített alkalmazások eléréséhez látogass el a fejlesztői környezeteden belül a [Példák] menüpontba, és itt keresd meg a Blynkhez tartozó mintaprogramokat, majd a [Boards_Bluetooth] könyvtárban fellelhető Arduino_101_BLE.ino állományt indítsd el.
Ha megnyílt a szoftver, először is azt láthatod, hogy a kommunikációhoz a felületnek a char auth[] változóban szüksége lesz egy egyedileg generált tokenre, amit a Blynk applikáción belül szerezhetsz meg. Az okostelefonos appban a regisztrációs folyamat végrehajtását követően létrehozhatsz egy új alkalmazást a képernyőn található [New Project]-re kattintva. Itt add meg alkalmazásod nevét, válaszd ki a használni kívánt mikrovezérlőt a listából (esetünkben ez az Arduino 101), majd a kapcsolat típusánál állítsd be a [BLE] opciót.
Ezek után a csavar ikonra kattintva válaszd ki valamelyiket az [Email all] vagy a [Copy all] opciók közül a tokenek megosztásához. Amennyiben megkaptad egyedi kódsorodat, másold be ezt a karakterláncot Arduino-szoftveredbe az auth[] melletti idézőjelek közé. Most már feltöltheted a programot mikrovezérlődre, ha pedig már fut, akkor a telefonodon is érdemes élesíteni a Blynk megfelelő funkcióit. Ehhez kattints a felső menüsávon található [+] ikonra, és az oldalról beúszó menüben válaszd a [BLE] lehetőséget.
A felületedre felkerülő gombot megérintve felbukkan a kapcsolat létrehozását elősegítő menü, a [Connect BLE Device] gomb pedig megjeleníti az elérhető eszközök listáját. Mivel az Arduino IDE-n a setup programrészben a Blynk nevet kapta a BT-eszköz, a listából ezt kell kikeresned. Sikeres társítás esetén a mikrovezérlődet online állapotúnak jelzi a felület, ha viszont a csatlakozás esetleg nem sikerül, akkor sajnos kénytelen leszel egy extra lépést beiktatni a fejlesztési folyamatba.
Kell egy kis butítás
Az Intel pár éve felhagyott a Genuino 101-es platform fejlesztésével, még azelőtt, hogy a 2.0.4-es verzióban kijavították volna a BLE-hez kapcsolódó hibákat, így könnyen előfordulhat, hogy megfelelő mintakóddal sem lesz képes csatlakozni az elkészített mobilalkalmazás készülékedhez. Ebben az esetben egy régebbi firmware-verzióra kell visszaállítanod. Hogy ezt megvalósítsd, nyisd meg a menüsáv [Eszközök] opcióját, és válaszd az [Alaplap]-ot, majd klikkelj az [Alaplapkezelő… ] lehetőségre.
A felugró menü keresősávjába gépeld be az Intel Curie Boards kifejezést, majd a telepített csomag legördülő menüjében klikkelj az 1.0.7-es lehetőségre, hiszen ez az a verzió, amelyik garantált kompatibilitást kínál. Ezt követően jó néhány telepítési lépés következik, a teljes összeállítás frissítése akár percekig is eltarthat, az update befejezéséig ne zárd be ezt az ablakot. Ahhoz, hogy a lapkád minden komponense a megfelelő verzióra frissüljön, az [Eszközök] menüpont alsó részén található [Programozó] és a [Bootloadre égetése] opciókra lesz szükséged.
Előbbihez az indítás előtt egy kis módosításra lesz szükséged, a megnyíló menüjéből válaszd az [Arduino/Genuino 101 Firmware Update]-et, és már indítható is a frissítés, amelynek lefutását követően ismételten próbálkozhatsz a BLE-kapcsolat létrehozására, és minden valószínűséggel siker koronázza kísérletedet.
Készül az applikációd
Most már elkezdhetsz kísérletezni a Blynk app különféle beállítási lehetőségeivel és kapcsolóival. Amennyiben a fedélzeti LED kapcsolgatását tűzöd ki magadnak célul, a BLE kapcsolódási ikon mellett helyezz el egy gombot, majd állítsd be az output értékét Virtual V0-ra, és indítsd el a futtatását. Az Arduinóra feltöltendő kódodon mindössze annyit kell módosítanod, hogy a pinMode(13, OUTPUT); utasítással a setupban meghívod a felvillantani kívánt LED-et, majd kódod végére beékelsz egy BLYNK_WRITE(0) függvényt.
Ebben beolvasod a szoftvertől érkező adatot, és számmá konvertálod (int beErtek = param.asInt(); ), majd egy feltételben megvizsgálod, hogy ez a változó mikor vesz fel 0-t, és mikor 1-et. Ez alapján állítod LOW-ra vagy HIGH-ra a 13-as pin értékét (pl. digitalWrite(13, LOW); ). Természetesen nemcsak egyszerű nullákat és egyeseket küldhetsz át a készülékedre, hanem komplett szavakat is fogadhatsz felületén. Ehhez a Blynk appban a [Text Input] opciót kell használnod, amelyben megadhatod az átküldeni kívánt szöveget, és a maximális hosszt is külön jelezheted.
Futtatás előtt szintén módosítanod kell az Arduino kódolási felületét; itt már érdemes szövegként kezelni a beérkező üzenetet, és az összehasonlítási részt is lecserélheted egy soros monitoros kiíratásra. Arra mindenképp figyelj, hogy amint új applikációt hozol létre a Blynken belül, a Bluetooth-kapcsolat létesítéséhez egy friss tokent generál a felület, így használat előtt győződj meg arról, hogy a hitelesítéshez használt kódsorok megegyeznek mobilodon és Arduinód felületén.
A kód
#include <BlynkSimpleCurieBLE.h>
#include <CurieBLE.h>
char auth[] = "Ide jön az egyedi tokened"; BLEPeripheral blePeripheral;
void setup(){ Serial.begin(9600); delay(1000); blePeripheral.setLocalName("Blynk"); blePeripheral.setDeviceName("Blynk"); blePeripheral.setAppearance(384); Blynk.begin(blePeripheral, auth); blePeripheral.begin(); pinMode(13, OUTPUT); }
void loop() { blePeripheral.poll(); Blynk.run(); }
BLYNK_WRITE(0) { int switchValue = param.asInt(); if (switchValue == 0) { digitalWrite(13, LOW); } if (switchValue == 1) { digitalWrite(13, HIGH); } }