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 để giaotiếp với Vi điều khiển hoặc kết nối
Tổng quan
Đặt vấn đề
Ngành nông nghiệp là một ngành truyền thống của nước ta thế nhưng không,phát triển một cách mạnh mẽ bởi vì với lối canh tác truyền thống, chúng ta còn gặp phải rất nhiều hạn chế, hiệu quả không cao Việc áp dụng công nghệ, kỹ thuật mới sẽ là một hướng đi mới mang lại “làn gió mới” cho ngành nông nghiệp nước nhà.
Việc ứng dụng IoT vào nông nghiệp sẽ mang lại rất nhiều thuận lợi cho người nông dân, quan trọng hơn là nâng cao hiệu quả trồng trọt, cũng như nâng cao hiệu quả kinh tế Như chúng ta đều biết khí hậu ngày càng trở nên khắc nghiệt, thế nên việc con người tự theo dõi thời tiết và can thiệp, chăm sóc cây trồng sao cho kịp với sự thay đổi của khí hậu, quả thật tốn rất nhiều thời gian công sức, hiệu quả lại không cao Thế nhưng với sự can thiệp của máy móc, hệ thông cảm biến, sẽ giúp người nông dân giám sát một cách chính xác và hiệu quả nhất Ngày nay, loT được ứng dụng vào nông nghiệp ở hầu hết các giai đoạn từ quá trình sản xuất đến đóng, gói và phân phối nông sản đến người tiêu dùng.
Nhận thấy sự thuận lợi cũng như tính ứng dụng cao của IoT trong ngành nông. nghiệp, cụ thể là là trong cây trồng, nhóm chúng tôi quyết định chọn đề tài “Hệ thống nông nghiệp thông minh” Ý tưởng cốt lõi của hệ thống này là các thông tin từ các cảm biến sẽ được thu thập đưa đến xử lý trung tâm, sau đó trung tâm sẽ đưa ra các xử lý cho hệ thống bơm phun sương, quạt, đèn hoạt động một cách phù hợp đề tạo ra một môi trường thuận lợi nhất cho cây trồng phát triển tối ưu.
Mục tiêu
Tìm hiểu và thực hiện việc điều khiển các thiết bị trong nông nghiệp như đèn, quạt, máy bơm nước,… thông qua mạng Internet Cụ thể là tìm hiểu về chip ESP32 để điều khiển thiết bị 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
Nội dung 4: Thiết kế lưu đồ giải thuật và viết chương trình điều khiển thiết bị, xây dựng Socket Server, thiết kế giao diện Webserver và điều khiển, giám sát trạng thái đóng mở của các thiết bị.
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 Input Only Pins:
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 có 18 kênh input ADC và độ phân giải 12 bit (trong khi ESP8266 chỉ có 1 kênh ADC độ phân giải 10 bit) Đây là các GPIO có thể được sử dụng làm ADC và các kênh tương ứng:
Digital to Analog Converter (DAC)
Bộ điều khiển ESP32 LED PWM có 16 kênh độc lập có thể được cấu hình để tạo tín hiệu PWM với các đặc tính khác nhau Tất cả các chân có thể hoạt động như output đều có thể được sử dụng làm chân PWM (GPIO từ 34 đến 39 không thể tạo PWM) Các thông số cấu hình:
Chân GPIO xuất tín hiệu.
ESP32 có hai kênh I2C và bất kì chân nào cũng có thể cấu hình làm chân SDA và SCL Khi sử dụng ESP32 với Arduino IDE, chân I2C mặc định là:
ESP32 có module giao tiếp SPI với thiết bị ngoại vi, gọi là SPI0, SPI1, HSPI, VSPI. SPI0 chỉ dành riêng để kết nối bộ nhớ flash của ESP32 với các thiết bị bố nhớ flash khác 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 và sử dụng tự do SPI1 và HSPI và VSPI đều có 3 cổng kết với chip, giúp chúng ta dễ dàng kết nối đồng thời với 3 slave bằng giao tiếp SPI mà ESP32 sẽ là thiết bị master.
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 Temperature Humidity Sensor là cảm biến rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệu thông qua giao tiếp 1 wire (giao tiếp digital 1 dây truyền dữ liệu duy nhất) Bộ tiền xử lý tín hiệu tích hợp trong cảm biến giúp bạn có được dữ liệu chính xác mà không phải qua bất kỳ tính toán nào So với cảm biến đời mới hơn là DHT22 thì DHT11 cho khoảng đo và độ chính xác kém hơn rất nhiều.
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
Dữ liệu truyền về của DHT11 gồm 40bit dữ liệu theo thứ tự: 8 bit biểu thị phần nguyên của độ ẩm + 8 bit biểu thị phần thập phân của độ ẩm + 8 bit biểu thị phần nguyên của nhiệt độ + 8 bit biểu thị phần thập phân của nhiệt độ + 8 bit check sum.
Ví dụ: ta nhận được 40 bit dữ liệu như sau:
Độ ẩm: 0011 0101 = 35H = 53% (ở đây do phần thập phân có giá trị 0000 0000 nên ta bỏ qua không tính phần thập phân)Nhiệt độ: 0001 1000 = 18H = 24°C (ở đây do phần thập phân có giá trị 0000 0000, nên ta bỏ qua không tính phần thập phân)
Cảm biến ánh sáng là thiết bị cảm biến thông minh có khả năng nhận biết các biến đổi của môi trường thông qua mắt cảm biến để đúng lúc xoay chỉnh ánh sáng để phù hợp Cảm biến này biết được ánh sáng và xoay chỉnh thay đổi dựa trên các đi-ốt quang học.
Cảm biến ánh sáng hoạt động trên nguyên lý làm việc còn được nhắc đên là hiệu ứng quang điện bên trong Nói một cách đơn giản, khi một chùm ánh sáng chiếu vào,các electron bị nới lỏng, gây ra các lỗ electron dẫn đến dòng điện chạy qua. Ánh sáng càng lớn, dòng điện sẽ 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 (Ultrasonic Sensor) được sử dụng rất phổ biến để xác định khoảng cách vì RẺ và CHÍNH XÁC Cảm biến HC-SR04 sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 2 -> 300cm, với độ chính xác gần như chỉ phụ thuộc vào cách lập trình.
VCC (5V), trig (chân điều khiển phát), echo (chân nhận tín hiệu phản hồi), GND. Cảm biến siêu âm SR04 sử dụng nguyên lý phản xạ sóng siêu âm Cảm biến gồm 2 module.1 module phát ra sóng siêu âm và 1 module thu sóng siêu âm phản xạ về Đầu tiên cảm biến sẽ phát ra 1 sóng siêu âm với tần số 40khz Nếu có chướng ngại vật trên đường đi, sóng siêu âm sẽ phản xạ lại và tác động lên module nhận sóng Bằng cách đo thời gian từ lúc phát đến lúc nhận sóng ta sẽ tính được khoảng cách từ cảm biến đến vật. Khoảng cách = (thời gian * vận tốc âm thanh (340 m/s) / 2
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 gồm 3 tiếp điểm NC (thường đóng), NO(thường mở) và COM(chân chung) được cách ly hoàn toàn với board mạch chính, ở 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.
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ác loại chuẩn giao tiếp
2.2.1 Chuẩn giao tiếp one-wire
Chuẩn giao tiếp1dây (one-wire) được thiết kế bởi Dallas Semiconductor và đã được Maxim mua lại năm 2001 Maxim là một hãng sản xuất chip lớn One-Wrire dùng một dây để truyền nhận nên có tốc độ thấp Chủ yếu sử dụng cho việc thu thập dữ liệu, truyền nhận dữ liệu thời tiết, nhiệt độ, công việc không yêu cầu tốc độ cao Là chuẩn giao tiếp không đồng bộ và bán song công (half-duplex) Giao tiếp tuân theo mối quan hệ chủ tớ một cách chặc chẽ Trên cùng một bus thì chúng ta có thể gắn1hoặc nhiều thiết bị slave nhưng chi có một master có thể kết nối được với bus này Khi không có dữ liệu trên đường truyền thì bus dữ liệu được xem là ở trạng thái rảnh.
Hình 2 9 Chuẩn giao tiếp One Wire Để giao tiếp được với vi điều khiển, tín hiệu trên bus one-wire chia thành các khe thời gian 60 às Một bit dữ liệu được truyền trờn bus dựa trờn khe thời gian (time slots). Các thiết bị slave khác nhau cho phép có thời gian quy định khác nhau Nhưng quan trọng nhất trong chuẩn giao tiếp này là cần chính xác về thởi gian Vì vậy để tối ưu đường truyền thì cần một bộ định thời để delay chính xác nhất.
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)
Đọc bit: Thiết bị Master kộo bus xuống 1 khoảng A (às) Trong khoảng thời gian
E (às) tiếp theo, thiết bị master sẽ tiến hành lấy mẫu Cú nghĩa trong E (às) 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 thì master sẽ đọc đượ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à 1 giao thức giao tiếp nối tiếp đồng bộ được phát triển bởi Philips Semiconductors, sử dụng để truyền nhận dữ liệu giữa các IC với nhau chỉ sử dụng hai đường truyền 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à 1 vi điều khiển, nó có nhiệm vụ điều khiển đường tín hiệu SCL và gửi nhận dữ liệu hay lệnh thông qua đường SDA đến các thiết bị khác
Các thiết bị nhận các dữ liệu lệnh và tín hiệu từ thiết bị Master được gọi là các thiết bị Slave Các thiết bị Slave thường là các IC, hoặc thậm chí là vi điều khiển
Master và Slave được kết nối với nhau như hình trên Hai đường bus SCL và SDA đều hoạt động ở chế độ Open Drain, nghĩa là bất cứ thiết bị nào kết nối với mạng
I2C này cũng chỉ có thể kéo 2 đường bus này xuống mức thấp (LOW), nhưng lại không thể kéo được lên mức cao Vì để tránh trường hợp bus vừa bị 1 thiết bị kéo lên mức cao vừa bị 1 thiết bị khác kéo xuống mức thấp gây hiện tượng ngắn mạch.
Do đó cần có 1 điện trờ ( từ 1 – 4,7 kΩ) để giữ mặc định ở mức cao.) để 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ỉ vừa được gửi tới Nếu trùng khớp, Slave sẽ xác nhận bằng cách kéo đường SDA xuống 0 và set bit ACK/NACK bằng ‘0’. Nếu không trùng khớp thì SDA và bit ACK/NACK đều mặc định bằng ‘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 tất cả dữ liệu đã được gửi đến Slave thành công, Master sẽ phát 1 tín hiệuStop để báo cho các Slave biết quá trình truyền đã kết thúc bằng các chuyển lần lượt SCL, SDA từ mức 0 lên mức 1.
Hệ điều hành FreeRTOS
RTOS là viết tắt của cụm từ Real-time operating system hay hệ điều hành thời gian thực thường được nhúng trong các dòng vi điều khiển dùng để điều khiển thiết bị một cách nhanh chóng và đa nhiệm (multi tasking).
Hệ điều hành thời gian thực (realtime): sinh ra cho các tác vụ cần sự phản hồi nhanh của hệ thống, thường được nhúng trong các loại vi điều khiển và không có giao diện (GUI) tương tác với người dùng Chúng cần phản hồi nhanh bởi vì đa số các tác vụ tương tác với thiết bị, máy móc khác chứ không phải con người Các tài nguyên bên trong rất hữu hạn nên chỉ một sự chậm trễ cũng có thể làm hệ thống làm việc hoàn toàn sai lệch.
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ó nhiệm vụ quản lý và điều phối các Task Mọi sự kiện(Even) như ngắt, Timer, data truyền tới… đều qua Kernel xử lý để quyết định xem nên làm gì tiếp theo Thời gian xử lý của Kernel thường rất nhanh nên độ trễ rất thấp.
Hình 2 13 Cấu tạo Kernel Task – Tác vụ
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ẽ quản lý việc chuyển đổi giữa các task, nó sẽ lưu lại ngữ cảnh của task sắp bị hủy và khôi phục lại ngữ cảnh của task tiếp theo bằng cách:
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ư:
Cooperative: giống với lập trình thông thường, mỗi task chỉ có thể thực thi khi task đang chạy dừng lại, nhược điểm của nó là task này có thể dùng hết tất cả tài nguyên của 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.
Priority base: Task được phân quyền cao nhất sẽ được thực hiện trước, nếu các task có cùng quyền như nhau thì sẽ giống với round-robin, các task có mức ưu tiên thấp hơn sẽ được thực hiện cho đến cuối time slice
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ế cho phép các task có thể kết nối với nhau, nó là một FIFO ( First In First Out) buffer được định nghĩa bởi độ dài (số phần tử mà buffer có thể lưu trữ) và kích thước dữ liệu (kích thước của các thành phần trong buffer).
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 là một phân đoạn hoặc một phần của chương trình, trong đó nó giải quyết việc điều phối các task, lập lịch và phân mức ưu tiên cho task, nắm bắt các thông điệp gửi đi từ task.
RTOS khá phức tạp, nói một cách dễ hiểu hơn là nó thực hiện việc xử lý các trạng thái máy (State Machine) Các bạn có thể tìm hiểu tại bài viết States Machine và lập trình nhúng.
Hình 2 17 Cách hoạt động của RTOS
Cách hoạt động của RTOS Nhân Kernel sẽ điều phối sự hoạt động của các tác vụ (Task), mỗi task sẽ có một mức ưu tiên (prioritize) và thực thi theo chu kì cố định Nếu có sự tác động như ngắt, tín hiệu hoặc tin nhắn giữa các Task, Kernel sẽ điều phối chuyển tới Task tương ứng với Code đó Sự chuyển dịch giữa các Task rất linh động, độ trễ thấp mang lại độ 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ở (gọi tắt là RDBMS) hoạt động theo mô hình client-server Với RDBMS là viết tắt của Relational Database Management System MySQL được tích hợp apache, PHP MySQL 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ể có nhiều bảng quan hệ chứa dữ liệu MySQL cũng có cùng một cách truy xuất và mã lệnh tương tự với ngôn ngữ SQL. MySQL được phát hành từ thập niên 90s.
Database là tập hợp dữ liệu theo cùng một cấu trúc được đặt trong một bộ dữ liệu chung dataset Database được tổ chức sắp xếp giống như một bảng tính có sự liên kết chặt chẽ với nhau. Được hiểu là mã nguồn mở, Open source cho phép mọi người dùng sử dụng, cài đặt và tùy chỉnh nó.
Hình 2 18 Mô hình Client – Server
Máy tính cài đặt và chạy phần mềm RDBMS được gọi là client (máy khách) Mỗi khi chúng cần truy cập dữ liệu, chúng kết nối tới máy chủ (server) RDBMS Cách thức này chính là mô hình client-server.
MySQL Server Đây là máy tính hay một hệ các máy tính cài đặt phần mềm MySQL dành cho server để giúp bạn lưu trữ dữ liệu trên đó để máy khách có thể truy cập vào quản lý.
MYSQL Client là tên gọi chung của mọi phần mềm có thể thực hiện truy vấn MySQL server và nhận kết quả trả về Hay nói cách khác, MySQL Client là đoạn mã PHP script trên một máy tính hay trên cùng server dùng để kết nối tới MySQL database.
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,
Socketio không phải là một ngôn ngữ, mà chỉ là 1 công cụ giúp thực hiện những ứng dụng realtime Vì thế, không thể sử dụng socketio để thay thế hoàn toàn cho một ngôn ngữ, mà phải sử dụng kết hợp với một ngôn ngữ khác Ngôn ngữ đó có thể là php, asp.net, nodejs,
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 Đây là nơi sẽ cài đặt socket io Ngôn ngữ để dựng server có thể là php, asp.net, nodejs, Tuy nhiên, tùy vào ngôn ngữ lựa chọn mà cách cấu trúc server khác nhau Ở đây, nếu được thì khuyến khích sử dụng nodejs để dựng server, vì như vậy có thể cài trực tiếp socketio vào cùng một server Nếu sử dụng php thì phải cài thêm những package khác, hoặc phải chuẩn bị riêng server để chạy socketio.
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
Cơ chế hoạt động của một ứng dụng realtime đó là thông qua server để lắng nghe (listen) data và truyền data về các máy client Vì vậy cần cài khai báo sử dụng socketio ở cả phía server và client Để lắng nghe data, ta sử dụng câu lệnh socket.on(), để phát dữ liệu thì sử dụng lệnh socket.emit()
Socket.on và socket.emit có parameter thứ 1 là tên đường truyền Tên đường truyền có thể là tên bất ký, tuy nhiên đễ truyền và nhận dữ liệu của chung 1 đường truyền thì tên đường truyề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 chứa nhiều trang con và mỗi trang con này lại có một tập tin HTML riêng Lưu ý, HTML không phải là ngôn ngữ lập trình Điều này có nghĩa là nó không thể thực hiện các chức năng “động” Hiểu một cách đơn giản hơn, cũng tương tự như phần mềm Microsoft Word, HTML chỉ có tác dụng bố cục và định dạng trang web. HTML khi kết hợp với CSS và JavaScript sẽ trở 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.
Tuy HTML được đánh giá là khá mạnh nhưng nó vẫn chưa đủ khả năng xây dựng một trang web chuyên nghiệp Do đó, các lập trình viên thường chỉ sử dụng HTML để thêm các element dạng văn bản và xây dựng giao diện cấu trúc cho phần nội dung trên trang Sau đó, họ dùng 2 ngôn ngữ frontend là CSS và Javascript để tạo nên một Website hoàn chỉnh.
CSS là chữ viết tắt của Cascading Style Sheets, nó là một ngôn ngữ được sử dụng để tìm và định dạng lại các phần tử được tạo ra bởi các ngôn ngữ đánh dấu (HTML). Nói ngắn gọn hơn là ngôn ngữ tạo phong cách cho trang web Bạn có thể hiểu đơn giản rằng, nếu HTML đóng vai trò định dạng các phần tử trên website như việc tạo ra các đoạn văn bản, các tiêu đề, bảng,…thì CSS sẽ giúp chúng ta có thể thêm style vào các phần tử HTML đó như đổi bố cục, màu sắc trang, đổi màu chữ, font chữ, thay đổi cấu trúc…
Phương thức hoạt động của CSS là nó sẽ tìm dựa vào các vùng chọn, vùng chọn có thể là tên một thẻ HTML, tên một ID, class hay nhiều kiểu khác Sau đó là nó sẽ áp dụng các thuộc tính cần thay đổi lên vùng chọn đó.
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 mang đến sự sinh động của website Nó khác với HTML (thường chuyên cho nội dung) và CSS (thường chuyên dùng cho phong cách), và khác hẵn với PHP (chạy trên server chứ không chạy dưới máy client).
JavaScript hoặc JS sẽ giúp tăng tính tương tác trên website Script này chạy trên các trình duyệt của người dùng thay vì trên server và thường sử dụng thư vuiên của bên thứ
3 nên có thể tăng thêm chức năng cho website mà không phải code từ đầu.
JavaScript thường được nhúng trực tiếp vào một trang web hoặc được tham chiếu qua file js riêng Nó là ngôn ngữ phía client, tức là script được tải về máy của khách truy cập và được xử lý tại đó thay vì phía server là xử lý trên server rồi mới đưa kết quả tới khách truy cập
Javascript giúp thao tác với người dùng ở phía client và tách biệt giữa các client Ví dụ 2 người đang truy cập vào 2 trình duyệt khác nhau thì cả hai đều có những phiên xử lý Javascript khác nhau, không ảnh hưởng lẫn nhau Javascript có thể hoạt động trên nhiều nền tảng khác nhau, từ Windows, macOS cho đến các hệ điều hành trên mobile.Javascript là một ngôn ngữ dễ tiếp cận, bạn sẽ dễ dàng học nó mà không cần phải cài đặt quá nhiều phần mềm.
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à khối điều khiển chính của hệ thống, thu thập dữ liệu từ các thiết bị sau đó xử lý và điều khiển khối ngoại vi và khối hiển thị Đảm bảo sự liên lạc giữa 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 khiển các chế độ hoạt động trên website, cùng các thiết bị thực thi hành động là các Rơ-le dưới sự điều khiển của 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ị sử dụng chung nguồn từ esp32 được đấu nối với chân GND và chân 3V3 như trên hình Ngoài ra có 2 động cơ không sử dụng nguồn từ chân 3V3 mà sử dụng nguồn từ chân VIN Nguồn từ chân VIN có đầu ra là 5V dùng để kích relay hoạt động.
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 được các cảm biến đọc rồi đưa qua esp hiển thị lên màn hình oled đồng thời gửi lên server thông qua socket io Từ server socket io đưa các dữ liệu nhận được từ esp32 xuống web để hiện thị Trên web hiện thị những dữ liệu như nhiệt độ, độ ẩm, ánh sáng hiện tại, cao nhất, thấp nhất Ngoài các dữ liệu của các cảm biến trên trên còn có các dữ liệu của cảm biến vân tay dùng để mở cửa Nếu như vân tay được xác định là đúng thì cửa sẽ tự động mở và đóng lại sau một khoảng thời gian đặt trước Ở trên web cũng có chức năng tương tự nhưng thay vì nhận diện vân tay thì sẽ nhập mật khẩu Cửa sẽ được không tự động đóng lại mà người dùng cần nhấn nút để đóng mở cửa Hệ thống còn có chức năng giám sát mức nước trong bể Khi mực nước xuống dưới mức ngưỡng máy bơm sẽ tự động bơm nước vào bể đến lúc đầy và tự 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 ta có thể đọc được các giá trị nhiệt độ, độ ẩm, ánh sáng với các thời điểm hiện tại, giá trị cao nhất, giá trị thấp nhất Ngoài ra ta có thể quan sát được giá trị thông qua biểu đồ một cách trực quan và sinh động.
Các thiết bị có thể điều khiển được từ xa nhờ có webserver theo thời gian thực
Giám sát mức nước trong bể để đưa ra thông báo và có thể bật thiết bị bơm nước khi nước trong bể xuống dưới mức cảnh báo.
Bên cạnh đó còn có thêm tính năng nhập mật khẩu để đóng mở cửa.