1. Trang chủ
  2. » Tất cả

Mô phỏng hệ thống nhà thông minh theo dõi nhiệt độ, độ ẩm và điều khiển thiết bị từ xa bằng esp8266 thông qua mqtt

37 30 1

Đ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 đề Mô phỏng hệ thống nhà thông minh theo dõi nhiệt độ, độ ẩm và điều khiển thiết bị từ xa bằng ESP8266 thông qua MQTT
Người hướng dẫn Thầy Nguyễn Ngọc Minh
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Kỹ thuật Điện tử, Tự động hoá và Truyền thông
Thể loại Đề án
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 37
Dung lượng 2,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG I: GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI (5)
    • 1.1 LÝ DO CHỌN ĐỀ TÀI (5)
    • 1.2 MỤC ĐÍCH CỦA ĐỀ TÀI (5)
    • 1.3 MỤC TIÊU VÀ PHẠM VI NGHIÊN CỨU (5)
  • CHƯƠNG II: GIỚI THIỆU CÁC LINH KIỆN VÀ NGÔN NGỮ SỬ DỤNG (6)
    • 2.1 GIỚI THIỆU VỀ MODULE ESP8266 (6)
      • 2.1.1 Tổng quan về module ESP8266 (6)
      • 2.1.2 Thông số kỹ thuật (6)
      • 2.1.3 Các tính năng (6)
    • 2.2 CẢM BIẾN NHIỆT ĐỘ DHT11 (8)
      • 2.2.1 Cấu tạo (8)
      • 2.2.2 Cách sử dụng cảm biến DHT11 (9)
    • 2.3 TỔNG QUAN VỀ RTOS (10)
      • 2.3.1 Khái niệm (10)
      • 2.3.2 Các thành phần (10)
    • 2.4 Free RTOS (13)
      • 2.4.1 Tổng quan về Free RTOS (13)
      • 2.4.2 Các task trong Free RTOS (15)
      • 2.4.3 Quản lí task (16)
    • 2.5 GIỚI THIỆU VỀ NODEJS (17)
      • 2.5.1 Ngôn ngữ lập trình JavaScript (17)
      • 2.5.2 Tổng quan về Nodejs (19)
      • 2.5.1 Các Framework được sử dụng (22)
    • 2.6 GIỚI THIỆU VỀ GIAO THỨC MQTT (24)
      • 2.6.1 Khái niệm (24)
      • 2.6.2 Cơ chế hoạt động (25)
  • CHƯƠNG III: THIẾT KẾ VÀ LẮP RÁP HỆ THỐNG (26)
    • 3.1 SƠ ĐỒ KHỐI HỆ THỐNG (26)
    • 3.2 KHỐI XỬ LÝ TRUNG TÂM (26)
    • 3.3 KHỐI FRONT-END (28)
      • 3.3.1 Layout của bảng điều khiển (28)
      • 3.3.2 Các thành phần của trang web (28)
      • 3.3.3 Xử lí trang web (30)
      • 3.3.3 Giao diện demo (33)
    • 3.4 KHỐI BACK-END (33)
      • 3.4.1 Hệ quản trị cơ sở dữ liệu Mysql (33)
      • 3.4.2 Thiết kế cơ sở dữ liệu (34)

Nội dung

Ngày nay, khi nhu cầu và thị hiếu con người ngày càng cao, yêu cầu về sốlượng và chất lượng của các sản phẩm xã hội cũng không ngừng tăng, điều đó đòihỏi các dây chuyền sản xuất trong cô

GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI

LÝ DO CHỌN ĐỀ TÀI

Kỹ thuật điện tử là ngành công nghệ chuyên ứng dụng các kỹ thuật hiện đại, kỹ thuật điều khiển và kỹ thuật máy tính vào quá trình vận hành và điều khiển sản xuất Ngành này đóng vai trò quan trọng trong việc tối ưu hóa các hệ thống sản xuất, nâng cao hiệu quả và độ chính xác của quá trình điều khiển Với sự phát triển không ngừng của công nghệ, kỹ thuật điện tử góp phần thúc đẩy đổi mới trong các lĩnh vực công nghiệp và tự động hóa sản xuất.

Trong bối cảnh hiện nay, nhu cầu và thị hiếu của con người ngày càng cao, đòi hỏi các sản phẩm xã hội phải đáp ứng tiêu chuẩn về số lượng và chất lượng Điều này thúc đẩy sự phát triển của các dây chuyền sản xuất công nghiệp hiện đại với mức độ tự động hóa ngày càng cao Các kỹ thuật điều khiển hiện đại, có trợ giúp của máy tính, đóng vai trò then chốt trong việc nâng cao hiệu quả và độ chính xác của quá trình sản xuất Hệ thống điều khiển tự động không chỉ xuất hiện rộng rãi trong ngành công nghiệp mà còn ứng dụng trong nông nghiệp, giao thông vận tải và các lĩnh vực khác nhằm tối ưu hóa hoạt động và nâng cao năng suất.

Một hệ thống điều khiển thông minh và tự động hóa hoàn toàn đang trở thành xu hướng tất yếu trong hiện tại và tương lai Việc ứng dụng công nghệ thông minh vào điều khiển các thiết bị trong nhà ở và sân vườn còn mới mẻ tại Việt Nam, mở ra nhiều cơ hội phát triển Nhóm đã chọn đề tài "ngôi nhà thông minh" làm dự án nghiên cứu để chủ động bắt kịp xu thế công nghệ và nâng cao hiệu quả quản lý hệ thống nhà thông minh tại Việt Nam.

MỤC ĐÍCH CỦA ĐỀ TÀI

Nhóm xây dựng đề tài chọn hướng phát triển hệ thống sử dụng ESP8266 để quản lý các công việc lặp đi lặp lại hàng ngày, nhằm giảm thiểu tác động của con người trong quá trình vận hành Hệ thống này giúp tối ưu hóa việc quản lý ngôi nhà, giảm bớt công sức và lo lắng của người dùng Mục tiêu của dự án là mang lại cuộc sống thuận tiện, thoải mái hơn cho người sử dụng.

MỤC TIÊU VÀ PHẠM VI NGHIÊN CỨU

Nhóm thực hiện đề tài hướng tới việc tìm hiểu nguyên tắc hoạt động của cảm biến nhiệt độ và độ ẩm DHT11 cùng với bộ điều khiển ESP8266 để đảm bảo khả năng đo lường chính xác Đồng thời, nhóm còn nghiên cứu các ngôn ngữ lập trình web phổ biến như HTML, CSS và NodeJS để phát triển giao diện điều khiển dễ sử dụng Việc sử dụng web làm giao diện điều khiển giúp người dùng dễ dàng tương tác và kiểm soát hệ thống cảm biến từ xa, nâng cao hiệu quả công việc và ứng dụng IoT.

GIỚI THIỆU CÁC LINH KIỆN VÀ NGÔN NGỮ SỬ DỤNG

GIỚI THIỆU VỀ MODULE ESP8266

2.1.1 Tổng quan về module ESP8266

Kit ESP8266 là thiết bị phát triển dựa trên chip WiFi SoC ESP8266, được thiết kế dễ sử dụng nhờ tích hợp sẵn mạch nạp với chip CP2102 trên board Bên trong ESP8266 có sẵn lõi vi xử lý giúp người dùng có thể lập trình trực tiếp mà không cần thêm bất kỳ vi xử lý nào khác Hiện tại, ESP8266 hỗ trợ hai ngôn ngữ lập trình chính: sử dụng phần mềm IDE của Arduino với thư viện riêng hoặc phần mềm NodeMCU để phát triển các dự án IoT một cách thuận tiện và linh hoạt.

Module ESP8266 là module WiFi giá rẻ, được đánh giá cao về khả năng kết nối Internet và truyền dữ liệu không dây Nó là sự lựa chọn phổ biến cho các dự án IoT, giúp thiết bị của bạn kết nối mạng một cách dễ dàng và tiết kiệm chi phí Với tính năng truyền nhận dữ liệu ổn định, ESP8266 thay thế hiệu quả các module RF truyền thống trong các ứng dụng yêu cầu kết nối WiFi Đây là giải pháp tối ưu cho các dự án tự động hóa và kết nối mạng không dây hiện nay.

ESP8266 là một chip tích hợp cao, được thiết kế đặc biệt để phục vụ nhu cầu của thế giới kết nối mới trong lĩnh vực Internet of Things (IoT) Với khả năng cung cấp giải pháp kết nối mạng Wi-Fi hoàn chỉnh và an toàn, ESP8266 giúp lưu trữ các ứng dụng và giảm tải cho bộ xử lý chính của thiết bị Sản phẩm này là lựa chọn lý tưởng cho các dự án IoT nhờ tính linh hoạt, tiết kiệm năng lượng và dễ tích hợp.

ESP8266 nổi bật với khả năng xử lý mạnh mẽ và khả năng lưu trữ rộng rãi, giúp dễ dàng tích hợp với các cảm biến, vi điều khiển và thiết bị ứng dụng khác thông qua GPIOs Thiết bị này mang lại giải pháp chi phí hợp lý và thiết kế PCB tối giản, phù hợp cho các dự án IoT và ứng dụng kết nối không dây Nhờ đó, ESP8266 trở thành lựa chọn phổ biến để phát triển các thiết bị thông minh với hiệu suất cao và chi phí thấp.

 IC chính: ESP8266 Wifi SoC

 Phiên bản firmware: NodeMCU Lua

 Chip nạp và giao tiếp UART: CP 2101

 GPIO tương thích hoàn toàn với firmware Node MCU

 Nguồn: 5v DC MicroUSB hoặc Vin

 GPIO giao tiếp mức 3.3 VDC

 Tích hợp led báo trạng thái, nút Rst, Flash

 Tương thích hoàn toàn với Arduino IDE

 Tích hợp bộ xử lý RISC trên chip bộ nhớ và giao diện bộ nhớ ngoài

 Tích hợp bộ vi xử lý MAC / baseband

 Tích hợp Wep, TKIP, AES và các công cụ WAPI

 Băm xung PWM (tất cả các chân )

CẢM BIẾN NHIỆT ĐỘ DHT11

DHT11 là cảm biến kỹ thuật số giá rẻ, chuyên dụng để đo nhiệt độ và độ ẩm chính xác Với khả năng giao tiếp dễ dàng với các bộ vi điều khiển phổ biến như Arduino, Raspberry Pi, cảm biến này giúp người dùng nhanh chóng thu thập dữ liệu về nhiệt độ và độ ẩm trong không gian sống hoặc dự án của mình DHT11 là lựa chọn lý tưởng cho các ứng dụng theo dõi môi trường nhờ độ chính xác ổn định và giá thành phù hợp.

DHT11 là cảm biến đo độ ẩm tương đối chính xác, phù hợp để đo không khí xung quanh Cảm biến này hoạt động dựa trên nguyên lý sử dụng một điện trở nhiệt và cảm biến độ ẩm điện dung để cung cấp dữ liệu đo độ ẩm hiệu quả Sản phẩm DHT11 được ưa chuộng trong các dự án điện tử nhờ vào khả năng đo lường ổn định và dễ tích hợp.

Cảm biến DHT11 gồm phần tử cảm biến độ ẩm điện dung và điện trở nhiệt để đo nhiệt độ Tụ điện cảm biến độ ẩm có hai điện cực và chất nền giữ ẩm làm chất điện môi, giúp thay đổi giá trị điện dung theo mức độ ẩm IC đo và xử lý các tín hiệu này chuyển đổi thành dạng kỹ thuật số để dễ dàng xử lý Để đo nhiệt độ, cảm biến sử dụng một nhiệt điện trở hệ số nhiệt độ âm, giảm giá trị khi nhiệt độ tăng, và thường được chế tạo từ gốm bán dẫn hoặc polymer nhằm duy trì độ nhạy ngay cả với biến đổi nhỏ về nhiệt độ.

Số chân Tên chân Mô tả

2 Data Đầu ra cả nhiệt độ và độ ẩm thông qua dữ liệu nối tiếp

Cảm biến Nhiệt Độ Và Độ Ẩm DHT11 là 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 qua giao tiếp Digital 1 dây 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 thực hiện các phép tính phức tạp Tuy nhiên, so với phiên bản nâng cấp DHT22, DHT11 có phạm vi đo và độ chính xác thấp hơn đáng kể, phù hợp cho các ứng dụng yêu cầu đơn giản và tiết kiệm chi phí.

 Điện áp hoạt động: 3V - 5V DC

 Dòng điện tiêu thụ: 2.5mA

 Phạm vi cảm biến độ ẩm: 20% - 90% RH, sai số ±5%RH

 Phạm vi cảm biến nhiệt độ: 0°C ~ 50°C, sai số ±2°C

 Tần số lấy mẫu tối đa: 1Hz (1 giây 1 lần)

2.2.2 Cách sử dụng cảm biến DHT11

Chân dữ liệu kết nối với chân I/O của vi điều khiển, sử dụng một điện trở kéo lên 5K để ổn định tín hiệu Chân dữ liệu này truyền dữ liệu nối tiếp chứa giá trị nhiệt độ và độ ẩm, gồm các phần: 8 bit dữ liệu độ ẩm nguyên, 8 bit phần thập phân của độ ẩm, 8 bit dữ liệu nhiệt độ nguyên, 8 bit phần thập phân của nhiệt độ, và một bit chẵn lẻ Để yêu cầu module DHT11 gửi dữ liệu, chân I/O cần được đặt ở mức thấp trong vài giây rồi sau đó giữ ở mức cao theo đúng trình tự thời gian đã quy định.

Thời lượng của mỗi tín hiệu host được giải thích trong datasheet DHT11, với các bước và sơ đồ thời gian minh họa.

TỔNG QUAN VỀ RTOS

RTOS, viết tắt của "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 để điều khiển thiết bị một cách nhanh chóng và hiệu quả Hệ điều hành này cho phép xử lý đa nhiệm (multi-tasking), đáp ứng các yêu cầu thời gian thực chính xác và đảm bảo hoạt động liên tục của các thiết bị điện tử Sử dụng RTOS giúp tối ưu hóa hiệu suất hệ thống, nâng cao độ ổn định và đáp ứng nhanh các tác vụ trong các ứng dụng công nghiệp, tự động hóa và IoT.

Hệ điều hành thời gian thực (RTOS) được thiết kế để xử lý các tác vụ đòi hỏi phản hồi nhanh, thường tích hợp trong các vi điều khiển mà không có giao diện người dùng (GUI) Những hệ thống này cần phản hồi tức thì vì đa số các tác vụ liên quan đến thiết bị và máy móc, không phải con người Do tài nguyên bên trong hạn chế, nên một chút chậm trễ cũng có thể gây ra sự hoạt động sai lệch của toàn bộ hệ thống.

Kernel hay còn gọi là Nhân, đảm nhiệm chức năng quản lý và điều phối các Task trong hệ thống Mọi sự kiện như ngắt, Timer, truyền dữ liệu đều được Kernel xử lý để quyết định hành động tiếp theo, giúp hệ thống hoạt động một cách mượt mà và hiệu quả Với thời gian xử lý cực kỳ nhanh, Kernel đảm bảo độ trễ thấp, tối ưu hoá hiệu suất hoạt động của hệ thống.

Task là một đoạn chương trình thực thi một hoặc nhiều vấn đề nào đó và được Kernel quản lý chặt chẽ, đảm bảo hoạt động hiệu quả của hệ thống Kernel có trách nhiệm chuyển đổi giữa các task, lưu lại ngữ cảnh của task sắp bị hủy để đảm bảo không bị mất dữ liệu Khi cần thực thi task tiếp theo, Kernel sẽ khôi phục lại ngữ cảnh của nó, giúp quá trình chuyển đổi task diễn ra mượt mà và liên tục Quản lý task là yếu tố then chốt trong hệ điều hành, đảm bảo tính đa nhiệm và tối ưu hóa hiệu suất hệ thống.

 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:

 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ư:

Trong cơ chế hợp tác (cooperative), các nhiệm vụ (task) chỉ được thực thi khi nhiệm vụ hiện tại đã kết thúc hoặc dừng lại, giúp đảm bảo thứ tự xử lý các tác vụ Tuy nhiên, nhược điểm của phương pháp này là một nhiệm vụ có thể chiếm dụng toàn bộ tài nguyên của CPU, dẫn đến nguy cơ gây nghẽn hệ thống hoặc làm chậm quá trình xử lý các nhiệm vụ khác.

 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 quản lý công việc, các nhiệm vụ được xử lý dựa trên nguyên tắc ưu tiên Task có quyền phân quyền cao nhất sẽ được thực hiện trước tiên, đảm bảo các công việc quan trọng được ưu tiên hàng đầu Nếu các nhiệm vụ có cùng mức độ quyền hạn, quá trình thực hiện sẽ theo vòng quay (round-robin), đảm bảo tính công bằng trong phân phối tài nguyên Các nhiệm vụ có mức ưu tiên thấp hơn sẽ chỉ được xử lý sau khi các nhiệm vụ ưu tiên cao đã hoàn thành hoặc hết thời gian xử lý, giúp tối ưu hóa hiệu suất và đảm bảo tiến độ công việc.

 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.

Free RTOS

2.4.1 Tổng quan về Free RTOS Để sử dụng được FreeRTOS, cách cơ bản nhất là bạn phải biết sử dụng các API(nói dễ hiểu là các hàm được cung cấp sẵn) của nó, dưới đây là bảng tổng quan về các API của FreeRTOS và mô tả cụ thể.

Phân loại API FreeRTOS API Mô tả

Tạo task xTaskCreate Tạo task mới vTaskDelete Xóa task

Control task vTaskDelay Delay task vTaskPrioritySet Set quyền cho task vTaskSuspend Suspend task vTaskResume Tiếp tục task

Control kernel vTaskStartScheduler Start kernel scheduler

FreeRTOS offers various APIs for task management and critical section control The vTaskSuspendAll API suspends all tasks, allowing the system to enter a critical state, while xTaskResumeAll resumes all suspended tasks to continue operation The taskYIELD API forces a context switch, enabling multitasking efficiency To protect shared resources, FreeRTOS provides taskENTER_CRITICAL to enter a critical section with context switching disabled, and taskEXIT_CRITICAL to exit the critical section, ensuring thread safety and system stability.

Messagequeues xQueueCreate Tạo một queue xQueueSend Gửi data vào queue xQueueReceive Nhận data từ queue

Semaphores xSemaphoreCreateBinary Tạo một binary semaphore xSemaphoreCreateCounting Tạo một counting semaphore xSemaphoreCreateMutex Tạo một mutex semaphore xSemaphoreTake Take semaphore xSemaphoreGive Give semaphore

Timers xTimerCreate Tạo timer xTimerStart Start timer xTimerStop Stop timer

2.4.2 Các task trong Free RTOS

Kernel chịu trách nhiệm quản lý quá trình chuyển đổi giữa các task, đảm bảo rằng trạng thái của task sắp bị hủy được lưu lại để có thể khôi phục sau này Khi hệ thống chuyển đổi từ task này sang task khác, kernel sẽ ghi nhớ ngữ cảnh hiện tại của task cũ và chắc chắn rằng trạng thái của nó được lưu trữ chính xác Đồng thời, kernel cũng khôi phục ngữ cảnh của task tiếp theo để đảm bảo quá trình thực thi diễn ra suôn sẻ và không bị gián đoạn Nhờ hệ thống quản lý này, các task có thể chuyển đổi một cách hiệu quả mà không mất dữ liệu hoặc gây gián đoạn trong quá trình hoạt động của hệ thống.

 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.

502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared

 Sau khi có định nghĩa trước về thời gian thực thi (execution time), thời gian time slide được lấy bởi systick interrupt

 Khi có event unblock quyền ưu tiên cao hơn (higher priority) xảy ra như signal,queue, semaphore,

 Khi task gọi hàm osThreadYield () để thông báo kernel chuyển sang task khác mà không đợi tới kết thúc của time slice

502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared

 Trong interrupt này là một scheduler

 Quyền ngắt NVIC sẽ ở mức thấp nhất

 Không bị trigger bởi bất kì ngoại vi nào

 Trạng thái chờ xử lý từ các ngắt khác hoặc từ các task muốn kết thúc sớm(non MPU version)

 Interrupt sẽ được gọi bởi các tập lệnh SVC

 Được gọi nếu task muốn kết thúc sớm (MPU version)

 Trong ngắt này sẽ set pending state (MPU version)

 Stack pointer: 2 stack pointer là

 Được sử dụng trong các interrupt

 Cấp phát bởi linker trong quá trình compile

 Mỗi task sẽ có stack pointer của chính nó

 Trong quá trình switch context thì stack pointer sẽ khởi tạo task chính xác

502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared

 Các trạng thái của một task:

Trong hệ thống thời gian thực, mỗi task luôn tồn tại trong các trạng thái chính như Sẵn sàng (Ready), Đang thực thi (Running) hoặc Khóa (Blocked) Khi hệ thống hoạt động, các task sẽ thay đổi trạng thái theo các quy luật logic của một hệ trạng thái hữu hạn đơn giản (Finite State Machine - FSM) Quá trình này giúp quản lý hiệu quả các tác vụ, đảm bảo hoạt động liên tục và ổn định của hệ thống thời gian thực.

GIỚI THIỆU VỀ NODEJS

2.5.1 Ngôn ngữ lập trình JavaScript

JavaScript là ngôn ngữ lập trình phổ biến được tích hợp vào HTML để làm cho website trở nên sống động và tương tác hơn Nó đóng vai trò quan trọng trong việc tạo ra các trang web động, thực thi cả phía Client-side và Server-side (Node.js), giúp website phản hồi nhanh chóng và mang lại trải nghiệm người dùng tốt hơn.

JavaScript là một ngôn ngữ lập trình thông dịch hướng đối tượng, đóng vai trò quan trọng trong việc phát triển website động và chuyên nghiệp Là một trong ba ngôn ngữ chính của lập trình web, JavaScript giúp xây dựng các trang web tương tác mạnh mẽ, mang lại trải nghiệm người dùng tốt hơn Nhờ khả năng liên kết linh hoạt với HTML và CSS, JavaScript là công cụ không thể thiếu để tạo ra những trang web sống động và chuyên nghiệp.

● HTML: Hỗ trợ trong việc xây dựng layout, thêm nội dung dễ dàng trên website.

● CSS: Hỗ trợ việc định dạng thiết kế, bố cục, style, màu sắc,…

● JavaScript: Tạo nên những nội dung “động” trên website

Javascript được phát triển bởi Brendan Eich tại hãng truyền thông Netscape ban đầu với tên gọi Mocha Sau đó, nó được đổi tên thành LiveScript và cuối cùng trở thành JavaScript, ngôn ngữ lập trình phổ biến nhất hiện nay dùng để tạo các trang web tương tác và động.

Phiên bản mới nhất của JavaScript là ECMAScript, phiên bản chuẩn hóa giúp đảm bảo khả năng tương thích trên mọi trình duyệt và thiết bị khác nhau ECMAScript 2 được phát hành vào năm 1998, đánh dấu bước tiến quan trọng trong quá trình tiêu chuẩn hóa JavaScript Tiếp theo đó, ECMAScript 3 ra mắt vào năm 1999, góp phần nâng cao hiệu năng và tính năng của ngôn ngữ này, và từ đó JavaScript hoạt động mạnh mẽ và ổn định trên nhiều nền tảng khác nhau.

Năm 2016, JavaScript đạt mức sử dụng lên tới 92% các website, biến nó thành công cụ quan trọng nhất trong bộ công cụ lập trình web của các nhà phát triển Với khả năng tạo hiệu ứng slide ảnh chuyển động và menu sổ xuống, JavaScript đã trở thành ngôn ngữ không thể thiếu trong việc nâng cao trải nghiệm người dùng trên các trang web.

…đều được tạo nên từ JavaScript. Ưu điểm của JavaScript

JavaScript có các ưu điểm được xem là vượt trội so với các đối thủ khác trong các trường hợp thực tế như:

● Chương trình JavaScript rất dễ học.

● Lỗi JavaScript dễ phát hiện và sẽ giúp bạn sửa lỗi nhanh hơn.

● JS hoạt động trên rất nhiều nền tảng và trình duyệt khác nhau.

● Được đánh giá là ngôn ngữ lập trình nhẹ, nhanh so với các ngôn ngữ khác.

● JS có thể được gắn trên một số element hoặc các events của trang web.

● Khi website có sử dụng JS thì sẽ giúp cho trang web đó tương tác và tăng trải nghiệm người dùng khi truy cập.

● Bạn có thể tận dụng JavaScript để kiểm tra các input thay vì kiểm tra thủ công thông qua việc truy xuất database.

● Giao diện phong phú gồm các thành phần Drag and Drop, Slider để cung cấp một Rich Interface (Giao diện giàu tính năng).

● Mặt khác, ngoài những ưu điểm nhưng mọi ngôn ngữ lập trình khác đều có những nhược điểm riêng của nó như:

● Dễ bị khai thác từ những hacker và scammer.

● Có thể được dụng để thực thi mã độc trên máy tính của người dùng.

● Các thiết bị khác nhau có thể thực hiện JS khác nhau dẫn đến không đồng nhất.

● Vì tính bảo mật nên client-side JavaScript không cho phép đọc và ghi các file.

● JS không được hỗ trợ khi sử dụng trong kết nối mạng.

● JavaScript không có khả năng đa luồng hoặc đa xử lý.

Node.js là nền tảng chạy trên môi trường V8 JavaScript runtime của trình duyệt Chrome, giúp thực thi JavaScript cực nhanh Với khả năng nhúng bộ V8 vào các ứng dụng, Node.js cho phép phát triển các web server hiệu suất cao JavaScript không chỉ giới hạn trong trình duyệt mà còn phù hợp để sử dụng trên môi trường server, mở ra nhiều cơ hội phát triển linh hoạt và tối ưu cho các ứng dụng web.

Trong môi trường server điển hình LAMP (Linux-Apache-MySQL-PHP), mỗi kết nối tạo ra một thread mới gây làm chậm hoặc quá tải ứng dụng, làm khó mở rộng quy mô Trong khi đó, với Node.js, bạn không cần phải dựa vào máy chủ Apache hoặc NGINX để xử lý kết nối, giúp dễ dàng mở rộng và tối ưu hiệu suất Node.js cho phép xây dựng kiến trúc máy chủ tùy chỉnh mà không cần phụ thuộc vào các module phức tạp, giúp phát triển ứng dụng web tốc độ cao một cách dễ dàng hơn Điều này giúp các nhà phát triển tạo ra các ứng dụng web có tốc độ thực thi vượt trội, phù hợp với các nhu cầu mở rộng quy mô hiện đại.

- Phần core của NodeJs được viết bằng C++ vì vậy nó cho một tốc độ xử lý cao.

- Cộng đồng lớn mạnh, hỗ trợ tốt

- IO hướng sự kiện không đồng bộ giúp xử lý nhiều yêu cầu đồng thời

- Sử dụng Javascript – ngôn ngữ được dùng cho cả front-end

- Tương thích trên nhiều thiết bị: Windows, MacOS, Linux,…

- Npm với các thư viện, module cực kì mạnh luôn phát triển từng ngày.

- Nếu không hiểu rõ về JavaScript, bạn sẽ gặp khó khăn với NodeJS

- NodeJS không phù hợp với các tác vụ đòi hỏi nhiều CPU mà chỉ phù hợp với những I/O như máy chủ web.

- Nếu bạn có shared hosting, sẽ rất khó khăn nếu bạn tải lên một ứng dụng NodeJS VPS và Dedicated server là một sự lựa chọn tốt hơn nhiều.

- Thao tác với các cơ sở dữ liệu quan hệ khó khăn bởi vì JS không hẳn là một ngôn ngữ lập trình hướng đối tượng.

2.5.1 Các Framework được sử dụng a) Express Đây là một module Node.js có sẵn thông qua npm registry

 Thực thi và tạo ứng dụng một cách nhanh chóng

 Tập trung vào hiệu suất cao

 Hỗ trợ HTTP protocol Để cài đặt, ta sử dụng command sau:

MQTT là giao thức truyền thông tin theo mô hình publish/subscribe, thích hợp cho các thiết bị IoT cần băng thông thấp, độ tin cậy cao và hoạt động ổn định trong mạng lưới không ổn định Nó dựa trên một Broker nhẹ, ít xử lý, giúp dễ dàng triển khai và mở rộng trong các hệ thống IoT MQTT có tính mở cao, không bị ràng buộc với ứng dụng cụ thể, mang lại sự linh hoạt và đơn giản trong cài đặt Để cài đặt MQTT, bạn có thể sử dụng lệnh sau:

$ npm install mqtt –save c) MySQL

MySQL là 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, cho phép quản lý dữ liệu hiệu quả qua nhiều bảng quan hệ Với các lệnh SQL quen thuộc, người dùng có thể dễ dàng truy xuất và thao tác dữ liệu trên MySQL Để cài đặt MySQL, người dùng cần sử dụng các lệnh cài đặt phù hợp, giúp thiết lập hệ thống một cách nhanh chóng và dễ dàng.

Để xây dựng một ứng dụng realtime, chúng ta cần sử dụng Socket.IO, một thư viện giúp các bên có địa điểm khác nhau dễ dàng kết nối và truyền tải dữ liệu nhanh chóng qua hệ thống server trung gian Socket.IO được ứng dụng rộng rãi trong các tính năng như trò chuyện, game online, và cập nhật kết quả trận đấu đang diễn ra Để cài đặt Socket.IO, bạn chỉ cần sử dụng lệnh `npm install socket.io`.

GIỚI THIỆU VỀ GIAO THỨC MQTT

MQTT (Message Queueing Telemetry Transport) is a lightweight messaging protocol designed for efficient communication between devices It operates on a publish-subscribe model (publish – subscribe) and adheres to international standards such as ISO/IEC 20922 and OASIS Ideal for IoT applications, MQTT enables reliable and low-bandwidth data transmission between connected devices.

Giao thức MQTT hoạt động trên nền tảng TCP/IP, giúp truyền tải dữ liệu hiệu quả cho các thiết bị từ xa Nó được thiết kế dành cho các kết nối có khả năng truyền dữ liệu với các thiết bị nhỏ, vi điều khiển hạn chế tài nguyên hoặc trong các môi trường mạng có băng thông hạn chế MQTT phù hợp cho các ứng dụng IoT cần truyền nhận dữ liệu ổn định, nhanh chóng và tiết kiệm băng thông.

MQTT là lựa chọn lý tưởng trong các môi trường như:

 Những nơi mà giá mạng viễn thông đắt đỏ hoặc băng thông thấp hay thiếu tin cậy.

 Khi chạy trên thiết bị nhúng bị giới hạn về tài nguyên tốc độ và bộ nhớ.

Giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao, giúp tối ưu hóa hiệu suất truyền dữ liệu Nhờ đặc điểm này, nó trở thành lựa chọn lý tưởng cho các ứng dụng M2M (Machine to Machine), nơi yêu cầu truyền dữ liệu hiệu quả và ổn định trong điều kiện mạng có độ trễ lớn.

Tính năng, đặc điểm nổi bật:

 Dạng truyền thông điệp theo mô hình Pub/Sub cung cấp việc truyền tin phân tán một chiều, tách biệt với phần ứng dụng.

 Việc truyền thông điệp là ngay lập tức, không quan tâm đến nội dung được

 Tồn tại ba mức độ tin cậy cho việc truyền dữ liệu (QoS: Quality of service)

 QoS 0: Broker/client sẽ gửi dữ liệu đúng một lần, quá trình gửi được xác nhận bởi chỉ giao thức TCP/IP.

QoS 1 đảm bảo rằng broker hoặc client sẽ gửi dữ liệu ít nhất một lần và nhận được ít nhất một xác nhận từ phía kia, giúp đảm bảo độ tin cậy trong truyền dữ liệu Trong chế độ này, có thể xảy ra nhiều lần xác nhận đã nhận dữ liệu, giúp đảm bảo dữ liệu không bị mất trong quá trình truyền tải Chính vì vậy, QoS 1 phù hợp cho các ứng dụng yêu cầu đảm bảo dữ liệu được gửi và nhận thành công mà không cần thiết lập độ trễ tối thiểu.

 QoS 2: Broker/client đảm bảo khi gửi dữ liệu thì phía nhận chỉ nhận được đúng một lần, quá trình này phải trải qua 4 bước bắt tay.

 Phần bao bọc dữ liệu truyền nhỏ và được giảm đến mức tối thiểu để giảm tải cho đường truyền.

Một phiên MQTT được chia thành bốn giai đoạn: kết nối, xác thực, giao tiếp và kết thúc.

1 Client (máy khách) bắt đầu bằng cách tạo kết nối Transmission Control Protocol/Internet Protocol (TCP/IP) tới broker bằng cách sử dụng cổng tiêu chuẩn hoặc cổng tùy chỉnh được xác định bởi các nhà phát triển broker.

2 Các cổng tiêu chuẩn là 1883 cho giao tiếp không mã hóa và 8883 cho giao tiếp được mã hóa – sử dụng Lớp cổng bảo mật (SSL) / Bảo mật lớp truyền tải (TLS) Trong quá trình giao tiếp SSL/TLS, máy khách cần kiểm chứng và xác thực máy chủ.

3 Sau đó, Client sẽ gửi bản tin lên broker nếu là Publisher hoặc nhận bản tin từ broker về nếu là Subscriber Quá trình kết nối này sẽ được giữ đến khi Kết thúc kết nối.

4 Sau khi kết thúc để có thể truyền nhận MQTT, chúng ta lại tiếp tục quay lại các bước trên.

THIẾT KẾ VÀ LẮP RÁP HỆ THỐNG

KHỐI XỬ LÝ TRUNG TÂM

Ở phần này ta tiến hành xây dựng các task lần lượt như sau:

Tạo 3 cờ Semaphore để quản lý các task Nếu kết nối Wifi và MQTT còn giữ kết nối, ta mới tiến hành gửi dự liệu.

Các tác vụ MQTT và NTP server đều yêu cầu kết nối WiFi ổn định để hoạt động chính xác Do đó, việc duy trì kết nối WiFi liên tục trong quá trình gửi dữ liệu là rất quan trọng Trong quá trình thiết lập, chúng ta cần nhập đầy đủ thông tin mạng WiFi và mật khẩu, đồng thời đảm bảo kết nối không bị gián đoạn để hệ thống hoạt động liên tục và hiệu quả.

Nếu trong quá trình kết nối có vẫn đề, chúng ta hiện thị ra ngoài màn hình để có thể dễ dàng trong việc debug.

Để điều khiển đèn bật/tắt qua hệ thống IoT, cần khởi tạo kết nối đến broker MQTT và đăng ký vào các topic relay phù hợp Khi hệ thống nhận được thông báo từ broker về lệnh bật hoặc tắt đèn, chúng ta sẽ tiến hành thực hiện ngay lập tức để đảm bảo phản hồi nhanh chóng Việc thiết lập kết nối và đăng ký đúng các topic relay là bước cơ bản nhưng quan trọng giúp hệ thống hoạt động hiệu quả và chính xác trong việc điều khiển đèn tự động.

3 Các task lấy dữ liệu Đầu tiên là task lấy thời gian thực từ server NTP Thay vì lấy dữ liệu thời gian từ server thì ta lấy thời gian tại thời điểm lấy dữ liệu thu được từ vi xử lý Điều này khiến cho biểu đồ thời gian thực chính xác hơn.

Tiếp theo là task lấy nhiệt độ, độ ẩm và ánh sáng.

Sau khi lấy đầy đủ tất cả dữ liệu, ta tiến hành biến đổi tất cả dữ liệu thành chuỗi JSON để gửi qua MQTT.

KHỐI FRONT-END

3.3.1 Layout của bảng điều khiển

3.3.2 Các thành phần của trang web

 Header: Thanh điều hướng, điều khiển các thiết bị trong nhà Cụ thể bao gồm:

 Home: Nút điều hướng trở lại trang chủ

 Tiêu đề chính của trang web

 History: Nút điều hướng đến trang lịch sử đo

 Sidebar: Chứa các thành phần tiêu đề, ô tìm kiếm và những tùy chọn cài đặt khác

 Nút bấm điều khiển thiết bị

 Nút START dùng để bắt đầu nhận dạng giọng nói điều khiển thiết bị

 Information: Nơi hiển thị các thông số, giá trị đo được lên trang web theo thời gian thực

 Graph: Vẽ biểu đồ hiển thị sự thay đổi của các thông số theo thời gian

 History page: Lưu lịch sử đo

3.3.3 Xử lí trang web Điều khiển thiết bị qua giọng nói bằng web API:

Web Speech API là một JavaScript API mạnh mẽ giúp tích hợp chức năng nhận dạng giọng nói và tổng hợp giọng nói trực tiếp vào trang web của bạn API này cho phép chuyển đổi dễ dàng giữa văn bản và giọng nói, mang lại trải nghiệm tương tác tự nhiên và sinh động cho người dùng Nhờ đó, các nhà phát triển có thể tạo ra các ứng dụng web thông minh, hỗ trợ truy cập và nâng cao trải nghiệm người dùng một cách hiệu quả.

 Web Speech API có 2 chức năng chính:

 Speech synthesis: tổng hợp giọng nói hay chuyển văn bản thành giọng nói (text to speech)

 Speech recognition: nhận dạng giọng nói hay chuyển giọng nói thành văn bản (speech to text)

 Trong đề tài này, chúng ta sử dụng Speech Recognition để nhận dạng giọng nói và điều khiển thiết bị

 Ban đầu, chúng ta cần khai báo các options cho Speech Recognition để sử dụng

 Viết các hàm open và close để bật tắt thiết bị

 Nhấn vào button Voice ở phần sidebar để bắt đầu việc thu giọng nói

Chúng ta xử lý sự kiện onresult để nhận kết quả chuyển đổi từ giọng nói thành văn bản, giúp thực hiện các hàm xử lý logic khác một cách chính xác và hiệu quả.

 Sự kiện onspeechend cho phép tự động dừng việc nhận dạng giọng nói khi không có giọng nói đầu vào

 Sự kiện onerror thông báo ra lỗi nếu có lỗi xảy ra

KHỐI BACK-END

3.4.1 Hệ quản trị cơ sở dữ liệu Mysql

MySQL là phần mềm quản lý hệ thống cơ sở dữ liệu (CSDL), giúp lưu trữ và tổ chức thông tin một cách rõ ràng, phân lớp hợp lý để truy cập dễ dàng và nhanh chóng MySQL hỗ trợ đa dạng ngôn ngữ lập trình, làm cho nó trở thành giải pháp phổ biến trong phát triển phần mềm Chính nhờ tính linh hoạt và mã nguồn mở, WordPress — nền tảng quản trị nội dung hàng đầu hiện nay — sử dụng MySQL làm hệ quản trị cơ sở dữ liệu mặc định để tối ưu hiệu suất và tính ổn định.

Máy chủ cơ sở dữ liệu MySQL có khả năng xử lý các ứng dụng nhúng sâu với dung lượng lên đến 1MB, giúp quản lý kho dữ liệu khổng lồ hàng terabytes một cách hiệu quả Đặc điểm nổi bật của MySQL là tính linh hoạt cao về nền tảng, hỗ trợ tất cả các phiên bản Windows, Unix và Linux, phù hợp với nhiều môi trường vận hành khác nhau Ngoài ra, tính chất mã nguồn mở của MySQL cho phép người dùng dễ dàng tùy chỉnh và mở rộng chức năng theo yêu cầu của từng dự án, tăng tính linh hoạt và tối ưu hóa hiệu suất cho database server.

Các đặc điểm của Mysql:

MySQL có hiệu năng cao nhờ kiến trúc storage-engine tối ưu, cho phép các chuyên gia cấu hình máy chủ phù hợp với các ứng dụng đặc thù Dù là website lớn phục vụ hàng triệu người mỗi ngày hay hệ thống xử lý giao dịch tốc độ cao, MySQL đều đáp ứng tốt khả năng xử lý khắt khe của mọi hệ thống Với các tiện ích tải dữ liệu nhanh, cơ chế xử lý nâng cao và bộ nhớ cache tối ưu, MySQL cung cấp đầy đủ các tính năng cần thiết cho các doanh nghiệp có yêu cầu cao về hiệu suất.

 Tính sẵn sàng cao: MySQL đảm bảo sự tin cậy và có thể sử dụng ngay.

MySQL cung cấp nhiều tùy chọn cấu hình để tái tạo chủ/master hoặc slave/replica với tốc độ cao, giúp tối ưu hóa hiệu năng và khả năng mở rộng của hệ thống cơ sở dữ liệu Các nhà phân phối thứ ba có thể dễ dàng triển khai các cấu hình này để cung cấp các hướng điều hướng phù hợp, phù hợp cho các môi trường yêu cầu xử lý dữ liệu nhanh chóng và đáng tin cậy Việc tùy chỉnh cấu hình MySQL cho phép tối đa hóa hiệu suất và đảm bảo tính sẵn sàng của dữ liệu trong các ứng dụng đòi hỏi tốc độ phản hồi cao.

MySQL cung cấp một trong những engine giao dịch cơ sở dữ liệu mạnh mẽ nhất trên thị trường, với các đặc điểm nổi bật như khóa mức dòng không hạn chế, hỗ trợ đầy đủ các tính năng ACID, khả năng phân loại giao dịch và hỗ trợ đa phiên bản (multi-versioning) Điều này đảm bảo dữ liệu được giữ nguyên vẹn trong suốt quá trình hoạt động của máy chủ, nâng cao tính toàn vẹn và tin cậy của hệ thống Hệ thống còn có khả năng phát hiện lỗi khóa chết ngay lập tức, giúp duy trì hiệu suất và ổn định trong quá trình xử lý giao dịch.

3.4.2 Thiết kế cơ sở dữ liệu Để có thể lưu trữ dữ liệu hiện thị cho người dùng (client) ta cần lưu một số thông tin cần thiết như: Nhiệt độ, độ ẩm, ánh sáng ngày và cuối cùng là các bóng đèn.

Tiến hành kết nối với database và broker MQTT Sau đó tiến hành tạo bảng và đẩy dữ liệu thu được từ phần code nhúng vào trong database.

Chúng tôi xử lý trạng thái bật/tắt đèn bằng cách nhận các sự kiện tương ứng Khi nhận được lệnh bật hoặc tắt đèn, hệ thống sẽ gửi message với topic phù hợp để điều khiển đèn theo yêu cầu Việc này đảm bảo hoạt động điều khiển ánh sáng diễn ra chính xác và hiệu quả, phù hợp với các tiêu chuẩn về IoT và tự động hóa nhà thông minh.

Ngày đăng: 26/02/2023, 12:19

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w