TỔNG QUAN VỂ IoT
Giới thiệu về IoT?
Trong kịch bản của thế giới hiện đại, mỗi đồ vật và con người đều được gán một định danh riêng, cho phép chúng có khả năng truyền tải và trao đổi thông tin, dữ liệu qua một mạng duy nhất Điều này diễn ra mà không cần sự tương tác trực tiếp giữa người với người hay giữa người với máy tính.
Các thiết bị IoT là những vật phẩm được trang bị cảm biến để thu thập dữ liệu môi trường, hoặc là các máy tính/bộ điều khiển nhận dữ liệu và điều khiển thiết bị khác Đến năm 2016, Internet Vạn Vật đã có những bước tiến đáng kể nhờ sự kết hợp của nhiều công nghệ như truyền tải vô tuyến dày đặc, phân tích dữ liệu thời gian thực, học máy, cảm biến hàng hóa và hệ thống nhúng.
Hình 1.1: Mô tả tương tác của mạng lưới thiết bị kết nối internet
Thuật ngữ
Internet of Things (IoT) là thuật ngữ chỉ các đối tượng có thể nhận biết và tồn tại trong một kiến trúc kết nối, được giới thiệu bởi Kevin Ashton vào năm 1999 Ông là nhà khoa học sáng lập Trung tâm Auto-ID tại MIT, nơi thiết lập quy chuẩn toàn cầu cho RFID và các cảm biến khác IoT bao gồm nhiều thiết bị đa dạng như máy theo dõi nhịp tim, cảm biến trên xe hơi, và thiết bị phân tích DNA, phục vụ cho nhiều mục đích từ y tế đến cứu hộ Nhiều luật gia cho rằng "Vạn Vật" nên được xem là một tổng thể không thể tách rời của phần cứng, phần mềm, dữ liệu và dịch vụ mạng.
Lịch sử
Vào năm 1999, Kevin Ashton đã giới thiệu cụm từ Internet of Things (IoT) để chỉ các đối tượng có thể được nhận biết và tồn tại trong mạng lưới Đến năm 2016, IoT đã có những bước tiến mạnh mẽ nhờ sự kết hợp của nhiều công nghệ như truyền tải vô tuyến, phân tích dữ liệu thời gian thực, học máy, cảm biến hàng hóa và hệ thống nhúng Những hệ thống này, bao gồm mạng cảm biến không dây và tự động hóa nhà thông minh, đóng góp quan trọng vào hoạt động của IoT Ý tưởng về một mạng lưới thiết bị thông minh đã được thảo luận từ năm 1982, khi một máy bán nước Coca-Cola tại Đại học Carnegie Mellon trở thành thiết bị đầu tiên kết nối Internet, có khả năng báo cáo kiểm kho và nhiệt độ Bản mô tả về điện toán phổ quát của Mark Weiser vào năm 1991 cùng với các nghiên cứu từ các viện UbiComp và PerCom đã góp phần định hình tầm nhìn hiện đại về IoT Năm 1994, Reza Raji đã mô tả khái niệm này trên tờ IEEE Spectrum, nhấn mạnh việc tích hợp và tự động hóa từ thiết bị gia dụng đến nhà máy sản xuất.
Giữa năm 1993 và 1996 một số công ty đề xuất giải pháp như at Work của Microsoft hay NEST của Novell However, only in 1999 did the field start gathering momentum.
Bill Joy đã hình dung về phương thức truyền tải thiết bị-tới-thiết bị (D2D) như một phần trong bộ khung "Six Webs" của ông, điều này được ông trình bày tại Diễn đàn Kinh tế Thế giới ở Davos vào năm 1999.
The concept of the Internet of Things (IoT) gained popularity in 1999 through the Auto-ID Center at the Massachusetts Institute of Technology, alongside market analysis publications Kevin Ashton, a co-founder of the Auto-ID Center, identified Radio-frequency identification (RFID) technology as a crucial enabler for IoT, preferring the term "Internet for Things." By equipping everyday objects and people with unique identifiers, computers could effectively manage and inventory them In addition to RFID, various technologies such as near field communication, barcodes, QR codes, and digital watermarking can also facilitate the tagging of items.
Khả nănng định danh độc nhất
Điểm quan trọng của IoT là khả năng nhận diện và định dạng các đối tượng, bao gồm cả con người, thông qua việc "đánh dấu" chúng Việc này cho phép quản lý các đối tượng bằng máy tính một cách hiệu quả Các công nghệ như RFID, NFC, mã vạch, mã QR và watermark kỹ thuật số được sử dụng để thực hiện việc đánh dấu Kết nối giữa các đối tượng có thể được thực hiện qua Wi-Fi và mạng viễn thông băng rộng, tạo ra một không gian địa chỉ rộng lớn giúp dễ dàng kết nối vào Internet và giữa các đối tượng với nhau.
Xu hướng và tính chất
Sự thông minh và tự động trong điều khiển không phải là yếu tố chính của IoT, nhưng các máy móc có khả năng nhận biết và phản hồi môi trường xung quanh mà không cần kết nối mạng Gần đây, nghiên cứu đã bắt đầu kết hợp IoT với autonomous control, mở ra khả năng cho một mạng lưới các thực thể thông minh có khả năng tự tổ chức và hoạt động độc lập theo tình huống và môi trường Các thực thể này cũng có thể giao tiếp và trao đổi thông tin với nhau, tạo ra một hệ thống thông minh hơn.
Việc tích hợp trí thông minh vào IoT cho phép các thiết bị và phần mềm thu thập, phân tích dấu vết điện tử từ sự tương tác của con người, từ đó phát hiện ra tri thức mới liên quan đến cuộc sống, môi trường, mối tương tác xã hội và hành vi con người.
1.5.2 Kiến trúc dựa trên sự kiện
Các thiết bị và máy móc trong IoT sẽ phản ứng dựa trên các sự kiện xảy ra trong quá trình hoạt động theo thời gian thực Nhiều nhà nghiên cứu đã chỉ ra rằng mạng lưới cảm biến là một phần cơ bản của IoT.
1.5.3 Là một hệ thống phức tạp
Trong một thế giới mở, Internet of Things (IoT) trở nên phức tạp do sự kết nối đa dạng giữa các thiết bị, máy móc và dịch vụ Sự phức tạp này còn được gia tăng bởi khả năng tích hợp các yếu tố mới vào hệ thống.
Mạng lưới IoT có khả năng kết nối từ 50 đến 100 nghìn tỉ đối tượng, cho phép theo dõi sự di chuyển của từng đối tượng Trong môi trường đô thị, một người có thể bị bao quanh bởi từ 1000 đến 5000 đối tượng có khả năng theo dõi, tạo ra một hệ sinh thái thông minh và liên kết chặt chẽ.
1.5.5 Vấn đề không gian, thời gian
Trong IoT, vị trí địa lý chính xác của một vật rất quan trọng Hiện nay, Internet chủ yếu phục vụ cho việc quản lý thông tin do con người xử lý, do đó các thông tin về địa điểm, thời gian và không gian của đối tượng thường không được coi trọng Tuy nhiên, IoT có khả năng thu thập lượng lớn dữ liệu, bao gồm cả dữ liệu về địa điểm, dẫn đến nguy cơ xử lý dữ liệu không hiệu quả Thêm vào đó, việc xử lý khối lượng lớn dữ liệu trong thời gian ngắn để đáp ứng nhu cầu hoạt động của các đối tượng là một thách thức lớn hiện nay.
GIỚI THIỆU THIẾT BỊ VÀ PHẦN MỀM SỬ DỤNG TRONG HỆ THỐNG
Kit RF Thu Phát Wifi ESP8266 NodeMCU Lua CP2102
Kit RF thu phát Wifi ESP8266 NodeMCU Lua 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, kit này cho phép lập trình và nạp code trực tiếp qua trình biên dịch của 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.
Bộ Kit RF phát Wifi ESP8266 NodeMCU Lua là giải pháp lý tưởng cho các ứng dụng yêu cầu kết nối, thu thập dữ liệu và điều khiển thông qua sóng Wifi, đặc biệt phù hợp với các dự án IoT.
Kit RF phát Wifi ESP8266 NodeMCU Lua sử dụng chip CP2102, mang lại khả năng nạp và giao tiếp UART ổn định Chip này tự động nhận driver trên mọi hệ điều hành Windows và Linux, là phiên bản nâng cấp từ các IC nạp giá rẻ như CH340.
- Hỗ trợ Arduino IDE 1 và Arduino ESP8266.
- Tích hợp Wi-Fi 2.4Ghz
- Nguồn vào: Cấp nguồn 5V và chương trình thông qua cổng USB.
- Nguồn ra: hoạt động từ 3.3V tới 3.6V
- IC chính: ESP8266 Wifi SoC.
Hình 2.2 Sơ đồ chân của ESP8266 NodeMCU Lua CP21
Cảm biến nhiệt độ, độ ẩm DHT11
Cảm biến DHT11 là một trong những cảm biến độ ẩm và nhiệt độ phổ biến hiện nay nhờ vào giá thành rẻ và khả năng thu thập dữ liệu dễ dàng qua giao tiếp 1 wire Bộ tiền xử lý tín hiệu tích hợp trong DHT11 giúp cung cấp dữ liệu chính xác mà không cần tính toán phức tạp Tuy nhiên, so với DHT22, DHT11 có khoảng đo và độ chính xác kém hơn đáng kể.
Thông tin kỹ thuật của cảm biến nhiệt độ, độ ẩm DHT11:
- Dòng sử dụng: 2.5mA max (khi truyền dữ liệu).
- Đo tốt ở độ ẩm 2080%RH với sai số 5%.
- Đo tốt ở nhiệt độ 0°C to 50°C sai số ±2°C.
- Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần).
- Kích thước: 15mm x 12mm x 5.5mm.
Hình 2.3: sơ đồ chân module DHT11
Mạch ổn áp LM7805
IC 7805 là một loại IC ổn áp cung cấp điện áp ngõ ra ổn định, bất chấp sự biến đổi liên tục của điện áp ngõ vào IC này luôn duy trì mức điện áp dương so với điện áp nối mass (GND) và được thiết kế với 3 chân.
Hình 2.4: sơ đồ chân IC LM7805
Thông số kỹ thuật của thiết bị bao gồm điện áp vào lớn nhất là 20V và nhỏ nhất là 7V, kiểu đóng vỏ TO-220 Nhiệt độ hoạt động tối đa đạt 85°C và tối thiểu là -20°C Thiết bị có dòng đầu ra 1.5A và điện áp ổn định là 5V.
Điện trở kéo lên
Điện trở là thành phần quan trọng trong thiết kế mạch điện tử logic, với một đầu kết nối với nguồn điện áp dương (thường là Vcc hoặc Vdd) và đầu còn lại nối với tín hiệu vào hoặc ra của mạch logic chức năng.
Phần mềm Arduino (Arduino IDE)
Arduino IDE là phần mềm mã nguồn mở chính thức, được thiết kế để viết và biên dịch mã cho các module Arduino Phần mềm này giúp đơn giản hóa quá trình biên dịch, cho phép ngay cả những người không có kiến thức kỹ thuật cũng có thể sử dụng một cách dễ dàng.
Hình 2.5.1: Giao diện của Arduino
Hình 2.5.2 Setup cổng kết nối
Phần mềm Visual Studio Code
Visual Studio Code là trình biên tập mã mạnh mẽ do Microsoft phát triển, tương thích với Windows, Linux và macOS Nó tích hợp chức năng debug, hỗ trợ Git, và cung cấp tính năng syntax highlighting, tự hoàn thành mã thông minh, cùng với snippets và cải tiến mã nguồn Người dùng có thể tùy chỉnh trải nghiệm làm việc bằng cách thay đổi theme, phím tắt và các tùy chọn khác.
NGUYÊN LÝ HOẠT ĐỘNG
Các giao thức được sử dụng trong hệ thống
Giao thức truyền thông theo mô hình publish/subscribe là giải pháp lý tưởng cho các thiết bị IoT, đặc biệt trong môi trường có băng thông thấp và yêu cầu độ tin cậy cao Với khả năng hoạt động hiệu quả trong các mạng lưới không ổn định, giao thức này dựa trên một Broker nhẹ, giúp giảm thiểu xử lý Thiết kế mở của nó cho phép dễ dàng cài đặt và không bị giới hạn bởi ứng dụng cụ thể nào, mang lại sự linh hoạt cho người dùng.
Là một trong những hình thức giao tiếp kỹ thuật số giữa thiết bị với thiết bị đơn giản và lâu đời nhất.
Truyền nối tiếp bất đồng bộ
Dữ liệu đến đầu thu bao gồm các bit 0 và 1, và việc nhận diện dữ liệu này trở nên khó khăn nếu không có sự thống nhất giữa đầu phát và đầu thu về một tập hợp quy tắc, gọi là giao thức Giao thức xác định cách thức đóng gói dữ liệu, số lượng bit liên tục cho mỗi ký tự, cũng như thời điểm bắt đầu và dừng truyền tải.
Bit start và bit stop là thành phần quan trọng trong truyền dữ liệu nối tiếp bất đồng bộ, thường được sử dụng để truyền ký tự Mỗi ký tự được bao quanh bởi một bit start và một bit stop, tạo thành khung dữ liệu Trong khung dữ liệu này, bit start luôn là 1 bit, trong khi bit stop có thể là 1 hoặc 2 bit.
Bit bắt đầu luôn có giá trị 0 (mức thấp) trong khi bit kết thúc có giá trị 1 (mức cao) Hình 8.3 minh họa cấu trúc dữ liệu cần gửi đi, trong khi hình 8.4 cung cấp ví dụ về việc gửi ký tự “A” với mã ASCII là 0b01000001, chỉ sử dụng một bit bắt đầu và một bit kết thúc.
Hình 3.1.2: gửi đi ký tự “A”
Trong hình 8.4, tín hiệu ở mức cao đánh dấu trạng thái chờ sẵn sàng để gửi dữ liệu khi không có dữ liệu nào được truyền Khoảng cách giữa các ký tự liên tiếp được gọi là "Space" Các ký tự trong bảng mã ASCII chuẩn có độ dài 7-bit, trong khi ASCII mở rộng có độ dài 8-bit Một số hệ thống sử dụng bit parity để duy trì toàn vẹn dữ liệu, tức là mỗi byte ký tự có thể có thêm một bit parity Bit parity có thể là lẻ hoặc chẵn; nếu là lẻ, tổng số bit 1 sẽ là lẻ, và nếu là chẵn, tổng số bit 1 sẽ là chẵn Ví dụ, mã ASCII của ký tự “A” là 0b0100 0001 với bit parity chẵn là 0 Các vi mạch UART cho phép lập trình viên lựa chọn giữa parity chẵn, lẻ hoặc không sử dụng bit kiểm tra parity.
RSA là một thuật toán mã hóa khóa công khai quan trọng trong mật mã học, nổi bật với khả năng tạo chữ ký điện tử và mã hóa đồng thời Đây là một bước tiến lớn trong việc sử dụng khóa công cộng, góp phần nâng cao an ninh trong thương mại điện tử RSA hiện đang được áp dụng rộng rãi và được coi là an toàn khi sử dụng với độ dài khóa đủ lớn.
Hình 3.1.1: Nguyên lý hoạt động của RSA
3.1.4 Các chế độ hoạt động của ESP8266
Trong chế độ ACP, ESP8266 hoạt động như một điểm phát WiFi và chúng ta sẽ thiết lập một WebServer cho ESP8266 Điều này cho phép người dùng truy cập vào WebServer từ điện thoại hoặc máy tính để điều khiển các thiết bị mà ESP8266 quản lý.
Xây dựng WebServer với địa chỉ IP của ESP8266 kết nối mạng Wifi cho phép người dùng điều khiển thiết bị dễ dàng Sau khi thiết lập, người dùng có thể sử dụng điện thoại hoặc laptop để kết nối với mạng Wifi và truy cập vào địa chỉ IP của WebServer do ESP8266 phát ra.
Station và Access Point Mode
ESP8266 tạo ra mạng Wifi cho phép người dùng truy cập từ máy tính hoặc điện thoại, đồng thời kết nối Internet Chúng ta có thể xây dựng WebServer trên ESP8266 để điều khiển trạng thái ON/OFF của thiết bị và cập nhật thông tin lên Internet Ngoài ra, có thể sử dụng thiết bị khác để kết nối với server lưu trữ dữ liệu, từ đó quản lý trạng thái ON/OFF của các thiết bị mà ESP8266 điều khiển.
Lưu đồ giải thuật
Hình 3.1.1: Lưu đồ giải thuật của hệ thống
Giải thích cách hoạt động:
Cho Device đọc dữ liệu của ccamr biến và trạng thái của thiết bị.
Khi nhiệt độ vượt quá mức an toàn, hãy kích hoạt quạt và thông báo cho người dùng Trong thời gian báo động, người dùng sẽ không thể tắt quạt, ngoại trừ thiết bị đèn.
Nếu sau 30 giây nhiệt độ không giảm xuống dưới mức cảnh báo, hệ thống sẽ kích hoạt chuông và đèn LED để báo động, đồng thời gửi email thông báo đến tất cả người dùng đã đăng ký.
Ngược lại nhiệt độ bình thường thì hệ thống sẽ hoạt động bình thường.
Khi người dùng điều khiển thiết bị qua phần cứng hoặc phần mềm, hệ thống sẽ thông báo trạng thái hiện tại của thiết bị đến người dùng thông qua ứng dụng.
Sơ đồ nguyên lý
Hình 3.2.1: Sơ đồ nguyên lý của hệ thống
Tụ C1 và C3 được sử dụng để lọc điện áp đầu vào cho chân Vi của IC 7805 Tụ C1 cung cấp điện áp tạm thời cho chân Vi khi nguồn gặp sự cố sụt áp, trong khi tụ C3, là tụ gốm với trở kháng lớn, có tác dụng ngăn ngừa sự tăng áp đột ngột, giúp duy trì dạng sóng điện áp đầu vào ổn định và tránh hiện tượng hình răng cưa.
Tụ C2 và C4 đóng vai trò quan trọng trong việc lọc điện áp cung cấp cho tải từ chân Vo của IC 7805 Tụ C2 cung cấp điện áp tạm thời khi điện áp tải bị sụt đột ngột, trong khi tụ C4 với trở kháng lớn giúp lọc nhiễu điện áp đầu ra, loại bỏ các điện áp không mong muốn và cải thiện hình dạng sóng điện áp ngõ ra.
Khi tín hiệu đưa vào là mức 0 (Tức =0V) thì Q1 không dẫn do không có dòng IBE =>
Khi tín hiệu đầu vào đạt mức 1 (tức là 5V), dòng điện sẽ được hạn chế qua R6 và phân áp qua R9, khiến cho Q1 dẫn điện Lúc này, dòng Ice sẽ chạy qua cuộn dây và Q1.
Max, Role đóng tiếp điểm thường mở (ĐK thiết bị nào đó).
DIODE 1 trong mạch có tác dụng chống lại dòng điện cảm ứng do cuộn đây sinh ra làm hỏng transistor.
Mục đích của R6 là tạo dòng vào cực B của trans tới ngưỡng bão hòa để trans hoạt động như 1 chiếc khóa có điều kiện.
Cấp nguồn 12V cho mạch, dòng điện đi qua ổn áp LM7805 để tạo ra 5V, sau đó kết nối với Getway và loa Getway kết nối với thiết bị qua chân D1, D2 để nhận dữ liệu nhiệt độ và độ ẩm từ module DHT11 Nếu nhiệt độ vượt quá 30°C, thiết bị sẽ nhận cảnh báo, kích hoạt đèn LED và quạt để làm mát và thông báo cho người dùng Nếu sau 10 giây nhiệt độ vẫn không giảm, loa sẽ được kích hoạt và tiếp tục gửi tín hiệu về thiết bị.
Thông qua transistor, tín hiệu từ thiết bị được khuếch đại, tạo ra dòng điện khép kín giữa C và E Nguồn 5V từ LM7805 được sử dụng để cung cấp năng lượng cho thiết bị 1 (đèn LED cảnh báo) và thiết bị 2 (quạt).
THI CÔNG MẠCH
Giới thiệu những thành phần sử dụng trong App
Ngôn ngữ C được dùng để viết hệ điều hành UNIX bởi Dennis Ritchie vào năm 1971.
Một trong những ưu điểm lớn nhất của ngôn ngữ lập trình C là tính linh hoạt, cho phép các nhà phát triển viết chương trình mà không bị ràng buộc bởi phần cứng hay hệ thống cụ thể Điều này có nghĩa là chương trình C có thể được biên dịch và chạy trên nhiều hệ điều hành khác nhau, như Windows và Linux, mà không cần thay đổi mã nguồn Sự phụ thuộc vào trình biên dịch cho phép việc xây dựng và chạy chương trình trên các hệ thống khác nhau trở nên dễ dàng hơn.
Ngôn ngữ lập trình C được xem là ngôn ngữ trung cấp vì nó kết hợp ưu điểm của ngôn ngữ bậc cao và khả năng truy cập sâu vào hệ thống như ngôn ngữ bậc thấp, thông qua các con trỏ và hàm Assembly Để tạo ra mã máy hiệu quả, không chỉ cần một thiết kế chương trình tốt mà còn phải chú ý đến các chi tiết cài đặt nhỏ, đặc biệt trong các hệ thống nhúng.
Bên cạnh ưu điểm, C cũng có những nhược điểm sau:
Code lớn và không hiệu quả bằng assembly Không hỗ trợ trực tiếp kiểu stack
Khó viết các hàm xử lý ngắt.
4.1.2 Ngôn ngữ lập trình JavaScript
JavaScript, theo phiên bản hiện tại, là một ngôn ngữ lập trình thông dịch phát triển từ các nguyên tắc cơ bản Ngôn ngữ này được sử dụng phổ biến trong việc phát triển ứng dụng web và tương tác người dùng.
JavaScript có cú pháp tương tự C, nhưng nó gần với Self hơn Java .js là phần mở rộng thường được dùng cho tập tin mã nguồn JavaScript.
CSS, hay còn gọi là Cascading Style Sheet, là ngôn ngữ dùng để tạo phong cách cho trang web, giúp định kiểu cho các yếu tố viết bằng ngôn ngữ đánh dấu như HTML Ngôn ngữ này cho phép điều chỉnh định dạng của nhiều trang web cùng lúc, tiết kiệm công sức cho lập trình viên CSS phân tách cách hiển thị của trang web với nội dung chính, điều khiển bố cục, màu sắc và font chữ một cách hiệu quả.
HTML là ngôn ngữ đánh dấu chủ yếu dùng để xây dựng các trang web trên Internet Nó có thể được hỗ trợ bởi các công nghệ như CSS và các ngôn ngữ lập trình như JavaScript.
Các trình duyệt web nhận tài liệu HTML từ server hoặc kho lưu trữ cục bộ và chuyển đổi chúng thành các trang web đa phương tiện HTML định nghĩa cấu trúc ngữ nghĩa của trang web và cung cấp các dấu hiệu ban đầu cho việc hiển thị tài liệu.
Các phần tử HTML là những khối xây dựng cơ bản của các trang web, cho phép nhúng hình ảnh và các đối tượng tương tác như biểu mẫu HTML tạo ra cấu trúc tài liệu thông qua việc biểu thị ngữ nghĩa cho văn bản, bao gồm các tiêu đề, đoạn văn, danh sách, liên kết và trích dẫn Các phần tử HTML được xác định bằng các thẻ trong dấu ngoặc nhọn, như và để đưa nội dung vào trang, trong khi các thẻ như
bao quanh và mô tả văn bản Mặc dù trình duyệt không hiển thị các thẻ HTML, nhưng chúng rất quan trọng trong việc diễn giải nội dung của trang.
HTML cho phép nhúng các chương trình scripting như JavaScript, ảnh hưởng đến hành vi và nội dung của trang web CSS được sử dụng để xác định giao diện và bố cục của nội dung Tổ chức W3C, trước đây là đơn vị bảo trì HTML và hiện là người duy trì các tiêu chuẩn CSS, đã khuyến khích việc sử dụng CSS trên HTML từ năm 1997.
Node.js là một nền tảng phần mềm lý tưởng để phát triển các ứng dụng internet có khả năng mở rộng, đặc biệt là máy chủ web Được xây dựng bằng ngôn ngữ JavaScript, Node.js sử dụng kỹ thuật điều khiển theo sự kiện và nhập/xuất không đồng bộ, giúp giảm thiểu chi phí tổng thể và tối ưu hóa khả năng mở rộng Nền tảng này bao gồm động cơ V8 JavaScript của Google, libUV cùng với một số thư viện khác, mang đến hiệu suất cao cho các ứng dụng.
Truy cập: https://nodejs.org/en/download/
Lựa chọn phiên bản theo máy của bạn
Cài đặt NodeJS trên Windows rất đơn giản, chấp nhận các tùy chọn mặc định và nhấn "Next Next" cho tới bước cuối cùng.
Theo mặc định, phần mềm NPM cũng được cài đặt vào hệ thống của bạn Đây là một phần mềm quản lý các thư viện Javascript.
Mở cửa sổ CMD và thực thi các lệnh sau để kiểm tra phiên bản của NodeJS và npm -v
4.1.5 ReactJS là một thư viện JavaScript front-end mã nguồn mở miễn phí để xây dựng giao diện người dùng dựa trên các thành phần UI Nó được duy trì bởi Meta và một cộng đồng các nhà phát triển và công ty cá nhân.
Sử dụng cmd và dán các câu lệnh sau : npm install -g create-react-app create-react-app your-app-name cd your-app-name npm start
MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, là cơ sở dữ liệu thuộc NoSql và được hàng triệu người sử dụng.
MongoDB là một cơ sở dữ liệu hướng tài liệu, nơi dữ liệu được lưu trữ dưới dạng document kiểu JSON Khác với các cơ sở dữ liệu quan hệ sử dụng bảng, MongoDB cho phép truy vấn dữ liệu nhanh chóng và hiệu quả hơn.
Trong cơ sở dữ liệu quan hệ, khái niệm bảng được sử dụng để lưu trữ dữ liệu, ví dụ như trong MySQL hay SQL Server Ngược lại, MongoDB sử dụng khái niệm collection thay vì bảng để tổ chức và lưu trữ dữ liệu.
So với RDBMS thì trong MongoDB collection ứng với table, còn document sẽ ứng với row , MongoDB sẽ dùng các document thay cho row trong RDBMS.
Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu lưu trữ không cần tuân theo một cấu trúc nhất định.
Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thông qua ngôn ngữ truy vấn MongoDB
CODE hoạt động
Code Getway: if ((millis() - lastDebounceTime) > debounceDelay) { if (reading != btnState) { btnState = reading; if (btnState == LOW) { if (onoff == 0) { onoff = 1; digitalWrite(output1, 1);
} void button2(){ int reading = digitalRead(BUTTON2); if (reading != lastBtnState2) { lastDebounceTime2 = millis();
} if ((millis() - lastDebounceTime2) > debounceDelay) { if (reading != btnState2) { btnState2 = reading; if (btnState2 == LOW) { if (onoff2 == 0) { onoff2 = 1; checkButton2 = 1; checkSend = true; digitalWrite(output2, 1);
} else { onoff2 = 0; checkButton2=1; checkSend = false; digitalWrite(output2, 0);
} void readDHT(){ float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); t = random(27,40); h = random(55,70);
// Nếu nhiệt độ lớn hơn 33 thì if(temp > tempCompareMax && state2 ){ // Nếu nhiệt độ lớn hơn mà động cơ chưa bật digitalWrite(output2, 0); checkButton2 = 0; onoff2 = 1; if(!checkSend){
} } else if (temp < tempCompareMin && !state2){ if(checkButton2 == 0){ digitalWrite(output2, 1); digitalWrite(ledRed, 0); onoff2 = 0; if(checkSend){ guiStateRelay(output2); checkSend = false;
} } } } void demo_TIMER(int w){ if ((unsigned long) millis() - t_demo >= max_demo) { t_demo = millis(); guiDHT(w);
Serial.begin (BAUD_RATE); dht.begin();
// - swSer.begin(BAUD_RATE); pinMode(BUTTON1, INPUT); pinMode(BUTTON2, INPUT); pinMode(output1, OUTPUT); pinMode(output2, OUTPUT);
// pinMode(Buzzer, OUTPUT); pinMode(ledRed, OUTPUT); digitalWrite(output1,1); digitalWrite(output2,1); digitalWrite(ledRed,0); readStateRelay();
Serial.println("\nRSA serial test started");
} void loop() { DesLen=0; if(rsa.Receive(buff,&BEGIN,&END,m,&DesLen)) { if(DesLen>0) {
Serial.println("-Nhan tu getway:");
Serial.println((char*)m); request((char*)m);
The code snippet checks for errors and executes button functions If the temperature is below a specified maximum, it records the current time If the relay state remains active for over 10 seconds, it triggers a warning after a set duration.
//Getway sẽ nhận goi từ esp8266 là nhiệt độ độ ẩm //còn esp8266 sẽ nhận điều khiển contac từ gói của getway
#define mqtt_pwd "doan1thanhnhanvituong"
MQTTClient client; char* ssid = "NhanSgu"; char* pass = "123456789"; char r; int idrl; char w; char cstr[255]; byte en[255]; byte pac[255];
// Hàm kết nối wifi void setup_wifi() { delay(10);
WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500);
} void callback(String topic, String payload) { deserializeJson(doc, payload);
JsonObject obj = doc.as(); int IDGW = obj["idgw"]; if(IDGW == 1){ for(int i=0;i0)
Serial.println("-Nhan tu DV 2:");
Serial.println("=========================================================="); if(r==1 && idrl=){ client.publish("doan1/relay1/state",(char*)m); return;
DHT dht(DHTPin, DHTTYPE); // Initialize DHT sensor.
#define BAUD_RATE 9600 static unsigned long t_demo = 0;
/* current counting time for LCD Display */ unsigned long max_demo = 5*1000; float tempCompareMax = 32; float tempCompareMin = 29;
The code initializes a DynamicJsonDocument with a size of 1024 and sets up various variables for temperature, humidity, and button states It includes debounce timing mechanisms to prevent false triggers from button presses, with specific variables for tracking the last button states and debounce times The code also prepares buffers for data storage and defines a warning time of 30 seconds, indicating a potential alert state Additionally, it features a function named rsaSend that is likely responsible for sending data, although its implementation is not provided in the excerpt.
Serial.println((char*)cstr); yield(); rsa.Send(cstr);
} void readStateRelay(){ lastBtnState = state1 = digitalRead(output1); lastBtnState2 = state2 = digitalRead(output2);
} void guiDHT (int w) { readDHT(); readStateRelay(); for(int i=0;i debounceDelay) { if (reading != btnState) { btnState = reading; if (btnState == LOW) { if (onoff == 0) { onoff = 1; digitalWrite(output1, 1);
} void button2(){ int reading = digitalRead(BUTTON2); if (reading != lastBtnState2) { lastDebounceTime2 = millis();
} if ((millis() - lastDebounceTime2) > debounceDelay) { if (reading != btnState2) { btnState2 = reading; if (btnState2 == LOW) { if (onoff2 == 0) { onoff2 = 1; checkButton2 = 1; checkSend = true; digitalWrite(output2, 1);
} else { onoff2 = 0; checkButton2=1; checkSend = false; digitalWrite(output2, 0);
} float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); t = random(27,40); h = random(55,70);
If the temperature exceeds 33 degrees, and the engine is not yet activated, the system will turn off the output The state is monitored, and if the conditions are met, the relay will be activated to reflect this change, ensuring proper functionality while preventing unnecessary activation.
} } else if (temp < tempCompareMin && !state2){ if(checkButton2 == 0){ digitalWrite(output2, 1); digitalWrite(ledRed, 0); onoff2 = 0; if(checkSend){ guiStateRelay(output2); checkSend = false;
} } } } void demo_TIMER(int w){ if ((unsigned long) millis() - t_demo >= max_demo) { t_demo = millis(); guiDHT(w);
Serial.begin (BAUD_RATE); dht.begin();
// - swSer.begin(BAUD_RATE); pinMode(BUTTON1, INPUT); pinMode(BUTTON2, INPUT); pinMode(output1, OUTPUT); pinMode(output2, OUTPUT);
// pinMode(Buzzer, OUTPUT); pinMode(ledRed, OUTPUT); digitalWrite(output1,1); digitalWrite(output2,1); digitalWrite(ledRed,0);
} void loop() { DesLen=0; if(rsa.Receive(buff,&BEGIN,&END,m,&DesLen)) { if(DesLen>0) {
Serial.println("-Nhan tu getway:");
Serial.println((char*)m); request((char*)m);
} } else Serial.println("Nhan error:"); button1(); button2(); if (temp < tempCompareMax){ startMillisTemp = millis(); demo_TIMER(0);
} else{ if((unsigned long)millis() - startMillisTemp >= warningTime){ // Nếu trạng thái của relay1 luôn bật trong khoảng thời gian 10s
//Getway sẽ nhận goi từ esp8266 là nhiệt độ độ ẩm //còn esp8266 sẽ nhận điều khiển contac từ gói của getway
#define mqtt_pwd "doan1thanhnhanvituong"
MQTTClient client; char* ssid = "NhanSgu"; char* pass = "123456789"; char r; int idrl; char w; char cstr[255]; byte en[255]; byte pac[255];
// Hàm kết nối wifi void setup_wifi() { delay(10);
WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500);
} void callback(String topic, String payload) { deserializeJson(doc, payload);
JsonObject obj = doc.as(); int IDGW = obj["idgw"]; if(IDGW == 1){ for(int i=0;i0) { request((char*)m);
Serial.println("-Nhan tu DV 2:");
Serial.println("=========================================================="); if(r==1 && idrl=){ client.publish("doan1/relay1/state",(char*)m); return;
Hình 4.7.1: Sơ đồ mô phỏng
Hình 4.7.2: sơ đồ mạch in
The directory structure of a React.js application is essential for creating interactive elements that allow users to engage with the system effectively Access the source code of the system at the provided link for further insights into its implementation.
Cấu trúc thư mục của broker MQTT
Nếu tài khoản chưa đăng ký
Sau khi đăng ký xong thì đăng nhập vào broker
Trang nhiệt độ độ ẩm
Các trường của document dht11 khóa chính là ID
Các trường của document email khóa chính là ID
Các trường của document relay1 khóa chính là ID
Các trường của document relay2 khóa chính là ID
Các trường của document user khóa chính là ID
Thành phẩm
Dễ sử dụng Có thể thay thế 2 ESP8266 bằng Arduino hay con vi điều khiển khác Giá linh kiện rẻ
Nhược điểm Khoảng cách liên kết của hai ESP ngắn
KẾT LUẬT VÀ HƯỚNG PHÁT TRIỂN
Ưu nhược điểm của hệ thống
Dễ sử dụng Có thể thay thế 2 ESP8266 bằng Arduino hay con vi điều khiển khác Giá linh kiện rẻ
Nhược điểmKhoảng cách liên kết của hai ESP ngắn