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, được thiết kế dễ sử dụng Đặc biệt, nó cho phép lập trình và nạp code trực tiếp thông qua trình biên dịch của Arduino, giúp đơn giản hóa quá trình phát triển ứng dụng trên ESP8266.
Kit Wifi ESP8266 NodeMCU là giải pháp lý tưởng cho các ứng dụng yêu cầu 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 nâng cấp từ các phiên bản 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 phát triển từ chip wifi SoC ESP8266, thiết kế thân thiện với người dùng nhờ vào mạch nạp tích hợp sẵn sử dụng chip CP2102 Với lõi vi xử lý có sẵn, ESP8266 cho phép lập trình trực tiếp chỉ với module này và sử dụng phần mềm Node MCU Sơ đồ chân của Node MCU được trình bày trong hình 1.1 với các thông số chi tiết.
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
Lập trình trên các ngôn ngữ: C/C++, Micropython, NodeMCU
Kit wifi Node MCU CP2102 cho phép lập trình dễ dàng trên Arduino IDE, tương tự như một board Arduino thông thường, giúp quá trình lập trình và nạp mã trở nên thuận tiện hơn.
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 với ba chế độ hoạt động: 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 hiệu quả, NODE MCU có thể tiêu thụ dưới 12uA trong chế độ ngủ, với mức tiêu thụ năng lượng chỉ 1.0mW khi DTIM = 3 và ít hơn 0.5mW khi DTIM = 10, giúp duy trì kết nối ổn định với các điểm truy cập.
Khi NODE MCU ở chế độ ngủ, chỉ có bộ phận điều chỉnh đồng hồ thời gian thực và cơ quan giám sát vẫn hoạt động Đồng hồ thời gian thực có khả năng được lập trình để đánh thức NODE MCU vào những khoảng thời gian cần thiết.
NODE MCU có khả năng được 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 này cho phép NODE MCU tối ưu hóa thời gian báo thức, mang lại hiệu quả cao trong việc sử dụng.
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 thiết bị di động và điện tử lắp ráp, ESP8266 có khả năng lập trình nhằm điều chỉnh công suất đầu ra của PA, phù hợp với các ứng dụng khác nhau Việc tắt các khoảng tiêu thụ năng lượng giúp tiết kiệm điện hiệu quả.
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ẽ tắt Điều này giú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.
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 Mức độ clock gating thấp hơn được thực hiện ở cấp khối, bao gồm cả CPU, và có thể đạt được bằng cách sử dụng lệnh WAIT khi hệ thống đang ở trạng thái 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 người dùng 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 Để tạo ra một chương trình vòng thực thi, người dùng chỉ cần định nghĩa hai hàm cơ bản.
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 hiện nay, đặ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 đủ nhu 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 để mở rộng chức năng.
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, thiết lập chế độ cho các chân và khởi động các thư viện cần thiết Lưu ý rằng hàm setup chỉ chạy một lần 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 thiết lập kết nối cho một đèn LED với chân số 13 và một nút nhấn với chân số 7 Biến `val` được khởi tạo với giá trị 0 để đọc trạng thái của nút nhấn Hàm `setup()` sẽ được sử dụng để cấu hình các chân này trong 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 bị giới hạn bởi 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 cho phép kết nối Internet qua Wi-Fi, Ethernet hoặc chip ESP8266, giúp bạn dễ dàng điều khiển thiết bị của mình trực tuyến.
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 Internet of Things (IoT), cho phép người dùng điều khiển phần cứng từ xa, hiển thị dữ liệu cảm biến và lưu trữ thông tin một cách hiệu quả Blynk bao gồm ba thành phần chính, mang đến nhiều tính năng thú vị cho các ứng dụng IoT.
Phần 1 - Blynk App: cho phép tạo các giao diện từ Widget có sẵn
Blynk Server đóng vai trò quan trọng trong việc truyền tải thông tin giữa hệ thống Smarthome và các thiết bị Người dùng có thể lựa chọn sử dụng Blynk Cloud hoặc cài đặt server trên máy tính cá nhân, bao gồm cả 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 thông qua Manager Libraries Trên smartphone, chỉ cần truy cập App Store, tìm kiếm từ khóa Blynk và tải về, sau đó tạo tài khoản để bắt đầu sử dụng Thao tác trên Blynk rất đơn giản và dễ dàng.
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, mà bạn cần nhập vào mã code của bo mạch điều khiển NodeMCU Bạn có thể tùy chọn nhiều chức năng khác nhau 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 chọn đối tượng, bạn cần nhấp vào để cấu hình chân và các mức logic, vì 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 đang trở thành một lựa chọn phổ biến nhờ chi phí thấp và khả năng thu thập dữ liệu dễ dàng thông qua giao tiếp 1-wire 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 phải thực hiện tính toán phức tạp.
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).
DHT11 truyền và nhận dữ liệu qua một dây tín hiệu DATA, yêu cầu dây này ở chế độ chờ (idle) phải có mức cao Để đảm bảo điều này, trong mạch sử dụng DHT11, dây DATA cần được kết nối với một trở kéo bên ngoài, thường có giá trị 4.7kΩ.
DHT11 truyền tải dữ liệu gồm 40 bit, được phân chia thành các phần: 8 bit đầu tiên biểu thị phần nguyên của độ ẩm, 8 bit tiếp theo biểu thị phần thập phân của độ ẩm, 8 bit sau đó biểu thị phần nguyên của nhiệt độ, 8 bit tiếp theo biểu thị phần thập phân của nhiệt độ, và 8 bit cuối cùng là 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 dù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 qua chân Analog của vi điều khiển, giúp nâng cao khả năng giám sát 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 chuyển động trong khu vực hoạt động của nó Thiết bị này được trang bị hai biến trở cho phép người dùng điều chỉnh độ nhạy và thời gian hoạt động, bao gồm Sx để điều chỉnh độ nhạy và Tx để điều chỉnh thời gian đóng, từ đó đáp ứng linh hoạt các 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à giới hạn của kiến trúc Internet 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 kết nối con người, thúc đẩy giao thương và tương tác trong cùng một nền văn hóa.
Năm 1926, Paul Baran đã trình bày một giải pháp cho vấn đề liên lạc quân sự khó khăn thời bấy giờ, với chủ đề “Liên lạc phân tán qua mạng” Ông đề xuất một hệ thống máy tính phân tán trên toàn quốc, kết nối với nhau thông qua mạng không tập trung Nhờ đó, nếu một hoặc nhiều node chính bị hư hại, các node còn lại sẽ tự động điều chỉnh kết nối, đảm bảo việc liên lạc không bị gián đoạn.
Mạng không tập trung cho phép người dùng kết nối thêm máy tính thông 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) Ngày 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, vì vậy không cần thiết phải có một chương trình riêng biệt chỉ để xem email.
Web Server là một hoặc nhiều máy tính chứa nguồn của trang web, được cài đặt các chương trình phục vụ web để thiết lập kết nối cho trình duyệt truy cập Để truy cập tài nguyên của 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 sử 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 mạng Wi-Fi để đọ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 có thể giao tiếp 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ề cho Node MCU để thực hiện chỉ thị.
Node MCU hoạt động như một trạm kết nối vào một điểm truy cập Wi-Fi, có nhiệm vụ truyền và nhận dữ liệu từ webserver Nó nhận thông tin từ cảm biến và gửi lên webserver Khi nhận được chỉ thị bật tắt từ webserver, Node MCU sẽ thực hiện lệnh ngay lập tức Phương thức này chỉ khả thi với các địa chỉ IP cùng 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 để người dùng dễ dàng tương tác Đồng thời, ứng dụng cũng phải cung cấp các thông tin quan trọng như độ ẩm, nhiệt độ, nồng độ 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 thực hiện chức năng kết nối với Webserver, cho phép truyền nhận dữ liệu hiệu quả Đồng thời, khối này cũng đảm nhận vai trò của một vi xử lý, đảm bảo các hoạt động xử lý diễn ra mượt mà.
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, người dùng có thể điều khiển thiết bị thông qua các nút bật/tắt Khi nhấn nút "on", Blynk gửi tín hiệu đến webserver, sau đó webserver truyền lệnh đến Node MCU Node MCU nhận lệnh và điều khiển relay để bật đèn, tương tự như vậy khi nhấn nút "off" để tắt đèn.
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 về Node MCU Dữ liệu từ Node MCU được gửi lên webserver và hiển thị nồng độ khí gas trên ứng dụng Blynk cũng như webserver Khi nồng độ khí gas vượt ngưỡng an toàn, 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 đến Node MCU với hai mức cao và thấp Khi tín hiệu báo HIGH, nghĩa là có vật xuất hiện, Node MCU sẽ gửi thông tin lên webserver và ứng dụng Blynk để hiển thị Đồng thời, Node MCU cũng kích hoạt cơ cấu chấp hành để phát còi tín hiệu.
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, timer và 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 và lấy địa chỉ IP, giúp người dùng truy cậ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 đạt 4 giây, nó sẽ đọc nhiệt độ và gửi lên server, còn nếu chưa đủ 4 giây, 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
Chương trình con 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 số 80 để đọc dữ liệu từ server Khối xử lý Node MCU nhận tín hiệu và đảo trạng thái chân điều khiển, sau đó đóng cổng kết nối để hoàn tất quá trình giải mã.
Hình 2 6: Chương trình con giải mã lệnh
// Su dung cam bien DHT11
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
{ 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);
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
} 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
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);
// Chuan bi tao web de phan hoi
This article presents a web interface for controlling devices and monitoring environmental conditions The interface is built using HTML, CSS, and JavaScript, featuring buttons to turn devices on and off, such as lights and fans Additionally, it includes sections for tracking temperature and humidity levels, as well as gas detection and security alerts The page is designed to be responsive, ensuring optimal viewing on various devices, and is set to refresh every 60 seconds for real-time updates **Key Features:**- **Device Control:** Users can easily turn devices on and off through clearly labeled buttons. - **Environmental Monitoring:** Real-time tracking of temperature and humidity is displayed prominently.- **Gas Detection Alerts:** The system monitors gas levels and provides alerts for security purposes.- **Responsive Design:** The interface adapts to different screen sizes for a better user experience.- **Automatic Refresh:** The page refreshes every 60 seconds to provide up-to-date information.
// 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
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 để đo lường, hiển thị thống kê các thông số nhiệt độ, độ ẩm và điều khiển cơ cấu chấp hành
Bên cạnh đó, việc thực hiện xây dựng Webserver và hiển thị hình ảnh lên Blynk như mô tả ở hình 2.6 và 2.7 bên dưới.
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 và hiển thị chính xác nhiệt độ và độ ẩm môi trường trên smartphone, đồng thời tải dữ liệu 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 giới hạn cho phép, và mạch hoạt động một cách ổn định.
Mặc dù trang web cung cấp thông tin hữu ích, nhưng một hạn chế lớn 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 để có dữ liệu mới nhất.
Với việc kết nối truyền dữ liệu thành công qua mạng wifi và thực hiện đo lường cũng như điều khiển các thông số môi trường, như quạt và đèn, những kết quả demo này đã chứng minh khả năng phát triển tiềm năng của đề tài.