You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ko/2-farm/lessons/4-migrate-your-plant-to-the.../single-board-computer-conne...

6.3 KiB

IoT 디바이스를 클라우드에 연결하기 - 가상 IoT 하드웨어와 Raspberry Pi

이 수업의 이번 부분에서는 가상 IoT 디바이스 또는 Raspberry Pi를 IoT Hub에 연결하여 텔레메트리를 전송하고 명령을 수신합니다.

디바이스를 IoT Hub에 연결하기

다음 단계는 디바이스를 IoT Hub에 연결하는 것입니다.

작업 - IoT Hub에 연결하기

  1. VS Code에서 soil-moisture-sensor 폴더를 엽니다. 가상 IoT 디바이스를 사용하는 경우 터미널에서 가상 환경이 실행 중인지 확인하세요.

  2. 추가 Pip 패키지를 설치합니다:

    pip3 install azure-iot-device
    

    azure-iot-device는 IoT Hub와 통신하기 위한 라이브러리입니다.

  3. 기존 import 아래에 app.py 파일 상단에 다음 import를 추가하세요:

    from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
    

    이 코드는 IoT Hub와 통신하기 위한 SDK를 가져옵니다.

  4. 더 이상 필요하지 않은 import paho.mqtt.client as mqtt 줄을 제거하세요. MQTT 코드 전체를 제거하며, 여기에는 토픽 이름, mqtt_client를 사용하는 모든 코드, 그리고 handle_command가 포함됩니다. while True: 루프는 유지하되, 이 루프에서 mqtt_client.publish 줄만 삭제하세요.

  5. import 문 아래에 다음 코드를 추가하세요:

    connection_string = "<connection string>"
    

    <connection string>을 이전 수업에서 디바이스를 위해 가져온 연결 문자열로 바꾸세요.

    💁 이것은 최선의 방법이 아닙니다. 연결 문자열은 소스 코드에 저장되어서는 안 됩니다. 이는 소스 코드 관리에 체크인될 수 있으며 누구나 찾을 수 있습니다. 여기서는 간단함을 위해 이렇게 하고 있습니다. 이상적으로는 환경 변수와 python-dotenv 같은 도구를 사용하는 것이 좋습니다. 다음 수업에서 이에 대해 더 배우게 될 것입니다.

  6. 이 코드 아래에 IoT Hub와 통신할 수 있는 디바이스 클라이언트 객체를 생성하고 연결하는 다음 코드를 추가하세요:

    device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
    
    print('Connecting')
    device_client.connect()
    print('Connected')
    
  7. 이 코드를 실행하세요. 디바이스가 연결되는 것을 볼 수 있습니다.

    pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py 
    Connecting
    Connected
    Soil moisture: 379
    

텔레메트리 전송하기

디바이스가 연결되었으니 이제 MQTT 브로커 대신 IoT Hub로 텔레메트리를 전송할 수 있습니다.

작업 - 텔레메트리 전송하기

  1. while True 루프 안에서 sleep 바로 전에 다음 코드를 추가하세요:

    message = Message(json.dumps({ 'soil_moisture': soil_moisture }))
    device_client.send_message(message)
    

    이 코드는 토양 습도 읽기를 JSON 문자열로 포함하는 IoT Hub Message를 생성하고, 이를 디바이스에서 클라우드로 메시지로 IoT Hub에 전송합니다.

명령 처리하기

디바이스는 서버 코드에서 릴레이를 제어하기 위한 명령을 처리해야 합니다. 이는 직접 메서드 요청으로 전송됩니다.

작업 - 직접 메서드 요청 처리하기

  1. 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 메서드를 기대합니다.

    💁 이는 단일 직접 메서드 요청으로도 구현할 수 있습니다. 요청 객체에서 사용할 수 있는 페이로드에 릴레이의 원하는 상태를 전달할 수 있습니다.

  2. 직접 메서드는 호출 코드에 요청이 처리되었음을 알리는 응답이 필요합니다. handle_method_request 함수 끝에 다음 코드를 추가하여 요청에 대한 응답을 생성하세요:

    method_response = MethodResponse.create_from_method_request(request, 200)
    device_client.send_method_response(method_response)
    

    이 코드는 HTTP 상태 코드 200을 포함한 직접 메서드 요청에 대한 응답을 생성하여 IoT Hub로 다시 전송합니다.

  3. 이 함수 정의 아래에 다음 코드를 추가하세요:

    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를 사용하여 번역되었습니다. 정확성을 위해 최선을 다하고 있지만, 자동 번역에는 오류나 부정확성이 포함될 수 있습니다. 원본 문서를 해당 언어로 작성된 상태에서 권위 있는 자료로 간주해야 합니다. 중요한 정보의 경우, 전문적인 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.