Съдържание:

PInt@t10n: Интелигентна система за мониторинг на растенията: 9 стъпки
PInt@t10n: Интелигентна система за мониторинг на растенията: 9 стъпки

Видео: PInt@t10n: Интелигентна система за мониторинг на растенията: 9 стъпки

Видео: PInt@t10n: Интелигентна система за мониторинг на растенията: 9 стъпки
Видео: Modkam - Zigbee датчик влажности почвы для растений 2024, Юли
Anonim
PInt@t10n: Интелигентна система за мониторинг на растенията
PInt@t10n: Интелигентна система за мониторинг на растенията

Този проект е създаден като тест за ibm iot облака. Използваме esp-8266 за изпращане и получаване на данни до и от облака ibm. Комуникацията между esp и ibm облака се осъществява чрез MQTT.

За да обработваме всички данни и да представим на потребителя потребителски интерфейс, използваме node-red. Той е много приятен за начинаещи.

За да започнете, трябва:

  • Esp-8266
  • dht 11/22 сензор за температура/влага
  • фоточувствителен диод (измерване на светлината)
  • зумер
  • сензор за влага в почвата
  • ibm облачен акаунт

Стъпка 1: Свържете сензорите си

Свържете вашите сензори
Свържете вашите сензори
Свържете сензорите си
Свържете сензорите си
Свържете вашите сензори
Свържете вашите сензори

Както споменахме преди, ще използваме esp8266 за четене и изпращане на сензорни данни. За този урок ще приемем, че знаете как да свържете вашите сензори към вашия микроконтролер. Също така вече трябва да знаете как да качите код на esp8266.

Нашият модел esp има само един аналогов порт, затова избрахме да получаваме аналогова информация от нашия сензор за светлина, защото тогава можем да следим колко светлина получава растението.

Всички други сензори са свързани цифрово. Нашият сензор DHT11 изпраща данни цифрово и ние използваме dht библиотеката за интерпретиране на данните от сензорите.

По -горе можете да намерите електрическа схема на използваните от нас сензори. Но имайте предвид, че сензорите, които използвахме, често идват с модул, така че можете лесно да го свържете към вашия микроконтролер без всички допълнителни резистори, които включихме в диаграмата.

Стъпка 2: Код

Това е скицата на arduino, която използвахме. Можете да научите как работи кодът, ако прочетете коментарите.

#include ArduinoJson.h #include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h

#дефинирайте STASSID "ucll-projectweek-IoT" #дефинирайте STAPSK "Foo4aiHa" #дефинирайте DHTPin 5 #дефинирайте влажностPin 4 #дефинирайте DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; плаваща температура = 0; влажност на поплавъка = 0; булева влага = невярно; int светлина = 0; const char* ssid = STASSID; const char* парола = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient клиент (espClient); long lastMsg = 0; char msg [50]; int стойност = 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-autQQTTKTFKTNKTKEQ # iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// бележки в мелодията: // продължителност на бележката: 4 = четвърт бележка, 8 = осма нота и т.н.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {забавяне (10); // Започваме със свързване към WiFi мрежа Serial.println (); Serial.print ("Свързване към"); Serial.println (ssid); WiFi.begin (ssid, парола); while (WiFi.status ()! = WL_CONNECTED) {забавяне (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi свързан"); Serial.println ("IP адрес:"); Serial.println (WiFi.localIP ()); } невалидно обратно повикване (char* тема, байт* полезен товар, беззнакова дължина int) {Serial.print ("Съобщението пристигна ["); Serial.print (тема); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) полезен товар ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, полезен товар); JsonObject корен = jsonBuffer.as (); if (root ["song"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); жак (); }} void reconnect () {// Цикъл, докато не се свържем отново докато (! client.connected ()) {Serial.print ("Опит за MQTT връзка …"); // Опит за свързване if (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("свързан"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("неуспешно, rc ="); Serial.print (client.state ()); Serial.println ("опитайте отново след 5 секунди"); // Изчакайте 5 секунди, преди да опитате отново забавяне (5000); }}} void setup () {Serial.begin (9600); pinMode (moisPin, INPUT); dht.begin (); pinMode (0, OUTPUT); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (обратно повикване); забавяне (20); } void loop () {if (! client.connected ()) {повторно свързване (); } client.loop (); влага = digitalRead (влажностПин); светлина = analogRead (A0); temp = dht.readTemperature (); влажност = dht.readHumidity (); Serial.println ("Температура =" + Низ (температура, 1) + "\ nВлажност =" + Низ (влажност, 1) + "\ nВлажност:" + Низ (влага) + "\ nСветлина:" + Низ (светлина)); Низ полезен товар = "{" ts / ": {" t / ":"+Низ (temp, 1)+", \" h / ":"+Низ (влажност, 1)+"}, \" ms / ": {" m / ":"+низ (влага)+"}, \" ls / ": {" l / ":"+низ (светлина)+"}}"; Serial.println (полезен товар); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("публикува OK"); } else {Serial.println ("публикуването не бе успешно"); } забавяне (2000); } void darude () {тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, longTone); забавяне (longTone); noTone (0); забавяне (delayBetweenBars); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_D4, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_A3, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, longTone); забавяне (longTone); noTone (0); забавяне (delayBetweenBars); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, longTone); забавяне (longTone); noTone (0); забавяне (delayBetweenBars); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, shortTone); забавяне (shortTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_B3, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); тон (0, NOTE_E4, longTone); забавяне (longTone); noTone (0); забавяне (standardDelay); } невалидни звездни войни () {звуков сигнал (ЗАБЕЛЕЖКА_A4, 500); звуков сигнал (ЗАБЕЛЕЖКА_A4, 500); звуков сигнал (ЗАБЕЛЕЖКА_A4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 350); звуков сигнал (ЗАБЕЛЕЖКА_C5, 150); звуков сигнал (ЗАБЕЛЕЖКА_A4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 350); звуков сигнал (ЗАБЕЛЕЖКА_C5, 150); звуков сигнал (ЗАБЕЛЕЖКА_A4, 650); забавяне (500); звуков сигнал (ЗАБЕЛЕЖКА_E5, 500); звуков сигнал (ЗАБЕЛЕЖКА_E5, 500); звуков сигнал (ЗАБЕЛЕЖКА_E5, 500); звуков сигнал (ЗАБЕЛЕЖКА_F5, 350); звуков сигнал (ЗАБЕЛЕЖКА_C5, 150); звуков сигнал (ЗАБЕЛЕЖКА_GS4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 350); звуков сигнал (ЗАБЕЛЕЖКА_C5, 150); звуков сигнал (ЗАБЕЛЕЖКА_A4, 650); } void beep (int note, int duration) {// Пускане на тон на зумераPin тон (0, бележка, продължителност); забавяне (продължителност); noTone (0); забавяне (standardDelay); } void heartOfCourage () {} void jacques () {beep (NOTE_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_D4, 500); звуков сигнал (ЗАБЕЛЕЖКА_E4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_D4, 500); звуков сигнал (ЗАБЕЛЕЖКА_E4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_E4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_E4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_A4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 500); звуков сигнал (ЗАБЕЛЕЖКА_E4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_A4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_F4, 500); звуков сигнал (ЗАБЕЛЕЖКА_E4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); звуков сигнал (ЗАБЕЛЕЖКА_G4, 500); звуков сигнал (ЗАБЕЛЕЖКА_C4, 500); }

Стъпка 3: Ibm Cloud

Ibm облак
Ibm облак

Трябва да настроите екземпляр от IBM-облак. Можете да намерите информация за това чрез тази връзка: github.

Стъпка 4: Node-RED

Ние използваме node-red за обработка на нашата обща бизнес логика и за визуализиране на тези данни в интуитивен потребителски интерфейс.

Стъпка 5: Node-RED Setup: Light

Node-RED Настройка: Светла
Node-RED Настройка: Светла

Импортирайте следния код във вашия проект.

[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disabled": false, "info": ""}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Получаване на данни от ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "wires":

Стъпка 6: Node-RED Настройка: Температура

Node-RED Настройка: Температура
Node-RED Настройка: Температура

Импортирайте следния код във вашия проект.

[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperature", "disabled": false, "info": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Получаване на данни от ESP", "service": "регистриран", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145.5, "y": 49, "wires":

Стъпка 7: Node-RED Настройка: Влажност

Node-RED Настройка: Влажност
Node-RED Настройка: Влажност

Импортирайте следния код във вашия проект.

[{"id": "144cd53b.c00473", "type": "tab", "label": "Влажност", "деактивирано": false, "info": ""}, {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Получаване на данни от ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "wires":

Стъпка 8: Node-RED Настройка: Влага

Node-RED Настройка: Влага
Node-RED Настройка: Влага

Импортирайте следния код във вашия проект.

[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Влага", "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 ":" Изпратете команда до ESP "," service ":" registered "," x ": 804.1944580078125," y ": 383.0000305175781," wires ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "удостоверяване": "boundService", "apiKey": "", "inputType": "evt", "logicInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Получаване на данни от ESP "," service ":" registered "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "проводници":

Стъпка 9: Готови сте

Честито! вече имате работеща система за наблюдение на растенията.

Ако имате някакви въпроси, не се колебайте да се свържете с нас!