Raspberry Pi에서 AWS IoT Core와 연결하여 GPIO 제어를 시도했습니다.

소개



외출시에 가전을 리모컨 제어해 보고 싶고, Raspberry Pi를 사 보았습니다.
우선은 시험으로서 AWS의 IoT Core와 연동시켜, GPIO의 제어를 할 수 있을까 시험해 보았습니다.

환경



Raspberry Pi


  • Raspberry Pi 3 Mobile B+
  • Raspbian 9.4
  • Python 3.6

  • AWS


  • IoT Core

  • Python Pi로 GPIO 제어(동작 확인)



    Python으로 Raspberry Pi의 GPIO를 제어합니다. 참고 기사는 아래와 같습니다.
  • htps : // 이 m / 바로 / ms / 715 에 28 에 0c0c945 54297

  • 실제 샘플 코드는 다음과 같습니다.

    sample_gpio.py
    import RPi.GPIO as GPIO
    import time
    
    def main():
        GPIO.setmode(GPIO.BOARD)
        #Use PIN 7 (GPIO 4)
        GPIO.setup(7, GPIO.OUT)
    
        GPIO.output(7, True)
        time.sleep(1)
        GPIO.output(7, False)
        time.sleep(1)
    
        GPIO.cleanup()
    
    
    if __name__ == "__main__":
        main()
    

    실행은 루트 권한으로 수행됩니다.
    $ sudo python sample_gpio.py
    

    Raspberry에서 AWS IoT Core에 연결(동작 확인)



    AWS 준비



    IoT Core(정책 생성)



    메뉴에서 안전의 정책을 선택한 다음 정책 만들기를 선택합니다.



    다음을 입력합니다.
  • 이름: RaspberryPiPoricy
  • 액션: iot:*
  • 리소스 ARN: *
  • 효과 : 허가



  • 본래라면, 액션이나 리소스로 각종 권한을 설정합니다만, 일단 「전부 허가」로 하고 있습니다.

    IoT Core(사물 만들기)



    메뉴에서 관리에서 사물을 선택하고 사물 등록을 선택합니다.



    단일 사물 만들기를 선택합니다.



    다음을 입력하고 다음을 선택합니다.
  • 이름: RaspberryPi



  • 1-Click 인증서 만들기(권장)에서 인증서 만들기를 선택합니다.



    아래를 모두 다운로드하고 '활성화'를 선택한 다음 '정책 연결'을 선택합니다.
  • 이 사물의 증명서
  • 공개 키
  • 프라이빗 키
  • AWS IoT의 루트 CA



  • 방금 만든 정책(RaspberryPiPoricy)을 선택한 다음 사물 등록을 선택합니다.



    Raspberry Pi 준비



    SDK 설치


    pip install AWSIoTPythonSDK
    

    샘플 코드 작성



    Raspberry Pi에서는 AWS IoT Core에 연결하고 주제를 Subscribe합니다. 아래가 동작 확인용 코드입니다.

    sample_iot.py
    import time
    from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
    
    CLIENT_ID = "test_client_id"
    ENDPOINT = "xxxxxxx.iot.ap-northeast-1.amazonaws.com"
    PORT = 8883
    
    ROOT_CA = "./cert/root_ca.pem"
    PRIVATE_KEY = "./cert/private.pem.key"
    CERTIFICATE = "./cert/certificate.pem.crt.txt"
    
    TOPIC = "raspberry_pi/test"
    
    def main():
        # https://s3.amazonaws.com/aws-iot-device-sdk-python-docs/sphinx/html/index.html
        client = AWSIoTMQTTClient(CLIENT_ID)
        client.configureEndpoint(ENDPOINT, PORT)
        client.configureCredentials(ROOT_CA, PRIVATE_KEY, CERTIFICATE)
    
        client.configureAutoReconnectBackoffTime(1, 32, 20)
        client.configureOfflinePublishQueueing(-1)
        client.configureDrainingFrequency(2)
        client.configureConnectDisconnectTimeout(10)
        client.configureMQTTOperationTimeout(5)
    
        client.connect()
        client.subscribe(TOPIC, 1, subscribe_callback)
    
        while True:
            time.sleep(5)
    
    def subscribe_callback(client, userdata, message):
        print("Received a new message: ")
        print(message.payload)
        print("from topic: ")
        print(message.topic)
        print("--------------\n\n")
    
    
    if __name__ == "__main__":
        main()
    

    덧붙여 각자로 아래와 같은 대응을 실시해 주세요.
  • ENDPOINT 설정
  • 사물을 만들 때 만든 인증서를 실행 환경에 배치

  • 엔드포인트 확인



    AWS IoT Core 화면에서 엔드포인트를 확인할 수 있습니다.
    "설정"을 선택하면 표시됩니다.




    실제로 움직여 보자! ! !



    코드 실행



    Raspberry Pi에서 위의 코드를 실행합니다. 엔드포인트를 설정하고 인증서를 배치하는 것을 잊지 마십시오.
    $ python sample_iot.py
    

    Publish



    AWS IoT Core 화면에서 테스트할 수 있습니다.
    테스트를 선택하고 주제를 입력한 다음 주제에 게시를 선택합니다.




    동작 결과


    pi@raspberrypi:~/app/sample$ python sample_iot.py
    Received a new message:
    b'{\n  "message": "Hello from AWS IoT console"\n}'
    from topic:
    raspberry_pi/test
    --------------
    pi@raspberrypi:~/app/sample$
    

    Raspberry Pi로 메시지를 Subscribe 할 수있었습니다! ! !

    이제 AWS IoT Core와 Raspberry Pi를 연결하여 GPIO 제어가 가능합니다! ! ! (← 이것의 샘플 코드는 없습니다만, 조합하면 OK!)

    샘플 코드



    Github 에 있습니다.

    참고


  • htps : // 이 m / 바로 / ms / 715 에 28 에 0c0c945 54297
  • 좋은 웹페이지 즐겨찾기