今日も秋田で IoT

旧 Trema 日記

ATOM Lite から Line へ通知 (MicroPython)

ATOM Lite 本体についているボタンを押したら,Line に通知が飛ぶプログラムを MicroPython で作ってみました.

ATOM Lite とは M5Stack 社が開発した小型マイコンモジュールです.ESP32 という Wi-Fi 機能を持ったマイコンを搭載しています.

ATOM Lite ESP32 IoT Development Kit | m5stack-store

firmware のインストール

以下のサイトに記載の手順をもとに,MicroPython の v1.21.0 をインストールしました.

MicroPython - Python for microcontrollers

はじめ ESP32 に対応したファームウェアを使用したのですが,そちらでは ATOM Lite のボタンなどを制御するためのモジュール (atom) が使えませんでした.

Line Notify のトークン発行

Line に通知を飛ばすためには,Line Notify というサービスを使います.Line Notify のサービスからアクセストークンを取得する必要があります.

PythonでLINE Notifyへ通知を送る #Python - Qiita

MicroPython のプログラム

プログラム (notify.py) は以下のとおりです.Wi-Fi 接続あたりの処理がいい加減ですが,Wi-Fi 接続が失敗しなければ,これでちゃんと動作すると思います.
essid, password, line_notify_token にはそれぞれの環境に合わせた値を設定してください.

from atom import Lite
from network import WLAN, STA_IF
from time import sleep
import requests

essid = 'Wi-Fi接続のESSID'
password = 'Wi-Fi接続のパスワード'

line_notify_api = 'https://notify-api.line.me/api/notify'
line_notify_token = '発行されたトークン'
notification_message = '送りたいメッセージ'

def line_notify( _ ):
    try:
        # Wi-Fi に接続
        wlan = WLAN( STA_IF )
        wlan.active( True )
        if not wlan.isconnected():
            wlan.connect(essid, password) 
            while not wlan.isconnected():
                sleep(1)
        
        # Line への結果通知
        headers = { 
            'Authorization' : 'Bearer {}'.format( line_notify_token ), 
            'Content-Type' : 'application/x-www-form-urlencoded'
        }
        data = 'message="{}"'.format( notification_message )
        response = requests.post( 
            line_notify_api, 
            headers = headers, 
            data = data )
        print(response.status_code)

        # Wi-Fi 切断
        wlan.disconnect()
    except Exception as e:
        print(e)

atom_lite = Lite()
atom_lite.set_button_callback( line_notify )

ATOM Line へのプログラム送信と実行

作ったプログラム (notify.py) は ampy を使って,ATOM Lite に送り,実行します.

$ ampy -p シリアルポート put notify.py
$ ampy -p シリアルポート run nofify.py 

シリアルポートの部分には,ATOM Lite が接続しているシリアルポートのデバイス名を指定してください.Windows であれば COM3 や COM4, MacOS であれば /dev/tty.usbserial-XXXXXXXXXX といったデバイス名になっていると思います.

ampy でプログラムを送り込んだら,ATOM Lite のボタンを押してみてください.Line に通知が行くはずです.