Nội Dung Bài Viết
Tổng quan
Viết chương trình Arduino đọc nhiệt độ, độ ẩm từ Arduino hiển thị lên App Blink sử dụng giao thức truyền thông Modbus RTU giao tiếp với Kit NodeMCU.
Từ Blink set nhiệt độ và độ ẩm bật tắt 2 led.
- Nhiệt độ môi trường nhỏ hơn nhiệt độ set thì bật đèn led 1.
- Độ ẩm môi trường nhỏ hơn độ ẩm set thì bật đèn led 2.
Trong bài viết này, Arduino giao tiếp với Esp8266 thông qua Modbus RTU. Cụ thể, Arduino đóng vai trò Modbus Master và NodeMCU có vai trò là Modbus Slave. Arduino đọc dữ liệu từ cảm biến gửi qua cho Esp8266. Esp8266 gửi dự liệu hiển thị lên App Blink thông qua wifi. Ngược lại, Esp8266 nhận giá trị set từ App Blink và gửi dữ liệu xuống Arduino làm giá trị tham chiếu bật tắt led.
Thiết kế giao diện và cấu hình App Blink
Nếu điện thoại bạn chưa cài App Blink, các bạn vô Google Play trên Android hoặc App Store trên IOS search App Blink và cài đặt. Sau khi cài đặt, tiến hành đăng ký tài khoản Blink (có thể đăng ký nhanh bằng facebook hoặc tài khoản google).
Sau khi đăng ký xong, các bạn tạo một Project mới và cấu hình thiết bị như hình. DEVICES chọn NodeMCU (Wifi). Và chú ý mã AUTH TOKEN (App Blynk sau khi đăng ký có gửi mã AUTH TOKEN vào mail cho bạn rồi).
Các trong giao diện thiết kế, các bạn chọn Widget Box và giống như hình
Widget Box Value Display NHIỆT ĐỘ, các bạn cấu hình theo hình sau
Widget Box Value Display ĐỘ ẨM, các bạn cấu hình theo hình sau
Widget Box Slider NHIỆTĐỘ SÉT, các bạn cấu hình theo hình sau
Widget Box Slider ĐỘ ẨM SÉT, các bạn cấu hình theo hình sau
Thế là xong phần thiết kế giao diện trên App Blynk, đơn giản vậy thôi.
Sơ độ mạch kết nối Arduino với Kit NodeMCU
Chương trình Arduino cho Arduino Modbus Master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <DHT.h> #include <ModbusMaster232.h> ///#include <SoftwareSerial.h> // Modbus RTU pins D7(13),D8(15) RX,TX // Instantiate ModbusMaster object as slave ID 1 ModbusMaster232 node(1); #define Led_h 9 #define Led_t 10 #define DHTPIN 12 // what pin we're connected to #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); int t,h; int tSet,hSet; void setup() { dht.begin(); pinMode(Led_h, OUTPUT); pinMode(Led_t, OUTPUT); Serial.begin(9600); delay(100); node.begin(9600); // Modbus RTU delay(100); Serial.println("Connected "); Serial.println("Modbus RTU Master Online"); } void process(){ if(tSet > t){ digitalWrite(Led_t,HIGH); } else digitalWrite(Led_t,LOW); if(hSet > h){ digitalWrite(Led_h,HIGH); } else digitalWrite(Led_h,LOW); } void loop() { h = dht.readHumidity(); t = dht.readTemperature(); process(); ///////// node.writeSingleRegister(5,t); Serial.print("Nhiet do: "); Serial.print(t); //delay(20); Serial.print(" "); /////// node.writeSingleRegister(6,h); Serial.print("Do am: "); Serial.print(h); //delay(20); ////// Serial.print(" "); node.readHoldingRegisters(7, 1); tSet = node.getResponseBuffer(0); Serial.print("Nhiet do set: "); Serial.println(tSet); //delay(20); node.clearResponseBuffer(); //// Serial.print(" "); node.readHoldingRegisters(8, 1); hSet = node.getResponseBuffer(0); Serial.print("Do am set: "); Serial.println(hSet); //delay(20); node.clearResponseBuffer(); } |
Chương trình Arduino cho Kit NodeMCU Slave
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | #include <Ethernet.h> #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <SimpleTimer.h> #include <modbus.h> #include <modbusDevice.h> #include <modbusRegBank.h> #include <modbusSlave.h> #include <SoftwareSerial.h> // Modbus RTU pins D7(13),D8(15) RX,TX //SoftwareSerial swSer(13, 15, false, 256); modbusDevice regBank; modbusSlave slave; char auth[] = "99b55e95203b478495fad41da30da2fc"; //Token cua blynk char ssid[] = "Quang Ngai 76"; //Ten wifi char pass[] = "LamTruong12345"; //Pass wifi SimpleTimer timer; // Su dung timer int tSet=0,hSet=0; int h, t; BLYNK_WRITE(V2) { tSet = param.asInt(); // assigning incoming value from pin V1 to a variable // You can also use: // String i = param.asStr(); // double d = param.asDouble(); Serial.print("V2 Slider value is: "); Serial.println(tSet); } BLYNK_WRITE(V3) { hSet = param.asInt(); // assigning incoming value from pin V1 to a variable // You can also use: // String i = param.asStr(); // double d = param.asDouble(); Serial.print("V3 Slider value is: "); Serial.println(hSet); } void setup() { Blynk.begin(auth, ssid, pass); // Ket noi voi blynk timer.setInterval(1000L, Processing); //1s doc cam bien 1 lan //Assign the modbus device ID. regBank.setId(1); // Holding registers regBank.add(40006); regBank.add(40007); regBank.add(40008); regBank.add(40009); slave._device = ®Bank; Serial.begin(9600); delay(100); // Initialize the serial port for coms at 9600 baud slave.setBaud(9600); delay(100); Serial.println("Connected "); Serial.println("Modbus RTU Slave Online"); } void Processing(){ Blynk.virtualWrite(V0, t); Blynk.virtualWrite(V1, h); } void loop() { t= regBank.get(40006); Serial.print("Nhiet do: "); Serial.print(t); Serial.print(" "); //////// h= regBank.get(40007); Serial.print("Do am: "); Serial.print(h); Serial.print(" "); //////// Serial.print("Nhiet do set: "); Serial.println(tSet); regBank.set(40008,tSet); delay(20); //////// Serial.print(" "); Serial.print("Do am set: "); Serial.println(hSet); regBank.set(40009,hSet); delay(20); slave.run(); Blynk.run(); // Chay Blynk timer.run(); // Chay SimpleTimer } |
Trong phần chương trình Arduino cho Kit NodeMCU, các bạn chú ý thay đổi auth[], ssid[], pass[] phù hợp ( phần chữ gạch dưới màu đỏ trong chương trình cần thay đổi).
Do hiện tại, tôi không sẵn có Kit NodeMCU nên không thể quay video demo cho các bạn xem được. Chương trình này tôi đã chạy thử và ok. (trước đây).
Download Source code và thư viện
Arduino Master Esp8266 Slave
Thư viện
Bài viết các bạn có thể tham khảo: