6.9 KiB
Kết nối thiết bị IoT của bạn với đám mây - Phần cứng IoT ảo và Raspberry Pi
Trong phần này của bài học, bạn sẽ kết nối thiết bị IoT ảo hoặc Raspberry Pi của mình với IoT Hub để gửi dữ liệu đo lường và nhận lệnh.
Kết nối thiết bị của bạn với IoT Hub
Bước tiếp theo là kết nối thiết bị của bạn với IoT Hub.
Nhiệm vụ - kết nối với IoT Hub
-
Mở thư mục
soil-moisture-sensor
trong VS Code. Đảm bảo môi trường ảo đang chạy trong terminal nếu bạn đang sử dụng thiết bị IoT ảo. -
Cài đặt một số gói Pip bổ sung:
pip3 install azure-iot-device
azure-iot-device
là một thư viện để giao tiếp với IoT Hub của bạn. -
Thêm các dòng import sau vào đầu tệp
app.py
, bên dưới các dòng import hiện có:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Đoạn mã này import SDK để giao tiếp với IoT Hub của bạn.
-
Xóa dòng
import paho.mqtt.client as mqtt
vì thư viện này không còn cần thiết. Xóa toàn bộ mã MQTT bao gồm tên chủ đề, tất cả mã sử dụngmqtt_client
vàhandle_command
. Giữ vòng lặpwhile True:
, chỉ cần xóa dòngmqtt_client.publish
trong vòng lặp này. -
Thêm đoạn mã sau bên dưới các dòng import:
connection_string = "<connection string>"
Thay thế
<connection string>
bằng chuỗi kết nối mà bạn đã lấy cho thiết bị trước đó trong bài học này.💁 Đây không phải là cách làm tốt nhất. Chuỗi kết nối không bao giờ nên được lưu trữ trong mã nguồn, vì chúng có thể được kiểm tra vào hệ thống kiểm soát mã nguồn và bị phát hiện bởi bất kỳ ai. Chúng tôi làm điều này ở đây để đơn giản hóa. Lý tưởng nhất, bạn nên sử dụng một biến môi trường và một công cụ như
python-dotenv
. Bạn sẽ học thêm về điều này trong bài học sắp tới. -
Bên dưới đoạn mã này, thêm đoạn mã sau để tạo một đối tượng client thiết bị có thể giao tiếp với IoT Hub và kết nối nó:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Chạy đoạn mã này. Bạn sẽ thấy thiết bị của mình kết nối.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Gửi dữ liệu đo lường
Bây giờ thiết bị của bạn đã được kết nối, bạn có thể gửi dữ liệu đo lường đến IoT Hub thay vì MQTT broker.
Nhiệm vụ - gửi dữ liệu đo lường
-
Thêm đoạn mã sau vào bên trong vòng lặp
while True
, ngay trước lệnh sleep:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Đoạn mã này tạo một
Message
của IoT Hub chứa dữ liệu độ ẩm đất dưới dạng chuỗi JSON, sau đó gửi nó đến IoT Hub như một thông điệp từ thiết bị đến đám mây.
Xử lý lệnh
Thiết bị của bạn cần xử lý một lệnh từ mã máy chủ để điều khiển relay. Lệnh này được gửi dưới dạng yêu cầu phương thức trực tiếp.
Nhiệm vụ - xử lý yêu cầu phương thức trực tiếp
-
Thêm đoạn mã sau trước vòng lặp
while True
:def handle_method_request(request): print("Direct method received - ", request.name) if request.name == "relay_on": relay.on() elif request.name == "relay_off": relay.off()
Đoạn mã này định nghĩa một phương thức,
handle_method_request
, sẽ được gọi khi một phương thức trực tiếp được gọi bởi IoT Hub. Mỗi phương thức trực tiếp có một tên, và đoạn mã này mong đợi một phương thức có tênrelay_on
để bật relay, vàrelay_off
để tắt relay.💁 Điều này cũng có thể được triển khai trong một yêu cầu phương thức trực tiếp duy nhất, truyền trạng thái mong muốn của relay trong payload có thể được truyền cùng với yêu cầu phương thức và có sẵn từ đối tượng
request
. -
Các phương thức trực tiếp yêu cầu một phản hồi để thông báo cho mã gọi rằng chúng đã được xử lý. Thêm đoạn mã sau vào cuối hàm
handle_method_request
để tạo phản hồi cho yêu cầu:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Đoạn mã này gửi một phản hồi cho yêu cầu phương thức trực tiếp với mã trạng thái HTTP là 200, và gửi phản hồi này trở lại IoT Hub.
-
Thêm đoạn mã sau bên dưới định nghĩa hàm này:
device_client.on_method_request_received = handle_method_request
Đoạn mã này thông báo cho client IoT Hub gọi hàm
handle_method_request
khi một phương thức trực tiếp được gọi.
💁 Bạn có thể tìm thấy đoạn mã này trong thư mục code/pi hoặc code/virtual-device.
😀 Chương trình cảm biến độ ẩm đất của bạn đã được kết nối với IoT Hub!
Tuyên bố miễn trừ trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.