Bevezetés

Először is járjuk kicsit körbe a címben szereplő, manapság sokat hallható kifejezést, az IoT-t. Mit is takar az Internet of Things, a Dolgok Internete?
Általános értelmezés szerint az internetes kommunikáció elsősorban emberek között zajlik, ahol a számítógépek csak magát a folyamatot valósítják meg. Azonban az internet napjainkban már nem csak az emberek, hanem rengeteg, arra megfelelően kialakított eszköz közötti kommunikációt is biztosíthatja.

A Dolgok Internete tehát kétirányú kommunikációra képes digitális érzékelőkből és beavatkozó eszközökből álló hálózat, amelynek célja, hogy biztonságosabbá, kényelmesebbé, gazdaságosabbá, vagy éppen szórakoztatóbbá tegye az életünket modern technikai megoldások segítségével. A rendszer egyik fontos elemét képezi a távoli ellenőrzés és kezelhetőség lehetősége, amely interneten keresztül történik és elég hozzá akár egy okostelefonos alkalmazás is.

Drága az IoT? Nem feltétlenül. Bonyolult? A válasz hasonló, és a továbbiakban pontosan azt szeretnénk bemutatni, hogy viszonylag egyszerű, olcsó eszközök segítségével hogyan alakítható ki például egy olyan, mérések elvégzésére alkalmas konfiguráció, ami tökéletesen megfelel az IoT definíciójának, és konkrétan felhasználható több pl. okos-otthon megoldásban.

A projekt tartalma

A következőkben végignézzük, hogy mikre lesz szükségünk ahhoz, hoz kül-, vagy beltéri hőmérséklet értékeket tudjunk mérni, és az adatokat helyben, illetve egy egyszerű webszerver segítségével távolról is elérhessük.

A fentiekhez szükségünk lesz egy megfelelően kiválasztott hőmérő szenzorra, egy wifi-s fejlesztő panelra, jumper kábelekre, egy 4,7kΩ-os felhúzó ellenállásra valamint egy breadboard-ra.

1. A megfelelő szenzor kiválasztása

A projektünkben többféle hőmérsékletmérő szenzor alkalmazható, alapvető kiválasztási szempont a pontosság, a kommunikáció és a kialakítás, pl. alkalmazható-e kültéren. A kiválasztáshoz nyújt segítséget az alábbi táblázat:

Érzékelők összehasonlítása

Figyelembe véve, hogy a mérésekhez a kültéri hőmérséklet adatokat is fel szeretnénk használni, a választás a DS18B20 típusra esett. Ennek tokozott változata alkalmas barátságtalan környezeti viszonyok közötti működésre is.

A szenzor működését már korábban leírtuk itt a malnasuli.hu oldalon most csak röviden néhány jellemző:

Az eszköz 1 adatlábon kommunikál és a “1-Wire” ill. “one-wire” névre keresztelt protokollal, mely a Maxim Integrated Products védjegyoltalma alatt áll.

(Nem tévesztendő össze a szintén 1 adatlábon kommunikáló DHT22-vel, ami csak hasonlóan működik, de nem 1-Wire kompatibilis!)

Minden DS18B20 érzékelő egyedi 64-bites címmel rendelkezik, ami azt jelenti, hogy egy GPIO port felhasználásával akár egyszerre több szenzor is kiolvasható.

A szenzornak létezik tokozott, vízhatlan, kültéri változata is!

Fontosabb adatok:

  • one-wire buszos kommunikáció
  • 3.0V – 5.5V közötti tápfeszültség
  • -55ºC – +125ºC közötti mérési tartomány
  • pontosság: +/-0.5 ºC (a -10ºC to 85ºC közötti tartományban)

A szenzor lábkiosztása

2. Az adatfeldolgozó mikrovezérlő kiválasztása

Projektünkben a szenzor jeleinek feldolgozására az Adafruit cég Feather HUZZAH ESP8266 paneljét használjuk rengeteg pozitív tulajdonsága miatt. Az alábbiakban az áramkör legfontosabb paraméterei:

  • ESP8266 @ 80/160MHz 3,3V-os logikai szint illetve tápfeszültség
  • 4MB Flash memória
  • beépített 3,3V stabilizátor 500mA max. terhelhetőség
  • beépített CP2104 USB-soros átalakító, 921600 max. baudrate
  • auto-reset funkció
  • 9 GPIO csatlakozó, I2C illetve SPI csatlakozási lehetőséggel
  • 1 csatorna analóg bement, 1,0V max.
  • beépített 100mA-es LiPoly töltő státuszjelző LED-del
  • pin #0 általános célú vörös LED, pin #2 debug/általános célú kék LED
  • táp ill. engedélyező pin
  • négy felerősítő furat
  • reset gomb

A mikrovezérlő lábkiosztása

3. A mikrovezérlő programozása

A Huzzah ESP8266 több felületen keresztül is programozható, mi az Arduno IDE környezetet választottuk. A panel használatba vétele előtt telepítenünk kell az ESP8266 board programcsomagot. Ehhez nyissuk meg az IDE felületet, majd nyissuk meg a Fájl menü Beállítások menüpontját. Itt a párbeszéd panel “További Alapla-kezelő URL-ek :” sorba másoljuk be az alábbi URL-t:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Ezután az Eszközök menüben indítsuk el az Alaplap-kezelőt, és adjuk meg az ESP8266 by ESP8266 Community csomagot.

A folyamat végén a csomag lapján megjelenik az INSTALLED felirat.

Az IDE újraindítása után válasszuk ki az Eszközök menüben az Adafruit Feather HUZZAH ESP8266 panelt, majd állítsuk be a paramétereit:

Beállítás

A Port: menüpontnál természetesen az aktuális port száma fog állni.

A panel tesztelésére használható az alábbi egyszerű “Blink” program:

void setup() {
  pinMode(0, OUTPUT);
}
void loop() {
  digitalWrite(0, HIGH);
  delay(500);
  digitalWrite(0, LOW);
  delay(500);
}

Amennyiben a program rendben működik, következhet a DS18B20 szenzor hozzáadása.

4. A hőmérő szenzor hozzáadása

Következő lépés a DS18B20 szenzor bekötése, illetve a működéséhez szüksége könyvtárak hozzáadása az IDE környezethez.

Bekötés:

A szenzor és a mikrovezérlő összekötése az alábbi ábrákon látható:

A szenzor két szélső lába a tápfeszültségre, a középső adatláb a mikrovezérlő #2-es bemenetére csatlakozik. Fontos az adatláb és a pozitív tápfeszültség közé kötendő 4,7kΩ-os felhúzó ellenállás!

Könyvtárak hozzáadása:

A helyes működéshez szükséges még a megfelelő könyvtárak (eszközkezelő library-k) hozzáadása:

Ehhez a Vázlat menüpont Könyvtár tartalmazása – Könyvtárak kezelése…párbeszéd panelon hozzá kell adnunk a OneWire illetve a Dallas könyvtárakat. A panel több választási lehetőséget felajánl, a projektben a Onewire by Paul Stoffregen illetve a Dallas Temperature by Miles Burton könyvtárakat használtuk.

A telepítés után indítsuk újra az IDE programot!

5. Mintaprogram:

/*********
  IoT - Málnasuli
  a teljes projekt a malnasuli.hu oldalon 
*********/

#include <OneWire.h>
#include <DallasTemperature.h>

// A DS18B20 csatlakoztatási pontja
const int oneWireBus = 2;     

// oneWire hivatkozás beállítása
OneWire oneWire(oneWireBus);

// hőmérő szenzor beállítása 
DallasTemperature sensors(&oneWire);

void setup() {
  // Soros monitor indítása
  Serial.begin(115200);
  // DS18B20 szenzor indítása
  sensors.begin();
}
void loop() {
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  float temperatureF = sensors.getTempFByIndex(0);
  Serial.print(temperatureC);
  Serial.println("ºC");
  // Serial.print(temperatureF);
  // Serial.println("ºF");
  delay(1000);
}

A program futása esetén a soros monitoron a következő adatokat láthatjuk:

Soros port kimenete

A folytatásban egy olyan szenzor illesztését vizsgáljuk meg, aminek segítségével további időjárási adatokat (páratartalom, légnyomás) is mérhetünk!

A két forráskód letölthető:

A cikkben használt Adafruit Huzzah Feather board megvásárolható a MálnaPC Webshopjában!