Professional Documents
Culture Documents
Đ Án Nhúng Hoanghung
Đ Án Nhúng Hoanghung
Đ Án Nhúng Hoanghung
KHOA ĐIỆN TỬ
ĐỒ ÁN MÔN HỌC
HỆ THỐNG NHÚNG
Lớp : 55ĐVT.01
1
KHOA ĐIỆN TỬ CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
HỆ THỐNG NHÚNG
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
2
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
3
NHẬN XÉT CỦA GIÁO VIÊN CHẤM
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
4
MỤC LỤC
CHƯƠNG 1: LÝ THUYẾT TỔNG QUAN......................................................................9
1.3. Yêu cầu công nghệ của hệ thống tắt bật đèn thông minh..........................................10
2.3.4. Ưu điểm................................................................................................................17
5
CHƯƠNG 3: THIẾT KẾ HỆ THỐNG...........................................................................18
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
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à.
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.
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ý.
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
• 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.
• 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.
• Đượ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, ....
• 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ũ.
• 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ý
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
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
20
Đầu vào
A0 ADC0 X
analog
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.
• 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.
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:
22
o 0V không có vật thể qua.
• 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.
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ố
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
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.
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ụ.
36
37
38
Cấu hình Mosquitto Broker:
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
54
CHƯƠNG 5: KẾT LUẬN
- 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.
- 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
56
PHỤ LỤC
//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";
WiFiClient wifiClient;
PubSubClient client(MQTT_SERVER, MQTT_PORT, wifiClient);
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);
//attempt to connect to the WIFI network and then connect to the MQTT server
reconnect();
void loop() {
//reconnect if connection is lost
if (!client.connected() && WiFi.status() == 3) {
reconnect();
}
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();
}*/
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();
}
}
}
}
62