Obsah:

PInt@t10n: Inteligentný monitorovací systém rastlín: 9 krokov
PInt@t10n: Inteligentný monitorovací systém rastlín: 9 krokov

Video: PInt@t10n: Inteligentný monitorovací systém rastlín: 9 krokov

Video: PInt@t10n: Inteligentný monitorovací systém rastlín: 9 krokov
Video: Автоматический календарь-планировщик смен в Excel 2024, Júl
Anonim
PInt@t10n: Inteligentný monitorovací systém rastlín
PInt@t10n: Inteligentný monitorovací systém rastlín

Tento projekt bol vytvorený ako test pre cloud ibm iot. Na odosielanie a príjem údajov do a z cloudu ibm používame esp-8266. Komunikácia medzi esp a cloudom ibm prebieha prostredníctvom MQTT.

Na spracovanie všetkých údajov a na predstavenie používateľského rozhrania používateľovi používame node-red. Je to veľmi priateľské pre začiatočníkov.

Na začiatok potrebujete:

  • Esp-8266
  • dht 11/22 snímač teploty/vlhkosti
  • fotosenzitívna dióda (meranie svetla)
  • bzučiak
  • snímač zemnej vlhkosti
  • cloudový účet ibm

Krok 1: Pripojte senzory

Pripojte senzory
Pripojte senzory
Pripojte senzory
Pripojte senzory
Pripojte senzory
Pripojte senzory

Ako sme už uviedli, esp8266 použijeme na čítanie a odosielanie údajov zo senzorov. V tomto tutoriáli budeme predpokladať, že viete, ako pripojiť svoje senzory k mikrokontroléru. Tiež už musíte vedieť, ako nahrať kód na esp8266.

Náš model esp má iba jeden analógový port, takže sme sa rozhodli prijímať analógové informácie z nášho svetelného senzora, pretože potom môžeme monitorovať, koľko svetla rastlina dostane.

Všetky ostatné senzory sú prepojené digitálne. Náš snímač DHT11 odosiela údaje digitálne a na interpretáciu údajov zo senzorov používame knižnicu dht.

Hore nájdete schému zapojenia senzorov, ktoré sme použili. Majte však na pamäti, že senzory, ktoré sme často používali, sú dodávané s modulom, takže ho môžete ľahko pripojiť k svojmu mikrokontroléru bez všetkých ďalších odporov, ktoré sme uviedli v diagrame.

Krok 2: Kód

Toto je náčrt arduina, ktorý sme použili. Ak si prečítate komentáre, môžete sa dozvedieť, ako kód funguje.

#include ArduinoJson.h #include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h

#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define vlhkostPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; float temp = 0; plávajúca vlhkosť = 0; booleovská vlhkosť = nepravda; int svetlo = 0; const char* ssid = STASID; const char* heslo = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; Klient PubSubClient (espClient); dlhá posledná správa = 0; char msg [50]; int hodnota = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d: cmfwqk: ESP8266: ESP" #define MQTT_USER "UTf_deTQ MENQTENENQ # iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// noty v melodii: // trvanie not: 4 = stvrtina nota, 8 = ôsma nota atď.: int shortTone = 80; int longTone = 200; int štandardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {oneskorenie (10); // Začneme pripojením k WiFi sieti Serial.println (); Serial.print („Pripojenie k“); Serial.println (ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {oneskorenie (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi pripojené"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); } void callback (char* topic, byte* payload, unsigned int length) {Serial.print ("Správa dorazila ["); Serial.print (téma); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) payload ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, užitočné zaťaženie); JsonObject root = jsonBuffer.as (); if (root ["song"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} void reconnect () {// Slučka, kým sa znova nepripojíme while (! client.connected ()) {Serial.print ("Pokus o pripojenie MQTT …"); // Pokus o pripojenie if (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("connected"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("zlyhalo, rc ="); Serial.print (client.state ()); Serial.println („skúste to znova o 5 sekúnd“); // Pred oneskorením opakovania počkajte 5 sekúnd (5 000); }}} neplatné nastavenie () {Serial.begin (9600); pinMode (vlhkosťPin, VSTUP); dht.begin (); pinMode (0, VÝSTUP); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (spätné volanie); oneskorenie (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); vlhkosť = digitalRead (vlhkosťPin); svetlo = analogRead (A0); temp = dht.readTemperature (); vlhkosť = dht.readHumidity (); Serial.println ("Teplota =" + Reťazec (teplota, 1) + "\ nVlhkosť =" + Reťazec (vlhkosť, 1) + "\ nVlhkosť:" + Reťazec (vlhkosť) + "\ nSvetlo:" + Reťazec (svetlo)); Užitočné zaťaženie reťazca = "{" ts / ": {" t / ":"+Reťazec (teplota, 1)+", \" h / ":"+Reťazec (vlhkosť, 1)+"}, \" ms / ": {" m / ":"+Reťazec (vlhkosť)+"}, \" ls / ": {" l / ":"+Reťazec (svetlý)+"}}"; Serial.println (užitočné zaťaženie); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("publish ok"); } else {Serial.println ("publikovanie zlyhalo"); } oneskorenie (2000); } void darude () {tone (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (delayBetweenBars); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_D4, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_A3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (delayBetweenBars); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (delayBetweenBars); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, shortTone); oneskorenie (shortTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_B3, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); tón (0, NOTE_E4, longTone); oneskorenie (longTone); noTone (0); oneskorenie (štandardné oneskorenie); } neplatné hviezdne vojny () {pípnutie (NOTE_A4, 500); pípnutie (NOTE_A4, 500); pípnutie (NOTE_A4, 500); pípnutie (NOTE_F4, 350); pípnutie (NOTE_C5, 150); pípnutie (NOTE_A4, 500); pípnutie (NOTE_F4, 350); pípnutie (NOTE_C5, 150); pípnutie (NOTE_A4, 650); oneskorenie (500); pípnutie (NOTE_E5, 500); pípnutie (NOTE_E5, 500); pípnutie (NOTE_E5, 500); pípnutie (NOTE_F5, 350); pípnutie (NOTE_C5, 150); pípnutie (NOTE_GS4, 500); pípnutie (NOTE_F4, 350); pípnutie (NOTE_C5, 150); pípnutie (NOTE_A4, 650); } prázdne pípnutie (int poznámka, int trvanie) {// Prehrávanie tónu na bzučiakuPin tón (0, poznámka, trvanie); oneskorenie (trvanie); noTone (0); oneskorenie (štandardné oneskorenie); } void heartOfCourage () {} void jacques () {pípnutie (NOTE_C4, 500); pípnutie (NOTE_D4, 500); pípnutie (NOTE_E4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_D4, 500); pípnutie (NOTE_E4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_E4, 500); pípnutie (NOTE_F4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_E4, 500); pípnutie (NOTE_F4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_A4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_F4, 500); pípnutie (NOTE_E4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_A4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_F4, 500); pípnutie (NOTE_E4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_C4, 500); pípnutie (NOTE_G4, 500); pípnutie (NOTE_C4, 500); }

Krok 3: Ibm Cloud

Cloud Ibm
Cloud Ibm

Musíte nastaviť cloudovú inštanciu IBM. Informácie o tom nájdete prostredníctvom tohto odkazu: github.

Krok 4: Uzol-ČERVENÝ

Node-red používame na spracovanie našej všeobecnej obchodnej logiky a na vizualizáciu týchto údajov v intuitívnom používateľskom rozhraní.

Krok 5: Nastavenie uzla-ČERVENÉ: Svetlo

Nastavenie Node-RED: Svetlo
Nastavenie Node-RED: Svetlo

Do projektu importujte nasledujúci kód.

[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disabled": false, "info": ""}}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicalInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," formát ": "json", "name": "Získať údaje z ESP", "služba": "registrované", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "drôty":

Krok 6: Nastavenie Node-RED: Teplota

Nastavenie Node-RED: Teplota
Nastavenie Node-RED: Teplota

Do projektu importujte nasledujúci kód.

[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperature", "disabled": false, "info": ""}}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" boundService "," apiKey ":" "" "inputType": "evt", "logicalInterface": " "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," formát ": "json", "name": "Získať údaje z ESP", "služba": "registrované", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145,5, "y": 49, "drôty":

Krok 7: Nastavenie Node-RED: Vlhkosť

Nastavenie Node-RED: Vlhkosť
Nastavenie Node-RED: Vlhkosť

Importujte do svojho projektu nasledujúci kód.

[{"id": "144cd53b.c00473", "type": "tab", "label": "Vlhkosť", "deaktivované": false, "info": ""}}, {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicalInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Získať údaje z ESP", "služba": "registrované", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "drôty":

Krok 8: Nastavenie Node-RED: Vlhkosť

Nastavenie Node-RED: Vlhkosť
Nastavenie Node-RED: Vlhkosť

Importujte do svojho projektu nasledujúci kód.

[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Moisture", "disabled": false, "info": ""}}, {"id": "a6daac3e. 2d5268 "," type ":" ibmiot out "," z ":" 4ee73536.ec6fc4 "," authentication ":" boundService "," apiKey ":" "," outputType ":" cmd "," deviceId ":" ESP "," deviceType ":" ESP8266 "," eventCommandType ":" update "," format ":" json "," data ":" msg "," qos ": 0," name ":" Odoslať príkaz do ESP "," service ":" registered "," x ": 804.1944580078125," y ": 383.0000305175781," Wire ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "autentifikácia": "boundService", "apiKey": "", "inputType": "evt", "logicalInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Získať údaje od ESP "," služba ":" registrované "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "Wire":

Krok 9: Hotovo

Gratulujem Teraz máte funkčný systém pozorovania závodov.

Ak máte akékoľvek otázky, neváhajte nás kontaktovať!