6.3 KiB
IoT 디바이스를 클라우드에 연결하기 - 가상 IoT 하드웨어와 Raspberry Pi
이 수업의 이번 부분에서는 가상 IoT 디바이스 또는 Raspberry Pi를 IoT Hub에 연결하여 텔레메트리를 전송하고 명령을 수신합니다.
디바이스를 IoT Hub에 연결하기
다음 단계는 디바이스를 IoT Hub에 연결하는 것입니다.
작업 - IoT Hub에 연결하기
-
VS Code에서
soil-moisture-sensor
폴더를 엽니다. 가상 IoT 디바이스를 사용하는 경우 터미널에서 가상 환경이 실행 중인지 확인하세요. -
추가 Pip 패키지를 설치합니다:
pip3 install azure-iot-device
azure-iot-device
는 IoT Hub와 통신하기 위한 라이브러리입니다. -
기존 import 아래에
app.py
파일 상단에 다음 import를 추가하세요:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
이 코드는 IoT Hub와 통신하기 위한 SDK를 가져옵니다.
-
더 이상 필요하지 않은
import paho.mqtt.client as mqtt
줄을 제거하세요. MQTT 코드 전체를 제거하며, 여기에는 토픽 이름,mqtt_client
를 사용하는 모든 코드, 그리고handle_command
가 포함됩니다.while True:
루프는 유지하되, 이 루프에서mqtt_client.publish
줄만 삭제하세요. -
import 문 아래에 다음 코드를 추가하세요:
connection_string = "<connection string>"
<connection string>
을 이전 수업에서 디바이스를 위해 가져온 연결 문자열로 바꾸세요.💁 이것은 최선의 방법이 아닙니다. 연결 문자열은 소스 코드에 저장되어서는 안 됩니다. 이는 소스 코드 관리에 체크인될 수 있으며 누구나 찾을 수 있습니다. 여기서는 간단함을 위해 이렇게 하고 있습니다. 이상적으로는 환경 변수와
python-dotenv
같은 도구를 사용하는 것이 좋습니다. 다음 수업에서 이에 대해 더 배우게 될 것입니다. -
이 코드 아래에 IoT Hub와 통신할 수 있는 디바이스 클라이언트 객체를 생성하고 연결하는 다음 코드를 추가하세요:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
이 코드를 실행하세요. 디바이스가 연결되는 것을 볼 수 있습니다.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
텔레메트리 전송하기
디바이스가 연결되었으니 이제 MQTT 브로커 대신 IoT Hub로 텔레메트리를 전송할 수 있습니다.
작업 - 텔레메트리 전송하기
-
while True
루프 안에서 sleep 바로 전에 다음 코드를 추가하세요:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
이 코드는 토양 습도 읽기를 JSON 문자열로 포함하는 IoT Hub
Message
를 생성하고, 이를 디바이스에서 클라우드로 메시지로 IoT Hub에 전송합니다.
명령 처리하기
디바이스는 서버 코드에서 릴레이를 제어하기 위한 명령을 처리해야 합니다. 이는 직접 메서드 요청으로 전송됩니다.
작업 - 직접 메서드 요청 처리하기
-
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()
이 코드는 IoT Hub에서 직접 메서드가 호출될 때 호출되는
handle_method_request
메서드를 정의합니다. 각 직접 메서드에는 이름이 있으며, 이 코드는 릴레이를 켜기 위한relay_on
메서드와 릴레이를 끄기 위한relay_off
메서드를 기대합니다.💁 이는 단일 직접 메서드 요청으로도 구현할 수 있습니다. 요청 객체에서 사용할 수 있는 페이로드에 릴레이의 원하는 상태를 전달할 수 있습니다.
-
직접 메서드는 호출 코드에 요청이 처리되었음을 알리는 응답이 필요합니다.
handle_method_request
함수 끝에 다음 코드를 추가하여 요청에 대한 응답을 생성하세요:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
이 코드는 HTTP 상태 코드 200을 포함한 직접 메서드 요청에 대한 응답을 생성하여 IoT Hub로 다시 전송합니다.
-
이 함수 정의 아래에 다음 코드를 추가하세요:
device_client.on_method_request_received = handle_method_request
이 코드는 직접 메서드가 호출될 때 IoT Hub 클라이언트가
handle_method_request
함수를 호출하도록 지시합니다.
💁 이 코드는 code/pi 또는 code/virtual-device 폴더에서 찾을 수 있습니다.
😀 이제 토양 습도 센서 프로그램이 IoT Hub에 연결되었습니다!
면책 조항:
이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.