CƠ SỞ LÝ THUYẾT
Kit Wifi Node MCU 8266 CP 2102
Kit Wifi ESP8266 NodeMCU là một bộ phát triển dựa trên chip Wifi SoC ESP8266, nổi bật với thiết kế dễ sử dụng Người dùng có thể lập trình và nạp code trực tiếp thông qua trình biên dịch Arduino, giúp việc phát triển ứng dụng trên ESP8266 trở nên đơn giản và thuận tiện hơn bao giờ hết.
Kit Wifi ESP8266 NodeMCU là giải pháp lý tưởng cho các ứng dụng cần kết nối và thu thập dữ liệu qua sóng Wifi, đặc biệt trong lĩnh vực Internet of Things (IoT).
Kit Wifi ESP8266 NodeMCU trang bị chip CP2102, mang lại khả năng nạp và giao tiếp UART ổn định, tự nhận Driver trên mọi hệ điều hành Windows và Linux Đây là phiên bản cải tiến từ các phiên bản trước sử dụng IC CH340, giúp quá trình nạp code trở nên đơn giản, nhanh chóng và hiệu quả hơn.
Hình 1.1: Sơ đồ chân của Node MCU CP2102
Kit ESP8266 được thiết kế dựa trên chip wifi SoC ESP8266, mang lại sự tiện lợi với mạch nạp tích hợp sử dụng chip CP2102 Với lõi vi xử lý có sẵn, người dùng có thể lập trình trực tiếp trên ESP8266 thông qua phần mềm Node MCU Sơ đồ chân của Node MCU được mô tả chi tiết trong hình 1.1 cùng với các thông số kỹ thuật tương ứng.
WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
Điện áp vào: 5V thông qua cổng USB
Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire, trừ chân D0)
Số chân Analog Input: 1 (điện áp vào tối đa 3.3V)
Giao tiếp: Cable Micro USB
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
Kit WiFi NodeMCU CP2102 cho phép lập trình bằng các ngôn ngữ như C/C++, Micropython và NodeMCU, và có thể sử dụng Arduino IDE để lập trình giống như một board Arduino thông thường, giúp đơn giản hóa quá trình lập trình và nạp code.
Mở chương trình Arduino và cửa sổ Preferences.
Enter http://arduino.esp8266.com/stable/package_esp8266com_index.json vào Additio nal Board Manager URLs Ta có thể thêm nhiều URL, cách nhau bằng dấu phẩy.
Mở Boards Manager từ Tools > Board menu và tìm ESP8266 platform
Chọn phiên bản bạn cần từ cửa sổ Drop-down.
Đừng quên chọn loại ESP8266 board từ Tools > Board menu sau khi cài đặt.
1.1.3 Quản lý năng lượng NODE MCU
NODE MCU được phát triển cho các ứng dụng di động, điện tử lắp ráp và Internet of Things, nhằm tối ưu hóa mức tiêu thụ điện năng Thiết bị này sử dụng nhiều kỹ thuật độc quyền và có kiến trúc tiết kiệm năng lượng, hoạt động hiệu quả trong ba chế độ: chế độ hoạt động, chế độ ngủ và chế độ ngủ sâu.
Bằng cách áp dụng các kỹ thuật quản lý nguồn điện và kiểm soát chuyển đổi chế độ ngủ, NODE MCU có thể tiêu thụ dưới 12uA ở chế độ ngủ, thấp hơn 1.0mW khi DTIM = 3 và ít hơn 0.5mW khi DTIM = 10, giúp duy trì kết nối hiệu quả với các điểm truy cập.
Trong chế độ ngủ, chỉ có bộ phận hiệu chỉnh đồng hồ thời gian thực và cơ quan giám sát hoạt động Đồng hồ thời gian thực có khả năng lập trình để đánh thức NODE MCU vào bất kỳ thời điểm cần thiết nào.
NODE MCU có khả năng lập trình để kích hoạt khi phát hiện một điều kiện nhất định Tính năng tối thiểu thời gian báo thức của NODE MCU có thể được áp dụng để tối ưu hóa hiệu suất trong các ứng dụng IoT.
MCU có thể được sử dụng bởi thiết bị di động SOC Cho phép chúng vẫn ở chế độ chờ, điện năng thấp cho đến khi Wifi là cần thiết.
Để đáp ứng nhu cầu điện năng cho các thiết bị di động và điện tử lắp ráp, ESP8266 có khả năng lập trình để điều chỉnh công suất đầu ra của PA, phù hợp với từng ứng dụng cụ thể Việc này giúp tiết kiệm năng lượng bằng cách tắt các khoảng tiêu thụ không cần thiết.
Các chip có thể được thiết lập ở các trạng thái sau:
OFF: chân CHIP_PD ở mức thấp Các RTC (đồng hồ thời gian) bị vô hiệu hóa và mọi thanh ghi sẽ bị xóa.
Khi chế độ SLEEP DEEP được kích hoạt, các RTC sẽ hoạt động trong khi các phần khác của chip sẽ ở trạng thái tắt Điều này cho phép RTC phục hồi bộ nhớ nội bộ để lưu trữ thông tin kết nối WiFi cơ bản một cách hiệu quả.
SLEEP: Chỉ RTC hoạt động Các dao động tinh thể được vô hiệu hóa.
Bất kỳ sự kiện wakeup (MAC, host, RTC hẹn giờ, ngắt ngoài) sẽ đưa chip vào trạng thái wakeup.
Wakeup: Trong trạng thái này, hệ thống đitừ trạng thái ngủ sang trạng thái PWR Các dao động tinh thể và PLLs được kích hoạt.
Trạng thái ON của xung clock tốc độ cao cho phép hoạt động và gửi tín hiệu đến các khối được kích hoạt thông qua việc đăng ký kiểm soát xung clock Việc giảm mức tiêu thụ năng lượng bằng cách sử dụng clock gating ở cấp khối, bao gồm cả CPU, có thể được thực hiện thông qua lệnh WAIT khi hệ thống đang ở chế độ tắt.
Giới thiệu về Arduino IDE
Arduino IDE là phần mềm lập trình cho các kit Arduino, cho phép viết chương trình bằng ngôn ngữ C hoặc C++ Phần mềm này đi kèm với thư viện "Wiring", giúp đơn giản hóa các thao tác input/output Người dùng chỉ cần định nghĩa hai hàm để tạo ra một chương trình vòng thực thi có thể chạy được.
setup(): hàm này chạy mỗi khi khởi động một chương trình, dùng để thiết lập các cài đặt.
loop(): hàm này được gọi lặp lại cho đến khi tắt nguồn board mạch.
Nhiều ngôn ngữ lập trình, đặc biệt là cho Windows, cung cấp nhiều thư viện hỗ trợ giao diện người dùng Tuy nhiên, thư viện có sẵn trong Arduino không đáp ứng đủ yêu cầu của lập trình viên, do đó cần nạp thêm các thư viện cần thiết.
Trên giao diện IDE Arduino các bạn vào Sketch chọn Import Library, chọn tiếp Add Library và tìm đến file nén vừa tạo (file.zip) [2].
Cấu trúc phần mềm các hàm cơ bản
Cấu trúc chương trình viết cho Arduino gồm hai phần đầu tiên là hàm khởi tạo setup() và vòng lặp loop().
Hàm setup() được kích hoạt khi bắt đầu một bản thiết kế Arduino, nơi bạn khai báo các biến khởi tạo và thiết lập chế độ cho các chân Nó cũng là nơi bắt đầu sử dụng các thư viện cần thiết Lưu ý rằng hàm setup chỉ chạy một lần duy nhất sau mỗi lần bật nguồn hoặc reset mạch.
- int buttonPin = 3; void setup() { serial.begin(9600); // cấu hình cổng nối tiếp có tốc độ dữ liệu là
9600 bps pinMode(buttonPin, INPUT); // đặt chân 3 là chân input } void loop() {
} - Vòng lặp loop() sử dụng để lặp và những vòng lặp liên tiếp, chương trình có thể thay đổi và đáp ứng Sử dụng để điều khiển mạch Arduino.
- int button = 3; // ham setup se khoi tao cong serial va nut pin void setup() { beginSerial(9600); pinMode(buttonPin, INPUT);
} //vong lap loop kiem tra nut pin moi lan lap //va gui du lieu ra cong serial neu an nut void loop()
{ if(digitalRead(buttonPin) == HIGH) serialWrite(‘H’); else serialWrite(‘L’); delay(1000);
Các hàm vào ra số
Hàm pinMode(): Cấu hình một chân thành một chân vào hoặc một chân ra
Cú pháp: pinMode(pin, mode);
Trong đó: pin là số của chân muốn đặt chế độ, mode là các chế độ INPUT, INPUT_PULLIP, OUTPUT Giá trị trả về là none.
- int ledPin = 13; //ket noi den Led voi chan so 13 void setup()
{ pinMode(ledPin, OUTPUT);// dat chan so lam chan ra } void loop() { digitalWrite(ledPin, HIGH); // den led sang delay(1000); // doi trong 1s digitalWrite(ledPin, LOW); //den led tat delay(1000); //doi trong 1s
serial.println (giá trị): In giá trị để Monitor Serial trên máy tính.
pinMode (pin, chế độ): Cấu hình cho một pin kỹ thuật số để đọc (đầu vào) hoặc viết (đầu ra) một giá trị kỹ thuật số.
digitalRead (pin): Đọc một giá trị kỹ thuật số (HIGH hoặc LOW) trên một bộ pin cho đầu vào.
digitalWrite (pin, giá trị): Ghi giá trị kỹ thuật số (HIGH hoặc LOW) với một bộ pin cho đầu ra.
Đoạn mã này định nghĩa chân LED kết nối với chân số 13 và chân nút nhấn kết nối với chân số 7 Biến "val" được sử dụng để đọc giá trị từ nút nhấn Hàm "setup()" sẽ được sử dụng để khởi tạo các thiết lập cần thiết cho chương trình.
{ pinMode(ledPin, OUTPUT);// dat chan so 13 lam chan xuat pinMode(inPin, INPUT);//dat chan so 7 lam chan nhap } void loop()
{ val = digitalRead(inPin); //doc du lieu tu chan so 7 digitalWrite(ledPin, val); //den led se sang hoac tat theo nut nhan }
Phần mềm Blynk
Blynk là một ứng dụng iOS và Android để kiểm soát thiết bị Esp8266, Arduino, Raspberry Pi và thiết bị khác trên Internet [3].
Blynk không giới hạn trong việc sử dụng phần cứng cụ thể, mà hỗ trợ nhiều loại phần cứng khác nhau Dù bạn sử dụng Arduino hay Raspberry Pi, Blynk giúp bạn kết nối thiết bị của mình với Internet qua Wi-Fi, Ethernet hoặc chip ESP8266, giúp bạn dễ dàng kiểm soát thiết bị từ xa.
Những lý do nên sử dụng Blynk:
Dễ sử dụng: việc cài đặt ứng dụng và đăng ký tài khoản trên điện thoại rất đơn giản cho cả IOS và Android
Chức năng phong phú: Blynk hỗ trợ rất nhiều chức năng với giao diện đẹp và thân thiện, bạn chỉ việc kéo thả đối tượng và sử dụng nó.
Blynk là một ứng dụng lý tưởng cho những ai không có kiến thức lập trình ứng dụng cho Android và iOS, giúp bạn dễ dàng khám phá thế giới Internet of Things (IoT).
Điều khiển, giám sát thiết bị ở bất kì đâu thông qua internet với khả năng đồng bộ hóa trạng thái và thiết bị.
Blynk là nền tảng lý tưởng cho IoT, cho phép điều khiển phần cứng từ xa, hiển thị và lưu trữ dữ liệu cảm biến, cùng với nhiều tính năng thú vị khác Blynk bao gồm ba thành phần chính.
Phần 1 - Blynk App: cho phép tạo các giao diện từ Widget có sẵn
Phần 2 - Blynk Server: truyền tải thông tin giữa Smarthome và thiết bị.
Blynk Server có thể là 1 đám mây của Blynk hoặc có thể cài đặt trên máy cá nhân Có thể cài đặt trên Raspberry Pi.
Phần 3 - Blynk Libraries: thư viện cung cấp kết nối phần cứng đến server, xử lý các lệnh đến và đi.
Để sử dụng phần mềm Blynk trên Arduino IDE, bạn cần cài đặt thư viện Blynk bằng cách truy cập vào Manager Libraries và tìm kiếm từ khóa "Blynk" Đối với việc cài đặt Blynk trên smartphone, chỉ cần vào App Store, gõ "Blynk", tải về và tạo tài khoản để bắt đầu sử dụng Thao tác trên Blynk rất đơn giản.
Cấu hình app Blynk theo các bước sau:
Các bạn có thể tạo tài khoản hoặc dùng tài khoản Facebook.
Tạo một project, đây được hiểu giống như là một ứng dụng.
Điền tên Project và chọn Board phần cứng (Các bạn có thể chọn NodeMCU hoặc ESP8266).
Hình 1.4: Tạo Project cho Blynk
Mỗi dự án trên Blynk sẽ cung cấp cho bạn một mã Auth Token, cần nhập vào mã nguồn của Board điều khiển NodeMCU Bạn có thể lựa chọn nhiều chức năng như nút bấm, hẹn giờ và LCD để tích hợp vào dự án của mình.
Mỗi đối tượng các bạn chọn sẽ tốn energy (1 đơn vị giới hạn khi bạn dùng server miễn phí)
Hình 1.5: Tạo giao diện cho Blynk
Sau khi lựa chọn đối tượng, bạn cần nhấp để cấu hình chân và các mức logic Những cấu hình này sẽ ảnh hưởng đến board phần cứng Chẳng hạn, khi nhấn nút, chân gp16 sẽ chuyển từ trạng thái logic 1 sang logic 0.
DHT11
Cảm biến DHT11 được ưa chuộng hiện nay nhờ vào chi phí thấp và khả năng thu thập dữ liệu dễ dàng qua giao tiếp 1-wire (giao tiếp số đơn) Với bộ tiền xử lý tín hiệu tích hợp, DHT11 cung cấp dữ liệu chính xác mà không cần thêm bất kỳ phép tính nào.
DHT11 có tích hợp thư viện sẵn trong Arduino IDE nên việc sử dụng nó để lập trình là khá đơn giản [4].
Dải nhiệt độ đo: 0 -> 50°C với độ chính xác là ±2°C
Dải độ ẩm đo: 20 -> 80% với độ chính xác là 5%
Kích thước: 15.5mm x 12mm x 5.5mm
Tần số lấy mẫu: 1Hz , nghĩa là 1 giây DHT11 lấy mẫu một lần.
4 chân: VCC( cực (+) nguồn ), DATA(chân tín hiệu), NC, GND(cực (-) nguồn).
Cảm biến DHT11 truyền và nhận dữ liệu qua một dây tín hiệu DATA duy nhất Để đảm bảo hoạt động hiệu quả, dây DATA cần duy trì mức cao trong chế độ chờ (idle) Do đó, trong mạch sử dụng DHT11, cần kết nối dây DATA với một trở kéo bên ngoài, thường có giá trị 4.7kΩ.
Cảm biến DHT11 truyền dữ liệu dưới dạng 40 bit, bao gồm 8 bit cho phần nguyên độ ẩm, 8 bit cho phần thập phân độ ẩm, 8 bit cho phần nguyên nhiệt độ, 8 bit cho phần thập phân nhiệt độ và 8 bit cho kiểm tra tổng (check sum).
Ví dụ: ta nhận được 40 bit dữ liệu như sau:
8 bit checksum: 0011 0101 + 0000 0000 + 0001 1000 + 0000 0000 = 0100 1101 Độ ẩm: 0011 0101 = 35H = 53% (ở đây do phần thập phân có giá trị 0000
0000, nên ta bỏ qua không tính phần thập phân)
Nhiệt độ: 0001 1000 = 18H = 24°C (ở đây do phần thập phân có giá trị 0000
0000, nên ta bỏ qua không tính phần thập phân)
1.4.4 Cảm biến khí ga MQ2
Cảm biến khí ga MQ2 là thiết bị quan trọng để phát hiện các loại khí như LPG, i-butan, propane, methane, alcohol, hydrogen, khói và khí ga Với thiết kế nhạy bén và thời gian phản hồi nhanh, cảm biến này cung cấp giá trị đọc từ chân Analog của vi điều khiển, giúp người dùng dễ dàng theo dõi và quản lý an toàn khí gas.
Tính hiệu tương tự (analog)
Hoạt động trong thời gian dài, ổn định
Cảm biến chuyển động HC-SR501
Hình 1.9: Cảm biến chuyển động
Cảm biến chuyển động HC-SR501 có khả năng phát hiện vật thể di chuyển trong vùng hoạt động của nó Thiết bị này cho phép điều chỉnh độ nhạy thông qua hai biến trở: Sx để điều chỉnh độ nhạy và Tx để điều chỉnh thời gian đóng, giúp người dùng tùy chỉnh theo nhu cầu sử dụng.
Sử dụng điện áp: 4.5V - 20V DC
Điện áp đầu ra: 0V - 3.3V DC
Có 2 chế độ hoạt động:
Thời gian trễ: điều chỉnh trong khoảng 0.5-200S
Sử dụng cảm biến: 500BP
Kích thước PCB:32mm x 24mm
Tìm hiểu và xây dựng Web
1.6.1 Lịch sử của World Wide Web
Web được phát triển từ Internet, thể hiện khả năng tự trị và những giới hạn của kiến trúc này Hiện nay, các trình duyệt Web cho phép truy cập vào nhiều công nghệ Internet khác nhau như Email và www Tuy nhiên, Web và Internet không chỉ đơn thuần là lĩnh vực kỹ thuật, mà còn là môi trường giao tiếp, thương mại và tương tác giữa con người trong cùng một nền văn hóa.
Năm 1926, Paul Baran đã mô tả một giải pháp cho vấn đề liên lạc quân sự khó khăn, với tiêu đề “Liên lạc phân tán qua mạng” Ông đề xuất một hệ thống máy tính kết nối rộng khắp đất nước thông qua mạng không tập trung (decentralized), cho phép các node còn lại tự động điều chỉnh kết nối để duy trì liên lạc ngay cả khi một hoặc nhiều node chính bị phá hủy.
Mạng không tập trung cho phép kết nối thêm máy tính qua đường dây điện thoại, sử dụng thiết bị phần cứng và phần mềm NCP (Network Control Protocol), như ARPAnet.
Một trong những ứng dụng quan trọng đầu tiên được phát triển trên ARPAnet là thư điện tử (email) Hiện nay, email đã trở thành một phần thiết yếu của Internet và được tích hợp sẵn trong các trình duyệt web như Netscape, do đó không cần thiết phải có một chương trình riêng biệt để xem email.
Web Server là hệ thống máy tính lưu trữ nguồn trang web và cài đặt các chương trình phục vụ web, như IIS của Microsoft, để thiết lập kết nối cho trình duyệt Để truy cập tài nguyên từ web server, trình duyệt và server cần sử dụng chung một giao thức Trong số nhiều giao thức liên lạc giữa hai máy tính, TCP/IP là giao thức phổ biến nhất, được áp dụng rộng rãi trong các mạng LAN, WAN và cả Internet.
TCP/IP được phát triển là một dạng rút gọn của mô hình OSI.
PHÂN TÍCH HỆ THỐNG
Yêu cầu của hệ thống
2.1.1 Mô tả hoạt động của hệ thống
Hệ thống giao tiếp với người dùng theo hai cách:
Sử dụng phần mềm Blynk, Node MCU kết nối với WiFi để đọc dữ liệu từ các cảm biến và truyền về máy chủ web của Blynk Người dùng tương tác với hệ thống qua ứng dụng Blynk, và khi có lệnh điều khiển, Blynk sẽ gửi tín hiệu về Node MCU để thực hiện.
Node MCU hoạt động như một trạm kết nối vào một điểm truy cập WiFi, có nhiệm vụ truyền và nhận thông tin từ webserver Nó nhận dữ liệu từ cảm biến và gửi lên webserver Khi nhận chỉ thị bật tắt từ webserver, Node MCU sẽ thực hiện lệnh theo thông tin đã nhận Phương thức này chỉ khả thi với các IP trong cùng một lớp mạng.
2.1.2 Yêu cầu của hệ thống
Trên phần mềm Blynk, cần hiển thị các nút bấm on/off để tương tác với người dùng, đồng thời hiển thị các thông số quan trọng như độ ẩm, nhiệt độ, mức khí gas và trạng thái có người hay không.
Trên websever phải hiển thị cái nút on/off để bật tắt, có hiển thị thông tin: nhiệt độ, độ ẩm, khí gas, có người hay không có người.
Các cơ cấu chấp hành là các relay phải thực thi chỉ thị khi có chỉ thị gửi đến.
Hoạt động của hệ thống phải chính xác.
Thiết kế hệ thống
Các khối chức năng trong hệ thống hoạt động như mô tả trong hình 2.1 và cụ thể phần thực thi của các khối là:
Khối nguồn: cung cấp nguồn cho toàn hệ thống
Khối xử lý và kết nối có nhiệm vụ thực hiện kết nối với Webserver và truyền nhận dữ liệu hiệu quả Đồng thời, khối này còn đảm nhận vai trò tương tự như một vi xử lý, giúp tối ưu hóa quá trình xử lý thông tin.
Khối Server: có chức năng nhận dữ liệu và hiển trị dữ liệu Bên cạnh đó, lệnh gửi về khối xử lý cũng được phát bởi khối này.
Khối chấp hành: nhận các yêu cầu của khối xử lý và thực thi mệnh lệnh.
Hình 2 1: Sơ đồ khối hoạt động hệ thống 2.2.2 Nguyên lý hoạt động
2.2.2.1 Mạch điều khiển các thiết bị trong nhà
Trên webserver hoặc Blynk, có các nút để bật tắt thiết bị Khi nhấn nút "On", Blynk gửi tín hiệu lên webserver, sau đó webserver truyền tín hiệu đến Node MCU Node MCU nhận lệnh và chỉ thị cho relay bật bóng đèn, tương tự đối với lệnh tắt.
Hình 2 2 : Mạch điều khiển thiết bị qua wifi2.2.2.2 Mạch báo cháy:
Cảm biến MQ2 đo nồng độ khí gas trong môi trường và truyền tín hiệu đến Node MCU Node MCU sau đó gửi dữ liệu lên webserver, hiển thị nồng độ khí gas trên phần mềm Blynk và webserver Khi nồng độ khí gas vượt ngưỡng cho phép, Node MCU sẽ kích hoạt còi báo động để cảnh báo cháy.
Cảm biến chuyển động gửi tín hiệu cao hoặc thấp đến Node MCU, sau đó Node MCU chuyển tiếp tín hiệu lên webserver và Blynk để hiển thị trên phần mềm Khi tín hiệu báo HIGH, điều này cho thấy có vật xuất hiện, và Node MCU cũng sẽ kích hoạt cơ cấu chấp hành để phát còi tín hiệu.
2.2.3 Thiết kế phần mềm 2.2.3.1 Lưu đồ thuật toán mạch đo
Để bắt đầu, chúng ta thiết lập các chân in/out và timer, khởi tạo chân cho các cảm biến, sau đó cấu hình Node MCU để kết nối với wifi Khi kết nối thành công, địa chỉ IP sẽ được lấy để người dùng đăng nhập vào webserver Node MCU sẽ nhận tín hiệu điều khiển từ webserver; nếu lệnh đúng, nó sẽ giải mã và thực thi, còn nếu sai, nó sẽ kiểm tra timer Nếu timer đủ 4 giây, nó sẽ đọc nhiệt độ và gửi lên server, còn nếu chưa đủ, nó sẽ tiếp tục nhận tín hiệu điều khiển Điều này có nghĩa là nhiệt độ và độ ẩm sẽ được cập nhật mỗi 4 giây Thuật toán mạch đo được thể hiện qua lưu đồ trong hình 2.2.
Hình 2 5: Lưu đồ thuật toán mạch đo
2.2.3.2 Chương trình con giải mã lệnh
Quá trình giải mã lệnh bắt đầu bằng việc nhận tín hiệu điều khiển, mở cổng kết nối (cổng số 80) để đọc dữ liệu từ server Sau khi khối xử lý (node MCU) nhận tín hiệu, nó sẽ đảo trạng thái chân điều khiển và đóng cổng kết nối, kết thúc quá trình giải mã.
Hình 2 6: Chương trình con giải mã lệnh
#define GAS A0 // Su dung cam bien DHT11
#define DHTTYPE DHT11// Thiet lap DHT
DHT dht(DHTPIN, DHTTYPE); char auth[] = "cc61900784154f54b05ea96e07c2dc1f"; //Token cua blynk // Thong so WiFi nha ban const char* ssid = "ALO TEA"; const char* pass = "09091994";
SimpleTimer timer; // Su dung timer
// Tao server WiFiServer server(80); void sendSensor() { float h = dht.readHumidity(); //Doc gia tri do am float t = dht.readTemperature(); //Doc gia tri nhiet do float g = analogRead(GAS) ; float nguoi = digitalRead(D6);
// Gan du lieu vao bien virtual de hien thi len blynk // Chi nen gan 10 bien tro xuong delay(10);
// Mo Serial Serial.begin(115200); delay(10);
Blynk.begin(auth, ssid, pass); // Ket noi voi blynk dht.begin(); // Khoi tao DHT timer.setInterval(4000L, sendSensor); //4s doc cam bien 1 lan
// Khoi tao DHT dht.begin(); pinMode(D7, OUTPUT); digitalWrite(D0, 0); pinMode(D1, OUTPUT); digitalWrite(D1, 0);
Serial.print("Ket noi toi mang ");
WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.println("Da ket noi WiFi");
// Khoi dong server server.begin();
Serial.println("Khoi dong Server");
// In ra dia chi IP Serial.println(WiFi.localIP());
} void loop() { float g = analogRead(GAS) ; float nguoi = digitalRead(D6); if (g>300){ digitalWrite(D8, HIGH);
} if (nguoi == HIGH){ digitalWrite(D3,HIGH);
Blynk.run(); // Chay Blynk timer.run(); // Chay SimpleTimer
// Kiem tra khi co client ket noi WiFiClient client = server.available(); if (!client) { return;
// Doi client gui ket noi Serial.println("Co mot client moi ket noi xem du lieu"); while(!client.available()){ delay(1);
} // Doc do am float h = dht.readHumidity();
// Doc nhiet do o do C float t = dht.readTemperature();
// Doc yeu cau tu client String req = client.readStringUntil('\r');
Serial.println(req); client.flush();
// Kiem tra yeu cau la gi if (req.indexOf("/on") != -1){ digitalWrite(D0, 1);
} else if (req.indexOf("/off") != -1) { digitalWrite(D0, 0);
} if (req.indexOf("/on1") != -1){ digitalWrite(D1, 1);
} else if (req.indexOf("/off1") != -1) { digitalWrite(D1, 0);
The article discusses the creation of a web interface for controlling devices and monitoring environmental conditions It includes an HTML structure with a responsive design, utilizing Bootstrap for styling and jQuery for functionality Users can turn devices on and off through buttons that trigger corresponding functions via HTTP GET requests The interface also displays real-time data for temperature, humidity, gas levels, and alerts for unauthorized access The page refreshes every 60 seconds to ensure updated information is presented to users.
// Gui phan hoi toi client (o day la giao dien web) client.print(s); delay(1);
Serial.println("Client da thoat");
// Sau khi nhan duoc thong tin thi se tu dong ngat ket noi }
2.2.4 Thiết kế phần cứng 2.2.4.1 Sơ đồ nguyên lý
Khối chấp hành (khối relay)
Hình 2 7: Sơ đồ nguyên lý 2.2.4.2 Sơ đồ mạch in
Hình 2 8: Sơ đồ mạch in
Kết quả đạt được
Đề tài thực hiện được một số kết quả tiêu biểu như sau:
- Thiết kế được hệ thống báo cháy và chống trộm giúp người dung có thể quan sát các chỉ số của nhà mình.
- Kết nối thành công mạch với server, demo điều khiển thiết bị thông qua wifi.
- Thiết kế thành công mạch đo nhiệt độ, độ ẩm sử dụng cảm biến DHT11, và truyền lên server cũng như Blynk.
Lập trình giao diện web cho phép đo lường và hiển thị thống kê các thông số như nhiệt độ và độ ẩm, đồng thời điều khiển cơ cấu chấp hành Ngoài ra, việc xây dựng Webserver và hiển thị hình ảnh trên Blynk cũng được thực hiện như mô tả trong hình 2.6 và 2.7 dưới đây.
Hình 2 10: Giao diện hiển trị trên Blynk
Thiết kế phần cứng cho việc mô phỏng nhà thông minh như hình 2.8 và 2.9.
Hình 2 11: Mô hình nhà phía trong
Hình 2 12: Mô hình nhà thực tế
Đánh giá những kết quả đã đạt được
Thiết bị đo nhiệt độ và độ ẩm môi trường cho phép hiển thị dữ liệu chính xác trên Smartphone và tải lên server một cách ổn định Kết quả đo đạt độ chính xác cao, với sai số nằm trong phạm vi cho phép, đảm bảo mạch hoạt động ổn định.
Mặc dù trang web cung cấp nhiều thông tin hữu ích, nhưng một hạn chế đáng chú ý là nó không tự động cập nhật giá trị mới, người dùng cần phải làm mới trang để xem dữ liệu cập nhật.
Kết quả ban đầu cho thấy khả năng kết nối truyền dữ liệu thành công qua mạng wifi, cho phép đo lường và điều khiển các thông số môi trường cùng với các thiết bị như quạt và đèn Những kết quả demo này đã chứng minh tiềm năng phát triển của đề tài.