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/th/2-farm/lessons/4-migrate-your-plant-to-the.../single-board-computer-conne...

9.9 KiB

เชื่อมต่ออุปกรณ์ IoT ของคุณกับคลาวด์ - ฮาร์ดแวร์ IoT เสมือนและ Raspberry Pi

ในส่วนนี้ของบทเรียน คุณจะเชื่อมต่ออุปกรณ์ IoT เสมือนหรือ Raspberry Pi ของคุณกับ IoT Hub เพื่อส่งข้อมูลเทเลเมทรีและรับคำสั่ง

เชื่อมต่ออุปกรณ์ของคุณกับ IoT Hub

ขั้นตอนถัดไปคือการเชื่อมต่ออุปกรณ์ของคุณกับ IoT Hub

งาน - เชื่อมต่อกับ IoT Hub

  1. เปิดโฟลเดอร์ soil-moisture-sensor ใน VS Code ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมเสมือนกำลังทำงานในเทอร์มินัล หากคุณใช้อุปกรณ์ IoT เสมือน

  2. ติดตั้งแพ็กเกจ Pip เพิ่มเติม:

    pip3 install azure-iot-device
    

    azure-iot-device เป็นไลบรารีสำหรับสื่อสารกับ IoT Hub ของคุณ

  3. เพิ่มการนำเข้าต่อไปนี้ที่ด้านบนของไฟล์ app.py ใต้การนำเข้าที่มีอยู่:

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

    โค้ดนี้นำเข้า SDK เพื่อสื่อสารกับ IoT Hub ของคุณ

  4. ลบบรรทัด import paho.mqtt.client as mqtt เนื่องจากไลบรารีนี้ไม่จำเป็นอีกต่อไป ลบโค้ด MQTT ทั้งหมดรวมถึงชื่อหัวข้อ โค้ดทั้งหมดที่ใช้ mqtt_client และ handle_command เก็บลูป while True: ไว้ เพียงลบบรรทัด mqtt_client.publish ออกจากลูปนี้

  5. เพิ่มโค้ดต่อไปนี้ใต้คำสั่งนำเข้า:

    connection_string = "<connection string>"
    

    แทนที่ <connection string> ด้วยสตริงการเชื่อมต่อที่คุณดึงมาได้สำหรับอุปกรณ์ก่อนหน้านี้ในบทเรียนนี้

    💁 นี่ไม่ใช่วิธีปฏิบัติที่ดีที่สุด สตริงการเชื่อมต่อไม่ควรถูกเก็บไว้ในซอร์สโค้ด เนื่องจากอาจถูกตรวจสอบในระบบควบคุมซอร์สโค้ดและถูกค้นพบโดยใครก็ตาม เราทำเช่นนี้เพื่อความเรียบง่าย ในทางที่ดีควรใช้สิ่งต่าง ๆ เช่นตัวแปรสภาพแวดล้อมและเครื่องมืออย่าง python-dotenv คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ในบทเรียนถัดไป

  6. ใต้โค้ดนี้ ให้เพิ่มโค้ดต่อไปนี้เพื่อสร้างออบเจ็กต์ client ของอุปกรณ์ที่สามารถสื่อสารกับ 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
    

ส่งข้อมูลเทเลเมทรี

ตอนนี้อุปกรณ์ของคุณเชื่อมต่อแล้ว คุณสามารถส่งข้อมูลเทเลเมทรีไปยัง IoT Hub แทนที่จะส่งไปยัง MQTT broker

งาน - ส่งข้อมูลเทเลเมทรี

  1. เพิ่มโค้ดต่อไปนี้ภายในลูป while True ก่อนคำสั่ง sleep:

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

    โค้ดนี้สร้าง Message ของ IoT Hub ที่มีการอ่านค่าความชื้นในดินในรูปแบบสตริง JSON จากนั้นส่งไปยัง IoT Hub เป็นข้อความจากอุปกรณ์ไปยังคลาวด์

จัดการคำสั่ง

อุปกรณ์ของคุณจำเป็นต้องจัดการคำสั่งจากโค้ดเซิร์ฟเวอร์เพื่อควบคุมรีเลย์ คำสั่งนี้ถูกส่งมาในรูปแบบคำขอ direct method

งาน - จัดการคำขอ direct method

  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()    
    

    โค้ดนี้กำหนดเมธอด handle_method_request ที่จะถูกเรียกเมื่อ direct method ถูกเรียกโดย IoT Hub แต่ละ direct method มีชื่อ และโค้ดนี้คาดหวังเมธอดที่ชื่อ relay_on เพื่อเปิดรีเลย์ และ relay_off เพื่อปิดรีเลย์

    💁 สิ่งนี้สามารถถูกนำไปใช้ใน direct method เดียว โดยส่งสถานะที่ต้องการของรีเลย์ใน payload ที่สามารถส่งไปพร้อมกับคำขอเมธอดและสามารถเข้าถึงได้จากออบเจ็กต์ request

  2. Direct method ต้องการการตอบกลับเพื่อแจ้งโค้ดที่เรียกว่าคำขอได้รับการจัดการแล้ว เพิ่มโค้ดต่อไปนี้ที่ท้ายฟังก์ชัน handle_method_request เพื่อสร้างการตอบกลับคำขอ:

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

    โค้ดนี้ส่งการตอบกลับไปยังคำขอ direct method พร้อมรหัสสถานะ HTTP 200 และส่งกลับไปยัง IoT Hub

  3. เพิ่มโค้ดต่อไปนี้ใต้การกำหนดฟังก์ชันนี้:

    device_client.on_method_request_received = handle_method_request
    

    โค้ดนี้บอก client ของ IoT Hub ให้เรียกฟังก์ชัน handle_method_request เมื่อ direct method ถูกเรียก

💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ code/pi หรือ code/virtual-device

😀 โปรแกรมเซ็นเซอร์ความชื้นในดินของคุณเชื่อมต่อกับ IoT Hub แล้ว!


ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้