Một trong những đặc điểm nổi bật của cách mạng công nghiệp 4.0 là sự hội nhập sâurộng giữa thế giới vật lý và không gian số thông qua các công nghệ tiên tiến như Internetvạn vật IoT, trí
CƠ SỞ LÝ THUYẾT
Tầm quan trọng của việc quản lý lượng nước tiêu thụ
Quản lý và giám sát lượng nước tiêu thụ là yếu tố quan trọng trong việc sử dụng nước sạch hiệu quả và bền vững, góp phần bảo vệ nguồn tài nguyên quý giá Hoạt động này không chỉ cần thiết cho các hộ gia đình mà còn có vai trò thiết yếu trong các công ty, ngành công nghiệp sản xuất nước và chính sách quản lý tài nguyên nước của chính phủ, nhằm hướng tới phát triển kinh tế bền vững và bảo vệ môi trường.
Trong bối cảnh khan hiếm nước sạch, đặc biệt ở các thành phố lớn và vùng nông thôn, áp lực giám sát và quản lý nguồn nước đang gia tăng Các nhà quản lý và công ty sản xuất nước sạch phải đối mặt với thách thức cung cấp nước ổn định để đáp ứng nhu cầu ngày càng cao, trong khi tài nguyên nước ngày càng hạn chế.
Tiêu thụ nước quá mức tại các hộ gia đình có thể gây ra thiếu hụt nguồn cung nghiêm trọng, dẫn đến tăng giá nước sinh hoạt và ảnh hưởng tiêu cực đến chất lượng nước sản xuất Điều này không chỉ ảnh hưởng đến lợi ích của người tiêu dùng mà còn tác động đến các công ty sản xuất nước Quản lý hiệu quả nhu cầu sử dụng nước giúp giảm lãng phí và tối ưu hóa sản xuất nước sạch tại địa phương, từ đó đảm bảo cân bằng giữa cung và cầu, cũng như duy trì các tiêu chuẩn an toàn và vệ sinh.
Lợi ích của việc giám sát lượng nước sạch sử dụng:
Hệ thống giám sát nước cho hộ gia đình cho phép theo dõi chi tiết lượng nước tiêu thụ 24/24, giúp người dùng đưa ra giải pháp sử dụng nước hợp lý và tiết kiệm Điều này không chỉ ngăn chặn tình trạng lãng phí mà còn phát hiện kịp thời sự cố rò rỉ ống nước.
Công ty và nhà máy sản xuất nước có thể giảm chi phí nhân công nhập liệu hàng tháng, đồng thời tránh sai sót trong việc thu thập dữ liệu bằng tay Điều này giúp họ dễ dàng lập kế hoạch sản xuất nước nhằm đáp ứng nhu cầu của khu vực.
Tìm hiểu về công nghệ Lora
LoRa (Long Range) là giao thức truyền thông không dây do Semtech phát triển, nhằm kết nối tầm xa với mức tiêu thụ năng lượng thấp Công nghệ này tối ưu hóa khả năng giao tiếp cho các thiết bị thông minh trong hệ sinh thái IoT, đồng thời Liên minh LoRa đang nỗ lực đảm bảo tính tương tác giữa các mạng trên quy mô toàn quốc.
Công nghệ LoRa nổi bật với khả năng sử dụng phổ tín hiệu có mức nhiễu điện từ rất thấp, cho phép truyền tín hiệu xa mà không bị gián đoạn, ngay cả khi xuyên qua các vật cản như tòa nhà Nhờ vào tính năng này, LoRa trở thành lựa chọn lý tưởng cho các thiết bị IoT có dung lượng pin hạn chế và cho phép sử dụng linh kiện giá rẻ hơn, từ đó giảm chi phí sản xuất thiết bị tích hợp LoRa.
Gateway LoRa có khả năng quản lý hàng triệu node, tạo ra mạng lưới rộng lớn với nhiều thiết bị kết nối Phạm vi phủ sóng rộng của tín hiệu giúp giảm yêu cầu về cơ sở hạ tầng mạng, tối ưu hóa chi phí xây dựng hệ thống LoRa Mạng LoRa có thể tích hợp với cơ sở hạ tầng hiện có như tháp viễn thông, giảm bớt hạn chế về xây dựng Các tính năng của LoRa, như thuật toán tốc độ dữ liệu thích ứng, tối đa hóa tuổi thọ pin và dung lượng mạng Giao thức của LoRa bao gồm nhiều lớp mã hóa, đảm bảo an toàn cho thông tin liên lạc Tính hai chiều của giao thức hỗ trợ thông điệp quảng bá, cho phép cập nhật phần mềm dễ dàng.
2.2.2 Phạm vi hoạt động và mức tiêu thụ năng lượng của LoRa
Công nghệ LoRa hoạt động trên kiến trúc mạng hình ngôi sao, cho phép các thiết bị đầu cuối giao tiếp trực tiếp với các gateway hoặc trạm cơ sở Hệ thống này sử dụng các dải tần số khác nhau tùy thuộc vào khu vực địa lý, chủ yếu trong băng tần ISM (Công nghiệp, Khoa học và Y tế) và SRD (Thiết bị Ngắn hạn).
Tại châu Âu, LoRa sử dụng các dải tần từ 433,05 MHz đến 434,79 MHz và từ 863 MHz đến 870 MHz, phù hợp với quy định tần số không cần cấp phép Trong khi đó, Bắc Mỹ cho phép dải tần từ 902 MHz đến 928 MHz cho truyền dữ liệu, mang lại kết nối mạnh mẽ và ổn định cho nhiều ứng dụng IoT.
Mạng LoRa nổi bật với khả năng hoạt động hiệu quả và tiết kiệm năng lượng, cho phép các cảm biến IoT duy trì hoạt động liên tục trong nhiều năm mà không cần thay pin Điều này đặc biệt quan trọng cho các ứng dụng giám sát lâu dài ở những khu vực khó tiếp cận hoặc không có nguồn điện trực tiếp.
LoRa, nhờ vào kiến trúc tối ưu và khả năng sử dụng các dải tần khác nhau cho từng khu vực, mang lại sự linh hoạt và hiệu quả cao trong triển khai giải pháp IoT Công nghệ này không chỉ mở ra cơ hội phát triển mạng lưới kết nối rộng khắp mà còn giúp tiết kiệm chi phí vận hành, đồng thời hỗ trợ quản lý tài nguyên, năng lượng và các ứng dụng thông minh một cách hiệu quả.
2.2.3 Nguyên lý hoạt động của Lora
LoRa sử dụng kỹ thuật điều chế Chirp Spread Spectrum (CSS) để tối ưu hóa truyền dẫn tín hiệu trong mạng không dây khoảng cách xa Nguyên lý hoạt động của kỹ thuật này bắt đầu bằng việc băm dữ liệu gốc bằng các xung cao tần, tạo ra tín hiệu có tần số cao hơn Tín hiệu cao tần sau đó được mã hóa bằng các chuỗi chirp signal, bao gồm up-chirp (tần số tăng) cho bit 1 và down-chirp (tần số giảm) cho bit 0 Cuối cùng, tín hiệu đã được mã hóa sẽ được phát qua anten để truyền đi.
Theo Semtech, nguyên lý LoRa mang lại nhiều lợi thế, giúp giảm độ phức tạp và yêu cầu độ chính xác của mạch nhận, từ đó cải thiện hiệu quả giải mã và điều chế dữ liệu LoRa không cần công suất phát lớn nhưng vẫn có khả năng truyền xa vượt trội, cho phép tín hiệu được thu nhận ở khoảng cách xa ngay cả khi độ mạnh tín hiệu thấp hơn nhiễu môi trường Nhờ đó, LoRa trở thành giải pháp lý tưởng cho các ứng dụng IoT cần tiết kiệm năng lượng và đảm bảo hiệu suất truyền dữ liệu ổn định trên phạm vi rộng.
Băng tần hoạt động của LoRa từ 430MHz đến 915MHz được phân chia theo từng khu vực trên thế giới, nhằm tuân thủ các quy định về tần số và đáp ứng nhu cầu ứng dụng tại các quốc gia hoặc vùng lãnh thổ cụ thể.
+ 433MHz hoặc 866MHz cho châu Âu;
2.2.4 Chế độ hoạt động của Lora
Module có thể được cấu hình truyền và nhận dữ liệu ở một trong hai chế độ:
Chế độ cố định cho phép hai module giao tiếp với nhau ngay cả khi hoạt động ở tần số phát khác nhau, miễn là chúng đã biết địa chỉ và tần số của nhau Tuy nhiên, chế độ này chỉ hỗ trợ một kênh liên lạc độc lập, trong đó chỉ có hai module truyền và nhận dữ liệu, đảm bảo tính bảo mật và giảm nhiễu từ các module khác trong hệ thống Điều này rất phù hợp cho các ứng dụng cần kết nối ổn định, riêng biệt và không bị gián đoạn.
Hình 2 1 Chế độ fixed mode
Chế độ broadcast là một phương thức truyền dữ liệu trong đó tất cả các module được cấu hình ở chế độ này và có cùng tần số phát sẽ nhận được dữ liệu từ một module truyền Điều này hoàn toàn trái ngược với chế độ fixed, nơi mà chỉ một module cụ thể nhận dữ liệu.
Hình 2 2 Chế độ boadcast mode
2.2.5 Ưu điểm và ứng dụng của công nghệ LoRa
Công nghệ LoRa (Long Range) nổi bật với những ưu điểm vượt trội, đặc biệt trong các hệ thống truyền thông không dây yêu cầu tầm xa và tiết kiệm năng lượng Những đặc điểm này khiến LoRa trở thành lựa chọn lý tưởng cho các ứng dụng IoT và các hệ thống truyền thông không dây trong nhiều ngành công nghiệp khác nhau.
LoRa có khả năng truyền tín hiệu xa, lên đến hàng kilômét, và vượt qua các chướng ngại vật như tường và công trình xây dựng mà vẫn duy trì chất lượng tín hiệu tốt Điều này rất hữu ích trong các môi trường rộng lớn như nông thôn, khu công nghiệp và thành phố đông đúc.
Tiết kiệm năng lượng là một trong những ưu điểm nổi bật của công nghệ LoRa, với mức tiêu thụ năng lượng rất thấp, giúp kéo dài tuổi thọ cho các thiết bị trong mạng IoT mà không cần thay pin thường xuyên Nhiều cảm biến và thiết bị sử dụng LoRa có thể hoạt động liên tục trong nhiều năm mà không cần bảo trì, từ đó tiết kiệm chi phí và thời gian cho người sử dụng.
Giới thiệu về Node,js
Node.js là nền tảng mã nguồn mở miễn phí, lý tưởng cho việc phát triển ứng dụng mạng và web thời gian thực Khác với PHP hay Java, Node.js sử dụng JavaScript cho mã phía máy chủ, tạo ra môi trường xử lý bất đồng bộ mạnh mẽ Điều này cho phép lập trình viên sử dụng cùng một ngôn ngữ cho cả phía máy khách và máy chủ, từ đó tiết kiệm thời gian và tài nguyên Node.js đặc biệt phù hợp cho các ứng dụng web có lưu lượng truy cập cao, cũng như các ứng dụng thời gian thực như chat, livestream và game trực tuyến.
Node.js nổi bật với tính khả chuyển cao, cho phép chạy trên nhiều hệ điều hành như Windows, Linux, macOS và Unix Sự phổ biến của Node.js được thúc đẩy bởi cộng đồng phát triển mã nguồn mở mạnh mẽ, giúp đơn giản hóa quá trình phát triển ứng dụng thông qua hệ sinh thái phong phú của các thư viện có sẵn trên npm.
Node.js là nền tảng JavaScript phía máy chủ dựa trên công nghệ V8 của Google Chrome, nổi bật với cơ chế bất đồng bộ và không chặn, cho phép xử lý hàng nghìn kết nối đồng thời mà không giảm hiệu suất Hệ thống quản lý gói npm (Node Package Manager) mạnh mẽ giúp người dùng dễ dàng cài đặt và sử dụng thư viện bên ngoài Nhờ vào những đặc điểm này, Node.js rất phù hợp cho việc phát triển ứng dụng tương tác cao như web thời gian thực, API RESTful và ứng dụng IoT Mặc dù có một số hạn chế, như không hỗ trợ tốt cho ứng dụng tính toán nặng và không lý tưởng cho các tính toán đồng bộ phức tạp, Node.js vẫn là lựa chọn tuyệt vời cho các ứng dụng cần mở rộng và hiệu suất cao.
Tổng quan về ReactJS
ReactJS là thư viện JavaScript mã nguồn mở do Facebook phát triển, nhằm tạo ra giao diện người dùng (UI) hiệu quả, linh hoạt và dễ quản lý Thư viện này tập trung vào việc xử lý các thành phần giao diện trong mô hình MVC (Model-View-Controller).
ReactJS, với kiến trúc View-Controller, là công cụ quan trọng giúp phát triển ứng dụng web hiện đại một cách nhanh chóng và hiệu quả Thiết kế đơn giản và dễ sử dụng của ReactJS mang lại hiệu suất cao, làm cho nó trở thành lựa chọn hàng đầu cho việc phát triển các ứng dụng giao diện tương tác.
ReactJS nổi bật với khả năng tái sử dụng các thành phần, cho phép lập trình viên chia giao diện thành các phần nhỏ, độc lập và dễ quản lý Thay vì thao tác trực tiếp với DOM, React sử dụng Virtual DOM để tối ưu hóa cập nhật giao diện, mang lại tốc độ cao và hiệu suất tối ưu cho ứng dụng.
Hình 2 9 LOGO của React.js
ReactJS là một thư viện phổ biến trong phát triển web, đặc biệt cho các ứng dụng hiện đại với giao diện tương tác và trải nghiệm người dùng tối ưu Nó không chỉ mạnh mẽ cho phát triển phía client mà còn tích hợp hiệu quả với các công cụ như Next.js để xây dựng ứng dụng phía server.
2.5.2 Các đặc điểm của ReactJS
ReactJS sử dụng cú pháp JSX, cho phép kết hợp mã JavaScript và HTML trong cùng một tệp, từ đó làm cho việc phát triển giao diện trở nên trực quan và dễ dàng hơn Điều này không chỉ tăng tính tương tác mà còn cải thiện trải nghiệm lập trình.
Thư viện này sở hữu cơ chế quản lý trạng thái mạnh mẽ, hỗ trợ không chỉ qua các Hooks có sẵn mà còn tích hợp với các thư viện quản lý trạng thái như Redux và MobX, giúp xử lý các ứng dụng phức tạp một cách hiệu quả.
ReactJS cho phép tái sử dụng các thành phần, giúp xây dựng giao diện phức tạp bằng cách kết hợp các thành phần nhỏ hơn Điều này không chỉ giảm thiểu sự lặp lại mã mà còn tối ưu hóa hiệu quả trong quy trình phát triển các dự án lớn.
+ Được thiết kế để tương thích với các thư viện và framework khác, ReactJS linh hoạt và có thể tích hợp dễ dàng vào bất kỳ dự án nào;
ReactJS không phải là một framework toàn diện như Angular hay Vue, mà chỉ tập trung vào việc phát triển giao diện người dùng Sự đơn giản này giúp ReactJS trở nên nhẹ nhàng, dễ học và dễ sử dụng, phù hợp cho cả các dự án nhỏ lẫn lớn.
2.5.3 Các chức năng của ReactJS
ReactJS mang đến nhiều tính năng mạnh mẽ, hỗ trợ lập trình viên trong việc phát triển các ứng dụng web hiệu quả, dễ bảo trì và mở rộng Những chức năng chính của ReactJS bao gồm khả năng tái sử dụng component, quản lý trạng thái hiệu quả và tối ưu hóa hiệu suất, giúp tăng cường trải nghiệm người dùng.
ReactJS hỗ trợ mô-đun hóa giao diện người dùng bằng cách chia nhỏ thành các thành phần tái sử dụng Mỗi thành phần có thể đại diện cho một phần nhỏ của giao diện hoặc là một ứng dụng hoàn chỉnh.
Tái sử dụng mã là một phương pháp hiệu quả trong phát triển ứng dụng, cho phép các thành phần được sử dụng ở nhiều vị trí khác nhau mà không cần viết lại, từ đó giảm thiểu sự lặp lại và tiết kiệm thời gian phát triển Điều này không chỉ giúp mã trở nên dễ bảo trì hơn mà còn đặc biệt hữu ích trong các dự án phức tạp.
ReactJS cải thiện hiệu suất ứng dụng bằng cách sử dụng Virtual DOM, giúp giảm số lần cập nhật thực tế lên DOM Khi có thay đổi trạng thái, React so sánh Virtual DOM với DOM thực để chỉ cập nhật các phần cần thiết, từ đó tối ưu hóa hiệu suất.
+ Cập nhật hiệu quả: Quá trình này giúp React nhanh chóng và hiệu quả trong việc render giao diện mà không làm gián đoạn trải nghiệm người dùng;
JSX là cú pháp mở rộng của JavaScript, cho phép tích hợp mã HTML trực tiếp trong JavaScript, giúp việc phát triển giao diện người dùng trở nên trực quan và dễ hiểu hơn.
+ Giảm độ phức tạp: Với JSX, bạn có thể kết hợp logic JavaScript với cấu trúc
HTML mà không cần phải chuyển đổi qua lại giữa các tệp HTML và JavaScript;
Context API cho phép quản lý trạng thái toàn cục, giúp chia sẻ dữ liệu giữa các thành phần trong ứng dụng mà không cần truyền props qua nhiều cấp độ Điều này rất hữu ích khi cần chia sẻ dữ liệu giữa nhiều thành phần mà không phải truyền từng thuộc tính một cách thủ công.
React Router là thư viện quan trọng trong việc điều hướng trang cho ứng dụng React, cho phép quản lý URL và hiển thị các thành phần tương ứng với từng URL mà người dùng truy cập, từ đó hỗ trợ việc xây dựng ứng dụng SPA (Single Page Application).
Giới thiệu về ngôn ngữ HTML
HTML ( viết tắt của HyperText Markup Language, hay là "Ngôn ngữ Đánh dấu
HTML, hay "Siêu văn bản", là ngôn ngữ đánh dấu được thiết kế để tạo ra các trang web với thông tin được trình bày trên World Wide Web Nó có thể được coi là bộ khung cốt lõi của giao diện web HTML đã trở thành một chuẩn Internet do tổ chức World Wide Web Consortium (W3C) duy trì Đáng lưu ý, HTML không phải là ngôn ngữ lập trình mà là ngôn ngữ trình bày.
Hình 2 10 Giới thiệu về HTML
2.6.2 Cấu trúc cây HTML cơ bản
Cấu trúc HTML rất đơn giản và hợp lý, với bố cục từ trên xuống dưới và từ trái qua phải, bao gồm hai phần chính là HEAD và BODY Tất cả các website được viết bằng HTML đều tuân theo cấu trúc cơ bản này.
+ Mọi trang HTML đều phải khai báo DOCTYPE (định nghĩa chuẩn văn bản) ngay từ dòng đầu tiên;
+ Thẻ cho trình duyệt biết mở đầu và kết thúc của trang HTML;
+ Thẻ chứa tiêu đề và các thông tin khai báo, các thông tin ẩn khác;
+ Thẻ sẽ hiển thị nội dung của trang web Đây là phần thông tin mà người dùng sẽ nhìn thấy khi trình duyệt đọc các mã HTML;
+ Mọi kí tự nằm giữa dấu sẽ được xem là thẻ comment và sẽ bị trình duyệt bỏ qua, không xử lý và không hiển thị.
Giới thiệu về CSS
CSS (Cascading Style Sheets) là ngôn ngữ dùng để tìm và định dạng các phần tử do ngôn ngữ đánh dấu như HTML tạo ra Trong khi HTML chịu trách nhiệm tạo ra cấu trúc của website với các đoạn văn, tiêu đề và bảng, CSS giúp thêm phong cách cho các phần tử HTML bằng cách thay đổi màu sắc, kiểu chữ và cấu trúc của trang web.
Việc sử dụng CSS giúp giảm thiểu sự lộn xộn trong mã HTML của trang web bằng cách sử dụng các thẻ định dạng như chữ đậm, chữ in nghiêng và màu sắc, từ đó làm cho mã nguồn trở nên gọn gàng hơn CSS tách biệt nội dung và định dạng hiển thị, giúp việc cập nhật nội dung trở nên dễ dàng hơn Hơn nữa, CSS cho phép tạo ra các kiểu dáng có thể áp dụng cho nhiều trang web, tránh việc lặp lại định dạng cho các trang tương tự.
Giới thiệu về JavaScript
JavaScript là ngôn ngữ lập trình kịch bản phổ biến trong phát triển web, giúp tạo ra các trang web động và tương tác Ngôn ngữ này có khả năng hoạt động cả trên máy chủ và trình duyệt, cho phép cập nhật nội dung trang web mà không cần tải lại.
JavaScript là một ngôn ngữ lập trình bậc cao, khác với HTML và CSS, cho phép các nhà phát triển tạo ra hiệu ứng động, xử lý sự kiện người dùng và tương tác với cơ sở dữ liệu Nó hỗ trợ lập trình hướng đối tượng, xử lý bất đồng bộ và tích hợp với các thư viện như React, Angular, và Node.js, giúp phát triển ứng dụng web và di động nhanh chóng và hiệu quả Ngoài việc phát triển web, JavaScript còn được sử dụng để xây dựng trò chơi, ứng dụng máy tính để bàn và các ứng dụng IoT, đáp ứng nhu cầu đa dạng của người dùng và doanh nghiệp.
2.8.2 Tác dụng và ứng dụng của JavaScript
JavaScript là yếu tố then chốt trong việc nâng cao trải nghiệm người dùng trên web, cho phép xây dựng các trang web động và ứng dụng web phong phú Một số ứng dụng chính của JavaScript bao gồm việc tạo ra các hiệu ứng tương tác, xử lý dữ liệu trên trình duyệt và cải thiện tốc độ tải trang.
JavaScript cho phép tương tác hiệu quả với người dùng bằng cách xử lý các sự kiện như nhấp chuột, di chuột và nhập liệu từ bàn phím, giúp trang web phản hồi ngay lập tức mà không cần phải tải lại trang.
JavaScript cho phép truy cập và chỉnh sửa nội dung các phần tử HTML trên trang web thông qua DOM (Document Object Model) Điều này tạo điều kiện cho việc tạo ra các hiệu ứng động linh hoạt, như thay đổi màu sắc, chuyển động, và ẩn/hiện các phần tử tùy thuộc vào hành vi của người dùng, mang đến trải nghiệm tương tác hơn cho người sử dụng.
JavaScript hỗ trợ xử lý dữ liệu bất đồng bộ, cho phép thực hiện các tác vụ như gọi API và tải dữ liệu từ máy chủ mà không làm gián đoạn trải nghiệm người dùng Điều này thường được thực hiện thông qua các công nghệ như AJAX hoặc Fetch API.
JavaScript là nền tảng cho các thư viện và framework nổi bật như React, Angular và Vue.js, giúp tối ưu hóa quá trình phát triển ứng dụng web, làm cho nó trở nên nhanh chóng và dễ dàng hơn.
Giới thiệu về Mongoose và MongoDB
MongoDB là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở, nổi bật với mô hình lưu trữ dữ liệu dạng tài liệu Khác với các hệ quản trị cơ sở dữ liệu quan hệ như MySQL hay PostgreSQL, MongoDB lưu trữ dữ liệu dưới dạng các "document" với cấu trúc cặp khóa-giá trị, tương tự định dạng JSON.
MongoDB là giải pháp lý tưởng cho các ứng dụng cần mở rộng dễ dàng và xử lý khối lượng dữ liệu lớn mà không gặp phải giới hạn của cơ sở dữ liệu quan hệ Nó phù hợp cho việc lưu trữ dữ liệu không có cấu trúc cố định hoặc có cấu trúc linh hoạt, lý tưởng cho các ứng dụng web, di động và các dự án yêu cầu tốc độ xử lý cao.
Mongoose là thư viện JavaScript giúp kết nối và thao tác với cơ sở dữ liệu MongoDB trong ứng dụng Node.js Thư viện này cung cấp công cụ mạnh mẽ để mô hình hóa dữ liệu, cho phép người dùng làm việc với các tài liệu một cách dễ dàng thông qua các mô hình và phương thức truy vấn.
Mongoose là một công cụ mạnh mẽ giúp bạn xây dựng cấu trúc dữ liệu chặt chẽ tương tự như trong các hệ quản trị cơ sở dữ liệu quan hệ, nhờ vào khả năng định nghĩa các schema và mô hình hóa dữ liệu một cách dễ dàng và chính xác Thư viện này không chỉ hỗ trợ xác thực dữ liệu và tự động sinh ID, mà còn cung cấp các tính năng bổ sung như middleware, cho phép thực hiện các hoạt động trước và sau khi lưu trữ dữ liệu trong cơ sở dữ liệu MongoDB.
2.9.3 Ứng dụng của Mongoose và MongoDB
Mongoose và MongoDB là hai công nghệ phổ biến được áp dụng trong phát triển ứng dụng web, từ các ứng dụng nhỏ gọn cho đến các hệ thống quản lý dữ liệu phức tạp, giúp tạo ra các ứng dụng web động hiệu quả.
Các ứng dụng di động, bao gồm dịch vụ chat và quản lý dữ liệu người dùng, thường sử dụng MongoDB để lưu trữ dữ liệu MongoDB cung cấp khả năng lưu trữ linh hoạt, dễ mở rộng và đảm bảo hiệu suất cao, đặc biệt là khi xử lý quy mô lớn.
MongoDB là lựa chọn lý tưởng cho các hệ thống phân tích dữ liệu lớn và không có cấu trúc, phục vụ cho các ứng dụng như phân tích dữ liệu, báo cáo, thống kê và quản lý dữ liệu phức tạp đa chiều.
Mongoose và MongoDB là những công cụ lý tưởng cho các ứng dụng yêu cầu tốc độ và hiệu suất cao, cho phép xây dựng hệ thống xử lý và lưu trữ dữ liệu nhanh chóng Chúng đặc biệt phù hợp cho các dịch vụ trực tuyến, trang web thương mại điện tử và nền tảng mạng xã hội.
Phần mềm Arduino IDE
Arduino IDE là phần mềm mã nguồn mở, chủ yếu dùng để viết và biên dịch mã code cho các dự án điện tử Phần cứng của nó bao gồm tới 300,000 board mạch được thiết kế sẵn, tích hợp nhiều cảm biến và linh kiện Phần mềm này cho phép người dùng linh hoạt sử dụng các cảm biến và linh kiện của Arduino, phù hợp với nhiều mục đích khác nhau.
Hình 2 12 Biểu tượng phần mềm Arduino IDE
Chúng em lựa chọn phần mềm arduino để thực hiện viết chương trình cho vi điều khiển bởi các ưu điểm nổi bật:
+ Sử dụng ngôn ngữ lập trình C/C++ thân thiện với các lập trình viên;
+ Hỗ trợ lập trình tốt cho bo mạch;
+ Thư viện hỗ trợ phong phú;
+ Giao diện đơn giản, dễ sử dụng.
Ngôn ngữ lập trình trong hệ thống
Ngôn ngữ lập trình C là một lựa chọn lý tưởng cho người mới bắt đầu, cung cấp quyền truy cập cấp thấp vào bộ nhớ hệ thống Để chạy một chương trình viết bằng C, cần sử dụng trình biên dịch C để chuyển đổi nó thành định dạng file thực thi (.exe) Nhiều phiên bản hệ thống dựa trên Unix cũng được phát triển bằng ngôn ngữ C và đã được chuẩn hóa theo Giao diện hệ điều hành di động (POSIX).
Hình 2 13 Logo ngôn ngữ lập trình C Ưu điểm của ngôn ngũ lập trình C:
Ngôn ngữ C sở hữu nhiều đặc điểm nổi bật, làm cho nó trở thành một trong những ngôn ngữ lập trình phổ biến nhất trong lịch sử Dưới đây là những lợi ích chính và các ứng dụng phổ biến của ngôn ngữ C.
Cách tiếp cận lập trình trong ngôn ngữ C thường có cấu trúc rõ ràng, giúp chia nhỏ vấn đề thành các mô-đun hoặc chức năng nhỏ hơn, dễ hiểu và dễ sửa đổi.
Ngôn ngữ lập trình C mang lại tính linh hoạt cao, không bị giới hạn bởi bất kỳ thiết bị nào Chương trình viết bằng C có khả năng chạy trên nhiều loại máy khác nhau, giúp đảm bảo hiệu quả trong quá trình thực thi.
Ngôn ngữ C là một ngôn ngữ lập trình cấp trung, kết hợp đặc điểm của cả ngôn ngữ lập trình cấp thấp và cấp cao, từ đó đáp ứng đa dạng nhu cầu lập trình khác nhau.
C cung cấp một thư viện phong phú với nhiều tính năng đa dạng, giúp tăng tốc quá trình phát triển phần mềm và tối ưu hóa hiệu suất lập trình.
C ngôn ngữ lập trình hỗ trợ tính năng cấp phát bộ nhớ động, cho phép người dùng giải phóng bộ nhớ đã được cấp phát bất kỳ lúc nào thông qua hàm free() Điều này giúp quản lý tài nguyên hiệu quả hơn trong quá trình phát triển ứng dụng.
Ngôn ngữ C nổi bật với tốc độ nhanh chóng nhờ vào việc sử dụng trình biên dịch, giúp tối ưu hóa quá trình biên dịch và thực thi mã Việc chỉ bao gồm các tính năng thiết yếu và bắt buộc trong C không chỉ tiết kiệm năng lượng xử lý mà còn nâng cao hiệu suất hoạt động.
+ Con trỏ: C sử dụng con trỏ (pointer - là một biến) giúp cải thiện hiệu suất bằng cách cho phép tương tác trực tiếp với bộ nhớ hệ thống;
Đệ quy trong C cho phép nhà phát triển sử dụng tính năng gọi hàm tự thân, giúp tái sử dụng mã cho mọi chức năng.
Khả năng mở rộng của chương trình C cho phép người lập trình dễ dàng thêm các thay đổi nhỏ vào mã đã viết sẵn, từ đó dễ dàng tích hợp các tính năng hoặc chức năng mới.
Nhược điểm của ngôn ngữ lập trình C:
Mặc dù ngôn ngữ C có nhiều ưu điểm, nhưng cũng tồn tại một số nhược điểm Đây là ngôn ngữ lý tưởng cho người mới bắt đầu lập trình nhờ vào cú pháp, thuật toán và cấu trúc mô-đun đơn giản, tuy nhiên, người dùng vẫn có thể gặp phải một số khó khăn trong quá trình sử dụng.
Ngôn ngữ C không hỗ trợ tính năng lập trình hướng đối tượng (OOP) như việc tạo lớp con từ lớp cha, điều này khiến cho việc tái sử dụng mã trở nên khó khăn hơn so với các ngôn ngữ như Java, Python hay C++.
Tính năng Namespace trong C không được hỗ trợ, dẫn đến việc không thể tái sử dụng cùng một tên biến trong cùng một phạm vi Điều này có nghĩa là không thể khai báo hai biến có tên giống nhau.
Ngôn ngữ lập trình C không hiển thị lỗi mã ngay sau mỗi dòng, mà thay vào đó, tất cả các lỗi sẽ được trình bày bởi trình biên dịch sau khi chương trình hoàn thành Điều này tạo ra khó khăn trong việc kiểm tra mã, đặc biệt là đối với các chương trình lớn.
+ Xử lý ngoại lệ: C thiếu khả năng xử lý ngoại lệ chẳng hạn như lỗi, sự bất thường có thể xảy ra trong mã nguồn;
Trong ngôn ngữ lập trình C, không có tính năng hàm tạo và hàm hủy do C không hỗ trợ lập trình hướng đối tượng Việc khởi tạo và giải phóng bộ nhớ cho biến trong C cần được thực hiện thủ công thông qua các hàm hoặc các phương pháp khác.
TÍNH TOÁN VÀ THIẾT KẾ
Giới thiệu
Trong chương này, chúng tôi sẽ trình bày cách tính toán và phân tích lựa chọn linh kiện cho thiết bị, bao gồm sơ đồ khối và thông số kỹ thuật cơ bản Bên cạnh đó, chúng tôi cũng sẽ cung cấp sơ đồ nguyên lý của các board mạch trong hệ thống và giải thích nguyên lý hoạt động của chúng.
Tính toán và thiết kế hệ thống
3.2.1 Thiết kế sơ đồ khối hệ thống
Hình 3 1 Sơ đồ khối của hệ thống
Chức năng của các khối:
Khối nguồn và pin có vai trò quan trọng trong việc cung cấp điện một chiều ổn định 3.3V cho toàn bộ mạch Nguồn điện được lấy từ pin như Li-ion hoặc LiPo thông qua mạch hạ áp, giúp chuyển đổi điện áp từ pin (thường là 3.7V) xuống 3.3V Việc sử dụng mạch hạ áp không chỉ đảm bảo điện áp ổn định cho các linh kiện mà còn ngăn ngừa hư hỏng do điện áp quá cao hoặc quá thấp.
Khối xử lý tín hiệu trong đồng hồ nước có nhiệm vụ quan trọng là thu thập và xử lý dữ liệu từ cảm biến, sau đó truyền tải thông tin này đến các khối khác như khối hiển thị và khối thu phát sóng LoRa.
Khối thu thập dữ liệu RF LoRa có nhiệm vụ kết nối với mạng Wifi và giao tiếp với khối thu phát tín hiệu RF LoRa qua giao tiếp UART Sau khi nhận và truyền dữ liệu, khối này sẽ gửi thông tin lên cơ sở dữ liệu để lưu trữ.
+ Khối cảm biến: có chức năng đo lượng nước tiêu thụ và gửi dữ liệu đo được về vi điều khiển để vi điều khiển xử lý tín hiệu;
Khối thu phát RF Lora sử dụng module chuyên dụng để thu và phát sóng RF Lora, có nhiệm vụ nhận dữ liệu từ vi điều khiển, chuyển đổi thành sóng RF để truyền đi và thực hiện quá trình ngược lại.
+ Khối hiển thị: Hiển thị các thông số về lượng nước đo được lên màn hình
OLED để người sử dụng giám sát;
Khối Database có vai trò quan trọng trong việc lưu trữ dữ liệu từ khối thu thập, đồng thời cung cấp khả năng truy xuất và quản lý dữ liệu một cách hiệu quả khi cần thiết.
+ Websever: Là trang web để hộ gia đình sử dụng và nhà cung cấp nước có thể giám sát được lượng nước tiêu thụ trên Internet;
3.2.2 Tính toán và thiết kế mạch a) Khối xử lý tín hiệu ở đồng hồ nước
Khối xử lý tín hiệu ở đồng hồ có vai trò quan trọng trong việc thu thập dữ liệu từ cảm biến, xử lý tín hiệu và truyền tải thông tin đến các khối khác như khối hiển thị và khối thu phát sóng LoRa.
Vi điều khiển Atmega328P 8MHz là một vi xử lý 8 bit thuộc dòng AVR, có khả năng điều khiển thiết bị ngoại vi như LED và động cơ, đồng thời xử lý tín hiệu và thu thập dữ liệu từ cảm biến Nó cũng hỗ trợ hiển thị thông tin trên màn hình LCD, TFT, và nhiều ứng dụng khác Với khả năng giao tiếp qua các chuẩn UART, SPI, và I2C, Atmega328P dễ dàng kết nối và trao đổi thông tin với các thiết bị bên ngoài.
Thông số kỹ thuật chính về linh kiện đã chọn:
+ Sử dụng vi điều khiển Atmega328P họ 8 bit;
+ Có 14 chân I/O Digital, trong đó có 6 chân có thể được sử dụng như ngõ ra; + Có 6 ngõ ra Analog với độ phân giải 10 bit;
+ Điện áp khuyên dùng là từ 3.3V đến 12V;
+ Điện áp vào giới hạn từ 3.3V đến 12V;
+ Bộ nhớ Flash: 32kB với 0.5kB được dùng cho Bootloader;
Bộ nhớ SRAM có dung lượng 2KB, nơi lưu trữ các giá trị của biến được khai báo trong quá trình lập trình Số lượng biến càng nhiều thì yêu cầu về bộ nhớ RAM càng lớn.
+ 1KB cho EEPROM: Là nơi có thể đọc và ghi dữ liệu mà không lo bị xóa khi mất điện, giống như dữ liệu trên SRAM;
Hình 3 2 Sơ đồ chân của Atmega328P b) Khối xử lý thu thập dữ liệu và gửi dữ liệu lên database
Khối thu thập và gửi dữ liệu lên database có vai trò quan trọng trong việc lưu trữ và quản lý dữ liệu hiệu quả Nó không chỉ hỗ trợ truy xuất dữ liệu nhanh chóng mà còn đảm bảo tính toàn vẹn và đồng bộ của dữ liệu Bên cạnh đó, khối này cung cấp cơ sở dữ liệu cần thiết cho các thành phần khác trong hệ thống để thực hiện phân tích và hiển thị thông tin.
Để đảm bảo chức năng giao tiếp hiệu quả trong các ứng dụng IoT, nhóm đã chọn module ESP32, sử dụng chip vi xử lý 32 bit với tần số hoạt động từ 160MHz đến 240MHz Với 520KB SRAM và 4MB Flash, ESP32 cho phép lưu trữ và xử lý dữ liệu hiệu quả, hỗ trợ giao thức UART với tốc độ Baud 9600 Module này có khả năng kết nối WiFi và Bluetooth, hoạt động như một máy chủ hoặc cầu nối, giúp tối ưu hóa hiệu suất truyền dữ liệu và giảm độ trễ trong các hệ thống thời gian thực ESP32 là lựa chọn lý tưởng cho các ứng dụng tự động hóa, điều khiển từ xa và các dự án thông minh khác nhờ vào khả năng tương thích cao, tiết kiệm năng lượng và chi phí.
Thông số kỹ thuật chính về linh kiện đã chọn:
+ Điện áp nguồn (USB): 5V DC;
+ Đầu vào/Đầu ra điện áp: 3.3V DC;
+ Công suất tiêu thụ: 5μA trong hệ thống treo chế độ;
+ Hiệu suất: Lên đến 600 DMIPS;
+ Tần số: lên đến 240MHz;
+ Wifi: 802.11 B/g/n/E/I (802.11N @ 2.4 GHz lên đến 150 Mbit/S);
+ Bluetooth: 4.2 BR/EDR BLE 2 chế độ điều khiển;
+ Bộ nhớ: 448 Kbyte ROM, 520 Kbyte SRAM, 6 Kbyte SRAM;
+ GPIO kỹ thuật số: 24 chân (một số chân chỉ làm đầu vào);
+Kỹ thuật số Analog: 12bit SAR loại ADC, hỗ trợ các phép đo trên lên đến 18 kênh, một số chân hỗ trợ một bộ khuếch đại;
+ Bảo mật: IEEE 802.11, bao gồm cả WFA, WPA/WPA2 và WAPI.
Hình 3 4 Sơ đồ chân ESP32
Bảng 1: Bảng chức năng từng chân của ESP32
Chân Tên chân Loại Chức năng
1 GPIO0 I/O Ngõ vào ra 0, kết nối chế độ khởi động
2 GPIO1 I/O Ngõ vào ra 1, kết nối UART Tx
3 GPIO3 I/O Ngõ vào ra 3, kết nối UART Rx
6 GPIO18 I/O Ngõ vào ra 18, kết nối SPI Clock (SCK)
7 GPIO5 I/O Ngõ vào ra 5, kết nối SPI MOSI
11 GPIO0 I/O Ngõ vào ra 0, kết nối chế độ khởi động
13 RXD I/O Kết nối UART Rx
14 TXD I/O Kết nối UART Tx
15 GND P Nối GND cho chip
17 GPIO23 I/O Ngõ vào ra 23, kết nối SPI MOSI
18 GPIO22 I/O Ngõ vào ra 22, kết nối I2C SDA
20 ADC1_CH0 I Ngõ vào ADC (Channel 0)
21 ADC1_CH1 I Ngõ vào ADC (Channel 1)
22 ADC1_CH2 I Ngõ vào ADC (Channel 2)
23 ADC1_CH3 I Ngõ vào ADC (Channel 3)
24 ADC1_CH4 I Ngõ vào ADC (Channel 4)
29 GPIO9 I/O Ngõ vào ra 9, kết nối SPI MISO
30 GPIO10 I/O Ngõ vào ra 10, kết nối SPI MOSI
31 GPIO11 I/O Ngõ vào ra 11, kết nối SPI CLK
32 GPIO6 I/O Ngõ vào ra 6, kết nối SPI CS
33 GPIO7 I/O Ngõ vào ra 7, kết nối SPI CS
34 GPIO8 I/O Ngõ vào ra 8, kết nối SPI MISO
35 GPIO20 I/O Ngõ vào ra 20, kết nối I2C SCL
37 GND P Nối GND cho chip
Module ESP32 được trang bị mạch nạp, cho phép kết nối trực tiếp với máy tính thông qua IC trung gian như CH340, CP2102 hoặc FTDI.
IC này chuyển đổi giao tiếp USB sang giao tiếp UART, phục vụ cho việc nạp chương trình và truyền nhận dữ liệu với máy tính.
Mạch dao động của ESP32 sử dụng thạch anh 40 MHz (hoặc 26 MHz tùy phiên bản) để tạo ra xung clock, giúp vi điều khiển hoạt động và thực thi lệnh Để khởi động lại vi điều khiển, chân Reset cần được kéo xuống mức logic LOW (0V) trong thời gian đủ để hoàn thành chu trình reset Mạch reset của ESP32 phải đảm bảo hai chức năng quan trọng và cần thiết.
+ Reset bằng tay: Khi nhấn nút, chân RESET được nối với GND, làm cho module
ESP32 thực hiện reset Khi không nhấn nút, chân Reset được kéo lên mức 3.3V;
Reset tự động cho vi điều khiển ESP32 được thực hiện khi cấp nguồn, nhờ vào sự kết hợp giữa điện trở nối lên nguồn và tụ điện nối đất Thời gian nạp của tụ điện sẽ kéo chân RESET xuống mức LOW trong thời gian đủ lâu, giúp vi điều khiển hoàn tất chu trình reset một cách an toàn.
Khi nhấn nút Flash, module ESP32 sẽ chuyển sang chế độ nạp code mới, cho phép tải chương trình qua giao tiếp UART Nguồn điện cho module ESP32 là 5VDC, có thể cung cấp qua cổng USB hoặc nguồn ngoài Mạch sử dụng IC ổn áp để chuyển đổi và tạo ra nguồn 3.3V, cung cấp điện cho vi điều khiển ESP32 và các thiết bị ngoại vi kết nối.
Hình 3 5 Mạch nguồn trên module
Thi công hệ thống
Sau khi lựa chọn thiết bị phù hợp, quá trình thi công PCB, lập trình, lắp ráp và kiểm tra mạch sẽ được thực hiện Các thiết bị chủ yếu bao gồm các module và cảm biến như Atmega328P, NodeMCU, LoRa E32-TTL-100 và YF-S201, đều có sẵn trên thị trường Về phần mềm, chúng ta sẽ lập trình điều khiển cho Atmega328P và NodeMCU, đồng thời thiết kế giao diện web server bằng PHP và cơ sở dữ liệu MySQL.
Nhóm thi công đã phát triển một mô hình giám sát lượng nước sinh hoạt, đại diện cho hộ gia đình thực tế Mô hình này đo đạc các thông số nước tiêu thụ và gửi dữ liệu qua LoRa đến trạm thu, sau đó dữ liệu được lưu trữ trên cơ sở dữ liệu và hiển thị trên trang web Hệ thống bao gồm hai loại tài khoản: một cho người dùng (user) chỉ có thể xem thông tin giám sát của riêng họ và một cho quản trị viên (admin) có khả năng giám sát toàn bộ thông số nước của tất cả người dùng qua giao diện web.
Dựa trên sơ đồ nguyên lý đã được tính toán và thiết kế, nhóm đã hoàn thiện mạch điện của hệ thống theo sơ đồ mạch in, kèm theo danh sách các linh kiện sử dụng.
Bảng 3 Danh sách linh kiện sử dụng
STT Tên linh kiện Giá trị Số lượng Chú thích
Hình 3 16 Mạch in trạm thu dữ liệu
Hình 3 17 Mạch in của đồng hồ đo lượng nước
Sơ đồ bố trí của board đồng hồ được thiết kế rõ ràng và hợp lý, tối ưu hóa khả năng kết nối và vận hành hiệu quả Mặt trên bao gồm vi điều khiển, module LoRa, domino kết nối cảm biến, và hàng rào cho bus xuất tín hiệu ra màn hình OLED, mang lại sự tiện lợi trong sử dụng và bảo trì Board chứa trạm thu với module LoRa và Node MCU ESP32 được thiết kế để xử lý và truyền tải dữ liệu nhanh chóng, hiệu quả Các thành phần được sắp xếp khoa học, giúp tối ưu hóa không gian, giảm nhiễu điện từ, tăng khả năng tản nhiệt và đảm bảo độ bền cao cho hệ thống trong suốt quá trình hoạt động dài hạn.
3.3.2 Lắp ráp và kiểm tra
Sau khi thiết kế mạch in, nhóm thực hiện các bước như in mạch, mua linh kiện, ủi mạch, rửa mạch và hàn linh kiện Trong quá trình ủi mạch, nếu có chỗ không dính, cần sử dụng viết long tô trước khi rửa Kiểm tra mạch bằng mắt hoặc đồng hồ VOM để phát hiện các lỗi như đứt hay chập mạch, đặc biệt là chân nguồn và chân điều khiển Cần chú ý quan sát kỹ các đường mạch có bị sát nhau hay không; nếu có, sử dụng mũi khoan cỡ 0.8 ly để tách chúng ra Nếu có dây bị đứt, có thể nối lại bằng dây điện hoặc chì trước khi tiến hành hàn mạch.
Hình 3 18 Hình ảnh thực tế của trạm thu dữ liệu
Hình 3 19 Hình ảnh thực tế của đồng hồ đo nước
3.4 Thiết kế hộp và thi công mô hình
Hộp bộ điều khiển được thiết kế để bảo vệ linh kiện điện tử khỏi bụi, ẩm và va đập, với vật liệu có độ bền cao và khả năng cách điện tốt Kích thước hộp được tối ưu hóa để chứa toàn bộ mạch điều khiển và linh kiện liên quan, đồng thời có lỗ thoát nhiệt hợp lý giúp tản nhiệt hiệu quả Bề mặt hộp có các cổng kết nối dễ dàng cho nguồn, cảm biến và thiết bị giao tiếp Để nâng cao tính thẩm mỹ và tiện lợi, hộp được thiết kế nhẵn và có nhãn rõ ràng cho các cổng kết nối, giúp việc lắp đặt và bảo trì thuận tiện hơn.
Hình 3 20 Hình ảnh quá trình thiết kế hộp
Trước khi bắt đầu lập trình hệ thống, việc cài đặt phần mềm cần thiết là rất quan trọng Các phần mềm hỗ trợ lập trình cho vi điều khiển như ATmega328P và ESP32 rất phong phú Đối với ATmega328P, người dùng có thể sử dụng Arduino IDE để lập trình và nạp chương trình nhờ vào gói hỗ trợ dành riêng cho vi điều khiển này Trong khi đó, ESP32 có thể được lập trình thông qua Arduino IDE hoặc ESP-IDF, một framework mạnh mẽ từ Espressif được thiết kế đặc biệt cho ESP32.
Trong dự án này, tôi đã chọn sử dụng Arduino IDE cho cả vi điều khiển ATmega328P và ESP32 vì tính tiện lợi và dễ sử dụng của nó Việc lập trình và nạp chương trình qua Arduino IDE không chỉ đơn giản hóa quy trình mà còn tiết kiệm thời gian Để nạp chương trình vào các vi điều khiển này, cần cài đặt các công cụ bổ sung như Arduino core cho ATmega328P và ESP32 Đặc biệt, việc debug chương trình trở nên dễ dàng hơn nhờ vào sự hỗ trợ của các công cụ như Serial Monitor trong Arduino IDE.
Lưu đồ ở đồng hồ nước:
Khi nguồn vi điều khiển được cấp, nó sẽ thực hiện các lệnh để khai báo thư viện, cấu hình chân GPIO cho chế độ ngõ vào hoặc ngõ ra, và thiết lập các bộ ngoại vi cần thiết cho chương trình Sau khi hoàn tất cấu hình, chương trình sẽ tiến hành gọi các lệnh đã được thiết lập.
“Khởi tạo hệ thống và thiết lập các giá trị ban đầu cho hệ thống, khởi tạo các ngoại vi được kết nối, cảm biến màn hình OLED
Trong vòng lặp tuần hoàn, chương trình sẽ gọi các hàm để đọc và xử lý dữ liệu từ cảm biến Sau khi thu thập giá trị cảm biến, hệ thống sẽ tính toán và hiển thị thông tin trên màn hình OLED, giúp người dùng dễ dàng giám sát Đồng thời, tín hiệu cũng sẽ được nhận và gửi qua mạng Lora Quá trình này sẽ tiếp tục lặp lại sau khi dữ liệu đã được xử lý và truyền đi.
Nhận và truyền dữ liệu qua Lora - màn hình OLED - Hiển thị dữ liệu cảm biến lên biến Gọi hàm đọc và xử lý dữ liệu cảm
Khai báo các trạng thái ban đầu
, Khởi tạo các chân cảm biến -
Hình 3 21 Lưu đồ thuật toán ở đồng hồ nước
Lưu đồ thuật toán ở trạm thu dữ liệu:
Hình 3 22 Lưu đồ thuật toán ở trạm thu dữ liệu
Kết nối WiFi thất bại liệu lên Website
Thực hiện truyền nhận dữ - thiết kế Website
Khai báo đường dẫn tới nơi - nhân dữ liệu lên Webserver
Khai báo các biến để truyền - kết với Webserver
Khai báo các giao thức liên - từng biến khác nhau
Xử lý giá trị và lưu lại thành vào biến Đọc dữ liệu vừa nhận và lưu từ đồng hồ Nhận tín hiệu Lora
Thiết lập kết nối WiFi - dữ liệu Thiết lập tốc độ truyền nhận -
Thiết lập các chân cho -
Khởi tạo hệ thốngBắt đầu
Khởi tạo hệ thống và cấu hình ESP32 bao gồm thiết lập tốc độ truyền và kết nối WiFi Sau đó, nhận dữ liệu từ Lora và xử lý chuỗi dữ liệu vừa nhận Tiếp theo, kết nối ESP với cơ sở dữ liệu để gửi giá trị đã xử lý lên database, cập nhật thông số đồng hồ trên web thông qua các giao thức kết nối dữ liệu Quá trình này lặp lại với việc nhận và xử lý dữ liệu gửi lên database Nếu trong quá trình truyền nhận mất kết nối WiFi, hệ thống sẽ tự động khởi tạo lại từ đầu.
Để đảm bảo tính ổn định và hiệu quả cho hệ thống, các thuật toán xử lý dữ liệu sẽ được tối ưu hóa nhằm giảm thiểu độ trễ trong việc truyền tải thông tin Sử dụng công nghệ Lora giúp cải thiện phạm vi truyền tín hiệu mà không cần kết nối mạng di động, rất phù hợp cho các ứng dụng ở khu vực có hạ tầng mạng yếu Trong trường hợp mất kết nối hoặc tín hiệu yếu, hệ thống sẽ tự động lưu trữ dữ liệu cần thiết và tiếp tục truyền tải khi kết nối được khôi phục, đảm bảo dữ liệu không bị mất mát và hệ thống luôn hoạt động ổn định.
Kết nối vi điều khiển với cơ sở dữ liệu qua internet đảm bảo dữ liệu luôn được cập nhật và theo dõi từ xa Người quản lý hệ thống có thể truy cập web để kiểm tra tình trạng đồng hồ nước, thực hiện điều chỉnh cần thiết và ra quyết định dựa trên thông tin thu thập, tạo ra hệ thống giám sát và quản lý nước tự động, hiệu quả và dễ sử dụng.