Obsah:

PInt@t10n: Smart Monitor Monitoring System: 9 kroků
PInt@t10n: Smart Monitor Monitoring System: 9 kroků

Video: PInt@t10n: Smart Monitor Monitoring System: 9 kroků

Video: PInt@t10n: Smart Monitor Monitoring System: 9 kroků
Video: QZX900 B1LLY V1D30 1 2024, Červenec
Anonim
PInt@t10n: Inteligentní monitorovací systém rostlin
PInt@t10n: Inteligentní monitorovací systém rostlin

Tento projekt byl vytvořen jako test pro cloud ibm iot. K odesílání a přijímání dat do az cloudu ibm používáme esp-8266. Komunikace mezi esp a cloudem ibm probíhá prostřednictvím MQTT.

Abychom mohli zpracovat všechna data a nabídnout uživateli uživatelské rozhraní, používáme node-red. Je to velmi přátelské pro začátečníky.

Chcete -li začít, potřebujete:

  • Esp-8266
  • dht 11/22 snímač teploty/vlhkosti
  • fotosenzitivní dioda (měření světla)
  • bzučák
  • snímač zemní vlhkosti
  • cloudový účet ibm

Krok 1: Připojte senzory

Připojte své senzory
Připojte své senzory
Připojte své senzory
Připojte své senzory
Připojte své senzory
Připojte své senzory

Jak jsme již zmínili, použijeme esp8266 ke čtení a odesílání dat ze senzorů. V tomto tutoriálu budeme předpokládat, že víte, jak připojit senzory k mikrořadiči. Také již potřebujete vědět, jak nahrát kód na esp8266.

Náš model esp má pouze jeden analogový port, takže jsme se rozhodli přijímat analogové informace z našeho světelného senzoru, protože pak můžeme sledovat, kolik světla rostlina dostává.

Všechny ostatní senzory jsou připojeny digitálně. Náš senzor DHT11 odesílá data digitálně a k interpretaci dat senzorů používáme knihovnu dht.

Nahoře najdete schéma zapojení senzorů, které jsme použili. Mějte však na paměti, že senzory, které jsme používali, jsou často dodávány s modulem, takže jej můžete snadno připojit k mikrořadiči bez všech dalších odporů, které jsme zahrnuli do schématu.

Krok 2: Kód

Toto je skica arduina, kterou jsme použili. Pokud si přečtete komentáře, můžete se dozvědět, jak 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; plovoucí vlhkost = 0; booleovská vlhkost = nepravda; int světlo = 0; const char* ssid = STASSID; const char* heslo = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; Klient PubSubClient (espClient); long lastMsg = 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 "UTCll MineTfD #MNO iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// poznámky v melodii: // trvání poznámky: 4 = čtvrtina nota, 8 = osmá nota atd.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {zpoždění (10); // Začneme připojením k WiFi síti Serial.println (); Serial.print („Připojování k“); Serial.println (ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {zpoždění (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi připojeno"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); } neplatné zpětné volání (char* topic, byte* užitečné zatížení, nepodepsaná int délka) {Serial.print ("Zprá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žitečné zatížení); JsonObject root = jsonBuffer.as (); if (root ["song"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} void reconnect () {// Smyčka, dokud se znovu nepřipojíme while (! client.connected ()) {Serial.print ("Pokus o připojení MQTT …"); // Pokus o připojení if (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("connected"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("se nezdařilo, rc ="); Serial.print (client.state ()); Serial.println („zkuste to znovu za 5 sekund“); // Počkejte 5 sekund, než se zpoždění opakuje (5 000); }}} neplatné nastavení () {Serial.begin (9600); pinMode (vlhkostPin, VSTUP); dht.begin (); pinMode (0, VÝSTUP); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (zpětné volání); zpoždění (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); vlhkost = digitalRead (vlhkostPin); světlo = analogové čtení (A0); temp = dht.readTemperature (); vlhkost = dht.readHumidity (); Serial.println ("Teplota =" + Řetězec (teplota, 1) + "\ nVlhkost =" + Řetězec (vlhkost, 1) + "\ nVlhkost:" + Řetězec (vlhkost) + "\ nSvětlo:" + Řetězec (světlo)); Užitečné zatížení řetězce = "{" ts / ": {" t / ":"+String (temp, 1)+", \" h / ":"+String (vlhkost, 1)+"}, \" ms / ": {" m / ":"+String (vlhkost)+"}, \" ls / ": {" l / ":"+String (světlo)+"}}"; Serial.println (užitečné zatížení); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("publish ok"); } else {Serial.println ("publikování se nezdařilo"); } zpoždění (2000); } void darude () {tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, longTone); delay (longTone); noTone (0); delay (delayBetweenBars); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_D4, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_A3, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, longTone); delay (longTone); noTone (0); delay (delayBetweenBars); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, longTone); delay (longTone); noTone (0); delay (delayBetweenBars); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, shortTone); zpoždění (shortTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_B3, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); tón (0, NOTE_E4, longTone); delay (longTone); noTone (0); zpoždění (standardní Zpoždění); } neplatné hvězdné války () {pípnutí (NOTE_A4, 500); pípnutí (NOTE_A4, 500); pípnutí (NOTE_A4, 500); pípnutí (NOTE_F4, 350); pípnutí (NOTE_C5, 150); pípnutí (NOTE_A4, 500); pípnutí (NOTE_F4, 350); pípnutí (NOTE_C5, 150); pípnutí (NOTE_A4, 650); zpoždění (500); pípnutí (NOTE_E5, 500); pípnutí (NOTE_E5, 500); pípnutí (NOTE_E5, 500); pípnutí (NOTE_F5, 350); pípnutí (NOTE_C5, 150); pípnutí (NOTE_GS4, 500); pípnutí (NOTE_F4, 350); pípnutí (NOTE_C5, 150); pípnutí (NOTE_A4, 650); } void pípnutí (int poznámka, int trvání) {// Přehrát tón na bzučákuPin tón (0, poznámka, doba trvání); zpoždění (doba trvání); noTone (0); zpoždění (standardní Zpoždění); } void heartOfCourage () {} void jacques () {pípnutí (NOTE_C4, 500); pípnutí (NOTE_D4, 500); pípnutí (NOTE_E4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_D4, 500); pípnutí (NOTE_E4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_E4, 500); pípnutí (NOTE_F4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_E4, 500); pípnutí (NOTE_F4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_A4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_F4, 500); pípnutí (NOTE_E4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_A4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_F4, 500); pípnutí (NOTE_E4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_C4, 500); pípnutí (NOTE_G4, 500); pípnutí (NOTE_C4, 500); }

Krok 3: Ibm Cloud

Cloud Ibm
Cloud Ibm

Je třeba nastavit instanci cloudu IBM. Informace o tom najdete na tomto odkazu: github.

Krok 4: Node-RED

Node-red používáme pro zpracování naší obecné obchodní logiky a pro vizualizaci těchto dat v intuitivním uživatelském rozhraní.

Krok 5: Nastavení uzlu-ČERVENÉ: Světlo

Nastavení uzlu-ČERVENÉ: Světlo
Nastavení uzlu-ČERVENÉ: Světlo

Do svého projektu importujte následující 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ískat data z ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "dráty":

Krok 6: Nastavení Node-RED: Teplota

Nastavení Node-RED: Teplota
Nastavení Node-RED: Teplota

Do svého projektu importujte následující 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ískat data z ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145,5, "y": 49, "dráty":

Krok 7: Nastavení Node-RED: Vlhkost

Nastavení Node-RED: Vlhkost
Nastavení Node-RED: Vlhkost

Do svého projektu importujte následující kód.

[{"id": "144cd53b.c00473", "type": "tab", "label": "Vlhkost", "deaktivováno": 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 ":" "," formát ": "json", "name": "Získat data z ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "dráty":

Krok 8: Nastavení uzlu-ČERVENÉ: Vlhkost

Nastavení Node-RED: Vlhkost
Nastavení Node-RED: Vlhkost

Do svého projektu importujte následující 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 ":" Odeslat příkaz do ESP "," service ":" registered "," x ": 804.1944580078125," y ": 383.0000305175781," Wire ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "autentizace": "boundService", "apiKey": "", "inputType": "evt", "logicalInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Získat data z ESP "," service ":" registered "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "Wire":

Krok 9: Jste hotovi

Gratulujeme! nyní máte pozorovací systém fungujícího závodu.

Pokud máte nějaké dotazy, neváhejte nás kontaktovat!