LineNotifyが終わる!?
気付いたらLineNotifyサービスが終了との情報……
折角作ったQULIOもどきが機能しなくなってしまう…
代替機能を探してみるとLine Messagin APIというものが公開されているのでこちらを採用、改めて作り直してみた。
作りたいもの
・鍵を掛けたら鍵の状態を撮影、「鍵を掛けた!」とテキストでLineに通知を飛ばしたい
何で作りますか
取り敢えず家に転がっていた二つ
・ラズパイzero W
・マグネットセンサ
これさえあればGPIOでマグネットセンサのON・OFFで鍵の状態を検知、という作りたいものが達成できそう。
開発環境
OS:Windows 11 Pro 24H2
Raspberry Pi Pico2 W
まずはLine Messaging APIの登録・設定を行う!
Messaging API - LINE Developersにアクセスし、右上のコンソールにログインするボタンをクリックする。
https://developers.line.biz/ja/services/messaging-api/
LINEアカウントでログインをクリックし、自分が使用しているLineIDでログインする
新規プロバイダーを設定するため、プロバイダー欄の作成ボタンをクリックする。
新規プロバイダー作成画面で名前を付けて作成ボタンをクリックする。
チャネル設定から画面中央のMessaginAPIをクリックする。
LINE Official Account Managerの画面で同意をクリックする
アカウント名を入力し次へをクリック、ホーム画面を移動を押してホーム画面に移動する
画面右上当たりの設定をクリックし、左側のツリーからMessaginAPIをクリックする
作成済みのプロバイダーを選択、もしくは新規でプロバイダー名を指定して同意をクリックする
一度接続したプロバイダーとは解除ができない警告が表示されるのでOKをクリック
LINE Developersに戻り、コンソールトップから作成したチャネルをクリックし、MessaginAPI設定を開いた最下段にチャネルアクセスト-クンがあるのでメモ帳などエディターに控えておく。
回路を作る!
適当に以下のイメージで回路を構成する。
プルアップ抵抗ってなんぞやみたいな人はググってください。
コードを書く!
ラズパイとPCをmicorUSBで接続し、「Thonny Python IDE」を起動する。
インストールしていない場合はThonnyをインストールしておくこと。
以下のコードをそれぞれraspberrypi pico2 Wに保存する。
main.pyがあることにより起動時に自動でimportに示されているpyファイルを順次実行してくれる。
今回で言うとwifi.pyとkeyopenstatus_lite.pyを順番に実行してくれる。
import wifi
import keyopenstatus_lite
import network
import time
SSID = '接続するWIFIの名前(SSID)'
PW = 'WIFIのパスワード(平文なのでセキュリティ的に良くはない…)'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PW)
while wlan.isconnected() == False:
print('Connecting to Wi-Fi router')
time.sleep(1)
wlan_status = wlan.ifconfig()
print('Connected!')
print(f'IP Address: {wlan_status[0]}')
print(f'Netmask: {wlan_status[1]}')
print(f'Default Gateway: {wlan_status[2]}')
print(f'Name Server: {wlan_status[3]}')
import machine #import Pin
import os
import time
import network, urequests
import requests
import json
led = machine.Pin("LED", machine.Pin.OUT)
token = 'チャネルアクセスト-クン'
url = 'https://api.line.me/v2/bot/message/broadcast'
headers = {'Authorization': f'Bearer {token}','Content-Type': 'application/json; charset=UTF-8;'}
button1 = machine.Pin(16,machine.Pin.IN,machine.Pin.PULL_UP)
button2 = machine.Pin(18,machine.Pin.IN,machine.Pin.PULL_UP)
opn = 1
opnd = 1
while True:
#if button.is_pressed:
if button2.value():
if opn == 1:
time.sleep(0.5)
pass
else:
#print('Open')
messageText:str = "KeyOpen"
#data = {'to': user_id,'messages': [ {'type': 'text','text': messageText} ] }
data = {'messages': [ {'type': 'text','text': messageText} ] }
response = requests.post(url, headers=headers, json=data)
time.sleep(0.5)
led.value(0)
opn = 1
else:
if opn == 0:
time.sleep(0.5)
pass
else:
#print('Lock')
messageText= 'keyClose'
data = {'messages': [{'type': 'text','text': messageText}]}
response = requests.post(url, headers=headers, json=data)
time.sleep(0.5)
led.value(1)
opn = 0
動作確認
磁石をセンサに近づけたり、遠ざけたりして作成した公式アカウントから「open」や「close」のメッセージが返ってきていればOK。
3Dプリンターでケースを作りラズパイとセンサ類を収めて、玄関に取り付ける。