Mục lục:
- Bước 1: Kết nối cảm biến của bạn
- Bước 2: Mã
- Bước 3: Ibm Cloud
- Bước 4: Nút-ĐỎ
- Bước 5: Thiết lập Node-RED: Ánh sáng
- Bước 6: Thiết lập Node-RED: Nhiệt độ
- Bước 7: Thiết lập Node-RED: Độ ẩm
- Bước 8: Thiết lập Node-RED: Độ ẩm
- Bước 9: Bạn đã hoàn tất
Video: PInt @ t10n: Hệ thống giám sát nhà máy thông minh: 9 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
PI @ nt @ t10n
Dự án này được tạo ra như một thử nghiệm cho đám mây iot ibm. Chúng tôi sử dụng esp-8266 để gửi và nhận dữ liệu đến và đi từ đám mây ibm. Giao tiếp giữa esp và ibm cloud diễn ra thông qua MQTT.
Để xử lý tất cả dữ liệu và hiển thị cho người dùng một giao diện người dùng, chúng tôi sử dụng nút đỏ. Nó rất thân thiện với người mới bắt đầu.
Để bắt đầu, bạn cần:
- Esp-8266
- dht 11/22 cảm biến nhiệt độ / độ ẩm
- điốt cảm quang (đo ánh sáng)
- buzzer
- cảm biến độ ẩm mặt đất
- tài khoản đám mây ibm
Bước 1: Kết nối cảm biến của bạn
Như chúng tôi đã đề cập trước đây, chúng tôi sẽ sử dụng esp8266 để đọc và gửi dữ liệu cảm biến. Đối với hướng dẫn này, chúng tôi sẽ giả định rằng bạn biết cách kết nối các cảm biến với bộ điều khiển vi mô của bạn. Bạn cũng cần biết cách tải mã lên esp8266.
Mô hình esp của chúng tôi chỉ có một cổng analog nên chúng tôi đã chọn nhận thông tin analog từ cảm biến ánh sáng vì sau đó chúng tôi có thể theo dõi lượng ánh sáng mà cây nhận được.
Tất cả các cảm biến khác được kết nối kỹ thuật số. Cảm biến DHT11 của chúng tôi gửi dữ liệu kỹ thuật số và chúng tôi sử dụng thư viện dht để diễn giải dữ liệu cảm biến.
Ở trên, bạn có thể tìm thấy sơ đồ mạch cho các cảm biến mà chúng tôi đã sử dụng. Nhưng xin lưu ý rằng các cảm biến chúng tôi sử dụng thường đi kèm với một mô-đun để bạn có thể dễ dàng kết nối nó với bộ điều khiển vi mô của mình mà không cần tất cả các điện trở phụ mà chúng tôi đưa vào sơ đồ.
Bước 2: Mã
Đây là bản phác thảo arduino mà chúng tôi đã sử dụng. Bạn có thể tìm hiểu về cách mã hoạt động nếu bạn đọc các bình luận.
#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 MoistPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; float temp = 0; độ ẩm phao = 0; boolean ẩm = false; int light = 0; const char * ssid = STASSID; const char * mật khẩu = STAPSK; const char * mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; Ứng dụng khách PubSubClient (espClient); long lastMsg = 0; char msg [50]; giá trị 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-auth" #TOllKine MENfine "use-token-auth" #define iot-2 / evt / status / fmt / json "#define MQTT_TOPIC_DISPLAY" iot-2 / cmd / update / fmt / json "#include" pitchhes.h "// các nốt trong giai điệu: // note durations: 4 = 1/4 lưu ý, 8 = nốt thứ tám, v.v.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Chúng tôi bắt đầu bằng cách kết nối với mạng WiFi Serial.println (); Serial.print ("Đang kết nối với"); Serial.println (ssid); WiFi.begin (ssid, mật khẩu); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Serial.print ("."); } Serial.println (""); Serial.println ("Đã kết nối WiFi"); Serial.println ("Địa chỉ IP:"); Serial.println (WiFi.localIP ()); } void callback (char * topic, byte * payload, unsigned int length) {Serial.print ("Tin nhắn đến ["); Serial.print (chủ đề); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) payload ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, trọng tải); JsonObject root = jsonBuffer.as (); if (root ["song"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} void renect () {// Lặp lại cho đến khi chúng ta được kết nối lại while (! client.connected ()) {Serial.print ("Đang thử kết nối MQTT…"); // Cố gắng kết nối if (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("đã kết nối"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("fail, rc ="); Serial.print (client.state ()); Serial.println ("thử lại sau 5 giây"); // Chờ 5 giây trước khi thử lại delay (5000); }}} void setup () {Serial.begin (9600); pinMode (MoistPin, INPUT); dht.begin (); pinMode (0, OUTPUT); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (gọi lại); chậm trễ (20); } void loop () {if (! client.connected ()) {renect (); } client.loop (); độ ẩm = digitalRead (MoistPin); light = analogRead (A0); temp = dht.readTempe Heat (); độ ẩm = dht.readHumidity (); Serial.println ("Nhiệt độ =" + Chuỗi (nhiệt độ, 1) + "\ n Độ ẩm =" + Chuỗi (độ ẩm, 1) + "\ n Độ ẩm:" + Chuỗi (độ ẩm) + "\ nĐèn:" + Chuỗi (ánh sáng)); Chuỗi payload = "{" ts / ": {" t / ":" + Chuỗi (tạm thời, 1) + ", \" h / ":" + Chuỗi (độ ẩm, 1) + "}, \" mili giây / ": {" m / ":" + String (độ ẩm) + "}, \" ls / ": {" l / ":" + String (light) + "}}"; Serial.println (tải trọng); if (client.publish (MQTT_TOPIC, (char *) payload.c_str ())) {Serial.println ("xuất bản ok"); } else {Serial.println ("xuất bản không thành công"); } trì hoãn (2000); } void darude () {tone (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); âm báo (0, NOTE_B3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (delayBetweenBars); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); âm báo (0, NOTE_B3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_E4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_E4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_E4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_E4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_E4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_E4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); tone (0, NOTE_E4, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_D4, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); tone (0, NOTE_A3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); âm báo (0, NOTE_B3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (delayBetweenBars); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); âm báo (0, NOTE_B3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); tone (0, NOTE_E4, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); âm báo (0, NOTE_B3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (delayBetweenBars); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); giai điệu (0, NOTE_B3, shortTone); sự chậm trễ (shortTone); noTone (0); trì hoãn (standardDelay); âm báo (0, NOTE_B3, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); tone (0, NOTE_E4, longTone); trì hoãn (longTone); noTone (0); trì hoãn (standardDelay); } void starwars () {beep (NOTE_A4, 500); bíp (NOTE_A4, 500); bíp (NOTE_A4, 500); tiếng bíp (NOTE_F4, 350); bíp (NOTE_C5, 150); bíp (NOTE_A4, 500); tiếng bíp (NOTE_F4, 350); bíp (NOTE_C5, 150); tiếng bíp (NOTE_A4, 650); chậm trễ (500); bíp (NOTE_E5, 500); bíp (NOTE_E5, 500); bíp (NOTE_E5, 500); bíp (NOTE_F5, 350); bíp (NOTE_C5, 150); tiếng bíp (NOTE_GS4, 500); tiếng bíp (NOTE_F4, 350); bíp (NOTE_C5, 150); tiếng bíp (NOTE_A4, 650); } void beep (int note, int time) {// Phát âm báo trên âm báo buzzerPin (0, note, thời lượng); trì hoãn (thời lượng); noTone (0); trì hoãn (standardDelay); } void heartOfCourage () {} void jacques () {beep (NOTE_C4, 500); tiếng bíp (NOTE_D4, 500); bíp (NOTE_E4, 500); bíp (NOTE_C4, 500); bíp (NOTE_C4, 500); tiếng bíp (NOTE_D4, 500); bíp (NOTE_E4, 500); bíp (NOTE_C4, 500); tiếng bíp (NOTE_E4, 500); bíp (NOTE_F4, 500); bíp (NOTE_G4, 500); bíp (NOTE_E4, 500); bíp (NOTE_F4, 500); bíp (NOTE_G4, 500); bíp (NOTE_G4, 500); bíp (NOTE_A4, 500); bíp (NOTE_G4, 500); bíp (NOTE_F4, 500); tiếng bíp (NOTE_E4, 500); bíp (NOTE_C4, 500); bíp (NOTE_G4, 500); bíp (NOTE_A4, 500); bíp (NOTE_G4, 500); bíp (NOTE_F4, 500); bíp (NOTE_E4, 500); bíp (NOTE_C4, 500); bíp (NOTE_C4, 500); bíp (NOTE_G4, 500); bíp (NOTE_C4, 500); bíp (NOTE_C4, 500); bíp (NOTE_G4, 500); bíp (NOTE_C4, 500); }
Bước 3: Ibm Cloud
Bạn cần thiết lập phiên bản IBM-cloud. Bạn có thể tìm thông tin về điều này qua liên kết này: github.
Bước 4: Nút-ĐỎ
Chúng tôi sử dụng nút đỏ để xử lý logic kinh doanh chung của mình và để trực quan hóa dữ liệu này trong giao diện người dùng trực quan.
Bước 5: Thiết lập Node-RED: Ánh sáng
Nhập mã sau vào dự án của bạn.
[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disable": false, "info": ""}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," xác thực ":" bindService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":" + "," commandType ":" "," format ": "json", "name": "Lấy dữ liệu từ ESP", "dịch vụ": "đã đăng ký", "allDevices": false, "allApplication": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "wire":
Bước 6: Thiết lập Node-RED: Nhiệt độ
Nhập mã sau vào dự án của bạn.
[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Nhiệt độ", "vô hiệu hóa": false, "thông tin": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," verify ":" bindService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":" + "," commandType ":" "," format ": "json", "name": "Lấy dữ liệu từ ESP", "dịch vụ": "đã đăng ký", "allDevices": false, "allApplication": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145.5, "y": 49, "wire":
Bước 7: Thiết lập Node-RED: Độ ẩm
Nhập mã sau vào dự án của bạn.
[{"id": "144cd53b.c00473", "type": "tab", "label": "Độ ẩm", "vô hiệu hóa": false, "thông tin": ""}, {"id": "d958f58b. 2678e "," loại ":" ibmiot in "," z ":" 144cd53b.c00473 "," xác thực ":" bindService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":" + "," commandType ":" "," format ": "json", "name": "Lấy dữ liệu từ ESP", "dịch vụ": "đã đăng ký", "allDevices": false, "allApplication": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "wire":
Bước 8: Thiết lập Node-RED: Độ ẩm
Nhập mã sau vào dự án của bạn.
[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Độ ẩm", "bị vô hiệu hóa": false, "thông tin": ""}, {"id": "a6daac3e. 2d5268 "," loại ":" ibmiot out "," z ":" 4ee73536.ec6fc4 "," xác thực ":" bindService "," apiKey ":" "," outputType ":" cmd "," deviceId ":" ESP "," deviceType ":" ESP8266 "," eventCommandType ":" update "," format ":" json "," data ":" msg "," qos ": 0," name ":" Gửi lệnh tới ESP "," dịch vụ ":" đã đăng ký "," x ": 804.1944580078125," y ": 383.0000305175781," wire ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "xác thực": "bindService", "apiKey": "", "inputType": "evt", "logicInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Lấy dữ liệu từ ESP "," dịch vụ ":" đã đăng ký "," allDevices ": false," allApplication ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "wire":
Bước 9: Bạn đã hoàn tất
Xin chúc mừng! bây giờ bạn có một hệ thống quan sát nhà máy đang hoạt động.
Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại liên hệ với chúng tôi!