1. Trang chủ
  2. » Luận Văn - Báo Cáo

Truyền số liệu và mạng báo cáo bài tập lớn Đề tài smart farm

43 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Smart Farm
Tác giả Lê Quốc Thịnh, Trần Quốc Toàn, Bùi Phúc Kiến, Lê Anh Trí Tri, La Hoàng Trọng Nhân
Người hướng dẫn Nguyễn Khánh Lợi
Trường học Đại Học Quốc Gia TP Hồ Chí Minh Trường Đại Học Bách Khoa
Thể loại bài tập lớn
Năm xuất bản 2023
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 43
Dung lượng 7,29 MB

Cấu trúc

  • 1. GIỚI THIỆU ĐỀ TÀI (5)
  • 2. CÁC GIAO THỨC SỬ DỤNG TRONG ĐỀ TÀI (5)
    • 2.1. Giao thức NTP (5)
      • 2.1.1. Giới thiệu về NTP (5)
      • 2.1.2. NTP server là gì? (5)
      • 2.1.3. NTP server hoạt động như thế nào? (6)
      • 2.1.4. NTP server - Stratum Levels Explained (7)
      • 2.1.5. Những lợi ích của NTP server (8)
    • 2.2. Giao thức TCP/IP (10)
      • 2.2.1. Giới thiệu TCP/IP (10)
      • 2.2.2. Nguyên lý hoạt động của TCP/IP (10)
      • 2.2.3. Cấu trúc của TCP/IP là gì và chức năng của các tầng (10)
      • 2.2.4. Ưu điểm và nhược điểm của TCP/IP là gì? (14)
  • 3. QUÁ TRÌNH ĐẨY DATA LÊN FIREBASE (15)
    • 3.1. Các thành phần cơ bản và công cụ hỗ trợ cho hệ thống (15)
      • 3.1.1. Arduino IDE (15)
      • 3.1.2. Firebase (16)
      • 3.1.3. ESP8266 (17)
      • 3.1.4. Web (18)
    • 3.2. Quy trình thực hiện (19)
      • 3.2.1. Điều kiện tiên quyết (20)
      • 3.2.2. Các bước thực hiện (20)
  • 4. MÔ TẢ PHẦN CỨNG (20)
  • 5. VIẾT CHƯƠNG TRÌNH VÀ GIẢI THÍCH (22)
    • 5.1. Sơ đồ khối của mạch (22)
    • 5.2. Mạch mô phỏng (22)
    • 5.3. Viết chương trình (22)

Nội dung

ESP8266 là một vi điều khiển được thiết kế để kết nối với internet vàđược sử dụng phổ biến trong các ứng dụng IoT.. Nhóm quyết định chọn đề tài Smart Farm, một hệthống thực hiện tưới cây

GIỚI THIỆU ĐỀ TÀI

Internet of Things (IoT) đang trở thành xu hướng công nghệ nổi bật hiện nay, với ESP8266 là vi điều khiển chủ chốt cho việc kết nối internet trong các ứng dụng IoT Firebase, nền tảng dịch vụ đám mây của Google, cung cấp giải pháp lưu trữ và xử lý dữ liệu cho ứng dụng web và mobile Nhóm đã chọn đề tài Smart Farm, một hệ thống tưới cây đa năng, nhằm minh họa cách sử dụng giao thức TCP/IP để truyền dữ liệu từ ESP8266 lên Firebase Dữ liệu sau đó sẽ được truy xuất từ Firebase và hiển thị trên web Bài viết sẽ phân tích các thành phần cơ bản của hệ thống, quy trình truyền và nhận dữ liệu, cũng như ưu nhược điểm của việc sử dụng giao thức TCP/IP trong việc truyền dữ liệu từ ESP8266 lên Firebase và web.

CÁC GIAO THỨC SỬ DỤNG TRONG ĐỀ TÀI

Giao thức NTP

NTP (Network Time Protocol) là một thuật toán phần mềm giúp đồng bộ hóa thời gian giữa các thiết bị công nghệ kết nối internet Thuật toán này hoạt động hiệu quả khi có nguồn thời gian đáng tin cậy, cho phép các thiết bị đồng bộ chỉ trong vài mili giây.

NTP Server, giao thức internet lâu đời nhất vẫn đang được sử dụng, đã ra đời trước năm 1985 và được thiết kế bởi Dave Mills từ Đại học Delaware.

NTP (Network Time Protocol) sử dụng thuật toán Marzullo, cho phép đảm bảo độ chính xác lên đến 10 mili giây trên các thiết bị kết nối mạng công cộng.

200 micro giây trong điều kiện lý tưởng của mạng cục bộ

NTP Server là một giao thức internet Hay còn được gọi là máy chủ thời gian.

Giao thức NTP (Network Time Protocol) có chức năng đồng bộ hóa thời gian cho hệ thống máy tính qua mạng dữ liệu chuyển mạch gói, bất chấp độ trễ biến đổi Để giảm thiểu ảnh hưởng của độ trễ này, NTP sử dụng bộ đệm Jitter Trong các dự án dịch vụ NTP công cộng, máy chủ NTP được xem như một phần mềm quan trọng trong việc duy trì độ chính xác của thời gian hệ thống.

Các thiết bị kết nối internet được đồng bộ hóa thời gian nhờ NTP Server

Máy chủ NTP (Network Time Protocol) sử dụng tín hiệu thời gian từ UTC (Thời gian Phối hợp Toàn cầu), dựa trên đồng hồ nguyên tử, để đồng bộ hóa thời gian cho hàng triệu máy tính và thiết bị điện tử trên toàn thế giới Nhờ vào khả năng này, NTP Server giúp đảm bảo tính chính xác và đồng nhất về thời gian trong toàn bộ mạng lưới.

Các tín hiệu thời gian được nhận từ máy chủ qua nhiều phương thức, bao gồm mạng internet toàn cầu, tần số truyền và thời gian tại các quốc gia khác nhau Khi tín hiệu được truyền đến, máy chủ thời gian sẽ xác minh tính xác thực và đánh giá độ chính xác của từng tín hiệu Cuối cùng, các tín hiệu này sẽ được phân phối trong hệ thống mạng.

2.1.3 NTP Server hoạt động như thế nào?

Khách hàng NTP gửi một gói tin chứa tem thời gian được chuyển tiếp đến máy chủ, với giá trị là số ngày tăng dần từ một thời điểm cố định trước đó (unixtime).

Máy chủ NTP sử dụng tem thời gian để điều chỉnh thời gian trên mạng, đảm bảo khớp với đồng hồ của máy chủ NTP cấp cao hơn Nếu có sự chênh lệch về thời gian, máy chủ sẽ cộng hoặc trừ số giây cần thiết để đồng bộ hóa Sau khi điều chỉnh, máy chủ NTP gửi lại cho NTP client một gói tin, trong đó có thời gian chính xác tại thời điểm gửi.

NTP client nhận gói tin và tính toán độ trễ, sau đó điều chỉnh thời gian dựa trên thẻ thời gian và độ trễ đường truyền NTP có độ chính xác khoảng 1/100 giây trên internet và đạt hiệu suất tốt hơn trên mạng LAN và WAN với độ chính xác lên đến 1/5000 giây.

2.1.4 NTP server - Stratum Levels Explained Để tránh quá tải các request yêu cầu về thời gian cho máy chủ, các máy nhận tín hiệu thời gian từ máy chủ NTP có thể được sử dụng như là một tham chiếu từ máy chủ NTP Điều này được gọi là Stratum levels, máy chủ NTP là Stratum 1, một máy nhận tín hiệu trực tiếp từ máy chủ NTP là Stratum 2 và máy nhận tín hiệu từ nó (Stratum 2) sẽ là Stratum 3

NTP có khả năng xử lý 16 tầng thời gian, với độ chính xác giảm dần ở các tầng cao hơn Để tăng cường độ tin cậy cho hệ thống, mỗi client có thể nhận nguồn thời gian từ nhiều máy chủ khác nhau Dịch vụ NTP liên tục giám sát và đảm bảo số liệu ổn định, chính xác cho tất cả các máy chủ, luôn lựa chọn máy chủ có số liệu tốt nhất.

Cách thức hoạt động của NTP Server là sự đồng bộ các tín hiệu thời gian

2.1.5 Những lợi ích của NTP Server

1 Khả năng backup dữ liệu theo lập lịch

Lợi ích quan trọng đầu tiên của NTP Server là đảm bảo quá trình sao lưu dữ liệu theo lịch trình Việc sao lưu dữ liệu định kỳ là rất cần thiết cho mọi tổ chức và quốc gia Mỗi ngày, có rất nhiều dữ liệu cần được lưu trữ và cập nhật, do đó việc sao lưu theo đúng thời gian là điều kiện tiên quyết để đảm bảo tính chính xác Nếu hệ thống bị sai lệch về thời gian, quá trình sao lưu sẽ không còn chính xác.

Hiện nay, nhiều thiết bị điện tử sử dụng cache và hệ thống tệp tin diện rộng dựa trên tem thời gian để xác định phiên bản dữ liệu tương ứng với thời điểm hiện tại Đồng bộ hóa thời gian chính xác từ NTP Server không chỉ cải thiện tốc độ mạng mà còn nâng cao trải nghiệm người dùng.

3 Cung cấp hệ thống quản lý mạng

Việc đồng bộ hóa thời gian chính xác trong các file log là rất quan trọng, giúp đơn giản hóa quá trình kiểm tra log hệ thống khi gặp sự cố Điều này không chỉ tiết kiệm thời gian mà còn nâng cao hiệu quả trong việc khắc phục lỗi hệ thống.

4 Khả năng phân tích xâm nhập

Trong quá trình hoạt động, NTP Server giúp bạn xác định chính xác thời gian các xâm nhập trái phép vào hệ thống máy tính Điều này cho phép bạn phân tích các xâm nhập để xử lý và khôi phục lại mọi thứ một cách hiệu quả.

NTP Server giúp xác định và phân tích chính xác thời gian xảy ra sự cố trên hệ thống

5 Luôn tuân thủ các quy định

Giao thức TCP/IP

TCP/IP, viết tắt của Transmission Control Protocol/Internet Protocol, là bộ giao thức truyền thông thiết yếu kết nối các thiết bị mạng trên internet và cũng có thể được áp dụng trong mạng máy tính nội bộ Giao thức này, bao gồm TCP và IP, hoạt động như một lớp trừu tượng giữa các ứng dụng internet và hạ tầng router/switch TCP/IP quy định cách dữ liệu được trao đổi qua internet, từ việc chia nhỏ dữ liệu thành các packet, xác định địa chỉ, cho đến việc truyền dẫn, định tuyến và nhận dữ liệu Được thiết kế để đảm bảo độ tin cậy, TCP/IP có khả năng khôi phục tự động khi gặp sự cố trong quá trình truyền dữ liệu.

2.2.2 Nguyên lý hoạt động của TCP/IP

Trong giao thức TCP/IP, IP đóng vai trò quan trọng trong việc chuyển tiếp gói tin giữa các máy tính IP cho phép gửi gói tin tới đích thông qua các khoảng chuyển tiếp, trong khi TCP đảm bảo tính toàn vẹn của dữ liệu bằng cách kiểm tra lỗi và yêu cầu truyền lại nếu cần thiết.

Quy cách hoạt động của TCP/IP có thể được hình dung như một dây chuyền sản xuất trên Internet Trong đó, IP giống như quy trình hoạt động của nhà máy, trong khi TCP đóng vai trò giám sát, đảm bảo rằng quá trình truyền tin diễn ra liên tục và khắc phục lỗi khi cần thiết.

2.2.3 Cấu trúc của TCP/IP là gì và chức năng của các tầng

TCP/IP là một chuẩn giao tiếp phổ biến cho các mạng nội bộ và diện rộng, cho phép các máy tính kết nối và trao đổi dữ liệu Để hoạt động hiệu quả, TCP/IP được cấu trúc thành 4 lớp trừu tượng, mỗi lớp có bộ giao thức riêng biệt.

Chức năng của các tầng đó của TCP/IP:

Tầng 1 – Tầng Vật lý (Physical) Đây là sự kết hợp giữa tầng Vật lý và tầng liên kết dữ liệu của mô hình OSI. Tầng này chịu trách nhiệm truyền dữ liệu giữa hai thiết bị trong cùng một mạng Tại đây, các gói dữ liệu được đóng vào khung (gọi là Frame) và được định tuyến đi đến đích đã được chỉ định ban đầu.

Tầng 2 – Tầng mạng (Internet) – IP

Tầng mạng trong mô hình TCP/IP tương tự như tầng mạng của mô hình OSI, chịu trách nhiệm truyền tải dữ liệu một cách logic trong mạng Dữ liệu được chia thành các phân đoạn và đóng gói thành các gói (Packets) với kích thước phù hợp với mạng chuyển mạch Mỗi gói tin sẽ được bổ sung phần Header chứa thông tin cần thiết của tầng mạng trước khi được chuyển đến tầng tiếp theo.

Các giao thức chính trong tầng là IP(Internet Protocol), ICMP(Internet Control Message Protocol) và ARP(Address Resolution Protocol).

Tầng 3 – Tầng Giao vận (Transport layer) – TCP

Tầng 3 của mô hình mạng, còn được gọi là Tầng giao vận, đóng vai trò quan trọng trong việc xử lý giao tiếp giữa các máy chủ trong cùng một mạng hoặc giữa các mạng khác nhau thông qua bộ định tuyến Tầng này chịu trách nhiệm quản lý luồng dữ liệu giữa hai trạm thực hiện các ứng dụng của lớp trên, với hai giao thức chính là TCP và UDP.

TCP – Transmission Control Protocol: cung cấp luồng dữ liệu tin cậy giữa

2 trạm nhờ nhiều cơ chế.

Chia nhỏ các gói tin từ tầng trên thành kích thước phù hợp cho tầng mạng bên dưới, báo nhận gói tin và đặt hạn chế thời gian timeout là cần thiết để đảm bảo bên nhận có thể nhận biết các gói tin đã được gửi đi.

UDP – User Datagram Protocol: gửi dữ liệu từ trạm này tới trạm kia mà không đảm bảo các gói tin đến được tới đích.

TCP/IP là một bộ giao thức mạng quan trọng, trong đó lớp ứng dụng (layer 4) đóng vai trò giao tiếp dữ liệu giữa hai máy khác nhau thông qua các dịch vụ mạng như duyệt web, chat và gửi email Các giao thức trao đổi dữ liệu phổ biến trong lớp này bao gồm SMTP, SSH và FTP Dữ liệu được định dạng theo kiểu Byte nối Byte, kèm theo thông tin định tuyến để xác định đường đi chính xác cho mỗi gói tin.

Sau đây là hình ảnh ví dụ điển hình của TCP/IP Model (Mô hình TCP/IP) về bố cục các TCP/IP layers.

2.2.4 Ưu điểm và nhược điểm của TCP/IP là gì? Ưu điểm

+ Thiết lập kết nối giữa các loại máy tính khác nhau.

+ Hoạt động độc lập với hệ điều hành.

+ Hỗ trợ nhiều giao thức định tuyến.

+ Kiến trúc client – server, khả năng mở rộng cao.

+ Có thể hoạt động độc lập.

+ Hỗ trợ nhiều giao thức định tuyến.

+ Nhẹ, không gây nhiều áp lực với máy tính hay mạng.

+ Việc cài đặt khá phức tạp, khó để quản lý.

+ Tầng transport không đảm bảo việc phân phối các gói tin.

+ Các giao thức trong TCP/IP không dễ để có thể thay thế.

Các khái niệm về dịch vụ, giao diện và giao thức chưa được phân định rõ ràng, dẫn đến việc mô tả các công nghệ mới trong mạng hiện tại không đạt hiệu quả tối ưu.

+ Dễ bị tấn công SYN – một kiểu tấn công từ chối dịch vụ.

QUÁ TRÌNH ĐẨY DATA LÊN FIREBASE

Các thành phần cơ bản và công cụ hỗ trợ cho hệ thống

Arduino IDE là phần mềm mã nguồn mở dùng để lập trình cho bo mạch Arduino và vi điều khiển AVR Được phát triển trên nền tảng Java, phần mềm này tích hợp trình biên dịch GCC để biên dịch mã nguồn C++.

Ngôn ngữ lập trình chính của Arduino IDE là C++, với nhiều thư viện và hàm tiện ích do Arduino cung cấp Người dùng còn có khả năng sử dụng thư viện bên thứ ba hoặc tự phát triển thư viện riêng để thực hiện các chức năng đặc biệt.

Arduino IDE là một công cụ lập trình dễ sử dụng cho các bo mạch Arduino và AVR, cho phép người dùng viết mã, biên dịch và tải chương trình qua cổng USB Để sử dụng Arduino IDE, người dùng cần kết nối bo mạch với máy tính qua cáp USB và cài đặt driver tương ứng.

Arduino IDE là công cụ lập trình thân thiện, hỗ trợ các hệ điều hành phổ biến như Windows, macOS và Linux, lý tưởng cho những người mới bắt đầu học lập trình vi điều khiển.

Firebase là nền tảng dịch vụ đám mây của Google, hỗ trợ lưu trữ dữ liệu, xác thực, phân tích và truyền thông Nền tảng này giúp đơn giản hóa quá trình phát triển ứng dụng web và di động, đồng thời cung cấp các công cụ kiểm tra lỗi và nhiều dịch vụ hữu ích khác.

Các tính năng chính của Firebase bao gồm:

1 Lưu trữ dữ liệu: Firebase cung cấp các cơ chế lưu trữ dữ liệu như RealtimeDatabase và Firestore, giúp lưu trữ dữ liệu theo thời gian thực, có khả năng đồng bộ hóa nhanh chóng.

2 Xác thực người dùng: Firebase cung cấp các cơ chế xác thực người dùng cho các ứng dụng, như đăng nhập qua email, tài khoản Google, Facebook, Twitter, Apple ID,

3 Phân tích: Firebase cung cấp các công cụ phân tích dữ liệu và hiển thị báo cáo, cho phép theo dõi lượng truy cập, dữ liệu sử dụng ứng dụng,

4 Truyền thông: Firebase cung cấp các cơ chế gửi thông báo đến người dùng, cho phép gửi thông báo đẩy trực tiếp từ Firebase Console hoặc sử dụng Cloud Messaging API.

5 Kiểm tra lỗi: Firebase cung cấp các công cụ giúp phát hiện và sửa lỗi nhanh chóng, giảm thiểu thời gian gián đoạn hoạt động của ứng dụng.

Firebase hỗ trợ nhiều ngôn ngữ lập trình như Android, iOS, JavaScript, C++, Unity, PHP, Python và Java Nó cung cấp API và SDK giúp các nhà phát triển dễ dàng tích hợp các tính năng của Firebase vào ứng dụng của họ.

ESP8266 là vi điều khiển tích hợp WiFi và đồng hồ thời gian thực (RTC), cho phép kết nối internet dễ dàng Được lập trình bằng ngôn ngữ C, ESP8266 tương thích với nhiều phần mềm như Arduino IDE, Lua, MicroPython và C++ Vi điều khiển này rất phù hợp để kết nối với Firebase nhờ khả năng kết nối mạng WiFi và hỗ trợ các giao thức truyền thông như TCP/IP và HTTP.

Web là một ứng dụng đơn giản được sử dụng để hiển thị dữ liệu từ Firebase Trang web được xây dựng bằng HTML, CSS và JavaScript.

Nhóm đã tạo ra trang web cơ bản như sau:

- Giao diện đăng ký người dùng:

- Giao diện sau khi đăng nhập:

Quy trình thực hiện

- Tài khoản Firebase và quyền truy cập vào Realtime Database của Firebase.

- Webserver cho phép tương tác với Firebase Database.

Bước 1: Kết nối ESP8266 với mạng Wi-Fi và truy cập vào Firebase.

 Kết nối ESP8266 với mạng Wi-Fi bằng cách cung cấp SSID và mật khẩu của mạng Wi-Fi.

 Tạo tài khoản Firebase và tạo một Realtime Database trên Firebase.

 Lấy thông tin URL của Realtime Database và chứng chỉ xác thực để đăng nhập vào Firebase.

Bước 2: Viết mã truyền dữ liệu từ ESP8266 lên Firebase.

 Sử dụng thư viện ESP8266WiFi.h để kết nối với mạng Wi-Fi.

 Sử dụng thư viện FirebaseESP8266.h để kết nối với Firebase.

 Cung cấp chứng chỉ xác thực để đăng nhập vào Firebase.

 Sử dụng hàm Firebase.set để đẩy dữ liệu lên Firebase.

Bước 3: Thiết lập Webserver để lấy dữ liệu từ Firebase và đưa lên web.

 Sử dụng Node.js để tạo Webserver.

 Sử dụng thư viện Firebase để kết nối với Firebase.

 Thiết lập API để lấy dữ liệu từ Firebase.

 Tạo HTML và JavaScript để hiển thị dữ liệu trên trang web.

MÔ TẢ PHẦN CỨNG

CH340 + Bộ xử lý trung tâm là module Wifi SoC ESP8266

+ Kit có thiết kế dễ sử dụng và có thể sử dụng trực tiếp trình biên dịch của Arduino để lập trình và nạp code.

+ Được dùng cho các ứng dụng cần kết nối, thu thập dữ liệu và điều khiển qua sóng Wifi, các ứng dụng liên quan đến IoT.

+ Cảm biến giúp xác định độ ẩm của đất qua đầu dò và trả về giá trị Analog, Digital qua 2 chân tương ứng.

Analog hoạt động dựa trên điện áp cấp nguồn tương ứng, trong khi Digital có hai trạng thái là High hoặc Low Người dùng có thể điều chỉnh độ ẩm mong muốn thông qua biến trở, sử dụng mạch so sánh LM393 tích hợp.

+ Thường được sử dụng trong các mô hình tưới nước tự động, vườn thông minh,

Cảm biến độ ẩm, nhiệt độ DHT11

Module thu thập dữ liệu qua giao tiếp 1 wire (giao tiếp 1 dây) tích hợp bộ tiền xử lý tín hiệu, mang lại dữ liệu chính xác mà không cần tính toán bổ sung Điện áp hoạt động của module là 5VDC.

+ Khoảng đo độ ẩm: 20%-90% RH (sai số 5%RH) + Khoảng đo nhiệt độ: 0-50°C (sai số 2°C) + Tần số lấy mẫu tối đa: 1Hz (1 giây/lần)

Sử dụng thiết bị để đóng ngắt nguồn AC hoặc DC, với cấu trúc tiếp điểm bao gồm 3 loại: tiếp điểm thường đóng (NC), tiếp điểm thường mở (NO) và chân chung (COM) Các tiếp điểm này được cách ly hoàn toàn với board mạch chính, đảm bảo an toàn và hiệu quả trong quá trình hoạt động.

+ Ở trạng thái bình thường chưa kích NC sẽ nối với COM, khi có trạng thái kích COM sẽ chuyển sang nối với NO và mất kết nối với NC.

+ Điện áp sử dụng: 5VDC.

+ Tín hiệu kích: TTL 3.3~5VDC, mức cao High Relay đóng, mức thấp Low Relay ngắt.

+ Relay tiêu thụ dòng khoảng 80mA.

+ Điện thế đóng ngắt tối đa: AC250V ~ 10A hoặc

VIẾT CHƯƠNG TRÌNH VÀ GIẢI THÍCH

Viết chương trình

//Provide the token generation process info.

//Provide the RTDB payload printing info and other helper functions.

#define DHTTYPE DHT11 // Khai bao su dung DHT 11

#define API_KEY "AIzaSyBruMJZszXjft9YogY27gAsM4MMFed9LEI"

#define DATABASE_URL "https://tsl-b2fdf-default-rtdb.europe- west1.firebasedatabase.app/"

NTPtime NTPch("ch.pool.ntp.org"); char ssid[] = "mywifi"; char password[] = "1234567890"; //Mat khau wifi strDateTime dateTime;

FirebaseData fbdo; unsigned long sendDataPrevMillis = 0;

The code initializes a LiquidCrystal_I2C object for a 16x2 LCD display at address 0x27 It sets up various constants for pin assignments on the ESP8266, including DHTPin on pin 13 for temperature and humidity readings, a relay on pin 12, and additional pins for other functionalities: D1 for 'xuong' (down) on pin 4, D2 for 'gtxuong' (value down), and D5 for 'menu' on pin 14 A boolean variable 'signupOK' is also declared and initialized to false.

Các thư viện được import vào Arduino IDE để sử dụng trong chương trình, bao gồm:

 NTPtimeESP.h: Thư viện hỗ trợ đồng bộ thời gian từ server NTP.

 LiquidCrystal_I2C.h: Thư viện hỗ trợ hiển thị LCD thông qua giao thức

 Wire.h: Thư viện hỗ trợ giao tiếp I2C.

 Arduino.h: Thư viện cung cấp các hàm và biến được sử dụng trong chương trình Arduino.

 DHT.h: Thư viện hỗ trợ đọc dữ liệu từ cảm biến DHT11 hoặc DHT22.

 Firebase_ESP_Client.h: Thư viện hỗ trợ kết nối và giao tiếp với Firebase

Realtime Database thông qua WiFi.

 TokenHelper.h: Thư viện cung cấp thông tin về quá trình tạo mã thông báo

RTDBHelper.h là thư viện hỗ trợ cung cấp thông tin về dữ liệu và in nội dung từ Realtime Database Nó định nghĩa các hằng số cần thiết cho chương trình.

 DHTTYPE: Định nghĩa loại cảm biến DHT sử dụng, ở đây là DHT11.

 API_KEY: Khóa API được sử dụng để xác thực với Firebase.

DATABASE_URL là địa chỉ URL của Firebase Realtime Database được sử dụng trong chương trình Đoạn code này khai báo và khởi tạo các biến cùng đối tượng cần thiết cho ứng dụng.

 NTPch là đối tượng sử dụng để lấy thời gian từ máy chủ NTP.

 ssid và password là tên và mật khẩu của mạng Wifi mà ESP8266 sẽ kết nối đến.

 dateTime là biến lưu trữ thời gian và ngày tháng hiện tại.

 fbdo là đối tượng sử dụng để truy cập vào database của Firebase.

 sendDataPrevMillis là biến lưu trữ thời điểm gửi dữ liệu trước đó.

 auth là đối tượng xác thực với Firebase Authentication.

 config là đối tượng chứa cấu hình kết nối đến Firebase.

 lcd là đối tượng sử dụng để điều khiển màn hình LCD I2C.

 DHTPin là số chân được sử dụng để đọc dữ liệu từ cảm biến DHT11.

 relay là số chân được sử dụng để điều khiển relay.

 len gtlen xuong gtxuong menu gtmenu, , , , , là các biến và giá trị tương ứng được sử dụng để điều khiển các chức năng của chương trình.

 signupOK là biến lưu trữ thông tin về việc đăng ký tài khoản Firebase thành công hay không. void setup() {

Wire.begin(2, 0); //chan D3 D4 cua ESP8266 pinMode(15,INPUT_PULLUP); pinMode(relay,OUTPUT); pinMode(len, INPUT_PULLUP); pinMode(xuong, INPUT_PULLUP); pinMode(menu, INPUT_PULLUP); dht.begin(); lcd.init(); lcd.backlight();

WiFi.begin (ssid, password); lcd.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { lcd.print("."); delay(500);

Serial.print("Connected with IP: ");

Serial.println(); config.api_key = API_KEY;

/* Assign the RTDB URL (required) */ config.database_url = DATABASE_URL; if (Firebase.signUp(&config, &auth, "", "")){

Serial.println("ok"); signupOK = true;

Serial.printf("%s\n", config.signer.signupError.message.c_str()); } Firebase.begin(&config, &auth);

Hàm setup() được khởi động khi chương trình bắt đầu, đóng vai trò quan trọng trong việc thiết lập chân GPIO, giao tiếp với thiết bị ngoại vi, cấu hình kết nối mạng và các thiết lập khác cần thiết cho hoạt động của chương trình.

Trong đoạn code trên, hàm setup() có các bước sau:

1 Bật kết nối Serial với tốc độ 115200 baud.

2 Khởi tạo kết nối I2C với địa chỉ SDA là chân 2, SCL là chân 0 của ESP8266.

Wire.begin(2, 0): Khởi tạo giao tiếp I2C trên các chân D3 và D4 của

3 Cấu hình chân 15 của ESP8266 là đầu vào với điện trở kéo lên (pull-up). pinMode(15, INPUT_PULLUP): Đặt chân 15 của ESP8266 làm INPUT với điện trở kéo lên.

Để thiết lập chân relay và các chân len, xuong, menu của ESP8266, bạn cần cấu hình chúng với chế độ đầu ra hoặc đầu vào có điện trở kéo lên Sử dụng lệnh pinMode(relay, OUTPUT) để đặt chân relay của ESP8266 làm OUTPUT Đối với chân len và chân xuong, sử dụng pinMode(len, INPUT_PULLUP) và pinMode(xuong, INPUT_PULLUP) để thiết lập chúng làm INPUT với điện trở kéo lên.

INPUT với điện trở kéo lên. pinMode(menu, INPUT_PULLUP): Đặt chân menu của ESP8266 làm

INPUT với điện trở kéo lên.

4 Khởi tạo cảm biến DHT11 và LCD. dht.begin(): Khởi tạo cảm biến DHT. lcd.init(): Khởi tạo LCD. lcd.backlight(): Bật đèn nền cho LCD.

5 Kết nối với mạng WiFi sử dụng SSID và mật khẩu được định nghĩa trước đó Hiển thị trạng thái kết nối trên LCD.

WiFi.mode(WIFI_STA): Thiết lập chế độ WiFi của ESP8266 là Station. WiFi.begin(ssid, password): Kết nối với mạng WiFi.

6 Nếu kết nối WiFi thành công, thực hiện đăng ký tài khoản Firebase với API key và địa chỉ của Firebase Realtime Database Nếu đăng ký thành công, signupOK được gán giá trị true.

7 Khởi động thư viện Firebase và khởi động lại kết nối WiFi để đảm bảo ổn định kết nối. void Doamdat()

Chúng ta sẽ sử dụng một vòng lặp for để đọc giá trị cảm biến 10 lần, từ đó tính giá trị trung bình nhằm đạt được kết quả chính xác nhất Cụ thể, trong đoạn mã, ta sẽ cộng dồn giá trị đọc được từ chân A0 qua 10 lần lặp: `for(int i=0;i

Ngày đăng: 19/12/2024, 15:44

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w