TỔNG QUAN VỂ IoT
Giới thiệu về IoT?
Trong kịch bản thế giới hiện đại, mỗi đồ vật và con người đều sở hữu một định danh riêng, cho phép chúng truyền tải và trao đổi thông tin, dữ liệu qua một mạng duy nhất 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 được trang bị cảm biến để thu thập dữ liệu môi trường, hoạt động như các giác quan, và có thể bao gồm máy tính hoặc bộ điều khiển để xử lý dữ liệu và điều khiển các thiết bị khác Đến năm 2016, Internet Vạn Vật đã đạt được bước tiến quan trọng 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à khái niệm chỉ các đối tượng có thể nhận diện 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à sáng lập Trung tâm Auto-ID tại MIT, nơi thiết lập tiêu chuẩn toàn cầu cho RFID và các loại 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 trong ô tô, thiết bị phân tích DNA, và các công cụ hỗ trợ cứu hỏa Các chuyên gia cho rằng "Vạn Vật" trong IoT là sự kết hợp không thể tách rời giữa phần cứng, phần mềm, dữ liệu và dịch vụ mạng.
Lịch sử
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 diện và tồn tại Đến năm 2016, IoT đã phát triể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 Ý tưởng về 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à độ lạnh Mark Weiser đã mô tả khái niệm điện toán phổ quát vào năm 1991, và Reza Raji đã đề cập đến việc tích hợp dữ liệu từ thiết bị gia dụng đến nhà máy sản xuất trong một bài viết trên IEEE Spectrum năm 1994 Giữa những năm 1993 và 1996, một số công ty như Microsoft và Novell đã đề xuất giải pháp IoT, nhưng chỉ đến năm 1999, lĩnh vực này mới thực sự bắt đầu phát triển mạnh mẽ Bill Joy đã hình dung về truyền tải thiết bị-tới-thiết bị (D2D) trong bộ khung "Six Webs" tại Diễn đàn Kinh tế Thế giới ở Davos 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 and related market analysis publications Kevin Ashton, a co-founder of the Auto-ID Center, identified Radio-Frequency Identification (RFID) as a crucial technology for IoT, coining the term "Internet for Things." By equipping everyday objects and individuals with unique identifiers, computers could effectively manage and track them In addition to RFID, tagging can also be accomplished using technologies such as near field communication, barcodes, QR codes, and digital watermarking.
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 để phân biệt với môi trường xung quanh Việc đánh dấu này có thể được thực hiện bằng nhiều công nghệ như RFID, NFC, mã vạch, mã QR và watermark kỹ thuật số Kết nối các đối tượng này có thể diễn ra 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 mọi thứ dễ dàng kết nối vào Internet và 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à một phần của ý tưởng IoT, nhưng gần đây, nghiên cứu đã bắt đầu kết hợp hai khái niệm này Các máy móc có khả năng nhận biết và phản hồi môi trường (ambient intelligence) cùng với khả năng tự điều khiển (autonomous control) mà không cần kết nối mạng Tương lai của IoT có thể là 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, đồng thời có thể giao tiếp và trao đổi thông tin với nhau.
Tích hợp trí thông minh vào IoT cho phép thiết bị và phần mềm thu thập, phân tích dấu vết điện tử của con người trong quá trình tương tác với các thiết bị thông minh Qua đó, chúng ta có thể phát hiện ra những 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 với 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 thành 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) sẽ 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ệ sinh thái IoT.
Mạng lưới IoT có khả năng kết nối từ 50.000 đến 100.000 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ừ 1.000 đến 5.000 đối tượng có khả năng theo dõi.
1.5.5 Vấn đề không gian, thời gian
Trong IoT, vị trí địa lý chính xác của các vật thể đóng vai trò quan trọng Hiện tại, Internet chủ yếu phục vụ cho việc quản lý thông tin do con người xử lý, khiến cho các yếu tố như địa điểm, thời gian và không gian của đối tượng trở nên ít quan trọng Người xử lý thông tin có thể quyết định tính cần thiết của những thông tin này và bổ sung khi cần Tuy nhiên, IoT có khả năng thu thập một lượng lớn dữ liệu, bao gồm cả dữ liệu thừa về địa điểm, dẫn đến việc xử lý dữ liệu trở nên 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 để phục vụ cho 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ế thân thiện với người dùng Đặc biệt, kit này 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 và ứng dụng trên ESP8266.
Bộ Kit RF thu phát Wifi ESP8266 NodeMCU Lua là giải pháp lý tưởng cho các ứng dụng 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 cho các dự án liên quan đến Internet of Things (IoT).
Kit RF phát Wifi ESP8266 NodeMCU Lua sử dụng chip CP2102 mới, ổn định và có khả năng tự nhận driver trên mọi hệ điều hành như Windows và Linux Đây là phiên bản nâng cấp so với các phiên bản trước sử dụng IC nạp giá rẻ 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 nhất 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 Bộ tiền xử lý tín hiệu tích hợp giúp cung cấp dữ liệu chính xác mà không cần tính toán thêm Tuy nhiên, so với cảm biến DHT22 hiện đại hơn, 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 cung cấp điện áp ngõ ra ổn định, ngay cả khi điện áp ngõ vào thay đổi liên tục và không ổn định Nó 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: Điện áp vào lớn nhất: 20V Điện áp vào nhỏ nhất: 7V
Kiểu đóng vỏ: TO-220
Nhiệt độ hoạt động lớn nhất: 85°C
Nhiệt độ hoạt động nhỏ nhất: -20°C
Dòng đầu ra: 1.5A Điện áp ổn định: 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 đầu vào hoặc đầu 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 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 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à một 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ó cung cấp nhiều tính năng hữu ích như chức năng debug, tích hợp Git, syntax highlighting, tự hoàn thành mã thông minh và snippets Bên cạnh đó, Visual Studio Code cho phép người dùng tùy chỉnh giao diện, phím tắt và các tùy chọn khác để nâng cao trải nghiệm lập trình.
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à độ tin cậy cao Nó hoạt động hiệu quả trên các mạng lưới không ổn định nhờ vào một Broker nhẹ, dễ cài đặt và không bị ràng buộc vào ứng dụng cụ thể nào, mang lại tính mở và 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 truyền tải giữa đầu phát và đầu thu được mã hóa dưới dạng các bit 0 và 1, và để đảm bảo nhận diện chính xác, hai bên cần thống nhất một giao thức Giao thức quy định cách thức đóng gói dữ liệu, số lượng bit liên tục đại diện cho một ký tự, cũng như thời điểm bắt đầu và kết thúc quá trình truyền tải.
Các bit start và stop (bit bắt đầu và dừng)
Truyền dữ liệu nối tiếp bất đồng bộ là phương pháp phổ biến để truyền ký tự, trong đó mỗi ký tự được bao quanh bởi một bit start và một hoặc hai bit stop, tạo thành khung dữ liệu Bit start luôn là 1 bit với mức thấp (0), trong khi bit stop có thể là 1 hoặc 2 bit với mức cao (1) Hình 8.3 minh họa cấu trúc dữ liệu gửi đi, và hình 8.4 cung cấp ví dụ về việc gửi ký tự “A” với mã ASCII là 0b01000001.
Hình 3.1.2: gửi đi ký tự “A”
Trong hình 8.4, tín hiệu ở mức cao được sử dụng để đánh dấu trạng thái sẵn sàng gửi dữ liệu khi không có dữ liệu nào được truyền đi Khoảng cách giữa các ký tự đượ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 bảo tính toàn vẹn của dữ liệu, một số hệ thống sẽ thêm bit parity vào mỗi byte ký tự trong khung dữ liệu hợp lệ Bit parity có thể là lẻ hoặc chẵn; nếu là lẻ, tổng số bit 1 sẽ là lẻ và bit parity sẽ là 1, ngược lại, 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 chọn chế độ parity chẵn, lẻ hoặc không có 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à bước tiến lớn trong việc ứng dụng khóa công khai, giúp bảo mật thông tin trong thương mại điện tử RSA được coi là an toàn, miễn là độ dài khóa được sử dụng đủ 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, cho phép người dùng truy cập vào WebServer được xây dựng trên ESP8266 Qua đó, người dùng có thể điều khiển các thiết bị mà ESP8266 quản lý thông qua điện thoại hoặc máy tính.
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ị 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 cung cấp.
Station và Access Point Mode
ESP8266 tạo ra một 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 vớ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ị mà nó quản lý, đồng thời cập nhật trạng thái lên Internet Ngoài ra, có thể sử dụng một thiết bị khác để kết nối với server lưu trữ dữ liệu, từ đó điều khiển trạng thái ON/OFF của các thiết bị mà ESP8266 quản lý.
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 ngưỡng báo động, hệ thống sẽ tự động kích hoạt quạt và gửi thông báo đến người dùng Trong thời gian báo động, người dùng không thể tắt quạt, ngoại trừ thiết bị đèn Nếu sau 30 giây nhiệt độ vẫn không giảm xuống dưới mức báo động, chuông và đèn LED sẽ phát tín hiệu cảnh báo và hệ thống sẽ gửi Email đế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 của thiết bị cho 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 đóng vai trò quan trọng trong việc 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 khi nguồn gặp sự cố sụt áp đột ngột, trong khi tụ C3, với tính chất gốm và trở kháng lớn, giúp ngăn chặn sự tăng áp đột ngột, giữ cho dạng sóng điện áp đầu vào ổn định và tránh hiện tượng răng cưa.
Tụ C2 và C4 được sử dụng để lọc điện áp 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 cho tải khi điện áp đột ngột sụt giảm, trong khi tụ C4 có trở kháng lớn và giúp lọc nhiễu điện áp đầu ra, loại bỏ các điện áp không mong muốn gây ra dạng sóng điện áp ngõ ra hình răng cưa.
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 =>Role không làm việc.
Khi tín hiệu đầu vào đạt mức 1 (tương đương 5V), dòng điện sẽ được hạn chế qua R6 và phân áp qua R9, khiến Q1 dẫn thông Lúc này, dòng Ice chạy qua cuộn dây và Q1 đạt tối đa, làm cho role đóng tiếp điểm thường mở, điều kiện cho thiết bị hoạt động.
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 mạch ổn áp LM7805 để tạo ra dòng điện 5V Dòng điện này được truyền vào Gateway kết nối với loa, và Gateway kết nối với thiết bị qua chân D1 và D2 để nhận dữ liệu về nhiệt độ và độ ẩm từ module DHT11 Tín hiệu sẽ được gửi về thiết bị qua broker (Gateway) Nếu nhiệt độ vượt quá 30°C, thiết bị sẽ nhận cảnh báo, đèn LED và quạt sẽ tự động kích hoạ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ị.
Bằng cách sử dụng transistor, dòng điện từ thiết bị được khuếch đại, tạo ra dòng khép kín giữa cực C và E Nguồn 5V từ LM7805 được cung cấp để nuôi hai thiết bị: một là đèn LED cảnh báo và hai là 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 phát triển bởi Dennis Ritchie vào năm 1971, là nền tảng để viết hệ điều hành UNIX Một trong những ưu điểm nổi bật của C là tính linh hoạt, cho phép lập trình viên phát triển ứng dụng 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à mã nguồn 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, chỉ cần sử dụng các trình biên dịch phù hợp.
Ngôn ngữ lập trình C được xem là ngôn ngữ trung cấp, kết hợp giữ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 Để tạo ra mã máy hiệu quả, không chỉ cần 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 lĩnh vự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 hiện nay là một ngôn ngữ lập trình thông dịch, phát triển dựa trên các ý niệm nguyên mẫu và được sử dụng rộng rãi trong nhiều ứng dụng web.
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 Nó giúp định kiểu cho các yếu tố được viết bằng ngôn ngữ đánh dấu như HTML, cho phép điều khiển định dạng của nhiều trang web cùng lúc, tiết kiệm công sức cho người viết CSS phân biệt cách hiển thị của trang web với nội dung chính bằng cách điều chỉnh bố cục, màu sắc và font chữ.
HTML là ngôn ngữ đánh dấu chủ yếu được sử 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 để nâng cao tính năng và giao diện của trang web.
Các trình duyệt web nhận tài liệu HTML từ máy chủ web 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 không chỉ mô tả cấu trúc ngữ nghĩa của một trang web mà còn bao gồm các chỉ thị ban đầu để định hình sự xuất hiện của tài liệu.
Các phần tử HTML là khối xây dựng cơ bản của 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 tài liệu có cấu trúc thông qua việc thể hiện ngữ nghĩa cho văn bản, bao gồm 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 phân đị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ư
cung cấp thông tin về văn bản và có thể chứa các thẻ khác Mặc dù các trình duyệt không hiển thị các thẻ HTML, nhưng chúng sử dụng chúng để diễn giải nội dung của trang.
HTML có thể nhúng các chương trình được viết bằng scripting như JavaScript, điều này ảnh hưởng đến hành vi và nội dung của các trang web Việc bao gồm CSS xác định giao diện và bố cục của nội dung World Wide Web Consortium (W3C), trước đây là đơn vị bảo trì HTML và là người duy trì hiện tại của các tiêu chuẩn CSS, đã khuyến khích việc sử dụng CSS trên HTML trình bày rõ ràng kể từ năm 1997.
Node.js là một nền tảng phần mềm mạnh mẽ cho việc phát triển ứng dụng internet có khả năng mở rộng, đặc biệt là máy chủ web Được lập trình bằng JavaScript, Node.js sử dụng kỹ thuật điều khiển sự kiện và nhập/xuất không đồng bộ để giảm thiểu chi phí 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 nhiều thư viện hỗ trợ khác.
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 tài liệu, trong đó dữ liệu được lưu trữ dưới dạng document kiểu JSON thay vì bảng như trong cơ sở dữ liệu quan hệ, giúp tăng tốc độ truy vấn một cách đáng kể.
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ữ thông tin.
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");
DesLen=0; if(rsa.Receive(buff,&BEGIN,&END,m,&DesLen))
Serial.println("-Nhan tu getway:");
Serial.println((char*)m); request((char*)m);
The code snippet checks for errors and executes button functions, while monitoring temperature against a maximum threshold If the temperature is below the specified limit, it records the current time; otherwise, it evaluates whether the relay has been active for a duration exceeding 10 seconds.
//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;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 checkButton2 variable is set to 0, and onoff2 is set to 1 If the status of checkSend is false, the relay output will be updated in the GUI, and checkSend will be marked as true.
} 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);
DesLen=0; if(rsa.Receive(buff,&BEGIN,&END,m,&DesLen))
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;i