Sisällysluettelo:
- Vaihe 1: Yhdistä anturit
- Vaihe 2: Koodi
- Vaihe 3: IBM Cloud
- Vaihe 4: Solmu-PUNAINEN
- Vaihe 5: Solmu-PUNAINEN Asetus: Valo
- Vaihe 6: Solmu-PUNAINEN Asetus: Lämpötila
- Vaihe 7: Solmu-PUNAINEN Asetus: Kosteus
- Vaihe 8: Solmu-PUNAINEN Asetus: Kosteus
- Vaihe 9: Olet valmis
Video: PInt@t10n: Älykäs kasvien valvontajärjestelmä: 9 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Tämä projekti luotiin ibm iot -pilven testiksi. Käytämme esp-8266: aa tietojen lähettämiseen ja vastaanottamiseen ibm-pilveen. Viestintä esp: n ja ibm -pilven välillä tapahtuu MQTT: n kautta.
Käsittelemme kaikkia tietoja ja esittelemme käyttäjälle käyttöliittymän solmupunaisella. Se on erittäin aloittelijaystävällinen.
Aloittaaksesi tarvitset:
- Esp-8266
- dht 11/22 lämpötila/kosteusanturi
- valoherkkä diodi (valon mittaus)
- summeri
- maan kosteusanturi
- ibm -pilvitili
Vaihe 1: Yhdistä anturit
Kuten aiemmin mainitsimme, aiomme käyttää esp8266: ta anturitietojen lukemiseen ja lähettämiseen. Tässä opetusohjelmassa oletamme, että tiedät kuinka liittää anturit mikro -ohjaimeen. Sinun on myös tiedettävä, miten voit lähettää koodin esp8266 -laitteeseen.
Esp -mallissamme on vain yksi analoginen portti, joten päätimme vastaanottaa analogisia tietoja valoanturiltamme, koska silloin voimme seurata kuinka paljon valoa kasvi saa.
Kaikki muut anturit on kytketty digitaalisesti. DHT11 -anturimme lähettää dataa digitaalisesti, ja käytämme dht -kirjastoa antureiden tietojen tulkitsemiseen.
Yllä on kytkentäkaavio käyttämillemme antureille. Muista kuitenkin, että käyttämiemme antureiden mukana tulee usein moduuli, joten voit helposti liittää sen mikro -ohjaimeesi ilman kaikkia kaaviossa olevia lisävastuksia.
Vaihe 2: Koodi
Tämä on käyttämämme arduino -luonnos. Voit oppia koodin toiminnasta lukemalla kommentit.
#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 kosteusPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; kellukkeen lämpötila = 0; kellukkeen kosteus = 0; boolen kosteus = epätosi; int valo = 0; const char* ssid = STASSID; const char* salasana = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient -asiakas (espClient); pitkä lastMsg = 0; char msg [50]; int -arvo = 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 MQ iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// nuotit melodiassa: // nuotin kesto: 4 = neljännes huomautus, 8 = kahdeksas nuotti jne.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Aloitamme yhdistämällä WiFi -verkkoon Serial.println (); Serial.print ("Yhdistäminen"); Sarja.println (ssid); WiFi.begin (ssid, salasana); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } Sarja.println (""); Serial.println ("WiFi -yhteys"); Serial.println ("IP -osoite:"); Serial.println (WiFi.localIP ()); } mitätön takaisinsoitto (char* aihe, tavu* hyötykuorma, allekirjoittamaton int pituus) {Serial.print ("Viesti saapui ["); Serial.print (aihe); Serial.print ("]"); for (int i = 0; i <pituus; i ++) {Serial.print ((char) hyötykuorma ); } Sarja.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonPuskuri, hyötykuorma); JsonObject root = jsonBuffer.as (); if (root ["song"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakakakaka"); jakkit (); }} void reconnect () {// Silmukka kunnes yhdistymme uudelleen, kun (! client.connected ()) {Serial.print ("Yritetään MQTT -yhteyttä…"); // Yritetään muodostaa yhteys, jos (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("connected"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("epäonnistui, rc ="); Serial.print (client.state ()); Serial.println ("yritä uudelleen 5 sekunnin kuluttua"); // Odota 5 sekuntia ennen viiveen uudelleen yrittämistä (5000); }}} void setup () {Serial.begin (9600); pinMode (kosteuspiste, INPUT); dht.begin (); pinMode (0, LÄHTÖ); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (takaisinsoitto); viive (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); kosteus = digitalRead (kosteusPin); valo = analoginen luku (A0); lämpötila = dht.readTemperature (); kosteus = dht.readHumidity (); Serial.println ("Lämpötila =" + merkkijono (lämpötila, 1) + "\ nKosteus =" + merkkijono (kosteus, 1) + "\ nKosteus:" + merkkijono (kosteus) + "\ nValo:" + merkkijono (valo))); Merkkijonon hyötykuorma = "{" ts / ": {" t / ":"+Jono (lämpötila, 1)+", \" h / ":"+Jono (kosteus, 1)+"}, \" ms / ": {" m / ":"+Jono (kosteus)+"}, \" ls / ": {" l / ":"+Jono (kevyt)+"}}"; Serial.println (hyötykuorma); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("julkaisu ok"); } else {Serial.println ("julkaisu epäonnistui"); } viive (2000); } void darude () {tone (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, pitkä ääni); viive (longTone); noTone (0); delay (delayBetweenBars); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_D4, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_A3, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, pitkä ääni); viive (longTone); noTone (0); delay (delayBetweenBars); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, pitkä ääni); viive (longTone); noTone (0); delay (delayBetweenBars); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, shortTone); viive (shortTone); noTone (0); viive (vakio viive); ääni (0, NOTE_B3, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); ääni (0, NOTE_E4, pitkä ääni); viive (longTone); noTone (0); viive (vakio viive); } mitätön starwars () {piippaus (NOTE_A4, 500); piippaus (NOTE_A4, 500); piippaus (NOTE_A4, 500); piippaus (NOTE_F4, 350); piippaus (NOTE_C5, 150); piippaus (NOTE_A4, 500); piippaus (NOTE_F4, 350); piippaus (NOTE_C5, 150); piippaus (NOTE_A4, 650); viive (500); piippaus (NOTE_E5, 500); piippaus (NOTE_E5, 500); piippaus (NOTE_E5, 500); piippaus (NOTE_F5, 350); piippaus (NOTE_C5, 150); piippaus (NOTE_GS4, 500); piippaus (NOTE_F4, 350); piippaus (NOTE_C5, 150); piippaus (NOTE_A4, 650); } mitätön piippaus (int nuotti, int kesto) {// Soittoääni summerillaPin -ääni (0, nuotti, kesto); viive (kesto); noTone (0); viive (vakio viive); } void heartOfCourage () {} void jacques () {piippaus (NOTE_C4, 500); piippaus (NOTE_D4, 500); piippaus (NOTE_E4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_D4, 500); piippaus (NOTE_E4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_E4, 500); piippaus (NOTE_F4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_E4, 500); piippaus (NOTE_F4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_A4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_F4, 500); piippaus (NOTE_E4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_A4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_F4, 500); piippaus (NOTE_E4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_C4, 500); piippaus (NOTE_G4, 500); piippaus (NOTE_C4, 500); }
Vaihe 3: IBM Cloud
Sinun on määritettävä IBM-pilvi-ilmentymä. Löydät tietoa tästä linkistä: github.
Vaihe 4: Solmu-PUNAINEN
Käytämme solmupunaista yleisen liiketoimintalogiikkamme käsittelyyn ja visualisoimme nämä tiedot intuitiivisessa käyttöliittymässä.
Vaihe 5: Solmu-PUNAINEN Asetus: Valo
Tuo seuraava koodi projektiin.
[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disabled": false, "info": ""}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Hae tietoja ESP: ltä", "service": "rekisteröity", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "johdot":
Vaihe 6: Solmu-PUNAINEN Asetus: Lämpötila
Tuo seuraava koodi projektiin.
[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperature", "disabled": false, "info": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Hae tietoja ESP: ltä", "service": "rekisteröity", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145,5, "y": 49, "johdot":
Vaihe 7: Solmu-PUNAINEN Asetus: Kosteus
Tuo seuraava koodi projektiin.
[{"id": "144cd53b.c00473", "type": "tab", "label": "Kosteus", "pois käytöstä": false, "info": "", {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Hae tietoja ESP: ltä", "service": "rekisteröity", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "johdot":
Vaihe 8: Solmu-PUNAINEN Asetus: Kosteus
Tuo seuraava koodi projektiin.
[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Kosteus", "pois käytöstä": false, "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 ":" Lähetä komento ESP: lle " "," service ":" rekisteröity "," x ": 804.1944580078125," y ": 383.0000305175781," johdot ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", z: "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Hae tiedot from ESP "," service ":" rekisteröity "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "johdot":
Vaihe 9: Olet valmis
Onnittelut! sinulla on nyt toimiva kasvien havaintojärjestelmä.
Jos sinulla on kysyttävää, älä epäröi ottaa meihin yhteyttä!