AWS Loft Tokyo의 IoT@Loft 핸즈온에 가입했습니다.

소개



어제 AWS Loft Tokyo의 IoT@Loft 핸즈온 #2에 참가했습니다. ST 마이크로 일렉트로닉스 주식회사 전, AWS전 감사합니다. 앙케이트에 대답해, STM32L4의 개발 보드 STM32L4 Discovery kit IoT 노드 까지 기념품에 받고 돌아왔습니다.

이 개발 보드는, 4종의 무선 모듈과 8종의 센서가 탑재되고 있고, ST-LINK도 짜넣어지고 있어 디버그 모니터(리모트 디버거)를 사용해, 단독으로 원스텝 실행도 할 수 있도록(듯이) 되어 있습니다. 평상시 사용하고 있는 M5Stack로 유감인 것이 이 기능을 사용할 수 없는 곳입니다.

Greengrass와의 협력



핸즈온으로 물건 자체는 등록되어 있으므로 근접 센서를 사용하여 사람이 다가오면 Greengrass를 올린 스마트 스피커(COET군)에서 소리를 냅니다. 순찰 등에 비해 스마트 스피커는 단어로 다양한 정보를 전달할 수 있습니다.



1. 센서 정보 주제 발행



센서 정보를 주워 주제를 발행하는 것은, 넷상에 여러가지 정보가 있으므로, 그쪽을 참조해 주세요.

2. IoT 규칙



센서에서 항상 발행되는 주제에서 스마트 스피커에서 소리를 내기 위해 조건을 좁히고 트리거를 실행하기 위해 이번에는 규칙을 사용합니다.
  • 규칙 만들기

  • AWS IoT 관리 화면에서 ACT에서 규칙을 등록합니다.
  • 규칙 쿼리 문에 조건을 지정합니다.

  • 센서 주제는 주제 이름이 'freertos/demos/sensor'이고 다음과 같은 형식이므로,
    {
      "temperature": 29,
      "humidity": 35,
      "pressure": 1001,
      "proximity": 2312
    }
    

    규칙 쿼리 문은
    select proximity from 'freertos/demos/sensor' where proximity < 1000
    

    작업에 "AWS IoT 주제에 메시지 다시 게시"를 지정하고 스마트 스피커(COET-kun)와 연동하기 위한 주제('hello/world/wav/trigger')와 같이 지정합니다. 역할에는 주제를 게시하기 위해 "iot:Publish"정책이 필요합니다.



    3. Greengrass 환경



    소리를 내기 위해 OS 리소스에 액세스하지만 마지막으로 만든 Greengrass 환경은 컨테이너 없이 만들었으므로 AWS IoT 그룹에서 리소스를 등록할 수 없습니다. 그래서 Greengrass를 루트로 실행하도록 합니다.

    /boot/config/config.json의 "runtime"에 "allowFunctionsToRunAsRoot": "yes"를 추가합니다.

    /boot/config/config.json
    ...
    
      "runtime" : {
        "cgroup" : {
          "useSystemd" : "yes"
        },
        "allowFunctionsToRunAsRoot" : "yes"
      },
    
    ...
    

    추가한 후 greengrass를 다시 시작합니다.
    cd /greengrass/ggc/core
    sudo ./greengrassd restart
    
    

    아직 확인되지 않았지만 컨테이너를 사용하는 경우 리소스에/dev/snd/controlC0 및/dev/snd/pcmC0D0p를 추가해야합니다.

    4. Lambda 함수



    스마트 스피커(COET군)에서 소리를 내는 함수를 만듭니다.

    소리를 내는 데 필요한 부분은 다음과 같습니다. 사운드 장치, WAV 파일은 자신의 환경에 맞게 확인하십시오.
    import os
    os.system('aplay -D plughw:0,0 /opt/wav/startup.wav')
    

    샘플 코드는 이렇게 됩니다. 테스트를 위해 데모 카운터 코드도 남겨 둡니다.
    #
    # Copyright 2020 fukuebiz.
    #
    
    # greengrassHelloWorldWav.py
    #
    # This Lambda function requires the AWS Greengrass SDK to run on Greengrass devices. This can be found on the AWS IoT Console.
    
    import greengrasssdk
    import platform
    import time
    import json
    import os
    
    # Creating a greengrass core sdk client
    client = greengrasssdk.client('iot-data')
    
    # Retrieving platform information to send from Greengrass Core
    my_platform = platform.platform()
    
    # Counter to keep track of invocations of the function_handler
    my_counter = 0
    
    
    def function_handler(event, context):
        global my_counter
        my_counter = my_counter + 1
        if not my_platform:
            client.publish(
                topic='hello/world/counter',
                payload=json.dumps({'message': 'Hello world! Sent from Greengrass Core.  Invocation Count: {}'.format(my_counter)})
            )
    
            os.system('aplay -D plughw:0,0 /opt/wav/startup.wav')
        else:
            client.publish(
                topic='hello/world/counter',
                payload=json.dumps({'message': 'Hello world! Sent from Greengrass Core running on platform: {}.  Invocation Count: {}'
                                    .format(my_platform, my_counter)})
            )
    
            os.system('aplay -D plughw:0,0 /opt/wav/startup.wav')
        time.sleep(20)
        return
    
    

    Greengrass 그룹의 구독에 소스: IoT Cloud, 대상: Greengrass_HelloWorld_Wav Lambda 함수, 주제에 'hello/world/wav/trigger'를 지정합니다.

    완성



    센서에 가까워지면 스마트 스피커(COET군)에서 소리가 나왔습니다.
    어제는 ST 마이크로 일렉트로닉스 주식회사 전, AWS 전 감사합니다.

    메모



    제1회 Amazon FreeRTOS 설치
    제2회 L치카
    제3회 TFT
    제4회 SD 카드
    제5회 AWS Shadows
    제6회 OTA
    제7회 Greengrass

    좋은 웹페이지 즐겨찾기