Sommario:

PInt@t10n: Sistema di monitoraggio dell'impianto intelligente: 9 passaggi
PInt@t10n: Sistema di monitoraggio dell'impianto intelligente: 9 passaggi

Video: PInt@t10n: Sistema di monitoraggio dell'impianto intelligente: 9 passaggi

Video: PInt@t10n: Sistema di monitoraggio dell'impianto intelligente: 9 passaggi
Video: Como formatar um notebook e instalar o windows 7 2024, Dicembre
Anonim
PInt@t10n: sistema di monitoraggio degli impianti intelligenti
PInt@t10n: sistema di monitoraggio degli impianti intelligenti

Questo progetto è stato creato come test per l'ibm iot cloud. Usiamo un esp-8266 per inviare e ricevere dati da e verso il cloud IBM. La comunicazione tra esp e ibm cloud avviene tramite MQTT.

Per gestire tutti i dati e presentare all'utente un'interfaccia utente usiamo node-red. È molto adatto ai principianti.

Per iniziare hai bisogno di:

  • ESP-8266
  • dht 11/22 sensore temperatura/umidità
  • diodo fotosensibile (misurazione della luce)
  • cicalino
  • sensore di umidità del terreno
  • account cloud IBM

Passaggio 1: collega i tuoi sensori

Connetti i tuoi sensori
Connetti i tuoi sensori
Connetti i tuoi sensori
Connetti i tuoi sensori
Connetti i tuoi sensori
Connetti i tuoi sensori

Come accennato in precedenza, utilizzeremo esp8266 per leggere e inviare i dati del sensore. Per questo tutorial supponiamo che tu sappia come collegare i tuoi sensori al tuo micro controller. Devi anche sapere come caricare il codice su un esp8266.

Il nostro modello esp ha solo una porta analogica, quindi abbiamo scelto di ricevere informazioni analogiche dal nostro sensore di luce perché così possiamo monitorare quanta luce riceve la pianta.

Tutti gli altri sensori sono collegati digitalmente. Il nostro sensore DHT11 invia i dati in modo digitale e utilizziamo la libreria dht per interpretare i dati dei sensori.

Sopra puoi trovare uno schema elettrico per i sensori che abbiamo usato. Ma tieni presente che i sensori che abbiamo usato spesso sono dotati di un modulo in modo da poterlo collegare facilmente al tuo microcontrollore senza tutti i resistori aggiuntivi che abbiamo incluso nel diagramma.

Passaggio 2: codice

Questo è lo sketch di Arduino che abbiamo usato. Puoi scoprire come funziona il codice se leggi i commenti.

#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 umiditàPin 4 #define DHTType DHT11 DHT dht(DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; temperatura galleggiante = 0; umidità galleggiante = 0; umidità booleana = falso; int luce = 0; const char* ssid = STASSID; const char* password = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int valore = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d:cmfwqk:ESP8266:ESP" #define MQTT_USER "use-token-auth" #define "_TOPITT_TOK" iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitch.h" // note nella melodia: // durata delle note: 4 = quarto nota, 8 = croma, ecc.: int shortTone = 80; int longTone = 200; int standardRitardo = 50; int delayBetweenBars = 50; void setup_wifi() { ritardo(10); // Iniziamo connettendoci a una rete WiFi Serial.println(); Serial.print("Connessione a "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { ritardo(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connesso"); Serial.println("Indirizzo IP: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Messaggio arrivato ["); Serial.print(argomento); Serial.print("] "); for (int i = 0; i < lunghezza; i++) { Serial.print((char)payload); } Serial.println(); StaticJsonDocument jsonBuffer; deserializeJson(jsonBuffer, payload); JsonObject root = jsonBuffer.as(); if(root["canzone"]=="darude"){ darude(); } if(root["canzone"]=="starwars"){ starwars(); } if(root["canzone"]=="jacques"){ Serial.println("jakakakakakkakaka"); Giacomo(); } } void reconnect() { // Ciclo finché non ci ricolleghiamo while (!client.connected()) { Serial.print("Tentativo di connessione MQTT…"); // Tentativo di connessione if (client.connect(MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) { Serial.println("connected"); client.subscribe(MQTT_TOPIC_DISPLAY); } else { Serial.print("fallito, rc="); Serial.print(client.state()); Serial.println("riprova tra 5 secondi"); // Attendi 5 secondi prima di riprovare delay(5000); } } } void setup() { Serial.begin(9600); pinMode(moisturePin, INPUT); dht.begin(); pinMode(0, USCITA); setup_wifi(); client.setServer(mqtt_server, MQTT_PORT); client.setCallback(richiamata); ritardo(20); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); umidità = digitalRead(moisturePin); luce = analogRead(A0); temp = dht.readTemperature(); umidità= dht.readHumidity(); Serial.println("Temperature =" + String(temp, 1) + "\nHumidity =" + String(humidity, 1) + "\nUmidità: "+String(umidità)+"\nLight: "+String(light)); Payload della stringa = "{"ts\":{"t\": "+String(temp, 1)+", \"h\": "+String(humidity, 1)+"}, \"ms \":{"m\": "+Stringa(umidità)+"}, \"ls\":{"l\":"+Stringa(luce)+"}}"; Serial.println (carico utile); if (client.publish(MQTT_TOPIC, (char*) payload.c_str())){ Serial.println("publish ok"); }else { Serial.println("pubblicazione fallita"); } ritardo (2000); } void darude(){ tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, longTone); ritardo (tono lungo); noTono(0); delay(delayBetweenBars); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_D4, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_A3, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, longTone); ritardo (tono lungo); noTono(0); delay(delayBetweenBars); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, longTone); ritardo (tono lungo); noTono(0); delay(delayBetweenBars); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); ritardo (breveTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, shortTone); delay(shortTone); noTono(0); ritardo(ritardo standard); tone(0, NOTE_B3, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); tone(0, NOTE_E4, longTone); ritardo (tono lungo); noTono(0); ritardo(ritardo standard); } void starwars() { beep(NOTE_A4, 500); beep(NOTA_A4, 500); beep(NOTA_A4, 500); beep(NOTA_F4, 350); beep(NOTA_C5, 150); beep(NOTA_A4, 500); beep(NOTA_F4, 350); beep(NOTA_C5, 150); beep(NOTA_A4, 650); ritardo (500); beep(NOTA_E5, 500); beep(NOTA_E5, 500); beep(NOTA_E5, 500); beep(NOTA_F5, 350); beep(NOTA_C5, 150); beep(NOTE_GS4, 500); beep(NOTA_F4, 350); beep(NOTA_C5, 150); beep(NOTA_A4, 650); } void beep(int note, int duration) { //Riproduci tono sul buzzerPin tone(0, nota, durata); ritardo (durata); noTono(0); ritardo(ritardo standard); } void heartOfCourage(){ } void jacques(){ beep(NOTE_C4, 500); beep(NOTA_D4, 500); beep(NOTA_E4, 500); beep(NOTA_C4, 500); beep(NOTA_C4, 500); beep(NOTA_D4, 500); beep(NOTA_E4, 500); beep(NOTA_C4, 500); beep(NOTA_E4, 500); beep(NOTA_F4, 500); beep(NOTA_G4, 500); beep(NOTA_E4, 500); beep(NOTA_F4, 500); beep(NOTA_G4, 500); beep(NOTA_G4, 500); beep(NOTA_A4, 500); beep(NOTA_G4, 500); beep(NOTA_F4, 500); beep(NOTA_E4, 500); beep(NOTA_C4, 500); beep(NOTA_G4, 500); beep(NOTA_A4, 500); beep(NOTA_G4, 500); beep(NOTA_F4, 500); beep(NOTA_E4, 500); beep(NOTA_C4, 500); beep(NOTA_C4, 500); beep(NOTA_G4, 500); beep(NOTA_C4, 500); beep(NOTA_C4, 500); beep(NOTA_G4, 500); beep(NOTA_C4, 500); }

Passaggio 3: IBM Cloud

IBM Cloud
IBM Cloud

Devi configurare un'istanza IBM-cloud. Puoi trovare informazioni su questo tramite questo link: github.

Passaggio 4: Nodo-RED

Usiamo node-red per gestire la nostra logica aziendale generale e per visualizzare questi dati in un'interfaccia utente intuitiva.

Passaggio 5: Configurazione Nodo-RED: Luce

Nodo-RED Setup: Light
Nodo-RED Setup: Light

Importa il seguente codice nel tuo progetto.

[{"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":"", "format":"json", "name":"Ottieni dati da ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":

Passaggio 6: impostazione Nodo-ROSSO: Temperatura

Nodo-RED Setup: Temperatura
Nodo-RED Setup: Temperatura

Importa il seguente codice nel tuo progetto.

[{"id":"fbad3799.f0e0e", "type":"tab", "label":"Temperatura", "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":"", "format":"json", "name":"Ottieni dati da ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":

Passaggio 7: Configurazione Nodo-RED: Umidità

Nodo-RED Setup: Umidità
Nodo-RED Setup: Umidità

Importa il seguente codice nel tuo progetto.

[{"id":"144cd53b.c00473", "type":"tab", "label":"Umidità", "disabled":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":"Ottieni dati da ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":

Passaggio 8: configurazione del nodo ROSSO: umidità

Configurazione Nodo-RED: Umidità
Configurazione Nodo-RED: Umidità

Importa il seguente codice nel tuo progetto.

[{"id":"4ee73536.ec6fc4", "type":"tab", "label":"Umidità", "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":"Invia comando a ESP ", "service":"registered", "x":804.1944580078125, "y":383.0000305175781, "wires":}, {"id":"4134fdb7.18e9b4", "type":"ibmiot in", "z":"4ee73536.ec6fc4", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":"", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"update", "commandType":"", "format":"json", "name":"Ottieni dati from ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "wires":

Passaggio 9: hai finito

Congratulazioni! ora hai un sistema di osservazione delle piante funzionante.

Se hai qualche domanda, non esitare a contattarci!