İçindekiler:

PInt@t10n: Akıllı Tesis İzleme Sistemi: 9 Adım
PInt@t10n: Akıllı Tesis İzleme Sistemi: 9 Adım

Video: PInt@t10n: Akıllı Tesis İzleme Sistemi: 9 Adım

Video: PInt@t10n: Akıllı Tesis İzleme Sistemi: 9 Adım
Video: APPLE'IN EN İYİ AKILLI SAATİNİ ALDIM 2024, Kasım
Anonim
PInt@t10n: Akıllı Tesis İzleme Sistemi
PInt@t10n: Akıllı Tesis İzleme Sistemi

Bu proje, ibm iot bulutu için bir test olarak oluşturulmuştur. IBM bulutuna veri gönderip almak için bir esp-8266 kullanıyoruz. esp ve ibm bulutu arasındaki iletişim MQTT aracılığıyla gerçekleşir.

Tüm verileri işlemek ve kullanıcıya bir kullanıcı arayüzü sunmak için node-red kullanıyoruz. Çok başlangıç dostudur.

Başlamak için ihtiyacınız olan:

  • Esp-8266
  • dht 11/22 sıcaklık/nem sensörü
  • ışığa duyarlı diyot (ışık ölçümü)
  • zil
  • zemin nem sensörü
  • ibm bulut hesabı

1. Adım: Sensörlerinizi Bağlayın

Sensörlerinizi Bağlayın
Sensörlerinizi Bağlayın
Sensörlerinizi Bağlayın
Sensörlerinizi Bağlayın
Sensörlerinizi Bağlayın
Sensörlerinizi Bağlayın

Daha önce de belirttiğimiz gibi esp8266'yı sensör verilerini okumak ve göndermek için kullanacağız. Bu eğitim için sensörlerinizi mikro denetleyicinize nasıl bağlayacağınızı bildiğinizi varsayacağız. Ayrıca bir esp8266'ya nasıl kod yükleyeceğinizi de bilmeniz gerekiyor.

esp modelimizin sadece bir analog portu var, bu yüzden ışık sensörümüzden analog bilgi almayı seçtik çünkü böylece bitkinin ne kadar ışık aldığını takip edebiliyoruz.

Diğer tüm sensörler dijital olarak bağlanır. DHT11 sensörümüz verileri dijital olarak gönderir ve sensör verilerini yorumlamak için dht kütüphanesini kullanırız.

Yukarıda kullandığımız sensörlerin devre şemasını bulabilirsiniz. Ancak, kullandığımız sensörlerin sıklıkla bir modülle birlikte geldiğini lütfen unutmayın; böylece, şemaya dahil ettiğimiz tüm ekstra dirençler olmadan mikro denetleyicinize kolayca bağlayabilirsiniz.

2. Adım: Kodlayın

Bu kullandığımız arduino çizimi. Yorumları okursanız kodun nasıl çalıştığını öğrenebilirsiniz.

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

#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define nemPin 4 #define DHTType DHT11 DHT dht(DHTPin, DHTType); ESP8266WiFiÇoklu WiFiÇoklu; kayan sıcaklık = 0; yüzer nem = 0; boole nemi = yanlış; int ışık = 0; const char* ssid = STASSID; const char* şifre = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient istemcisi(espClient); uzun sonMsg = 0; karakter mesajı[50]; int değeri = 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 #TOPUQTT_TO" iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitches.h" // melodideki notlar: // not süreleri: 4 = çeyrek nota, 8 = sekizinci nota, vb.: int shortTone = 80; int longTone = 200; int standartGecikme = 50; int delayBetweenBars = 50; geçersiz setup_wifi() { gecikme(10); // Bir WiFi ağına bağlanarak başlıyoruz Serial.println(); Serial.print("Bağlanıyor"); Serial.println(ssid); WiFi.begin(ssid, şifre); while (WiFi.status() != WL_CONNECTED) { gecikme(500); Seri.print("."); } Serial.println(""); Serial.println("WiFi bağlandı"); Serial.println("IP adresi: "); Serial.println(WiFi.localIP()); } void callback(char* konu, byte* payload, unsigned int uzunluk) { Serial.print("Mesaj geldi ["); Seri.print(konu); Seri.print("] "); for (int i = 0; i < uzunluk; i++) { Serial.print((char)payload); } Seri.println(); StaticJsonDocument jsonBuffer; deserializeJson(jsonBuffer, yük); JsonObject kökü = jsonBuffer.as(); if(root["şarkı"]=="darude"{ darude(); } if(root["şarkı"]=="yıldız savaşları"{ starwars(); } if(root["şarkı"]=="jacques"){ Serial.println("jakakakakakkakaka"); jaklar(); } } void reconnect() { // Yeniden bağlanana kadar döngü yapın while (!client.connected()) { Serial.print("MQTT bağlantısı deneniyor…"); // Bağlanmaya çalış if (client.connect(MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) { Serial.println("connected"); client.subscribe(MQTT_TOPIC_DISPLAY); } else { Serial.print("başarısız, rc="); Serial.print(client.state()); Serial.println("5 saniye sonra tekrar deneyiniz"); // gecikmeyi tekrar denemeden önce 5 saniye bekleyin (5000); } } } geçersiz kurulum() { Serial.begin(9600); pinMode(moisturePin, INPUT); dht.begin(); pinMode(0, ÇIKIŞ); setup_wifi(); client.setServer(mqtt_server, MQTT_PORT); client.setCallback(geri arama); gecikme(20); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); nem = digitalRead(moisturePin); ışık = analogRead(A0); sıcaklık = dht.readTemperature(); nem= dht.readHumidity(); Serial.println("Sıcaklık =" + Dize(sıcaklık, 1) + "\nNem =" + Dize(nem, 1) + "\nNem: "+Dize(nem)+"\nIşık: "+Dize(ışık)); String yükü = "{"ts\":{"t\": "+String(temp, 1)+", \"h\": "+String(nem, 1)+"}, \"ms \":{"m\": "+String(nem)+"}, \"ls\":{"l\":"+String(light)+"}}"; Serial.println(yük); if (client.publish(MQTT_TOPIC, (char*) payload.c_str())){ Serial.println("yayın tamam"); }else { Serial.println("yayınlanamadı"); } gecikme(2000); } void darude(){ tone(0, NOTE_B3, shortTone); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, longTone); gecikme (longTone); tonsuz(0); gecikme(delayBetweenBars); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_E4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_E4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_E4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_E4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_E4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_E4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_E4, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_D4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_D4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_D4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_D4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_D4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_D4, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_D4, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_A3, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, longTone); gecikme (longTone); tonsuz(0); gecikme(delayBetweenBars); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_E4, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, longTone); gecikme (longTone); tonsuz(0); gecikme(delayBetweenBars); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, kısaTon); gecikme (shortTone); tonsuz(0); gecikme (standartGecikme); ton(0, NOTE_B3, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); tone(0, NOTE_E4, longTone); gecikme (longTone); tonsuz(0); gecikme (standartGecikme); } void starwars() { bip(NOTE_A4, 500); bip(NOTE_A4, 500); bip(NOTE_A4, 500); bip(NOTE_F4, 350); bip(NOTE_C5, 150); bip(NOTE_A4, 500); bip(NOTE_F4, 350); bip(NOTE_C5, 150); bip(NOTE_A4, 650); gecikme(500); bip(NOTE_E5, 500); bip(NOTE_E5, 500); bip(NOTE_E5, 500); bip(NOTE_F5, 350); bip(NOTE_C5, 150); bip(NOTE_GS4, 500); bip(NOTE_F4, 350); bip(NOTE_C5, 150); bip(NOTE_A4, 650); } void bip(int not, int süre) { //Buzzer'da ton çalPin tonu (0, not, süre); gecikme(süre); tonsuz(0); gecikme (standartGecikme); } void heartOfCourage(){ } void jacques(){ bip(NOTE_C4, 500); bip(NOTE_D4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_C4, 500); bip(NOTE_D4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_E4, 500); bip(NOTE_F4, 500); bip(NOTE_G4, 500); bip(NOTE_E4, 500); bip(NOTE_F4, 500); bip(NOTE_G4, 500); bip(NOTE_G4, 500); bip(NOTE_A4, 500); bip(NOTE_G4, 500); bip(NOTE_F4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_G4, 500); bip(NOTE_A4, 500); bip(NOTE_G4, 500); bip(NOTE_F4, 500); bip(NOTE_E4, 500); bip(NOTE_C4, 500); bip(NOTE_C4, 500); bip(NOTE_G4, 500); bip(NOTE_C4, 500); bip(NOTE_C4, 500); bip(NOTE_G4, 500); bip(NOTE_C4, 500); }

3. Adım: IBM Bulut

IBM Bulut
IBM Bulut

Bir IBM bulut eşgörünümü kurmanız gerekir. Bununla ilgili bilgilere şu bağlantıdan ulaşabilirsiniz: github.

4. Adım: Düğüm-KIRMIZI

Genel iş mantığımızı işlemek ve bu verileri sezgisel bir kullanıcı arayüzünde görselleştirmek için node-red kullanıyoruz.

Adım 5: Düğüm-KIRMIZI Kurulum: Işık

Düğüm-KIRMIZI Kurulum: Hafif
Düğüm-KIRMIZI Kurulum: Hafif

Aşağıdaki kodu projenize aktarın.

[{"id":"deb0d57.1c46528", "type":"sekme", "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":"ESP'den veri al", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":

Adım 6: Düğüm-KIRMIZI Kurulum: Sıcaklık

Düğüm-KIRMIZI Kurulum: Sıcaklık
Düğüm-KIRMIZI Kurulum: Sıcaklık

Aşağıdaki kodu projenize aktarın.

[{"id":"fbad3799.f0e0e", "type":"sekme", "label":"Sıcaklık", "devre dışı":yanlış, "bilgi":""}, {"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":"ESP'den veri al", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":

Adım 7: Node-RED Kurulumu: Nem

Düğüm-KIRMIZI Kurulum: Nem
Düğüm-KIRMIZI Kurulum: Nem

Aşağıdaki kodu projenize aktarın.

[{"id":"144cd53b.c00473", "type":"sekme", "label":"Nem", "devre dışı":yanlış, "bilgi":""}, {"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":"ESP'den veri al", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":

Adım 8: Node-RED Kurulumu: Nem

Düğüm-KIRMIZI Kurulum: Nem
Düğüm-KIRMIZI Kurulum: Nem

Aşağıdaki kodu projenize aktarın.

[{"id":"4ee73536.ec6fc4", "type":"sekme", "label":"Nem", "devre dışı":yanlış, "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'ye komut gönder ", "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":"Veri al ESP'den", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "wires":

Adım 9: İşiniz Bitti

Tebrikler! artık çalışan bir bitki gözlem sisteminiz var.

Herhangi bir sorunuz varsa, bizimle iletişime geçmekten çekinmeyin!