Inhoudsopgave:

PINt@t10n: Smart Plant Monitoring System - Ajarnpa
PINt@t10n: Smart Plant Monitoring System - Ajarnpa

Video: PINt@t10n: Smart Plant Monitoring System - Ajarnpa

Video: PINt@t10n: Smart Plant Monitoring System - Ajarnpa
Video: Root any android device on earth 2021 latest method 2024, Juli-
Anonim
PINt@t10n: Smart Plant Monitoring System
PINt@t10n: Smart Plant Monitoring System

Dit project is gemaakt als een test voor de ibm iot cloud. We gebruiken een esp-8266 om gegevens van en naar de ibm cloud te verzenden en te ontvangen. De communicatie tussen de esp en de ibm cloud verloopt via MQTT.

Om alle gegevens te verwerken en de gebruiker een gebruikersinterface te bieden, gebruiken we node-red. Het is erg beginnersvriendelijk.

Om te beginnen heb je nodig:

  • Esp-8266
  • dht 11/22 temp/vochtsensor
  • lichtgevoelige diode (lichtmeting)
  • zoemer
  • bodemvochtsensor
  • ibm cloud-account

Stap 1: Sluit uw sensoren aan

Sluit uw sensoren aan
Sluit uw sensoren aan
Sluit uw sensoren aan
Sluit uw sensoren aan
Sluit uw sensoren aan
Sluit uw sensoren aan

Zoals we eerder vermeldden, gaan we de esp8266 gebruiken om sensorgegevens te lezen en te verzenden. Voor deze tutorial gaan we ervan uit dat je weet hoe je je sensoren op je microcontroller moet aansluiten. Je moet ook al weten hoe je code uploadt naar een esp8266.

Ons esp-model heeft maar één analoge poort, dus we hebben ervoor gekozen om analoge informatie van onze lichtsensor te ontvangen, omdat we dan kunnen controleren hoeveel licht de plant krijgt.

Alle andere sensoren zijn digitaal aangesloten. Onze DHT11-sensor verzendt gegevens digitaal en we gebruiken de dht-bibliotheek om de sensorgegevens te interpreteren.

Hierboven vind je een schakelschema van de sensoren die we gebruikten. Houd er echter rekening mee dat de sensoren die we gebruikten vaak met een module worden geleverd, zodat u deze eenvoudig kunt aansluiten op uw microcontroller zonder alle extra weerstanden die we in het diagram hebben opgenomen.

Stap 2: Coderen

Dit is de Arduino-schets die we hebben gebruikt. U kunt leren hoe de code werkt als u de opmerkingen leest.

#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 vochtPin 4 #define DHTType DHT11 DHT dht(DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; vlottertemperatuur = 0; vlottervochtigheid = 0; booleaanse vochtigheid = onwaar; int licht = 0; const char* ssid = STASSID; const char* wachtwoord = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient-client (espClient); lange laatsteMsg = 0; char bericht [50]; int-waarde = 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 "UQTTll_TOKEN" iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitches.h" // noten in de melodie: // nootduur: 4 = kwart noot, 8 = achtste noot, enz.: int shortTone = 80; int lange toon = 200; int standaardVertraging = 50; int delayBetweenBars = 50; void setup_wifi() {vertraging(10); // We beginnen door verbinding te maken met een WiFi-netwerk Serial.println(); Serial.print("Verbinding maken met "); Seriële.println(ssid); WiFi.begin(ssid, wachtwoord); while (WiFi.status() != WL_CONNECTED) {vertraging (500); Serieel.print("."); } Serieel.println(""); Serial.println("WiFi verbonden"); Serial.println("IP-adres: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Bericht aangekomen ["); Serial.print(onderwerp); Serieel.print("] "); for (int i = 0; i < lengte; i++) {Serial.print((char)payload); } Serieel.println(); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, lading); JsonObject root = jsonBuffer.as(); if(root["song"]=="darude"){ darude(); } if(root["song"]=="starwars"){ starwars(); } if(root["song"]=="jacques"){ Serial.println("jakakakakakkakaka"); jacques(); } } void reconnect() { // Loop totdat we opnieuw verbonden zijn while (!client.connected()) { Serial.print("Poging tot MQTT-verbinding…"); // Poging om verbinding te maken als (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) { Serial.println ("verbonden"); cliënt.subscribe (MQTT_TOPIC_DISPLAY); } else { Serial.print("mislukt, rc="); Serial.print(client.state()); Serial.println ("probeer het over 5 seconden opnieuw"); // Wacht 5 seconden voordat u de vertraging opnieuw probeert (5000); } } } void setup() { Serial.begin(9600); pinMode (vochtPin, INPUT); dht.begin(); pinMode (0, UITGANG); setup_wifi(); client.setServer(mqtt_server, MQTT_PORT); client.setTerugbellen (terugbellen); vertraging(20); } void loop() { if (!client.connected()) { reconnect(); } cliënt.loop(); vocht = digitalRead (vochtPin); licht = analoog lezen (A0); temp = dht.readTemperature(); vochtigheid= dht.readHumidity(); Serial.println("Temperatuur =" + String(temp, 1) + "\nVochtigheid =" + String(vochtigheid, 1) + "\nVocht: "+String(vocht)+"\nLicht: "+String(licht)); String payload = "{"ts\":{"t\": "+String(temp, 1)+", \"h\": "+String(luchtvochtigheid, 1)+"}, \"ms \":{"m\": "+String(vocht)+"}, \"ls\":{"l\":"+String(licht)+"}}"; Serial.println(lading); if (client.publish(MQTT_TOPIC, (char*) payload.c_str())){ Serial.println("publish ok"); }else { Serial.println("publiceren mislukt"); } vertraging (2000); } void darude(){ tone(0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, lange toon); vertraging (lange toon); geen toon(0); vertraging (vertragingTussenBars); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_D4, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_A3, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, lange toon); vertraging (lange toon); geen toon(0); vertraging (vertragingTussenBars); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, lange toon); vertraging (lange toon); geen toon(0); vertraging (vertragingTussenBars); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, shortTone); vertraging (korte toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_B3, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); toon (0, NOTE_E4, lange toon); vertraging (lange toon); geen toon(0); vertraging (standaardVertraging); } void starwars() { piep (NOTE_A4, 500); piep (NOTE_A4, 500); piep (NOTE_A4, 500); piep (NOTE_F4, 350); piep (NOTE_C5, 150); piep (NOTE_A4, 500); piep (NOTE_F4, 350); piep (NOTE_C5, 150); piep (NOTE_A4, 650); vertraging (500); piep (NOTE_E5, 500); piep (NOTE_E5, 500); piep (NOTE_E5, 500); piep (NOTE_F5, 350); piep (NOTE_C5, 150); piep (NOTE_GS4, 500); piep (NOTE_F4, 350); piep (NOTE_C5, 150); piep (NOTE_A4, 650); } void piep (int noot, int duur) {// Speel toon op zoemerPin toon (0, noot, duur); vertraging (duur); geen toon(0); vertraging (standaardVertraging); } void heartOfCourage(){ } void jacques(){ piep (NOTE_C4, 500); piep (OPMERKING_D4, 500); piep (NOTE_E4, 500); piep (NOTE_C4, 500); piep (NOTE_C4, 500); piep (OPMERKING_D4, 500); piep (NOTE_E4, 500); piep (NOTE_C4, 500); piep (NOTE_E4, 500); piep (NOTE_F4, 500); piep (NOTE_G4, 500); piep (NOTE_E4, 500); piep (NOTE_F4, 500); piep (NOTE_G4, 500); piep (NOTE_G4, 500); piep (NOTE_A4, 500); piep (NOTE_G4, 500); piep (NOTE_F4, 500); piep (NOTE_E4, 500); piep (NOTE_C4, 500); piep (NOTE_G4, 500); piep (NOTE_A4, 500); piep (NOTE_G4, 500); piep (NOTE_F4, 500); piep (NOTE_E4, 500); piep (NOTE_C4, 500); piep (NOTE_C4, 500); piep (NOTE_G4, 500); piep (NOTE_C4, 500); piep (NOTE_C4, 500); piep (NOTE_G4, 500); piep (NOTE_C4, 500); }

Stap 3: IBM Cloud

IBM Cloud
IBM Cloud

U moet een IBM-cloudinstance instellen. Informatie hierover vind je via deze link: github.

Stap 4: Knooppunt-RED

We gebruiken node-red voor het afhandelen van onze algemene bedrijfslogica en om deze gegevens te visualiseren in een intuïtieve gebruikersinterface.

Stap 5: Node-RED Setup: Licht

Knooppunt-RED Setup: Licht
Knooppunt-RED Setup: Licht

Importeer de volgende code in uw project.

[{"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":"Gegevens ophalen van ESP", "service":"geregistreerd", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":

Stap 6: Node-RED Setup: Temperatuur

Node-RED Setup: Temperatuur
Node-RED Setup: Temperatuur

Importeer de volgende code in uw project.

[{"id":"fbad3799.f0e0e", "type":"tab", "label":"Temperatuur", "uitgeschakeld":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":"Gegevens ophalen van ESP", "service":"geregistreerd", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":

Stap 7: Node-RED Setup: Vochtigheid

Node-RED Setup: Vochtigheid
Node-RED Setup: Vochtigheid

Importeer de volgende code in uw project.

[{"id":"144cd53b.c00473", "type":"tab", "label":"Vochtigheid", "uitgeschakeld":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":"Gegevens ophalen van ESP", "service":"geregistreerd", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":

Stap 8: Node-RED Setup: vocht

Node-RED-configuratie: vocht
Node-RED-configuratie: vocht

Importeer de volgende code in uw project.

[{"id":"4ee73536.ec6fc4", "type":"tab", "label":"Vocht", "uitgeschakeld":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":"Stuur opdracht naar ESP ", "service":"geregistreerd", "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":"Gegevens ophalen van ESP", "service":"geregistreerd", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "draden":

Stap 9: Je bent klaar

Gefeliciteerd! je hebt nu een werkend plantobservatiesysteem.

Als u vragen heeft, aarzel dan niet om contact met ons op te nemen!