Đ Án Nhúng Hoanghung

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 62

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP

KHOA ĐIỆN TỬ

BỘ MÔN KỸ THUẬT MÁY TÍNH

ĐỒ ÁN MÔN HỌC

HỆ THỐNG NHÚNG

Đề tài : Thiết Kế Hệ thống Cảm Biến Chuyển Động Và ReLay

Nhóm sinh viên thực hiện : Vũ Tiến Hoàng - K195520207026

: Phạm Minh Hùng- K195520207028

Lớp : 55ĐVT.01

Giáo viên hướng dẫn : ThS. Đỗ Duy Cốp

Thái Nguyên – 2022

1
KHOA ĐIỆN TỬ CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM

BỘ MÔN KỸ THUẬT MÁY TÍNH Độc lập - Tự do - Hạnh phúc

PHIẾU GIAO ĐỀ TÀI ĐỒ ÁN MÔN HỌC

HỆ THỐNG NHÚNG

Nhóm sinh viên: : Vũ Tiến Hoàng - K195520207026


Phạm Minh Hùng - K195520207028

Lớp: 55ĐVT.01 Ngành: Kỹ Thuật Điện Tử


Ngày giao đề: Ngày hoàn thành:

1. Tên đề tài
Thiết kế cảm biến chuyển động và relay
2. Yêu cầu của các bước thực hiện
1- Giới thiệu và phân tích các yêu cầu của bài toán thiết kế
2- Trình bày tổng quan về công nghệ.
3- Mô tả cụ thể trình tự các bước thiết kế, các kết quả minh họa
4- Kết luận và hướng phát triển

TRƯỞNG BỘ MÔN GIÁO VIÊN HƯỚNG DẪN


(Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên)

2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

Thái Nguyên, ngày….tháng…..năm 2022


GIÁO VIÊN HƯỚNG DẪN
(Ký ghi rõ họ tên)

3
NHẬN XÉT CỦA GIÁO VIÊN CHẤM

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

Thái Nguyên, ngày….tháng…..năm 2022


GIÁO VIÊN CHẤM
(Ký ghi rõ họ tên)

4
MỤC LỤC
CHƯƠNG 1: LÝ THUYẾT TỔNG QUAN......................................................................9

1.1. Khái niệm về nhà thông minh.....................................................................................9

1.2. Cơ sở hình thành hệ thống tắt bật đèn thông minh...................................................10

1.3. Yêu cầu công nghệ của hệ thống tắt bật đèn thông minh..........................................10

1.3.1. Tính tự động..........................................................................................................10

1.3.2. Tính thông minh....................................................................................................11

1.3.3. Tính đơn giản........................................................................................................11

1.3.4. Tính thẩm mỹ........................................................................................................11

1.3.5. Tính thuận tiện......................................................................................................11

CHƯƠNG 2: NỀN TẢNG GIAO TIẾP..........................................................................12

2.1. Home Assistant........................................................................................................12

2.2. Các tính năng của Home Assitant.............................................................................13

2.3. Giao thức MQTT.....................................................................................................15

2.3.1. MQTT là gì?.........................................................................................................15

2.3.2. Hoạt động..............................................................................................................16

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

2.3.4. Ưu điểm................................................................................................................17

2.3.5. Nhược điểm..........................................................................................................17

5
CHƯƠNG 3: THIẾT KẾ HỆ THỐNG...........................................................................18

3.1. Sơ đồ nguyên lý........................................................................................................18

3.2. Chọn linh kiện..........................................................................................................18

3.2.1. Module ESP8266..................................................................................................18

3.2.2. Module Relay 5V..................................................................................................21

3.2.3. Cảm biến chuyển động HC PIR-SR501..............................................................21

CHƯƠNG 4: CÀI ĐẶT..................................................................................................24

4.1. Home Assistant........................................................................................................24

4.2. MQTT – Add-on Mosquitto broker.........................................................................30

4.3. Sơ đồ thuật toán.......................................................................................................38

CHƯƠNG 5: KẾT LUẬN..............................................................................................39

5.1. Các kết quả đạt được................................................................................................39

5.2. Hướng phát triển của đề tài......................................................................................39

6
LỜI NÓI ĐẦU

Ngày nay, việc ứng dụng cho các hệ thống nhúng ngày càng trở nên phổ biến: từ
những ứng dụng đơn giản như điều khiển một chốt đèn giao thông định thời, đếm sản
phẩm trong một dây chuyền sản xuất, điều khiển tốc độ động cơ điện một chiều, thiết kế
một biển quảng cáo dùng Led ma trận, một đồng hồ thời gian thực….đến các ứng dụng
phức tạp như hệ thống điều khiển robot, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm
soát các máy năng lượng hạt nhân. Các hệ thống tự động trước đây sử dụng nhiều công
nghệ khác nhau như các hệ thống tự động hoạt động bằng nguyên lý khí nén, thủy lực,
rơle cơ điện, mạch điện tử số, các thiết bị máy móc tự động bằng các cam chốt cơ khí...
các thiết bị, hệ thống này có chức năng xử lý và mức độ tự động thấp so với các hệ thống
tự động hiện đại được xây dựng trên nền tảng của các hệ thống nhúng.
Với mong muốn giới thiệu ứng dụng cơ bản của hệ thống nhúng trong đời sống hiện
đại, nhóm chúng em đưa ra mô hình: Thiết Kế Hệ thống Cảm Biến Chuyển Động Và
ReLay
Trong quá trình thực hiện đồ án môn học, nhóm chúng em cố gắng thiết kế sao cho
mô hình là đơn giản nhất, ổn định nhất; tuy nhiên do vấn đề thời gian và kinh nghiệm
nên mô hình vẫn còn gặp phải những vấn đề chưa thể khắc phục được.

Chúng em xin chân thành cảm ơn thầy cô đã tận tình hướng dẫn, chỉ bảo
chúng em trong quá trình thực hiện đồ án này.

7
CHƯƠNG 1: LÝ THUYẾT TỔNG QUAN

1.1. Khái niệm về nhà thông minh


Nhà thông minh (tiếng Anh là “Smart Home”) hoặc hệ thống nhà thông minh là một
ngôi nhà/căn hộ được trang bị hệ thống tự động tiên tiến dành cho điều khiển đèn chiếu
sáng, nhiệt độ, truyền thông đa phương tiện, an ninh, rèm cửa, cửa và nhiều tính năng
khác nhằm mục đích làm cho cuộc sống ngày càng tiện nghi, an toàn và góp phần sử
dụng hợp lý các nguồn tài nguyên.
Nhà thông minh sử dụng các thiết bị kết nối Internet để có thể quản lý và giám sát các
thiết bị và hệ thống từ xa như ánh sáng và nhiệt độ.

Hình 1.1 Ảnh minh họa

8
Công nghệ nhà thông minh Smart Home, còn được biết đến như Home
Automation (tự động hóa ngôi nhà), cung cấp cho chủ nhà sự an toàn, thoải mái, tiện lợi
và tiết kiệm năng lượng bằng cách cho phép họ kiểm soát các thiết bị thông minh bởi
một ứng dụng smart home trên điện thoại smartphone hoặc các thiết bị kết nối mạng
khác. Một phần của mạng lưới vạn vật kết nối (Internet of Things - IoT), các hệ thống
và thiết bị nhà thông minh thường hoạt động cùng nhau, chia sẻ dữ liệu người dùng và
tự động hóa các hành động dựa trên quyền ưu tiên của chủ nhà.

CHƯƠNG 2: NỀN TẢNG GIAO TIẾP

2.1. Home Assistant

Home Assistant còn được gọi là “HA” hay “HASS” là một nền tảng quản lý nhà
thông minh được lập trình bằng ngôn ngữ Python. Nó có thể chạy trên mọi nền tảng hệ
điều hành và quản lý ngôi nhà thông minh qua giao diện web hay qua ứng dụng trên
smartphone. Home Assistant có 2 phiên bản. Phiên bản “Home Assistant” hay "Home
Assistant Core" là thành phần cốt lõi nhất, có thể cài đặt lên bất kỳ nền tảng hệ điều hành
nào giống như một phần mềm máy tính.

“Home Assistant OS” kết hợp giữa “Home Assistant Core” và các công cụ khác.
Phiên bản này có thể cài đặt lên một chiếc máy tính như Raspberry Pi, máy ảo. Hai phiên
bản này khi cài lên thiết bị nào đó sẽ biến thiết bị đó thành một hub tổng giúp kết nối và
điều khiển thiết bị nhà thông minh, tương tự như Gateway trên nền tảng Xiaomi, Aqara,
Hub tổng trên nền tảng Samsung SmartThings.

9
Hình 2.1 Một giao diện quản lý nhà thông minh với Home Assistant

Là phần mềm nguồn mở với sự hỗ trợ của đội ngũ kỹ sư, lập trình viên trên khắp thế
giới, Home Assistant tương thích với hầu hết mọi thiết bị nhà thông minh, mở ra khả
năng làm việc không giới hạn của các thiết bị trong ngôi nhà.

Dù là sử dụng phiên bản nào, người dùng cũng phải cài đặt Home Assistant trước,
sau đó hệ thống sẽ quét qua các thiết bị nhà thông minh hiện có, người dùng sẽ tiến hành
cấu hình để các thiết bị làm việc theo nhu cầu.

Như vậy, nếu xét về sự tiện lợi, nhanh chóng, các nền tảng nhà thông minh đã giới
thiệu trong các bài viết trước tỏ ra vượt trội, trong khi đó, Home Assistant lại mạnh ở
khả năng điều khiển trong mạng nội bộ và tùy biến mạnh mẽ.

10
2.2. Các tính năng của Home Assistant

Hình 2.2 Giao diện quản lý của Home Assistant thân thiện dễ dùng

Home Assistant đóng vai trò như hub tổng điều khiển nhà thông minh, giúp tạo ra các
ngữ cảnh để thực hiện các tác vụ nhà thông minh từ đơn giản đến phức tạp, đóng vai trò
là cầu nối cho các thiết bị nhà thông minh sử dụng các công nghệ IoT khác nhau.

Nền tảng nhà thông minh mã nguồn mở này cung cấp giải pháp lưu trữ dữ liệu tại chỗ
(On-Premises) giúp đảm bảo an toàn, không dùng nền tảng đám mây (Cloud), giúp kết
nối các thiết bị nội bộ hoặc với nền tảng đám mây từ các nhà cung cấp nền tảng nhà
thông minh mở hoặc đóng.

Home Assistant cung cấp các thành phần có khả năng tích hợp (ở dạng add-on hoặc
plugin) các hệ sinh thái IoT khác dự trên phần mềm như Google, Apple, Amazon, hay
sản xuất phần cứng như IKEA, Philips, Sonos, Tuya, Xiaomi…

11
Thay vì mỗi hãng phải cài mỗi app khác nhau để có thể thêm và sử dụng, Home
Assistant giúp gom mọi thứ về một mối, vừa dễ dàng quản lý, vừa dễ dàng trong việc
tạo ra các ngữ cảnh linh hoạt để các thiết bị làm việc liền mạch với nhau.

Hình 2.3 Home Assistant có thể kết nối các thương hiệu khác nhau để hoàn tất tác vụ
nhà thông minh cần thiết

Việc điều khiển mọi thứ từ một “máy chủ” nội bộ vừa đảm bảo an toàn cho ngôi nhà,
dữ liệu cá nhân, còn đảm bảo mỗi khi đường truyền mạng gặp vấn đề – đa phần các nền
tảng khác đều đặt máy chủ ở nước ngoài – thì mọi thứ vẫn làm việc trôi chảy.

Người dùng có thể sử dụng trợ lý ảo kỹ thuật số Google Assistant hay Amazon Alexa
để điều khiển nhà thông minh qua giọng nói rảnh tay. Vì tính mở và tùy biến cao, Home
Assistant không dễ cho tất cả mọi người. Tuy nhiên, cộng đồng người dùng nền tảng này
cực kỳ đông đảo và năng động, nên hầu như người dùng có thể làm, học hỏi mọi thứ mà
không gặp khó khăn gì.

12
Người dùng cũng cần có kiến thức về hệ thống để cài đặt Home Assistant Core nền
tảng lên hệ điều hành hiện có (Windows, Mac…) hoặc cài đặt Home Assistant OS. Để
có thể tùy biến, người dùng cần có kiến thức về lập trình Python.

2.3. Giao thức MQTT

2.3.1. MQTT là gì?

MQTT - viết tắt của Message Queueing Telemetry Transport, là một giao thức mạng
mở, dùng để truyền thông điệp giữa các thiết bị. MQTT được xem là giao thức nhắn tin
tiêu chuẩn cho IoT bởi nó hoạt động truyền tải cực kỳ nhẹ, có độ tin cậy cao và kết nối
với mức băng thông tối thiểu.

Xuất hiện đầu tiên vào năm 1999, cho đến nay, MQTT đã được sử dụng rộng rãi
trong nhiều lĩnh vực. Được biết, phiên bản mới nhất của MQTT là MQTT 5.0 với nhiều
thay đổi tối ưu hơn so với các phiên bản trước đó.

Kiến trúc MQTT bao gồm 2 phần chính là Broker - có nhiệm vụ xuất bản và Client -
có nhiệm vụ đăng ký.

2.3.2. Hoạt động

Trong kiến trúc MQTT, MQTT Broker có vai trò như một trung tâm lưu trữ thông
tin, trong khi đó MQTT Client sẽ bao gồm 2 nhóm là Publisher (xuất bản)
và Subscriber (đăng ký).

Broker chính là cầu nối giữa các Publisher và Subscriber, Broker nhận thông tin từ
Publisher, sau đó những Client nào có đăng ký topic (chủ đề) thông tin đó trên Broker
sẽ nhận được thông tin.

Mô hình này được thiết kế để việc giao nhận thông tin diễn ra ngay cả khi đường
truyền không ổn định, và là giao thức lý tưởng cho các ứng dụng M2M (Machine to
Machine - Máy đến máy).

13
Hình 2.4 Sơ đồ hoạt động của MQTT

2.3.3. 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 truyền.

• Sử dụng TCP/IP là giao thức nền.

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

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

o QoS 1: Broker/client sẽ gửi dữ liệu với ít nhất một lần xác nhận từ đầu kia,
nghĩa là có thể có nhiều hơn 1 lần xác nhận đã nhận được dữ liệu.

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

14
• 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.

2.3.4. Ưu điểm

Với những tính năng, đặc điểm nổi bật trên, MQTT mang lại nhiều lợi ích nhất là trong
hệ thống SCADA (Supervisory Control And Data Acquisition) khi truy cập dữ liệu IoT.

• Truyền thông tin hiệu quả hơn.

• Tăng khả năng mở rộng.

• Giảm đáng kể tiêu thụ băng thông mạng.

• Rất phù hợp cho điều khiển và do thám.

• Tối đa hóa băng thông có sẵn.

• Chi phí thấp.

• Rất an toàn, bảo mật.

• Được sử dụng trong các ngành công nghiệp dầu khí, các công ty lớn như Amazon,
Facebook, ....

• Tiết kiệm thời gian phát triển.

• Giao thức publish/subscribe thu thập nhiều dữ liệu hơn và tốn ít băng thông hơn
so với giao thức cũ.

2.3.5. Nhược điểm

• Máy chủ môi giới (Broker) không cần thông báo về trạng thái gửi thông điệp. Do
đó không có cách nào để phát hiện xem thông điệp đã gửi đúng hay chưa.

• Publisher không hề biết gì về trạng thái của subscribe và ngược lại. Vậy làm sao
chúng ta có thể đảm bảo mọi thứ đều ổn.

15
• Những kẻ xấu (Malicious Publisher) có thể gửi những thông điệp xấu, và các
Subscriber sẽ truy cập vào những thứ mà họ không nên nhận.

16
CHƯƠNG 3: THIẾT KẾ HỆ THỐNG
3.1. Sơ đồ nguyên lý

Hình 3.1 Sơ đồ nguyên lý

3.2 Chọn linh kiện


3.2.1 Module ESP8266

Hình 3.2 Module ESP8266

17
ESP8266 là một vi mạch dạng SoC, nổi bật với tính năng thu phát wifi được tích hợp
sẵn bên trong vi mạch. ESP8266 dùng CPU 32-bit với xung nhịp bình thường 80Mhz
cung cấp khả năng xử lý mạnh mẽ. Số lượng ngoại vi của ESP8266 không quá nhiều,
nhưng cũng đủ dùng cho các ứng dụng nhỏ. Để ESP8266 hoạt động phải cần kết nối chip
với bộ nhớ Flash bên ngoài và cần một thiết kế antena tốt. Do đó, module tích hợp
ESP8266 được sử dụng phổ biến hơn vi mạch ESP8266 đơn lẻ.

Các module phổ biến hiện nay là module có tên dạng ESP-WROOM-XX của nhà sản
xuất ESPRESSIF và module có tên ESP-XX của nhà sản xuất AI-Thinker. Mạch phát
triển ESP-8266 được tích hợp module ESP8266 cùng với các chức năng cấp nguồn, giao
tiếp máy tính và kết nối ngoại vi.

Có thể kể đến các mạch phát triển phổ biến như ESP8266 NodeMCU, ESP8266
Wemos D1, ESP8266 - IoT WiFi Uno.

* ESP8266 NodeMCU

NodeMCU là firmware dựa trên mã nguồn mở LUA được phát triển cho chip wifi
ESP8266. Firmware NodeMCU đi kèm với bo ESP8266, tức là bo Dev NodeMCU.
Vì NodeMCU là một nền tảng mã nguồn mở, thiết kế phần cứng của nó có thể mở
để chỉnh sửa hoặc sửa đổi hoặc xây dựng thêm.
Nó hỗ trợ các giao thức truyền thông nối tiếp như UART, SPI, I2C, ...

18
Hình 3.3 Sơ Đồ Chân NodeMCU ESP8266

19
Nhãn GPIO Đầu vào Đầu ra Ghi chú

không hỗ trợ
không gián MỨC CAO khi khởi động. Sử dụng để
D0 GPIO16 PWM hoặc
đoạn đánh thức khi ngủ sâu
I2C

thường được sử dụng như


D1 GPIO5 OK OK
SCL (I2C)

thường được sử dụng như


D2 GPIO4 OK OK
SDA (I2C)

kết nối với nút FLASH,


D3 GPIO0 kéo lên OK khởi động không thành
công nếu kéo MỨC THẤP

MỨC CAO khi khởi động kết nối với đèn


D4 GPIO2 Kéo lên OK LED trên bo mạch, khởi động không thành
công nếu kéo MỨC THẤP

D5 GPIO14 OK OK SPI (SCLK)

D6 GPIO12 OK OK SPI (MISO)

D7 GPIO13 OK OK SPI (MOSI)

SPI (CS)
kéo đến
D8 GPIO15 OK Khởi động không thành công nếu kéo MỨC
GND
CAO

RX GPIO3 OK Chân RX MỨC CAO khi khởi động

MỨC CAO khi khởi động đầu ra gỡ lỗi khi


TX GPIO1 Chân TX OK khởi động, khởi động không thành
công nếu kéo MỨC THẤP

20
Đầu vào
A0 ADC0 X
analog

3.2.2. Module Relay 5V


Relay (hay gọi là Rơ le) là một công tắc điện từ đóng mở mạch điện cơ hoặc điện tử.
Rơle có thể chuyển đổi một dòng điện tương đối nhỏ thành một dòng điện lớn hơn tuỳ ý
theo tắt hoặc bật. Rơ le hoạt động bằng cách nhận tín hiệu điện và gửi tín hiệu đến thiết
bị khác bằng cách bật và tắt công tắc. Ngay cả khi tiếp điểm rơ le normally closed hoặc
normally closed, chúng vẫn không được cấp điện. Trạng thái của nó sẽ chỉ thay đổi nếu
bạn đặt dòng điện vào các điểm tiếp xúc.

Module này được thiết kế để chỉ chuyển đổi một thiết bị công suất cao duy nhất từ
NodeMCU ESP8266. Nó có một rơ le lên đến 10A ở 250VAC hoặc 30VDC.

Hình 3.4 Sơ đồ chân Module Relay 5V 1 kênh

• IN: chân được sử dụng để điều khiển rơ le. Nó là hoạt động tích cực thấp, có nghĩa
là rơle sẽ được kích hoạt khi bạn kéo chân LOW và nó sẽ không hoạt động khi
bạn kéo chân CAO.
• GND: là chân nối đất.
• VCC: là chân cấp nguồn cho module.
• COM (Common): Đây là chân nên kết nối với tín hiệu (điện lưới trong nhà) bạn
đang định chuyển đổi.

21
• NC (normally closed): Cấu hình normally closed được sử dụng khi bạn muốn tắt
rơle theo mặc định. Trong cấu hình này, rơle luôn đóng và vẫn đóng cho đến khi
bạn gửi tín hiệu từ Arduino hay NodeMCU ESP8266 đến mô-đun rơle để mở
mạch.
• NO (normally open): Cấu hình normally open hoạt động theo, trong đó rơle luôn
mở cho đến khi bạn gửi tín hiệu từ Arduino hay NodeMCU ESP8266 đến mô-
đun rơle để đóng mạch.

3.2.3. Cảm biến chuyển động PIR HC-SR501


Cảm biến thân nhiệt chuyển động PIR (Passive infrared sensor) HC-SR501
được sử dụng để phát hiện chuyển động của các vật thể phát ra bức xạ hồng ngoại (con
người, con vật, các vật phát nhiệt,…), cảm biến có thể chỉnh được độ nhạy để giới hạn
khoảng cách bắt xa gần cũng như cường độ bức xạ của vật thể mong muốn, ngoài ra
cảm biến còn có thể điều chỉnh thời gian kích trễ (giữ tín hiệu bao lâu sau khi kích
hoạt) qua biến trở tích hợp sẵn. Cảm biến chuyển động PIR HC-SR501 có cảm biến,
thấu kính và board mạch chất lượng tốt cho độ nhạy và độ bền cao nhất. THÔNG SỐ
CẢM BIẾN THÂN NHIỆT CHUYỂN ĐỘNG PIR - Phạm vi phát hiện: góc 360 độ
hình nón, độ xa tối đa 6m. - Nhiệt độ hoạt động: 32-122 ° F ( 050 ° C) - Điện áp hoạt
động: DC 3.8V – 5V - Mức tiêu thụ dòng: ≤ 50 uA - Thời gian báo: 30 giây có thể tùy
chỉnh bằng biến trở. - Độ nhạy có thể điều chỉnh bằng biến trở. - Kích thước PCB:
32x24mm

Sơ đồ kết nối: -

• Chân VCC : nguồn hoạt động của cảm biến cấpvào từ 4.5V đến 12V.

• Chân OUT : Output kết nối với chân I/O của vi điều khiển hoặc relay. Khi cho
tín hiệu:

o 3,3V có vật thể chuyển động qua.

22
o 0V không có vật thể qua.

• Chân GND : chân đất nối GND.

• Chế độ H: Điện áp ra V_out tự động giữ nguyên 3.3V cho đến khi không còn
chuyển động.

• Chế độ L: Điện áp ra V_out tự động chuyển về 0 khi hết thời gian trễ.

Lưu ý sử dụng:

- Cài đặt: Khi khởi tạo, module cần thời gian khởi tạo khoảng 1 phút. Trong thời
gian này, moudle tạo ra điện áp cao từ 1-3 lần sau đó vào chế độ chờ.

- Điện áp ra 1.5-3.3V, nếu sử dụng I/O 4.5-5.5V bạn nên lắp thêm trans.

- Nên cố gắng tránh ánh sáng trực tiếp và nguồn nhiễu gần với bề mặt lăng kính
của các module, để tránh đưa ra tín hiệu nhiễu, tránh sử dụng môi trường nhiều
gió.

23
CHƯƠNG 4: CÀI ĐẶT
4.1. Home Assistant
Đầu tiên, để quản lý được smart home ta cần một nền tảng để quản lý. Một trong
những nền tảng quản lý được sử dụng nhiều đó là Home Assistant. Home Assistant là
một phần mềm đa nền tảng, nó có nhiều cách để cài đặt. Sau đây, em xin trình bày cách
cài đặt thông dụng nhất. Cách được cài đặt trên hệ điều hành Windows 10 với kiện trên
PC đã có sẵn phần mềm tạo máy ảo Oracle VM VirtualBox.

Bước đầu, ta sẽ mở trình duyệt web lên và tìm đến trang web https://www.home-
assistant.io/installation/windows và sau đó, chọn vào “VirtualBox (.vdi)” để tải bản cài
cho máy ảo. Sau khi tải xong ta sẽ phải giải nén nó.

24
Tiếp theo, ta sẽ mở phần mềm Oracle VM VirtualBox để tạo một máy ảo mới để
chạy bản cài cho Home Assistant ta vừa mới tải và giải nén.

Mở cửa sổ VirtualBox lên và chọn “New”.

25
Cửa sổ “Create Virtual Machine” xuất hiện. Để cài Home Assistant, ô “Type”
chọn “Linux”, ô Version chọn “Other Linux (64-bit)”, còn ô “Name” là ô để ta đặt tên
tuỳ chọn. Sau đó chọn “Next”.

Tiếp theo, cửa sổ “Memory Size” trên sẽ hiện ra để ta chọn dung lượng RAM cho
máy ảo sử dụng. Lưu ý: chọn dung lượng RAM không lớn hơn dung lượng RAM máy
thật đang có. Chọn “Next” để tiếp tục.

26
Tiếp theo ta sẽ chọn file cài đặt của Home Assistant ta vừa tải để cài đặt. Ta tích
vào ô “Use an existing virtual hard disk file”. Sau đó click vào ô thư mục bên cạnh để
chọn file. Cửa sổ Hard Disk Selector hiện ra. Nếu bảng trên không hiện ra file ta cần, ta
chọn nút “Add” để thêm file nơi ta vừa tải xong rồi giải nén . Sau đó chọn “Choose” rồi
nhấn “Create” để tạo máy ảo.

27
Để máy ảo có thể được cài đặt, ta cần điều chỉnh một số thông số

Ta chọn “Settings”, chọn “System” và chọn tab “Motherboard”, tích vào ô


Enable EFI (special Oses only).

28
Tiếp tục, ta chọn “Network”, chọn tab “Adapter1”, trong ô “Attached to:”, chọn
“Bridged Adapter” để Home Assistant có địa chỉ IP trong mạng Lan cục bộ. Rồi chọn
OK.

Tại cửa sổ chính của VM VirtualBox, ta chọn máy ảo có tên ta vừa cài đặt rồi
chọn “Start” để bắt đầu chạy máy ảo.

29
Máy ảo giả lập Home Assistant bắt đầu chạy và cài đặt.

30
HassIO được cài đặt thành công được cài đặt với địa chỉ IP 192.168.1.26

Sau đó, ta vào trang web http://homeassistant.local:8123/ hay


http://X.X.X.X:8123 với X.X.X.X là địa chỉ IP của máy ảo Home Assistant ta vừa cài
để tạo tài khoản và đăng nhập vào HassIO. Nó sẽ yêu sẽ yêu cầu đợi 20 phút để tạo giao
diện.

31
Sau khi tạo xong tài khoản, Home Assistant sẽ yêu cầu ta chọn vị trí ta muốn đặt
làm smarthome và đặt tên cho smarthome của mình. Sau khi chọn xong vị trí và đặt tên
rồi ta nhấn “Next”.

Đây là giao diện bắt đầu cho home assistant. Vậy là ta đã cài đặt xong Home
Assistant.

32
4.2. MQTT – Add-on Mosquitto broker
Sau khi cài đặt xong Home Assistant, tiếp theo ta sẽ cài đặt Mosquitto broker để
quản lý các thiết bị hay thực thể trong smart home.

Đầu tiên, ta chọn “Setting”, tiếp theo chọn tab “Add-ons”.

Ta click vào “ADD-ON STORE” sau đó gõ vào ô tìm kiếm “mqtt” để tìm
kiếmAdd-on “Mosquitto broker”. Sau đó click vào Add-on “Mosquitto broker”.

33
34
Rồi chọn “Install” để cài đặt vào Home Assistant.

35
Sau đó ta chọn “Start” để bắt đầu dịch vụ.

Tạo user_mqtt để quản lý các bản tin MQTT:

1. Chọn “Settings” sau đó chọn “People”


2. Click vào “ADD PERSON”
3. Ở “Name” điền tên user. Sau đó tích vào “Allow person to login” để cho
phép tài khoản đăng nhập.
4. Tạo mật khẩu cho tài khoản.
- Sau đó tích vào “Can only login from the local network” để chỉ cho
phép tài khoản đăng nhập từ mạng local, tăng tính bảo mật cho
HomeAssistant.
- Không tích vào “Administator” để hạn chế quyền của user này không
cho chạy dưới quyền admin.
5. Tích vào “Create” để tạo user.

36
37
38
Cấu hình Mosquitto Broker:

1. Chọn “Settings”, sau đó chọn “Devices & Services”.


2. Chọn “CONFIGURE”.
3. Chọn “RE – CONFIGURE MQTT”
4. Điền các thông tin:
• Đặt tên cho broker là “core-mosquitto”.
39
• Cổng kết nối “Port = 1883”.
• Username và mật khẩu lấy từ tài khoản user_mqtt vừa tạo ở trên. Sau
đó bấm Next → Submit → Finish.

40
41
Cài đặt Samba Share trên HomeAssistant để cấu hình “configuration.yaml”:

42
43
44
Tạo tài khoản và mật khẩu để quản lý file được chia sẻ. Cấu hình địa chỉ IP theo địa chỉ
IP của HomeAssistant. Sau đó Save lại rồi nhấn Start để khời động Samba Share

45
46
Để truy cập vào file của hệ thống chúng ta truy cập vào File Explorer. Tại network nhập
đường dẫn theo địa chỉ IP của HomeAssistant. Sau đó nhấn Enter. Tiếp theo là nhập tài
khoản, mật khẩu được cấu hình trên Samba Share để truy cập vào file của hệ thống.

47
48
Sau đó ta tìm đến file “configuration.yaml” và Open bằng Notepad++ để cấu hình
các thực thể. Thêm các topic trạng thái, cài đặt trạng thái cho các thực thể thuộc mqqt.
Vì file “configuration.yaml” có đuôi .yaml, vì vậy các dữ liệu trong file sẽ được thể hiện
dưới dạng ngôn ngữ YAML.

49
Tiếp theo, ta sẽ thêm thực thể và các topic tương ứng với thực thể đó. Trong đồ
án, em sẽ thêm hai thực thể tương ứng module relay 5V và cảm biến PIR 501. Với ba
dòng “state_topic:”, “command_topic:”, “availability_topic:” tương đương với ba kênh
của mqtt broker. Các giá trị “payload” tương ứng với giá trị của “state_topic”, các giá trị
“state” tương ứng với giá trị của “command_topic”, các giá trị “payload_available”,
“payload_not_available” tương ứng với giá trị của “availablility_topic”.

50
Sau đó, ta sẽ phải check xem cấu hình đã đúng hay chưa. Nếu sai thì phải sử lại
cho đúng sau đó bấm “Restart”.

Và chọn “OK”. Rồi đợi một lúc để server tiến hành việc khởi động lại, Home
Assitant sau khi khởi động lại sẽ nhận thiết bị MQTT switch (relay) và binary_sensor
(PIR 501) vừa thêm vào.

51
52
Tiếp theo, ta cần kiểm tra MQTT Broker đã hoạt động. Sử dụng công cụ MQTT
Explorer để kiểm cổng 1833 trên IP của MQTT broker đã hoạt động chưa, nếu kết quả
là conneted là Mosquitto broker đã hoạt động. Với ô Module IP là địa chỉ IP của máy ảo
Home Assistant.

53
4.3. Sơ đồ thuật toán

Hình 4.1 Sơ đồ thuật toán

54
CHƯƠNG 5: KẾT LUẬN

5.1. Các kết quả đạt được

- Nắm rõ và thực hành được các kiến thức được học trong môn “Hệ thống nhúng”
vào trong đời sống.

- Hiểu được hệ thống quản lý nhà thông minh Home Assistant và tùy biến được nó
theo yêu cầu.

- Hiểu được giao thức MQTT, cài đặt thành công client trên NodeMCU ESP8266
giao tiếp với broker.

- Hoàn thành sản phẩm tắt bật đèn thông minh sử dụng giao thức MQTT.

- Sản phẩm cho phép điều khiển tại chỗ, từ xa qua HassIO trên SmartPhone, và cho
phép HassIO tự động điều khiển theo kịch bản lập sẵn.

5.2. Hướng phát triển của đề tài

- Chế tạo nhiều sản phẩm smarthome sử dụng giao thức MQTT để giao tiếp với
HassIO như cảm biến nhiệt độ, cảm biến độ ẩm, cảm biến chuyển động, …

- Cấu hình thư viện NabuCasa của Home Assistant Cloud để giao tiếp với Google
Assistant, để có thể điều khiển các thiết bị qua qua giọng nói thông qua trợ lý giọng nói
của Google.

- Tìm hiểu các giao thức khác sử dụng ít năng lượng hơn như Zigbee để sử dụng
cho các cảm biến không dây, sử dụng pin.

55
TÀI LIỆU THAM KHẢO

[1]. Tài liệu về HassIO: https://www.home-assistant.io/

[2]. Giao thức MQTT: https://mqtt.org/

[3]. Add-on Mosquitto broker:


https://github.com/homeassistant/addons/tree/master/mosquitto

[4]. Config MQTT: https://www.home-assistant.io/integrations/mqtt/

[5]. MQTT Client Component: https://esphome.io/components/mqtt.html

[6]. NodeMCU ESP8266: https://esphome.io/devices/nodemcu_esp8266.html

[7]. Relay: https://randomnerdtutorials.com/guide-for-relay-module-with-arduino/

[8]. Arduino IDE: https://www.arduino.cc/en/software

[9]. Esp8266 board on Arduino: https://github.com/esp8266/Arduino

[10]. ESP8266WiFi lib on Arduino: https://arduinoesp8266.readthedocs.io/en/latest/

[11]. MQTT lib on Arduino: https://github.com/knolleary/pubsubclient

56
PHỤ LỤC

//ESP8266 Simple MQTT switch controller


#include "PubSubClient.h"
#include <ESP8266WiFi.h>
//void callback(char* topic, byte* payload, unsigned int length);
void callback(char* topic, byte* payload, unsigned int length);

#define MQTT_SERVER "172.20.10.5" //you MQTT IP Address


#define MQTT_USER "user_mqtt"
#define MQTT_PASS "1"
#define MQTT_PORT 1883
const char* ssid = "Hoang";
const char* password = "12345678";

//Pin In ESP8266
const int sensorPin = D1;

57
const int buttonPin = D3;
const int switchPin = D2;
const int switchPin_2 = D5;

//topic switch_1
char const* switchStateTopic = "/home/switch1/status";
char const* avaiSwitchTopic = "/home/bedroom/switch1/available";

//topic switch_2
char const* switchStateTopic_2 = "/home/switch2/status";
char const* avaiSwitchTopic_2 = "/home/stair/switch2/available";

//topic sensor
char const* sensorStateTopic = "/home/sensor_pir/status";
char const* avaiSensorTopic = "/home/sensor_pir/available";

char const* Topic2 = "inLight";

WiFiClient wifiClient;
PubSubClient client(MQTT_SERVER, MQTT_PORT, wifiClient);

//Gui Gia Tri Payload to MQTT Home Assistant


void mqtt_send(char const* topic, char* msg){
Serial.print("MQTT_Send to topic ");
Serial.print(topic);
Serial.print(" msg: ");
Serial.println(msg);
client.publish(topic, msg);
}

void mqtt_subscribe(char const* topic){


Serial.print("MQTT subscribe to ");
Serial.println(topic);
//Serial.println(msg);
client.subscribe(topic);
}

void switch_on() {
digitalWrite(switchPin_2, HIGH);
Serial.println("BAT DEN");
//mqtt_send(avaiSwitchTopic_2, "online");
mqtt_send(switchStateTopic_2, "on");
}

58
void switch_off() {
digitalWrite(switchPin_2, LOW);
Serial.println("TAT DEN");
//mqtt_send(avaiSwitchTopic, "online");
mqtt_send(switchStateTopic_2, "off");
}

void setup() {
//initialize
pinMode(switchPin, OUTPUT); // Relay Switch
pinMode(buttonPin, INPUT); // button by hand
pinMode(sensorPin, INPUT); // SR505 - PIR sensor
pinMode(switchPin_2, OUTPUT);
client.setCallback(callback);
//HIGH==off led-buidin
digitalWrite(switchPin, LOW);
digitalWrite(buttonPin, LOW);
digitalWrite(switchPin_2, LOW);

//start the serial line for debugging


Serial.begin(115200);
delay(100);

//start wifi subsystem


WiFi.begin(ssid, password);

//attempt to connect to the WIFI network and then connect to the MQTT server
reconnect();

//wait a bit before starting the main loop


delay(2000);
}

void loop() {
//reconnect if connection is lost
if (!client.connected() && WiFi.status() == 3) {
reconnect();
}

//maintain MQTT connection


client.loop();

if(digitalRead(sensorPin) == HIGH)
{
digitalWrite(switchPin, HIGH); //Relay cho dòng qua

59
//mqtt_subscribe("inLight");
//mqtt_send(avaiSwitchTopic, "online");
//mqtt_send(avaiSwitchTopic_2, "online");
mqtt_send(sensorStateTopic, "on");
mqtt_send(switchStateTopic, "on");
delay(1000);
}
else
{
digitalWrite(switchPin, LOW); //Relay ko cho dòng qua
//mqtt_subscribe("inLight");
//mqtt_send(avaiSwitchTopic, "online");
//mqtt_send(avaiSwitchTopic_2, "online");
mqtt_send(sensorStateTopic, "off");
mqtt_send(switchStateTopic, "off");
delay(1000);
}
/*if(digitalRead(buttonPin) == LOW && digitalRead(sensorPin) == HIGH)
{
if(digitalRead(switchPin) == HIGH)
switch_on();
else
switch_off();
}*/

if(!client.connected() && WiFi.status() == 3)


reconnect();
else
client.loop();

void callback(char* topic, byte* payload, unsigned int length) {


Serial.print("Message arrived [");
Serial.print(topic);
Serial.println("] = ");
for (int i=0;i<length;i++) {
Serial.print((char)payload[i]);
if(payload[0] == '1')
{
switch_on();
}
else if(payload[0] == '0')
{
switch_off();

60
}
}
Serial.println();
}

void reconnect() {
//attempt to connect to the wifi
//if connection is lost
if (WiFi.status() != WL_CONNECTED) {
//debug printing
Serial.print("Connecting to ");
Serial.println(ssid);
//loop while we wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//print out some more debug once connected
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
//make sure we are connected to WIFI
//before attemping to reconnect to MQTT
if (WiFi.status() == WL_CONNECTED) {
// Loop until we're reconnected to the MQTT server
while (!client.connected()) {
Serial.print("Connect to MQTT ");
// Generate client name based on MAC
String clientName;
clientName += "esp8266-";
uint8_t mac[6];
WiFi.macAddress(mac);
clientName += macToStr(mac);
Serial.print(" from client ");
Serial.print(clientName);
Serial.print("... ");
if (client.connect((char*) clientName.c_str(), MQTT_USER, MQTT_PASS)) {
Serial.println("\tMQTT Connected");
//mqtt_subscribe(Topic2);
//Serial.println(Topic2);
//client.subscribe("inLight");
mqtt_subscribe("inLight");
mqtt_send(avaiSwitchTopic, "online");

61
mqtt_send(avaiSensorTopic, "online");
mqtt_send(avaiSwitchTopic_2, "online");
}
//otherwise print failed for debugging
else {
Serial.println("\tFailed.");
abort();
}
}
}
}

//generate unique name from MAC addr


String macToStr(const uint8_t* mac) {
String result;
for (int i = 0; i < 6; ++i) {
result += String(mac[i], 16);
//if (i < 5)result += ':';
}
return result;
}

62

You might also like