Tartalomjegyzék:
- Lépés: Csatlakoztassa az érzékelőket
- 2. lépés: Kód
- 3. lépés: IBM Cloud
- 4. lépés: Node-RED
- 5. lépés: Csomópont-Vörös beállítás: Világos
- 6. lépés: Csomópont-PIROS beállítás: Hőmérséklet
- 7. lépés: Csomópont-Vörös beállítás: Páratartalom
- 8. lépés: Node-RED Setup: Nedvesség
- 9. lépés: Kész
Videó: PInt@t10n: Intelligens növényfigyelő rendszer: 9 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
Ez a projekt az ibm iot felhő tesztjeként jött létre. Az esp-8266 segítségével adatokat küldünk és fogadunk az ibm felhőbe és onnan. Az esp és az ibm felhő közötti kommunikáció az MQTT -n keresztül történik.
Az összes adat kezelésére és a felhasználónak egy felhasználói felület bemutatására a node-red parancsot használjuk. Nagyon kezdőbarát.
A kezdéshez szüksége van:
- ESP-8266
- dht 11/22 hőmérséklet/nedvesség érzékelő
- fényérzékeny dióda (fénymérés)
- berregő
- talajnedvesség érzékelő
- ibm felhő fiók
Lépés: Csatlakoztassa az érzékelőket
Amint azt korábban említettük, az esp8266 -at fogjuk használni az érzékelő adatok olvasására és küldésére. Ebben az oktatóanyagban feltételezzük, hogy tudja, hogyan csatlakoztathatja érzékelőit a mikrovezérlőhöz. Azt is tudnia kell, hogyan kell feltölteni a kódot egy esp8266 -ra.
Az esp modellünknek csak egy analóg portja van, ezért úgy döntöttünk, hogy analóg információkat kapunk a fényérzékelőnkről, mert akkor nyomon követhetjük, hogy mennyi fényt kap a növény.
Minden más érzékelő digitálisan van csatlakoztatva. DHT11 érzékelőnk digitálisan küld adatokat, mi pedig a dht könyvtárat használjuk az érzékelők adatainak értelmezésére.
Fent talál egy kapcsolási rajzot az általunk használt érzékelőkhöz. De ne feledje, hogy az általunk használt érzékelők gyakran tartoznak egy modulhoz, így könnyedén csatlakoztathatja azt a mikrovezérlőhöz a diagramban szereplő összes extra ellenállás nélkül.
2. lépés: Kód
Ezt az arduino vázlatot használtuk. A kód működéséről akkor olvashat, ha elolvassa a megjegyzéseket.
#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 moisturPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; lebegési hőmérséklet = 0; úszó páratartalom = 0; logikai nedvesség = hamis; int light = 0; const char* ssid = STASSID; const char* jelszó = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient kliens (espClient); hosszú lastMsg = 0; char msg [50]; int érték = 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 MQT #define MQT #define MQTT_USER iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// jegyzetek a dallamban: // hang időtartama: 4 = negyedév jegyzet, 8 = nyolcadik hang stb.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Kezdjük azzal, hogy csatlakozunk egy WiFi hálózathoz Serial.println (); Serial.print ("Csatlakozás"); Soros.println (ssid); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("WiFi csatlakoztatva"); Serial.println ("IP -cím:"); Serial.println (WiFi.localIP ()); } void callback (char* topic, byte* payload, unsigned int length) {Serial.print ("Üzenet érkezett ["); Sorozat.nyomat (téma); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) payload ); } Sorozat.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, hasznos terhelés); JsonObject root = jsonBuffer.as (); if (root ["dal"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["dal"] == "jacques") {Serial.println ("jakakakakakkakakaka"); jacques (); }} void reconnect () {// Loop, amíg újra nem kapcsolódunk, amíg (! client.connected ()) {Serial.print ("MQTT kapcsolat megkísérlése…"); // Csatlakozási kísérlet, ha (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("connected"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("nem sikerült, rc ="); Serial.print (kliens.állapot ()); Serial.println ("próbálja újra 5 másodperc múlva"); // Várjon 5 másodpercet a késleltetés újrapróbálása előtt (5000); }}} void setup () {Serial.begin (9600); pinMode (páratartalom, INPUT); dht.begin (); pinMode (0, KIMENET); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (visszahívás); késleltetés (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); nedvesség = digitalRead (kosteuspint); fény = analóg olvasat (A0); temp = dht.readTemperature (); páratartalom = dht.readHumidity (); Serial.println ("Hőmérséklet =" + String (temp, 1) + "\ nPáratartalom =" + String (páratartalom, 1) + "\ nPáratartalom:" + String (nedvesség) + "\ nFény:" + String (light)); String hasznos terhelés = "{" ts / ": {" t / ":"+String (temp, 1)+", \" h / ":"+String (páratartalom, 1)+"}, \" ms / ": {" m / ":"+String (nedvesség)+"}, \" ls / ": {" l / ":"+String (light)+"}}"; Serial.println (hasznos terhelés); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("közzététel rendben"); } else {Serial.println ("közzététel sikertelen"); } késleltetés (2000); } void darude () {tone (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); delay (delayBetweenBars); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_A3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); delay (delayBetweenBars); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); delay (delayBetweenBars); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); } void starwars () {sípolás (NOTE_A4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_F4, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_F4, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_A4, 650); késleltetés (500); hangjelzés (NOTE_E5, 500); hangjelzés (NOTE_E5, 500); hangjelzés (NOTE_E5, 500); hangjelzés (NOTE_F5, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_GS4, 500); hangjelzés (NOTE_F4, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_A4, 650); } void beep (int note, int duration) {// Hangjelzés a buzzerPin hangon (0, jegyzet, időtartam); késleltetés (időtartam); noTone (0); késleltetés (standardDelay); } void heartOfCourage () {} void jacques () {sípolás (NOTE_C4, 500); sípolás (NOTE_D4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_C4, 500); sípolás (NOTE_D4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_E4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_E4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_G4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_G4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_C4, 500); }
3. lépés: IBM Cloud
Be kell állítania egy IBM-felhőpéldányt. Erről az alábbi linken találhat információt: github.
4. lépés: Node-RED
Az általános üzleti logikánk kezelésére és az adatok intuitív felhasználói felületen történő megjelenítésére csomópont-vöröset használunk.
5. lépés: Csomópont-Vörös beállítás: Világos
Importálja a következő kódot a projektbe.
[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disabled": false, "info": ""}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logikaiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Adatok beszerzése az ESP -ből", "service": "regisztrált", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "Wire":
6. lépés: Csomópont-PIROS beállítás: Hőmérséklet
Importálja a következő kódot a projektbe.
[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperature", "disabled": false, "info": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logikaiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Adatok beszerzése az ESP -ből", "service": "regisztrált", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145,5, "y": 49, "Wire":
7. lépés: Csomópont-Vörös beállítás: Páratartalom
Importálja a következő kódot a projektbe.
[{"id": "144cd53b.c00473", "type": "tab", "label": "Nedvesség", "letiltva": hamis, "info": ""}, {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logikaiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Adatok beszerzése az ESP -ből", "service": "regisztrált", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "Wire":
8. lépés: Node-RED Setup: Nedvesség
Importálja a következő kódot a projektbe.
[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Nedvesség", "kikapcsolva": hamis, "info": ""}, {"id": "a6daac3e. 2d5268 "," type ":" ibmiot out "," z ":" 4ee73536.ec6fc4 "," authentication ":" bindService "," apiKey ":" "," outputType ":" cmd "," deviceId ":" ESP "," deviceType ":" ESP8266 "," eventCommandType ":" update "," format ":" json "," data ":" msg "," qos ": 0," name ":" Parancs küldése az ESP -nek "," service ":" regisztrált "," x ": 804.1944580078125," y ": 383.0000305175781," Wire ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "authentication": "bindService", "apiKey": "", "inputType": "evt", "logikaiInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Get data from ESP "," service ":" regisztrált "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": hamis, "qos": 0, "x": 115, "y": 76, "vezetékek":
9. lépés: Kész
Gratulálunk! most már működik egy üzem megfigyelő rendszere.
Ha bármilyen kérdése van, ne habozzon kapcsolatba lépni velünk!