LỜI MỞ ĐẦU Mỗi giai đoạn phát triển của lịch sử thế giới đều gắn liền với những cuộc cách mạng về khoa học kỹ thuật . Và ngày nay , cuộc cách mạng Internet of Things đã tạo nên những thay đổi đáng kể cuộc sống của chúng ta ở hiện tại và trong tương lai . Với sự phát triển của Internet , Smartphone và đặc biệt là các thiết bị cảm biến , Internet of Things ( IOT ) đang trở thành xu hướng mới của thế giới . IOT là một mạng lưới các vật thể được gắn các cảm biến hoặc hệ thống điện tử đặc biệt cho phép chúng kết nối với nhau để thu thập và trao đổi dữ liệu . Các vật thể trong mạng lưới này có thể được kết nối với mạng Internet cho mục đích điều khiển và giám sát từ xa . Việc chúng ta vào nhà , mở cửa , đèn sẽ tự động sáng ở chỗ ta đang đứng , điều hòa sẽ tự động điều chỉnh nhiệt độ , nhạc sẽ tự động bật lên , ... Những điều chỉ có trong phim khoa học viễn tưởng mà chúng ta thường xem , đang dần trở thành hiện thực với công nghệ IOT . Trong cuộc sống thường nhật , chúng ta đã quá quen thuộc với việc bật tắt các thiết bị bằng công tắc thông thường . Hiện nay , chúng ta bị chi phối bởi nhiều thứ . Việc chúng ta ra khỏi nhà mà quên tắt đèn , điều hòa là chuyện không hiếm gặp . Với công tắc thông thường , khi chúng ta rời khỏi nhà mà vẫn quên tắt các thiết bị trong nhà . Để tắt các thiết bị thì chỉ cách quay trở lại về nhà rồi tắt chúng . Điều này đôi khi gây ra cho chúngta nhiều phiền toái . Để giải quyết vấn đề trên , em đã lựa chọn đề tài : “ THIẾT KẾ MÔ HÌNH NHÀ THÔNG MINH SỬ DỤNG ESP8266” , ứng dụng công nghệ IOT vào đời sống . Giúp chúng ta có thể bật tắt các thiết bị trong nhà ở mọi lúc mọi nơi . Đây là một đề tài không mới , nhiều anh chị khóa trước cũng đã thực hiện . Nhưng vẫn còn nhiều điểm cần cải thiện đó là tốc độ đáp ứng khi điều khiển thiết bị và giao diện điều khiển thiết bị . Vì vậy đề tài của em trọng tâm sẽ thực hiện việc cải thiện tốc độ điều khiển thiết bị lên mức tối đa có thể , xây dựng giao diện điều khiển thiết bị có tính thẩm mỹ và thân thiện với người dùng .
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KỸ THUẬT ĐIỆN – ĐIỆN TỬ *** BÁO CÁO MÔN ĐỒ ÁN HỆ THỐNG NHÚNG ĐỀ TÀI HỆ THỐNG IOT “Xây dựng hệ thống điều khiển nhà thông minh sử dụng ESP8266” Giảng Viên Hướng Dẫn Nguyễn Ngọc Minh Hà Nội MỤC LỤC Mục lục LỜI MỞ ĐẦU Mỗi giai đoạn phát triển lịch sử giới gắn liền với cách mạng khoa học kỹ thuật Và ngày , cách mạng Internet of Things tạo nên thay đổi đáng kể sống tương lai Với phát triển Internet , Smartphone đặc biệt thiết bị cảm biến , Internet of Things ( IOT ) trở thành xu hướng giới IOT mạng lưới vật thể gắn cảm biến hệ thống điện tử đặc biệt cho phép chúng kết nối với để thu thập trao đổi liệu Các vật thể mạng lưới kết nối với mạng Internet cho mục đích điều khiển giám sát từ xa Việc vào nhà , mở cửa , đèn tự động sáng chỗ ta đứng , điều hòa tự động điều chỉnh nhiệt độ , nhạc tự động bật lên , Những điều có phim khoa học viễn tưởng mà thường xem , dần trở thành thực với công nghệ IOT Trong sống thường nhật , quen thuộc với việc bật tắt thiết bị công tắc thông thường Hiện , bị chi phối nhiều thứ Việc khỏi nhà mà quên tắt đèn , điều hịa chuyện khơng gặp Với công tắc thông thường , rời khỏi nhà mà quên tắt thiết bị nhà Để tắt thiết bị cách quay trở lại nhà tắt chúng Điều đơi gây cho chúngta nhiều phiền tối Để giải vấn đề , em lựa chọn đề tài : “ THIẾT KẾ MƠ HÌNH NHÀ THƠNG MINH SỬ DỤNG ESP8266” , ứng dụng cơng nghệ IOT vào đời sống Giúp bật tắt thiết bị nhà lúc nơi Đây đề tài không , nhiều anh chị khóa trước thực Nhưng cịn nhiều điểm cần cải thiện tốc độ đáp ứng điều khiển thiết bị giao diện điều khiển thiết bị Vì đề tài em trọng tâm thực việc cải thiện tốc độ điều khiển thiết bị lên mức tối đa , xây dựng giao diện điều khiển thiết bị có tính thẩm mỹ thân thiện với người dùng NỘI DUNG ĐỀ TÀI: - Thiết kế xây dựng mạch điện đo nhiệt độ độ ẩm hiển thị giao tiếp qua web , sử dụng KIT ESP8266, kết nối hiển thị kết máy tính qua WIFI Đặt Vấn Đề: Ngày nay, công nghệ kết nối cần nhắc đến hiển nhiên Wifi – công nghệ kết nối không dây phổ biến Cũng tính phổ biến dạng kết nối mà tên Wifi thường bị lạm dụng để kết nối khơng dây nói chung Lí mà kết nối Wifi ưa chuộng đơn giản khả hoạt động hiệu phạm vi vài chục đến vài trăm mét mạng WLAN Và thời đại công nghiệp hóa đại hóa nay, việc phát minh chế tạo thiết bị thơng minh có khả điều khiển từ xa quan tâm hữu ích cho sống hàng ngày Vì mục tiêu cơng nghệ đại hóa ngày phát triển, em định làm đồ án “Giám sát nhiệt độ độ ẩm điều khiển thiết bị điện qua internet” Đề tài em ngồi việc điều khiển thiết bị độc lập cịn giám sát nhiệt độ nhà Khi dự án hồn thành điều khiển thiết bị điện nhà… cách tương tác qua nút nhấn để hiển thị trạng thái hoạt động điện thoại máy tính Như vậy, dù nơi có internet giám sát điều khiển thiết bị kết nối với module điều khiển Khi dự án thành cơng áp dụng rộng rãi tiện lợi cho sống thường ngày, giúp cho đất nước ngày phát triển PHẦN I CÁC LINH KIỆN ĐƯỢC SỬ DỤNG 1.1 Cảm biến đo nhiệt đọ độ ẩm ( DHT11) DHT11 Là cảm biến nhiệt độ, độ ẩm thơng dụng chi phí rẻ dễ lấy liệu thông qua giao tiếp 1-wire ( giao tiếp digital 1-wire truyền liệu nhất) Cảm biến tích hợp tiền xử lý tín hiệu giúp liệu nhận xác mà khơng cần phải qua tính tốn • Đặc điểm: o Điện áp hoạt động : 3V - 5V (DC) o Dải độ ẩm hoạt động : 20% - 90% RH, sai số ±5%RH o Dải nhiệt độ hoạt động : 0°C ~ 50°C, sai số ±2°C 1.2 o Tần số lấy mẫu tối đa: Hz o Khoảng cách truyển tối đa: 20m • Sơ đồ chân Cảm biến DHT11 gồm chân cấp nguồn, chân tín hiệu Hiện nay, thơng dụng ngồi thị trường có hai loại đóng gói cho DHT11: chân chân Xem hình • Nhận xét: Cảm biến nhiệt độ, độ ẩm DHT11 với giá thành rẻ, dễ sử dụng, thích hợp sử dụng ứng dụng u cầu độ xác khơng cao, mơi trường khơng khắc nghiệt Đèn LED Đèn LED ? LED (viết tắt light-emitting diode, có nghĩa diode phát sáng diode phát quang) diode có khả phát ánh sáng hay tia hồng ngoại, tử ngoại Cũng giống diode, LED cấu tạo từ khối bán dẫn loại p ghép với khối bán dẫn loại n Các loại LED thường gặp LED thường (3mm 5mm) Là loại LED có màu lớp vỏ bên ngồi trùng với ánh sáng phát ra, chẳng hạn sau: Loại LED to sáng yếu, thường dùng mạch tiết kiệm lượng làm LED báo trạng thái Bạn có thấy dịng ghi 3mm 5mm, đường kính LED Mình khơng thích dùng loại đơn giản sáng yếu q ngồi đường khơng thấy hết! Giá LED mua lẻ khoảng 3-5k/10 (tùy vào màu) LED siêu sáng (3mm 5mm) Thực chất LED siêu sáng khơng khác nhiều so với LED thường, chung kích cỡ, có điều sáng lớp vỏ bên suốt Loại đắt gần gấp đôi LED thương, sáng rõ, sáng đẹp "trong suốt" Đây số ví dụ LED siêu sáng, bạn thấy có lớp vỏ không màu phát ánh sáng khác LED dán (SMD) LED dán có cực âm dương Loại có nhiều kiểu kích thước, đặc điểm chung nhỏ hàn mặt đồng mạch Vì vậy, loại LED dùng cho mạch đồng mặt loại mạch in dùng loại nên dùng cho công nghiệp mạch in, kĩ hàn bạn khơng cao tốt khơng nên đụng đến loại LED dán, nhỏ mà tốn công sức để hàn LED RGB (5mm) Nó loại LED siêu sáng thơi lại có đến màu LED (R = red = đỏ; G = Green = xanh lá; B = Blue = Xanh dương) Điều có nghĩa bạn làm LED sáng với màu mà bạn thích Tuy nhiên, phức tạp chút, có chân, có chân dương chung chân RGB, bạn xem hình sau để xác định chân LED RGB Bạn phải dùng xung PWM để điều khiển LED GRB sáng nhiều màu theo ý thích LED GRB có loại LED dán SMD (ứng dụng TV LED) Mình khơng nghiên cứu sâu LED RGB khó cho newbie Mình dành thời gian cho LED RGB sau • • • • Những ứng dụng LED Ứng dụng chiếu sáng trang trí nhà Ứng dụng đèn led công nghiệp Chiếu sáng đường với đèn led Giúp chiếu sáng an ninh khu vực kho bãi, cảng tàu Ứng dụng đèn led nông nghiệp Bổ sung ánh sáng cho trồng Ứng dụng đèn Led y học 1.3 Giới thiệu ESP8266 NodeMCU ESP8266 dịng chip tích hợp Wi-Fi 2.4Ghz lập trình được, rẻ tiền sản xuất công ty bán dẫn Trung Quốc: Espressif Systems Được phát hành vào tháng năm 2014, đóng gói đưa thị trường dạng Module ESP-01 Có khả kết nối Internet qua mạng Wi-Fi cách nhanh chóng sử dụng linh kiện kèm Với giá nói rẻ so với tính khả ESP8266 làm ESP8266 có cộng đồng nhà phát triển giới lớn, cung cấp nhiều Module lập trình mã mở giúp nhiều người tiếp cận xây dựng ứng dụng nhanh Hiện tất dòng chip ESP8266 thị trường mang nhãn ESP8266EX, phiên nâng cấp ESP8266, có 14 phiên ESP đời, phổ biến ESP-12 Hình ảnh thực tế Chip NODEMCU ESP8266 Module ESP8266 có chân dùng để cấp nguồn thực kết nối Chức chân sau: + VCC: 3.3V lên đến 300Ma + GND: Chân Nối đất + Tx: Chân Tx giao thức UART, kết nối đến chân Rx vi điều khiển + Rx: Chân Rx giao thức UART, kết nối đến chân Tx vi điều khiển + RST: chân reset, kéo xuống mass để reset + 10 chân GPIO từ D0 – D8, có chức PWM, IIC, giao tiếp SPI, 1-Wire ADC chân A0 + Kết nối mạng wifi (có thể sử dụng điểm truy cập và/hoặc trạm máy chủ lưu trữ một, máy chủ web), kết nối internet để lấy tải lên liệu Hình 1.7 Hình ảnh sơ đồ chân kết nối ESP8266 Module ESP-12 kết hợp với firmware ESP8266 Arduino thiết kế phần cứng giao tiếp tiêu chuẩn tạo nên NodeMCU, loại Kit phát triển ESP8266 phổ biến thời điểm Với cách sử dụng, kết nối dễ dàng, lập trình, nạp chương trình trực tiếp phần mềm Arduino, đồng thời tương tích với thư viện Arduino sẵn có Sau kết nối cài đặt xong, xuất cổng COM ảo máy tính (Tùy loại hệ điều hành mà có tên cổng như: COM1, COM2 … Windows, /dev/tty.wchusbserial1420 Mac OS, /dev/ttyUSB0 Linux) Mở Arduino IDE lựa chọn (tham khảo cấu hình kết nối hình dưới): Hình Cấu hình Board ESP8266 WiFi Uno • Board: Generic ESP8266 Module • Flash Size: 4M (3M SPIFFS) • Port: chọn cổng gắn thiết bị vào thấy xuất • Upload speed: Chọn cao nhất, nạp không chọn thấp dần • Nạp chương trình xuống board dùng Arduino IDE Trên giao diện Arduino có nút, ngồi bên trái nút Verify, để biên dịch chương trình, tương đương với Sketch > Verify/Compile, nút Upload, tương đương Sketch > Upload Khi lựa chọn board phù hợp, chương trình khơng có lỗi, nhấn Upload nạp chương trình vào board thực thi sau Hình Nạp chương trình • Xuất firmware binary Arduino IDE Với tình cần file Binary, bạn xuất cách Sketch > Export compiled Binary, file bin nằm thư mục Sketch Hình 10 Xuất file Binary • Dự án đọc cảm biến DHT11 gởi Server Trong xây dựng ứng dụng dùng cảm biến DHT11 để thu thập nhiệt độ, độ ẩm môi trường Thông tin nhiệt độ độ ẩm hiển thị máy tính hiển thị trình duyệt web cách truy cập vào địa URL định Một số kiến thức cần thiết : • Nhiệt độ đại lượng thể tính chất vật lý nóng, lạnh vật chất Nhiệt độ đo đơn vị khác biến đổi công thức Trong hệ đo lường quốc tế, nhiệt độ đo đơn vị Kelvin, ký hiệu K Trong đời sống Việt Nam nhiều nước, đo độ C • Độ ẩm tương đối tỷ số áp suất nước hỗn hợp khí với nước so với áp suất nước bão hòa tính theo đơn vị % Định nghĩa khác độ ẩm tương đối tỷ số khối lượng nước thể tích so với khối lượng nước thể tích nước bão hịa • DHT11 cảm biến có khả đo nhiệt độ độ ẩm khơng khí với độ xác vừa phải, giá phải Có thể lấy liệu đo cảm biến giao thức OneWire • Thiết kế ứng dụng Hình ảnh bên mơ tả tổng quan dự án Hình 37 Tổng quan mơ hình dự án Trong thực tế, thiết kế ứng dụng, người dùng cần giao diện giám sát điều khiển thân thiện, đồng thời phát triển thêm tính hiển thị kết dạng đồ thị (chart), lưu trữ liệu theo thời gian định hay điều khiển trạng thái thiết bị với click chuột máy tính Các dự án với mơ hình phức tạp cần quản lí kết nối liệu thiết bị… Chúng ta giải vấn đề thông qua ứng dụng đọc nhiệt độ, độ ẩm môi trường gửi server Đây ứng dụng đơn giản, hữu ích dễ làm Thông qua phần xây dựng ứng dụng IoT thực tế, nắm bắt kiến thức thu thập liệu, xây dựng thiết bị server • Yêu cầu • Dùng cảm biến DHT11 để thu thập nhiệt độ, độ ẩm môi trường kết nối với board mạch ESP8266 • Board mạch ESP8266 kết nối không dây đến mạng WiFi gởi liệu HTTP Server • Phần bản: HTTP Server hiển thị liệu nhiệt độ, độ ẩm hình Log máy tính • Phần nâng cao: HTTP Server lưu trữ liệu, cung cấp file HTML cho người dùng xem qua Browser • Phân tích • Chúng ta cần Web Server viết Javascript, thực thi Node.js, lắng nghe Port định máy tính cá nhân Ở port 8000 • Máy tính phải có kết nối mạng WiFi nội với ESP8266 cần biết địa IP máy tính để ESP8266 truy cập, ví dụ IP 192.168.1.102 • ESP8266 sau kết nối vào mạng WiFi nội bộ, tiến hành đọc thông số nhiệt độ, độ ẩm từ cảm biến DHT11 gởi Server sau giây • Quá trình gởi thực phương thức GET, ví dụ http://192.168.1.102/update?temp=25&humd=80 với 192.168.1.102 địa Web Server, /update đường dẫn, temp=20 humd=80 chứa thông tin nhiệt độ 20 độ C độ ẩm 80% • Web Server trả trạng thái HTTP status = 200 (OK), với việc hiển thị cửa sổ log giá trị nhiệt độ, độ ẩm • Ở phần nâng cao: — Web Server lưu trữ liệu nhiệt độ, độ ẩm mảng, chứa nhớ RAM — Web Server cung cấp file index.html chứa mã Javascript yêu cầu lấy liệu nhiệt độ, độ ẩm lưu RAM, hiển thị lên biểu đồ • Kiến thức Sẽ dễ dàng có kiến thức • Chuẩn truyền liệu OneWire IC • Ngơn ngữ Javascript để xây dựng server cách dùng Node.js • Ngơn ngữ HTML để xây dựng trang html đơn giản nhằm hiển thị liệu Tuy nhiên đừng lo lắng bạn chưa dùng thứ này, hiểu đọc phần • Cảm biến DHT 11 chuẩn liệu OneWire • DHT11 cảm biến có chức đo nhiệt độ, độ ẩm mơi trường, dùng phổ biến giá thành thấp độ ổn định cao Cảm biến sử dụng chuẩn truyền liệu OneWire Thông tin chi tiết DHT11 xem Datasheet • OneWire chuẩn giao tiếp nối tiếp thiết kế hãng Dallas Đó hệ thống bus nhằm kết nối thiết bị với để truyền nhận liệu.Trong chuẩn giao tiếp thường sử dụng chân đồng thời vừa nguồn cung cấp vừa chân truyền nhận liệu Cũng giống chuẩn giao tiếp khác, OneWire gồm giai đoạn reqquest (hỏi) → respond (đáp) → data reading (truyền nhận liệu) Hình ảnh mơ tả q trình truyền,nhận liệu DHT11 hình bên Hình 38 Quá trình truyền nhận liệu chuẩn OneWire Tóm tắt Master (ESP8266) gửi tín hiệu START, DHT11 chuyển từ chế độ tiết kiệm lượng (low-power mode) sang chế độ làm việc bình thường (high-speed mode) DHT11 nhận tín hiệu phản hồi đến master, master nhận tín hiệu bắt đầu q trình truyền liệu DHT11 gửi liệu lên bus, lần gửi gói 40 bits data Khi muốn kết thúc, Master gửi tín hiệu STOP, kết thúc trình truyền nhận liệu 3.1 Các file code Code arduino #include "DHT.h" #include #include #include "ArduinoJson.h" #include #define Addr 0x4A #define ssid "HUNG HUE" #define password "15061971" #define mqtt_server "broker.emqx.io" const uint16_t mqtt_port = 1883; //Port MQT #define topic1 "home/sensors/temperature-humidity" #define DHTPIN #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); Wire.begin(); // Initialise serial communication Wire.beginTransmission(Addr); Wire.write(0x02); Wire.write(0x40); Wire.endTransmission(); delay(300); setup_wifi(); //thực kết nối Wifi client.setServer(mqtt_server, mqtt_port); // cài đặt server lắng nghe client port 1883 client.setCallback(callback); // gọi hàm callback để thực chức publish/subcribe if (!client.connected()) { // Kiểm tra kết nối reconnect(); } client.subscribe("livingroomLight"); client.subscribe("livingroomAirConditioner"); client.subscribe("television"); client.subscribe("bedroomLight"); client.subscribe("bedroomAirConditioner"); client.subscribe("airVent"); pinMode(D0, OUTPUT); // livingroomLight pinMode(D3, OUTPUT); // livingroomAirConditioner pinMode(D5, OUTPUT); // television pinMode(D6, OUTPUT); // bedroomLight pinMode(D7, OUTPUT); // bedroomAirConditioner pinMode(D8, OUTPUT); // airVent dht.begin(); } // Hàm kết nối wifi void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // in thông báo kết nối địa IP ESP8266 Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // Hàm call back để nhận liệu void callback(char *topic, byte *payload, unsigned int length) { // //in tên topic nội dung nhận Serial.print("Co tin nhan moi tu topic: "); Serial.println(topic); char p[length + 1]; memcpy(p, payload, length); p[length] = NULL; String message(p); if (String(topic) == "livingroomLight") { if (message == "livingroomLightOn") { digitalWrite(D0, HIGH); } if (message == "livingroomLightOff") { digitalWrite(D0, LOW); } } if (String(topic) == "livingroomAirConditioner") { if (message == "livingroomAirConditionerOn") { digitalWrite(D3, HIGH); } if (message == "livingroomAirConditionerOff") { digitalWrite(D3, LOW); } } if (String(topic) == "television") { if (message == "televisionOn") { digitalWrite(D5, HIGH); } if (message == "televisionOff") { digitalWrite(D5, LOW); } } if (String(topic) == "bedroomLight") { if (message == "bedroomLightOn") { digitalWrite(D6, HIGH); } if (message == "bedroomLightOFF") { digitalWrite(D6, LOW); } } if (String(topic) == "bedroomAirConditioner") { if (message == "bedroomAirConditionerON") { digitalWrite(D7, HIGH); } if (message == "bedroomAirConditionerOFF") { digitalWrite(D7, LOW); } } if (String(topic) == "airVent") { if (message == "airVentOn") { digitalWrite(D8, HIGH); } if (message == "airVentOff") { digitalWrite(D8, LOW); } } Serial.println(message); //Serial.write(payload, length); Serial.println(); // } // Hàm reconnect thực kết nối lại kết nối với MQTT Broker void reconnect() { while (!client.connected()) // Chờ tới kết nối { if (client.connect("Truong-ESP8266")) //kết nối vào broker { Serial.println("Đã kết nối:"); //đăng kí nhận liệu từ topic client.subscribe("livingroomLight"); client.subscribe("livingroomAirConditioner"); client.subscribe("television"); client.subscribe("bedroomLight"); client.subscribe("bedroomAirConditioner"); client.subscribe("airVent"); } else { // in trạng thái client không kết nối với broker Serial.print("Lỗi:, rc="); Serial.print(client.state()); Serial.println(" try again in seconds"); // Đợi 5s delay(5000); } } } long lastMsg = 0; void loop() { unsigned int data[2]; // if (!client.connected()){// Kiểm tra kết nối // reconnect(); // } client.loop(); // Convert the data to lux int exponent = (data[0] & 0xF0) >> 4; int mantissa = ((data[0] & 0x0F) 6000) { lastMsg = now; int h = dht.readHumidity(); // Read temperature as Celsius (the default) int t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) Wire.beginTransmission(Addr); Wire.write(0x03); Wire.endTransmission(); // Request bytes of data Wire.requestFrom(Addr, 2); // Read bytes of data luminance msb, luminance lsb if (Wire.available() == 2) { data[0] = Wire.read(); data[1] = Wire.read(); } // Convert the data to lux int exponent = (data[0] & 0xF0) >> 4; int mantissa = ((data[0] & 0x0F)