Đồ án thiết kế hệ thống nhúng Nhóm 02 thangc2k53gmail com 1 HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA KĨ THUẬT ĐIỆN TỬ BÁO CÁO BÀI TẬP Môn học Đồ án thiết kế hệ thống nhúng Hệ thống trang trại thông minh Giảng viên Nguyễn Ngọc Minh Nhóm môn học 02 Sinh viên thực hiện Nguyễn Văn Thắng B18DCDT241 Phạm Hoàng Long B18DCDT133 Nguyễn Cao Đàm B18DCDT038 Nguyễn Thành Nam B18DCDT169 Hà Nội, ngày 2 tháng 5 năm 2022 Đồ án thiết kế hệ thống nhúng Nhóm 02 thangc2k53gmail com 2 Lời cảm ơn Trong thời gian.
Tổng quan
Đặt vấn đề
Ngành nông nghiệp Việt Nam, mặc dù là một ngành truyền thống, vẫn gặp nhiều hạn chế do lối canh tác cũ, dẫn đến hiệu quả không cao Việc áp dụng công nghệ và kỹ thuật mới sẽ mở ra hướng đi mới, mang lại sự phát triển mạnh mẽ cho ngành nông nghiệp, tạo nên “làn gió mới” cho nền kinh tế quốc dân.
Việc ứng dụng IoT trong nông nghiệp mang lại nhiều lợi ích cho nông dân, nâng cao hiệu quả trồng trọt và kinh tế Trong bối cảnh khí hậu ngày càng khắc nghiệt, việc tự theo dõi thời tiết và chăm sóc cây trồng trở nên khó khăn và tốn thời gian Tuy nhiên, với sự hỗ trợ của máy móc và hệ thống cảm biến, nông dân có thể giám sát một cách chính xác và hiệu quả hơn Hiện nay, IoT đã được áp dụng trong hầu hết các giai đoạn từ sản xuất đến đóng gói và phân phối nông sản tới tay người tiêu dùng.
Nhận thấy tiềm năng và ứng dụng cao của IoT trong nông nghiệp, đặc biệt là trong lĩnh vực cây trồng, nhóm chúng tôi đã chọn nghiên cứu về “Hệ thống nông nghiệp thông minh” Hệ thống này hoạt động dựa trên việc thu thập thông tin từ các cảm biến, sau đó truyền về trung tâm xử lý Từ đó, trung tâm sẽ điều khiển các thiết bị như bơm phun sương, quạt và đèn để tạo ra môi trường tối ưu nhất cho sự phát triển của cây trồng.
Mục tiêu
Khám phá và áp dụng công nghệ điều khiển thiết bị nông nghiệp như đèn, quạt và máy bơm nước qua Internet Đặc biệt, tìm hiểu về chip ESP32 để quản lý các thiết bị này thông qua mạng Wifi.
Tìm hiểu và tiến hành xây dựng cơ sở dữ liệu thông qua MySQL, thực hiện truyền nhận thiết bị và server Socket io
Xây dựng giao diện Webserver để điều khiển và giám sát thiết bị
Thiết kế và thi công mô hình nông nghiệp thông minh.
Nội dung thực hiện
Nội dung 1: Tìm hiểu nguyên lý hoạt động và thiết kế mạch điều khiển sử dụng chip
ESP32, các cảm biến, thiết bị được sử dụng
Nội dung 2: Thiết kế mạch nguồn và mạch công suất cho mô hình
Nội dung 3: Tìm hiểu và xây dựng cơ sở dữ liệu
Thiết kế lưu đồ giải thuật và lập trình điều khiển thiết bị là bước quan trọng trong việc xây dựng Socket Server Đồng thời, việc thiết kế giao diện Webserver giúp người dùng dễ dàng điều khiển và giám sát trạng thái đóng mở của các thiết bị một cách hiệu quả.
Nội dung 5 : Thi công mô hình
Nội dung 6 : Thử nghiêm và điều chỉnh phần cứng cũng như chương trình để mô hình được tối ưu Đánh giá các thông số của mô hình
Nội dung 7: Viết báo cáo thực hiện
Cơ sở lý thuyết
Giới thiệu phần cứng
Module ESP32-WROOM bao gồm:
Điện áp logic là 2,7 đến 3,3 V
1 Enable Button (Chân reset) và 1 User Button(GPIO 0)
Led báo nguồn và User Led (GPIO 2)
UART: Serial Debug mặc định là UART 0
Hình 2 1: Vi điều khiển esp32
GPIO 34 đến 39 – input only pins Các chân này không có nội trở kéo lên hoặc kéo xuống Chúng không thể được sử dụng làm output, vì vậy chỉ sử dụng các chân này làm input:
Analog to Digital Converter (ADC)
ESP32 sở hữu 18 kênh đầu vào ADC với độ phân giải 12 bit, vượt trội hơn so với ESP8266 chỉ có 1 kênh ADC với độ phân giải 10 bit Các GPIO trên ESP32 có khả năng được sử dụng làm ADC, mang lại nhiều tùy chọn hơn cho người dùng.
Digital to Analog Converter (DAC)
Bộ điều khiển ESP32 LED PWM hỗ trợ 16 kênh độc lập, cho phép cấu hình tín hiệu PWM với các đặc tính đa dạng Tất cả các chân có khả năng hoạt động như output đều có thể sử dụng để tạo tín hiệu PWM, ngoại trừ các chân GPIO từ 34 đến 39 không hỗ trợ chức năng này.
Chân GPIO xuất tín hiệu
ESP32 hỗ trợ hai kênh I2C, cho phép cấu hình bất kỳ chân nào làm chân SDA và SCL Khi lập trình ESP32 bằng Arduino IDE, các chân I2C mặc định được sử dụng là:
ESP32 được trang bị module giao tiếp SPI với các thiết bị ngoại vi, bao gồm SPI0, SPI1, HSPI và VSPI Trong đó, SPI0 được sử dụng riêng để kết nối bộ nhớ flash của ESP32 với các thiết bị bộ nhớ flash bên ngoài.
SPI1 được kết nối cũng tương tự như SPI0 nhưng nó dùng để ghi dữ liệu cho bộ nhớ Flash của chip
HSPI và VSPI là hai giao thức sử dụng tự do trên ESP32, cho phép kết nối đồng thời với 3 thiết bị slave thông qua 3 cổng kết nối với chip Trong đó, ESP32 hoạt động như thiết bị master trong giao tiếp SPI.
Tất cả các GPIO có thể được cấu hình như ngắt
2.1.2 Cảm biến nhiệt độ DHT11
Cảm biến độ ẩm và nhiệt độ DHT11 là một lựa chọn phổ biến nhờ vào chi phí thấp và khả năng lấy dữ liệu dễ dàng thông qua giao tiếp 1 wire Với bộ tiền xử lý tín hiệu tích hợp, DHT11 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 cảm biến DHT22 mới hơn, DHT11 có khoảng đo và độ chính xác kém hơn đáng kể.
Hình 2 2 Cảm biến nhiệt độ, độ ẩm DHT11
DHT11 là cảm biến có thể đọc được nhiệt độ và độ ẩm cùng lúc
NC (Not Connected - chân này chúng ta không dùng đến)
Dòng sử dụng: 2.5mA max (khi truyền dữ liệu)
Đo tốt ở độ ẩm 20-80%RH với sai số 5%
Đo tốt ở nhiệt độ 0 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
4 chân, khoảng cách chân 0.1'' Đọc cảm biến
DHT11 truyền dữ liệu gồm 40 bit, được phân chia như sau: 8 bit đầu tiên biểu thị phần nguyên của độ ẩm, tiếp theo là 8 bit phần thập phân của độ ẩm, sau đó là 8 bit phần nguyên của nhiệt độ, tiếp theo là 8 bit phần thập phân của nhiệt độ, và cuối cùng là 8 bit kiểm tra (check sum).
Ví dụ: ta nhận được 40 bit dữ liệu như sau:
Độ ẩm hiện tại là 53%, được biểu thị bằng mã nhị phân 0011 0101 (35H), trong khi nhiệt độ đạt 24°C, tương ứng với mã nhị phân 0001 1000 (18H) Cả hai giá trị đều không tính phần thập phân do giá trị là 0000 0000.
Cảm biến ánh sáng là thiết bị thông minh có khả năng nhận diện biến đổi môi trường và điều chỉnh ánh sáng phù hợp Thiết bị này sử dụng các đi-ốt quang học để xác định mức độ ánh sáng và thực hiện điều chỉnh Nguyên lý hoạt động của cảm biến ánh sáng dựa trên hiệu ứng quang điện, trong đó khi ánh sáng chiếu vào, các electron được nới lỏng, tạo ra lỗ electron và dòng điện Mức độ ánh sáng càng cao thì dòng điện càng mạnh.
Hình 2 3 Cảm biến ánh sáng
Sử dụng quang trở CDS
Kích thước nhỏ gọn: 36x16mm
Xuất tín hiệu Digital rất dễ sử dụng
Cảm biến siêu âm HC-SR04 là một thiết bị phổ biến để xác định khoảng cách nhờ vào tính năng RẺ và ĐỘ CHÍNH XÁC Thiết bị này hoạt động dựa trên sóng siêu âm, cho phép đo khoảng cách từ 2 đến 300 cm, với độ chính xác chủ yếu phụ thuộc vào cách lập trình.
Cảm biến siêu âm SR04 hoạt động dựa trên nguyên lý phản xạ sóng siêu âm, bao gồm hai module: một module phát sóng siêu âm và một module thu sóng phản xạ Khi cảm biến phát ra sóng siêu âm với tần số 40kHz, nếu có vật cản, sóng sẽ phản xạ lại và được module thu nhận Thời gian từ khi phát đến khi nhận sóng được sử dụng để tính khoảng cách đến vật thể, với công thức: Khoảng cách = (thời gian * vận tốc âm thanh (340 m/s) / 2 Cảm biến kết nối qua các chân VCC (5V), trig (chân điều khiển phát), echo (chân nhận tín hiệu phản hồi) và GND.
Hình 2 4 cảm biến siêu âm
Thông số kĩ thuật Điện áp: 5V DC
Khoảng cách: 2cm – 450cm (4.5m) Độ chính xác: 3mm
Mức cao: 5VThông số kĩ thuật :
Đầu Hút Nước Vào: 5mm
Module 1 Relay với opto cách ly nhỏ gọn, có opto và transistor cách ly giúp cho việc sử dụng trở nên an toàn với board mạch chính, module 1 Relay với opto cách ly hl 5v được sử dụng để đóng ngắt nguồn điện công suất cao AC hoặc DC, có thể chọn đóng khi kích mức cao hoặc mức thấp bằng Jumper
Tiếp điểm đóng ngắt bao gồm ba loại: NC (thường đóng), NO (thường mở) và COM (chân chung), được cách ly hoàn toàn với bo mạch chính Trong trạng thái bình thường, tiếp điểm NC nối với COM, và khi được kích hoạt, COM sẽ chuyển sang nối với NO, đồng thời mất kết nối với NC.
Sử dụng điện áp nuôi DC 5V
Relay mỗi Relay tiêu thụ dòng khoảng 80mA
Điện thế đóng ngắt tối đa: AC250V ~ 10A hoặc DC30V ~ 10A
Có đèn báo đóng ngắt trên mỗi Relay
Có thể chọn mức tín hiệu kích 0 hoặc 1 qua jumper
Kích thước: 1.97 in x 1.02 in x 0.75 in (5.0 cm x 2.6 cm x 1.9 cm)
Hình 2 6 Module 1 Relay Với Opto Cách Ly Kích H/L (5VDC) 2.1.7 Cảm biến vân tay AS608
Cảm biến nhận dạng vân tay sử dụng giao tiếp UART TTL hoặc USB 1.1 để kết nối với vi điều khiển hoặc máy tính thông qua mạch chuyển đổi USB-UART.
Các loại chuẩn giao tiếp
2.2.1 Chuẩn giao tiếp one-wire
Chuẩn giao tiếp 1 dây (one-wire), được phát triển bởi Dallas Semiconductor và mua lại bởi Maxim vào năm 2001, là một giao thức truyền nhận dữ liệu với tốc độ thấp, chủ yếu phục vụ cho việc thu thập dữ liệu như thời tiết và nhiệt độ Giao thức này hoạt động theo cơ chế không đồng bộ và bán song công (half-duplex), với mối quan hệ chủ-tớ chặt chẽ Trên cùng một bus, có thể kết nối một hoặc nhiều thiết bị slave, nhưng chỉ có một thiết bị master có thể hoạt động trên bus đó Khi không có dữ liệu truyền tải, bus dữ liệu sẽ ở trạng thái rảnh.
Hình 2 9 Chuẩn giao tiếp One Wire
Để giao tiếp với vi điều khiển qua bus one-wire, tín hiệu được chia thành các khe thời gian 60 µs, trong đó mỗi bit dữ liệu được truyền dựa trên các khe này Các thiết bị slave có thể quy định thời gian khác nhau, nhưng độ chính xác về thời gian là yếu tố quan trọng nhất trong chuẩn giao tiếp này Do đó, để tối ưu hóa đường truyền, cần có một bộ định thời để đảm bảo độ trễ chính xác.
Hình 2 10 Cách gửi tin của giao tiếp One Wire
Gửi bit 1: Khi muốn gửi đi bit 1, thiết bị Master sẽ kéo bus xuống mức 0 trong một khoảng thời gian A (às) và trở về mức 1 trong khoảng B (às)
Gửi bit 0: Thiết bị Master kộo bus xuống mức 0 trong một khoảng thời gian C (às) và trở về mức 1 trong khoảng D (às)
Thiết bị master sẽ lấy mẫu dữ liệu trong khoảng thời gian E (às) sau khi bus được kéo xuống 1 khoảng A (às) Trong khoảng thời gian này, nếu bus ở mức 1, thiết bị master sẽ đọc bit 1, ngược lại, nếu bus ở mức 0, thiết bị master sẽ đọc bit 0.
Reset: Thiết bị Master kộo bus xuống 1 khoảng thời gian H (às) và sau đú về mức
1 Khoảng thời gian này gọi là tớn hiệu reset Trong khoảng thời gian I (às) tiếp theo, thiết bị master tiến hành lấy mẫu Nếu thiết bị slave gắn với bus gửi về tín hiệu 0, (tức bus ở mức 0), master sẽ hiểu rằng slave vẫn có mặt và quá trình trao đổi dữ liệu lại tiếp tục Ngược lại nếu slave gửi về tin hiệu 1 ( bus ở mức 1) thì master hiểu rằng không có thiết bị slave nào tồn tại và dừng quá trình
I2C (Inter-Integrated Circuit) là một giao thức giao tiếp nối tiếp đồng bộ được phát triển bởi Philips Semiconductors, cho phép truyền nhận dữ liệu giữa các IC chỉ với hai đường tín hiệu.
Các bit dữ liệu sẽ được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi 1 tín hiệu đồng hồ
Bus I2C thường được sử dụng để giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại vi điều khiển, cảm biến, EEPROM, …
I2C sử dụng 2 đường truyền tín hiệu:
SCL - Serial Clock Line : Tạo xung nhịp đồng hồ do Master phát đi
SDA - Serial Data Line : Đường truyền nhận dữ liệu
Hình 2 11 Cấu tạo chuẩn giao tiếp I2C
Giao tiếp I2C bao gồm quá trình truyền nhận dữ liệu giữa các thiết bị chủ tớ, hay Master - Slave
Thiết bị Master là một vi điều khiển, có chức năng điều khiển tín hiệu SCL và thực hiện việc gửi nhận dữ liệu hoặc lệnh qua đường SDA đến các thiết bị khác.
Các thiết bị Slave nhận dữ liệu lệnh và tín hiệu từ thiết bị Master, thường là các IC hoặc vi điều khiển.
Master và Slave được kết nối qua hai đường bus SCL và SDA, cả hai đều hoạt động ở chế độ Open Drain Điều này có nghĩa là bất kỳ thiết bị nào kết nối với mạng đều có thể giao tiếp hiệu quả.
Giao thức I2C chỉ có khả năng kéo hai đường bus xuống mức thấp (LOW), nhưng không thể kéo lên mức cao Điều này nhằm ngăn chặn tình huống xảy ra ngắn mạch, khi một thiết bị kéo bus lên mức cao trong khi thiết bị khác kéo xuống mức thấp.
Do đó cần có 1 điện trờ ( từ 1 – 4,7 kΩ) để giữ mặc định ở mức cao
Quá trình truyền nhận dữ liệu:
Bắt đầu: Thiết bị Master sẽ gửi đi 1 xung Start bằng cách kéo lần lượt các đường SDA, SCL từ mức 1 xuống 0
Hình 2 12 Quá trình truyền dữ liệu
Tiếp theo đó, Master gửi đi 7 bit địa chỉ tới Slave muốn giao tiếp cùng với bit Read/Write
Slave sẽ so sánh địa chỉ vật lý với địa chỉ nhận được Nếu hai địa chỉ trùng khớp, Slave xác nhận bằng cách kéo đường SDA xuống 0 và thiết lập bit ACK/NACK thành ‘0’ Ngược lại, nếu không trùng khớp, SDA và bit ACK/NACK sẽ mặc định là ‘1’.
Thiết bị Master sẽ gửi hoặc nhận khung bit dữ liệu Nếu Master gửi đến Slave thì bit Read/Write ở mức 0 Ngược lại nếu nhận thì bit này ở mức 1
Nếu như khung dữ liệu đã được truyền đi thành công, bit ACK/NACK được set thành mức 0 để báo hiệu cho Master tiếp tục
Sau khi toàn bộ dữ liệu được gửi đến Slave thành công, Master sẽ phát tín hiệu Stop để thông báo cho các Slave rằng quá trình truyền đã hoàn tất Tín hiệu này được thể hiện qua việc chuyển đổi lần lượt các mức SCL và SDA từ 0 lên 1.
Hệ điều hành FreeRTOS
RTOS, hay hệ điều hành thời gian thực, là một loại hệ điều hành được thiết kế đặc biệt cho các vi điều khiển, cho phép điều khiển thiết bị một cách nhanh chóng và hỗ trợ đa nhiệm.
Hệ điều hành thời gian thực (real-time) được thiết kế cho các tác vụ yêu cầu phản hồi nhanh, thường được tích hợp trong vi điều khiển mà không có giao diện người dùng (GUI) Sự phản hồi nhanh là cần thiết vì các tác vụ chủ yếu tương tác với thiết bị và máy móc khác, không phải con người Do tài nguyên bên trong hạn chế, bất kỳ sự chậm trễ nào cũng có thể dẫn đến sai lệch trong hoạt động của hệ thống.
2.3.2 Các khái niệm trong hệ điều hành thời gian thực RTOS
Kernel, hay còn gọi là Nhân, có vai trò quan trọng trong việc quản lý và điều phối các Task Tất cả các sự kiện như ngắt, Timer và dữ liệu truyền đến đều được Kernel xử lý để đưa ra quyết định về các bước tiếp theo Thời gian xử lý của Kernel rất nhanh, giúp giảm thiểu độ trễ trong hệ thống.
Task là một đoạn chương trình thực thi một hoặc nhiều vấn đề gì đó, được Kernel quản lý
Kernel sẽ đảm nhiệm việc quản lý chuyển đổi giữa các tác vụ, lưu giữ ngữ cảnh của tác vụ sắp bị hủy và khôi phục ngữ cảnh của tác vụ tiếp theo.
Kiểm tra thời gian thực thi đã được định nghĩa trước (time slice được tạo ra bởi ngắt systick)
Khi có các sự kiện unblocking một task có quyền cao hơn xảy ra (signal, queue, semaphore,…)
Khi task gọi hàm Yield() để ép Kernel chuyển sang các task khác mà không phải chờ cho hết time slice
Khi khởi động thì kernel sẽ tạo ra một task mặc định gọi là Idle Task
Task States – Trạng thái Task
Một task trong RTOS thường có các trạng thái như sau
Hình 2 14 Trạng thái Task trong Rtos
READY: sẵn sàng để thực hiện
INACTIVE: không được kích hoạt
Scheduler – Lập lịch Đây là 1 thành phần của kernel quyết định task nào được thực thi Có một số luật cho scheduling như:
Lập trình hợp tác yêu cầu mỗi tác vụ chỉ có thể thực hiện khi tác vụ hiện tại tạm dừng, điều này có thể dẫn đến việc một tác vụ chiếm hết tài nguyên CPU.
Round-robin: mỗi task được thực hiện trong thời gian định trước (time slice) và không có ưu tiên
Trong hệ thống quản lý tác vụ, các tác vụ được phân quyền theo mức độ ưu tiên, với các tác vụ có quyền cao nhất sẽ được thực hiện trước Nếu có nhiều tác vụ có cùng mức quyền, chúng sẽ được xử lý theo phương pháp round-robin Các tác vụ có mức ưu tiên thấp hơn sẽ tiếp tục được thực hiện cho đến khi hết thời gian phân bổ.
Hình 2 15 Cấu taọ Priority base
Priority-based pre-emptive: Các task có mức ưu tiên cao nhất luôn nhường các task có mức ưu tiên thấp hơn thực thi trước
Message queue – Hàng đợi tin nhắn
Message queue là cơ chế kết nối các tác vụ, hoạt động như một bộ đệm FIFO (First In First Out) Nó được xác định bởi độ dài, tức số lượng phần tử mà bộ đệm có thể lưu trữ, và kích thước dữ liệu, là kích thước của các thành phần trong bộ đệm.
Task có thể ghi vào hằng đợi (queue)
Task sẽ bị khóa (block) khi gửi dữ liệu tới một message queue đầy đủ
Task sẽ hết bị khóa (unblock) khi bộ nhớ trong message queue trống
Trường hợp nhiều task mà bị block thì task với mức ưu tiên cao nhất sẽ được unblock trước
Task có thể đọc từ hằng đợi (queue)
Task sẽ bị block nếu message queue trống
Task sẽ được unblock nếu có dữ liệu trong message queue
Tương tự ghi thì task được unblock dựa trên mức độ ưu tiên
Hình 2 16 Message queue – Hàng đợi tin nhắn 2.3.3 Cách hoạt động của RTOS
RTOS (Hệ điều hành thời gian thực) là một phần mềm quan trọng trong việc quản lý và điều phối các tác vụ trong chương trình Nó thực hiện lập lịch, phân mức ưu tiên cho các tác vụ và xử lý các thông điệp gửi đi giữa chúng.
RTOS là một hệ điều hành thời gian thực phức tạp, chủ yếu thực hiện việc xử lý các trạng thái máy (State Machine) Để hiểu rõ hơn về khái niệm này, bạn có thể tham khảo bài viết về State Machine và lập trình nhúng.
Hình 2 17 Cách hoạt động của RTOS
RTOS hoạt động thông qua Nhân Kernel, điều phối các tác vụ (Task) với mức ưu tiên riêng và thực thi theo chu kỳ cố định Khi có sự kiện như ngắt, tín hiệu hoặc tin nhắn, Kernel sẽ chuyển tiếp thông tin đến Task tương ứng Sự chuyển giao giữa các Task diễn ra linh hoạt và với độ trễ thấp, đảm bảo độ tin cậy cao cho chương trình.
Cơ sở dữ liệu MySQL
MySQL là một hệ thống quản trị cơ sở dữ liệu mã nguồn mở (RDBMS) hoạt động theo mô hình client-server, được tích hợp với Apache và PHP Hệ thống này quản lý dữ liệu thông qua các cơ sở dữ liệu, mỗi cơ sở dữ liệu có thể chứa nhiều bảng quan hệ MySQL sử dụng cú pháp và lệnh tương tự như ngôn ngữ SQL và đã được phát hành từ thập niên 90.
Cơ sở dữ liệu (database) là tập hợp dữ liệu có cấu trúc đồng nhất, được tổ chức trong một bộ dữ liệu chung (dataset) và sắp xếp tương tự như bảng tính với sự liên kết chặt chẽ Open source (mã nguồn mở) cho phép người dùng tự do sử dụng, cài đặt và tùy chỉnh cơ sở dữ liệu theo nhu cầu của mình.
Hình 2 18 Mô hình Client – Server
Máy tính sử dụng phần mềm RDBMS được gọi là client, và để truy cập dữ liệu, chúng kết nối với máy chủ RDBMS, tạo thành mô hình client-server.
MySQL Server là một hệ thống máy tính hoặc một tập hợp các máy tính được cài đặt phần mềm MySQL, cho phép lưu trữ dữ liệu và cung cấp khả năng truy cập quản lý cho các máy khách.
MySQL Client là phần mềm dùng để thực hiện truy vấn tới MySQL server và nhận kết quả Nó có thể được hiểu là đoạn mã PHP script trên máy tính hoặc trên cùng một server, giúp kết nối tới cơ sở dữ liệu MySQL.
Hình 2 19 Cách hoạt động của MySQL client Cách vận hành chính trong môi trường MySQL như sau:
MySQL tạo ra bảng để lưu trữ dữ liệu, định nghĩa sự liên quan giữa các bảng đó
Client sẽ gửi yêu cầu SQL bằng một lệnh đặc biệt trên MySQL
Ứng dụng trên server sẽ phản hồi thông tin và trả về kết quả trên máy client
2.4.3 Làm việc với cơ sở dữ liệu
Tạo cơ sở dữ liệu với tên được chỉ định nếu tên đó không tồn tại trong máy chủ cơ sở dữ liệu
CREATE DATABASE [IF NOT EXISTS] database_name;
Sử dụng cơ sở dữ liệu hoặc thay đổi cơ sở dữ liệu hiện tại thành cơ sở dữ liệu khác mà bạn đang làm việc:
Hiển thị tất cả cơ sở dữ liệu có sẵn trong máy chủ cơ sở dữ liệu MySQL hiện tại:
Hiển thị tất cả các bảng trong cơ sở dữ liệu hiện tại
Hiển thị thông tin các cột của bảng:
Truy vấn dữ liệu từ bảng
Truy vấn tất cả dữ liệu từ một bảng:
2.4.4 Kết nối Socket io với MYSQL
Socket io
2.5.1 Khái niệm Để xây dựng một ứng dụng realtime cần sử dụng socketio Socketio sẽ giúp các bên ở những địa điểm khác nhau kết nối với nhau, truyền dữ liệu ngay lập tức thông qua server trung gian Socketio có thể được sử dụng trong nhiều ứng dụng như chat, game online, cập nhật kết quả của một trận đấu đang xảy ra,
Socket.io không phải là một ngôn ngữ lập trình mà là một công cụ hỗ trợ xây dựng ứng dụng thời gian thực Do đó, Socket.io không thể thay thế hoàn toàn cho bất kỳ ngôn ngữ nào khác, mà cần được kết hợp với các ngôn ngữ như PHP, ASP.NET, Node.js, v.v để phát huy hiệu quả tối đa trong việc phát triển ứng dụng.
Cấu trúc một ứng dụng realtime sử dụng socket bao gồm 2 phần: phía server, phía client
Hình 2 20 Cấu trúc socket io
Phía server là nơi cài đặt Socket.io, với các ngôn ngữ như PHP, ASP.NET, hoặc Node.js có thể được sử dụng để dựng server Tuy nhiên, cấu trúc server sẽ khác nhau tùy thuộc vào ngôn ngữ lựa chọn Khuyến khích sử dụng Node.js để cài đặt Socket.io trực tiếp trên cùng một server, trong khi nếu sử dụng PHP, cần phải cài thêm các package khác hoặc chuẩn bị server riêng để chạy Socket.io.
Phía client Ở phía client sẽ xây dựng giao diện người dùng Ở đây có thể sử dụng js, hoặc các thư viện của js như jquery,
Cơ chế hoạt động của socketio
The mechanism of a real-time application operates through a server that listens for data and transmits it to client machines To implement this, Socket.IO must be configured on both the server and client sides To listen for data, the command `socket.on()` is used, while the command `socket.emit()` is utilized to emit data.
Socket.on và socket.emit đều sử dụng tham số đầu tiên là tên đường truyền Tên đường truyền này có thể là bất kỳ, nhưng để truyền và nhận dữ liệu trên cùng một đường truyền, tên đường truyền cần phải giống nhau.
HTML, CSS, JS
HTML tạm dịch là ngôn ngữ đánh dấu siêu văn bản Người ta thường sử dụng HTML trong việc phân chia các đoạn văn, heading, links, blockquotes,…
Một website thường bao gồm nhiều trang con, mỗi trang con có tập tin HTML riêng Cần lưu ý rằng HTML không phải là ngôn ngữ lập trình, do đó nó không thể thực hiện các chức năng “động” HTML chủ yếu được sử dụng để bố cục và định dạng trang web, tương tự như phần mềm Microsoft Word Khi kết hợp với CSS và JavaScript, HTML tạo thành một nền tảng vững chắc cho thế giới mạng.
HTML có thể hiển thị trên bất kỳ nền tảng nào khác như Linux, Windows, và Max vì nó là một nền tảng độc lập
Mặc dù HTML có sức mạnh nhất định, nhưng nó không đủ để xây dựng một trang web chuyên nghiệp Các lập trình viên thường sử dụng HTML chủ yếu để thêm các phần tử văn bản và tạo cấu trúc giao diện cho nội dung Để hoàn thiện một website, họ thường kết hợp với hai ngôn ngữ frontend là CSS và Javascript.
CSS, viết tắt của Cascading Style Sheets, là ngôn ngữ dùng để tìm và định dạng lại các phần tử do HTML tạo ra Nói một cách đơn giản, CSS là công cụ tạo phong cách cho trang web Trong khi HTML định dạng các phần tử như đoạn văn, tiêu đề và bảng, CSS cho phép chúng ta thêm kiểu dáng cho các phần tử HTML, bao gồm việc thay đổi bố cục, màu sắc, font chữ và cấu trúc của trang.
CSS hoạt động bằng cách tìm kiếm các vùng chọn, có thể là tên thẻ HTML, ID, class hoặc nhiều kiểu khác Sau đó, CSS sẽ áp dụng các thuộc tính cần thiết để thay đổi diện mạo của những vùng chọn này.
Một đoạn CSS bao gồm 4 phần như thế này:
Một số hình ảnh về CSS trong quá trình thực hiện
JavaScript là ngôn ngữ lập trình quan trọng giúp tạo ra sự sinh động cho website, khác biệt với HTML, thường dùng cho nội dung, và CSS, chuyên về phong cách Ngoài ra, JavaScript cũng khác với PHP, ngôn ngữ chạy trên server thay vì trên máy client.
JavaScript (JS) là ngôn ngữ lập trình giúp nâng cao tính tương tác trên website Nó hoạt động trực tiếp trên trình duyệt của người dùng thay vì trên máy chủ, thường kết hợp với các thư viện bên thứ ba để tối ưu hóa hiệu suất và trải nghiệm người dùng.
3 nên có thể tăng thêm chức năng cho website mà không phải code từ đầu
JavaScript là ngôn ngữ lập trình thường được nhúng trực tiếp vào trang web hoặc tham chiếu qua file js riêng Được coi là ngôn ngữ phía client, JavaScript cho phép script được tải về máy của người dùng và xử lý tại đó, thay vì phải xử lý trên server và gửi kết quả về cho khách truy cập.
JavaScript là ngôn ngữ lập trình mạnh mẽ cho phép thao tác với người dùng ở phía client, đồng thời tách biệt giữa các phiên làm việc của người dùng Khi hai người dùng truy cập vào hai trình duyệt khác nhau, mỗi người sẽ có phiên xử lý JavaScript riêng biệt mà không ảnh hưởng đến nhau Ngôn ngữ này có khả năng hoạt động trên nhiều nền tảng, bao gồm Windows, macOS và các hệ điều hành di động Đặc biệt, JavaScript rất dễ tiếp cận, giúp người học nhanh chóng làm quen mà không cần cài đặt nhiều phần mềm phức tạp.
Thiết kế hệ thống
Thiết kế sơ đồ khối hệ thống
Hệ thống bao gồm 6 khối ghép lại với nhau và tạo nên một hệ thống
Hình 3 1 Sơ đồ khối hệ thống
Khối xử lý trung tâm là bộ phận điều khiển chính của hệ thống, có nhiệm vụ thu thập và xử lý dữ liệu từ các thiết bị, đồng thời điều khiển các khối ngoại vi và khối hiển thị Nó cũng đảm bảo sự kết nối liên tục với server.
Khối cảm biến : bao gồm nhiều cảm biến thu thập thông số môi trường như nhiệt độ, độ ẩm không khí, ánh sáng tại các địa điểm khác nhau
Khối nhận diện : gồm thiết bị cảm biến vân tay để xác thực người dùng
Khối điều khiển thiết bị ngoại vi bao gồm các thiết bị điều khiển như nút điều chỉnh chế độ hoạt động trên website, cùng với các thiết bị thực thi hành động như Rơ-le, tất cả đều được điều khiển bởi khối xử lý giao tiếp không dây.
Khối hiện thị : các thông số môi trường đo được tại các cảm biến được hiện thị trực tiếp lên web và màn hình oled
Khối nguồn : cung cấp nguồn cho toàn bộ hệ thống
Sơ đồ nguyên lý
Hình 3 2 Sơ đồ nguyên lý
Các thiết bị kết nối với ESP32 được cấp nguồn từ chân GND và chân 3V3 Tuy nhiên, hai động cơ không sử dụng nguồn từ chân 3V3 mà thay vào đó sử dụng nguồn từ chân VIN Chân VIN cung cấp điện áp 5V, đủ để kích hoạt hoạt động của relay.
Cảm biến DHT11, quang trở, realy servo giao tiếp với vi điều khiển Esp32 theo chuẩn giao tiếp one wire
Cảm biến vân tay AS608 giao tiếp theo chuẩn UART
Màn hình oled giao tiếp theo chuẩn I2C
Lưu đồ thuật toán
3.2.1 Lưu đồ thuật toán cho Esp
Hình 3 3 Lưu đồ thuật toán Esp32
3.2.2 Lưu đồ thuật toán cho webserver
Hình 3 4 Lưu đồ thuật toán webserver
Nguyên lý hoạt động
Dữ liệu từ các cảm biến được đọc và truyền qua ESP32 để hiển thị trên màn hình OLED, đồng thời gửi lên server qua Socket.IO Server sẽ chuyển tiếp dữ liệu này lên website, nơi hiển thị thông tin như nhiệt độ, độ ẩm, và ánh sáng hiện tại, cũng như các giá trị cao nhất và thấp nhất Ngoài ra, hệ thống còn tích hợp cảm biến vân tay để mở cửa; nếu vân tay được xác nhận, cửa sẽ tự động mở và đóng sau thời gian quy định Trên website, người dùng cũng có thể nhập mật khẩu để mở cửa, nhưng cần nhấn nút để đóng cửa Hệ thống còn theo dõi mức nước trong bể; khi mực nước xuống dưới ngưỡng, máy bơm sẽ tự động hoạt động cho đến khi bể đầy và ngắt.
Kết quả xây dựng Webserver
Hình 3 5 Giao diện điều khiển , giám sát
Hình 3 6 Giao diện hiện thị lịch sử đo
Thông qua Webserver, người dùng có thể dễ dàng truy cập và theo dõi các giá trị nhiệt độ, độ ẩm và ánh sáng tại thời điểm hiện tại, cũng như giá trị cao nhất và thấp nhất Hơn nữa, các giá trị này còn được thể hiện một cách trực quan và sinh động qua biểu đồ, giúp người dùng dễ dàng quan sát và phân tích.
Các thiết bị có khả năng điều khiển từ xa thông qua webserver theo thời gian thực, cho phép giám sát mức nước trong bể Hệ thống sẽ gửi thông báo khi mức nước giảm xuống dưới ngưỡng cảnh báo và tự động kích hoạt thiết bị bơm nước để duy trì mức nước an toàn.
Bên cạnh đó còn có thêm tính năng nhập mật khẩu để đóng mở cửa