Safie Engineers' Blog!

Safieのエンジニアが書くブログです

M5Stack社マイコンの社内ワークショップを開催しました

セーフィー株式会社テックリードの鈴木敦志です。

セーフィーでは普段の業務で使う技術だけでなく、エンジニアのスキルアップのために様々な取り組みを行っています。先日は、IoT機器の開発に欠かせないマイコン (マイクロコントローラー) について理解を深めるため、M5Stack社の製品を使ったワークショップを開発部で開催しました。

ワークショップの目的

セーフィーではクラウドカメラサービスを提供しており、カメラメーカーの提供するLinux等OS・ソフトウェアをベースに組み込みソフトウェアを開発しています。一方でより小型のIoT機器の実装にはEspressif社のESP32シリーズをはじめとするインターネット接続が可能なマイコンを用いることができます。

今回のワークショップの目的は以下の通りです。

  • マイコンの扱いに慣れること

  • Linux/SBC (Single Board Computer) と異なるマイコンの特性を理解すること

  • IoT連携などを行う際の選択肢として知見を得ること

ワークショップの内容

今回はM5Stack社の Atom S3 Lite というマイコンモジュールと 人感センサーユニット を使用し、人の動きを検知したらSlackに通知を送る装置を実装しました。

Atom S3 Lite (右) およびPIRセンサーユニット (左)

プログラミングにはM5Stack用の開発環境であるUIFlow2を使用しました。BlockyによるビジュアルプログラミングとMicroPython (Pythonのマイコン向け環境) が利用できますが、今回の実習の参加者はQAエンジニア等プログラマー以外の職種を含むためBlockyを用いて進行しました。UIFlow2はWeb Serial APIを用い、マイコンへの書き込みまで含めブラウザ上で開発を完結させることができます。

プログラムの動作は下記の流れになります。

  • 人感センサーユニットの出力をポーリングし値の変化を待つ
  • Wifi経由でSlackのWebhookにHTTPリクエストを送信
  • Slack Workflowで通知メッセージを表示

UIFlow上のプログラム

Pythonソースコード

import os, sys, io
import M5
from M5 import *
from unit import PIRUnit
import network
import requests
import time



wlan = None
http_req = None
pir_0 = None


pir_now = None
pir_old = None


def setup():
  global wlan, http_req, pir_0, pir_now, pir_old

  M5.begin()
  pir_0 = PIRUnit((1, 2))
  wlan = network.WLAN(network.STA_IF)


def loop():
  global wlan, http_req, pir_0, pir_now, pir_old
  M5.update()
  pir_now = pir_0.get_status()
  if pir_now and not pir_old:
    http_req = requests.post('https://hooks.slack.com/triggers/XXXXXXXXXXX/XXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', json={}, headers={})
    print(http_req.status_code)
    http_req.close()
  pir_old = pir_now
  time.sleep(1)


if __name__ == '__main__':
  try:
    setup()
    while True:
      loop()
  except (Exception, KeyboardInterrupt) as e:
    try:
      from utility import print_error_msg
      print_error_msg(e)
    except ImportError:
      print("please update to latest firmware")

ワークショップの実施

ワークショップの様子

今回のワークショップは、第1開発部のサーバー、インフラ、QCDチームを中心とするメンバーと、第2開発部のフロントエンドおよびモバイルチームのメンバー、それぞれ約20名ずつの2グループに分けて実施されました。

ワークショップは2時間程度で行われ、参加者の多くはマイコン開発の経験がほとんどありませんでしたが、全員が最後までプログラムを完成させることができました。

今後に向けて

今回のワークショップでは、普段触れることの少ないマイコンを使ったIoTデバイスの開発を体験することができました。マイコンは計算リソースが限られまた開発手法もPC等向け開発と異なるノウハウが必要ですが、こうした経験は、クラウドやWebの開発とはまた違った視点を与えてくれるものと思います。

また、IoTの分野ではマイコンを使ったデバイスが数多く登場しています。今回のようにマイコンの特性を理解しておくことでIoTシステムを設計する際の選択肢が広がります。例えばSafieクラウドと連携するIoTシステムの設計を行うとき、PCやSBC・スマートフォン等を使用するかわりにマイコンを使用することで安価で小型かつ長時間のバッテリー駆動を実現できます。

技術の幅を広げることは、エンジニアにとって重要なことだと考えています。今回のようなワークショップを通じて、普段の業務では触れない技術に触れることで、新しいアイデアが生まれるかもしれません。引き続き、セーフィーでは技術的なチャレンジを続けていきたいと思います。

© Safie Inc.