Mini IOT rendszer avagy NodeMcu Arduino IDE-vel

Kedves Blogolvasók!

A nyári szünet úgymond véget ért. Lassan jönnek a hosszú őszi napok, amikor már nem lehet annyit a szabadban tölteni, ezért újra tudok a tesztek írására is időt fordítani. Az első ilyen példa legyen az, hogy miként lehet megvalósítani az előző cikkben szereplő feladatot az Arduino IDE-vel.

-Az előző cikk-

Röviden az előző cikk összefoglalása, ha valaki nem olvasná el. Ott két dobozt készítettem, az egyikben egy DHT22 van, ami a külső hőmérséklet és páratartalom adatokat méri (akksiról). A másikban pedig egy DS18B20 hőmérő szenzor és egy SR-HC501 mozgásérzékelő van. Ezek az eszközök Wifin keresztül $_GET-elik be mért adatokat egy BananaPi-n futó apache2-nek.

A harmadik Node, amit az Arduino IDE-n keresztül programoztam fel egy DHT11-et tartalmaz és egy SR-HC501-es mozgásérzékelőt, ami hasonlatosan $_GET-eli be a mért szenzoradatokat.

Kapcsolási rajzot nem mellékelek, mert aki valami ilyesminek a készítésére adja a fejét, annak kapcsolási rajz úgy sem kell. Plusz végigolvassa az előző cikkeimet, ami telis-tele van jobbnál jobb bekötési vázlatokkal.

Nos akkor kezdjük is azzal, hogy miként néz ki a már kibővített rendszer.

dht_web_newItt látható, hogy lett egy plusz ikon az előző cikkben látott állapothoz képest. Ez az ikon vezet a DHT11 mért adataihoz. Ami így néz ki:

web_dht11_dataEz a grafikon semmiben sem tér el az előző két eszköz grafikonjától. Max a mérési intervallumokban. Ami még változott az az, hogy kibővült plusz egy szektorral a mozgásérzékelő látásköre.

new_motion_sector

Nah de ezekből ennyi legyen is elég, lássuk a kódot:

// DHT 11 definiálás
#include "DHT.h"
#define DHTTYPE DHT11   // DHT 11
#define DHTPIN 2
DHT dht(DHTPIN, DHTTYPE, 15);

#include <ESP8266WiFi.h>
const char* ssid = "Aloha";
const char* password = "deepdish";
const char* host = "192.168.0.115";
#define sensor  14
int pirState = LOW; // Mozgásérzékelő állapot státusza
int val = 0; // Mozgásértékelő beolvasása ebbe a változóba
int counter = 0;

#include "Timer.h"
Timer t;

void setup()
{
t.every(10 * 60 * 1000, dhtwrite);

Serial.begin(115200);
delay(100);
pinMode(sensor, INPUT_PULLUP);
dht.begin();
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.print(WiFi.localIP());
Serial.println("/");
}

void loop()
{

t.update();

val = digitalRead(sensor); // A mozgásérzékelő beolvasása
if (val == HIGH)  // Ha val HIGH akkor van mozgás
{
connection();
delay(1000);
if (pirState == LOW)
{
counter=counter+1;
pirState = HIGH; //pirstate állapot megváltoztatása
Serial.print("Motion Started ");//Írás serial monitorra
Serial.println(counter);
}
}
else
{
if (pirState == HIGH)
{
counter=counter+1;
Serial.print("Motion Ended ");//Írás serial monitorra
Serial.println(counter);
pirState = LOW; // pirstate alaphelyzetbe állítása
}
}
}

void connection()
{
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}

// URL összeállítása
String url = "/motion.php?SID=2";
Serial.print("Requesting URL: ");
Serial.println(url);

// Kérés küldése a szervernek
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(500);

// Reply to serial
while(client.available())
{
String line = client.readStringUntil('\r');
Serial.print(line);
}

Serial.println();
Serial.println("closing connection");
}
void dhtwrite()
{
// Várakozás a szenzorra, hogy észhez térjen
delay(2000);

float h = dht.readHumidity();
float t = dht.readTemperature();

// Csekk DHT
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
}

Serial.print("Humidity: ");
Serial.print(h);
Serial.println("");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");


// DHT WEB-re

WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort))
{
Serial.println("connection failed");
return;
}
String temp;
String humi;

temp = String(t);
humi = String(h);

// URL készítése
String url = "/insidedht.php?temp="+temp+"&humi="+humi;
Serial.print("Requesting URL: ");
Serial.println(url);

// Kérés küldése a szervernek
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(500);

// Reply to Serial
while(client.available())
{
String line = client.readStringUntil('\r');
Serial.print(line);
delay(2000);
}

Serial.println();
Serial.println("closing connection");
}

Az Arduino IDE-t ahhoz, hogy NodeMcu-t tudjunk programozni csak egy bővítménnyel kell felokosítani. Ehhez a lépéshez itt van egy instructable.com-os leírás: -ITT-

Ezen felül még két könyvtárat is telepíteni kell a kódhoz.

– A DHT könyvtárat ami letölthető: -INNEN-

– A Timer könyvtárat ami letölthető: -INNEN-

Tulajdonképpen az Arduino könyvtárak 90%-át lehet alkalmazni a NodeMcu-nál is, ez nagy segítség és talán könnyedség is a LUA-hoz a képest. Akinek lenne valamilyen kérdése vagy kérése a projekttel kapcsolatban, az nyugodtan írjon e-mailt:

<MÉLtuMÍ>

(Statisztika: 48 megtekintés)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé.