#TWE-Lite-2525Aで開閉センサもどきを作ってみた
夏季休暇を利用して、電子工作にチャレンジして見ました。Qiita初投稿です。
#今回のゴール
小型の加速度付きIOTセンサ(TWE-LITE-2525A)を利用して振動(加速度)を検知、TwitterのAPIにPOSTする。
### 今回購入したもの
秋月電子からWebで購入。2日ほどで到着しました。
- モノワイヤレス株式会社:
1.TWE-LITE-2525A(トワイライトニコニコ)
2.MONOSTICK(モノスティック)
- ゴールデンパワー製
3.リチウム電池 CR2032
その他開発環境:
- Windows10(64bit)
- Python3系
#1.TWE-LITE-2525Aの準備
購入時のままだと、トワイライト2525から送信されてくるデータが扱いづらいので、
MONOSTICK、TWE-LITE-2525Aの設定を書き換えます。
書き換えるには、「OTA」と言われる機能を使うんですが
「USB側(受信機:モノスティック側)へファームを書き込み、USB側からセンサ側へ無線で上書き」をする仕組みです。
ただし、USB側はその後受信機として利用するのでまた受信機用としてのファームを上書く必要があります。
#Over The Airの略らしい。
公式の動画があるので以下をみると概要がつかみやすいです。
https://www.youtube.com/watch?v=uq_pkrvypBA
流れがわかったけど、実際どうやって何を書き換えるんだ、、、ってことです。
公式HPの情報が散らかっており、動かすまでに少しハマりました。
### 1-1.上書き用データの準備
「Samp_Monitor アプリケーション」を以下からDLします。
https://mono-wireless.com/jp/products/TWE-Lite-2525A/firmware_update.html
1.Samp_Monitor_EndDevice_Input_JN5164_CNFMST_1_6_1.bin
2.Samp_Monitor_EndDevice_Input_JN5164_LITE2525A_1_6_1.bin
3.Samp_Monitor_Parent_JN5164_1_6_1.bin
DLしてきたZIPファイルには上記3つが入っていますが、
センサ側にインストールするbinは1を利用、 USB側にインストールするbinは3を利用します。
※2は今回は不要です
### 1-2.USBへのファーム書き込み
「Windows 用 TWE-LITE プログラマ」を以下からDL/インストールします。
http://mono-wireless.com/jp/tech/misc/LiteProg/
本アプリケーションを利用して、各種ファームウェアをUSB側モノスティックに書き込みます。
別ウインドウなどでMONOSTICKが認識されていると、本アプリケーション側で認識されないのでご注意を。
そのほか、認識されない場合はUSBを抜き差しするとよいかも。
### 1-3.センサー側へのファームウェア書き込み
上記、TWE-LITE プログラマを利用して、センサ側に書き込むファームウェア
(1.Samp_Monitor_EndDevice_Input_JN5164_CNFMST_1_6_1.bin)をUSBに書き込みます。
動画の要領で、任意の設定に変更します。(「S」で設定を保存を忘れないように)
TeraTermでのシリアル接続やボーレートの設定等細かいものは別途公式を参考。
設定完了後、センサをUSBに近づけたままリチウム電源を入れて、
センサ側ファームの書き換えをしてください。
### 1-4.USB側へのファームの書き込み
TWE-LITE プログラマを利用して、USB側に書き込むファームウェア
(3.Samp_Monitor_Parent_JN5164_1_6_1.bin)をUSBに書き込みます。
動画の要領で、任意の設定に変更します。(「S」で設定を保存を忘れないように)
USB側はこのままで設定が完了です。
### 1-5.動作確認
TeraTermから確認をすると、以下のようにkey=valueの状態で各種値を取得できます。
センサーの反応がない場合は、「ts」タグのみが出力されます。
x軸、y軸、z軸が取れてますね。(今回はそこまで見ません)
2.Python側プログラムの作成
初めてPython書いてみました。
Pythonのインストール、TwitterAPI作成については別途参考願います。
PythonでのTwitter(OAuth)連携はrequests-oauthlibという Python 用の OAuth 認証ライブラリを利用。
こんな感じでライブラリをインストール。
pip install requests requests_oauthlib
モノワイヤレス社のHPにあるサンプルを参考にコードを作成。
全体のソースコードはこんな感じ。
import serial
import requests
from requests_oauthlib import OAuth1Session
from datetime import datetime
CK = 'Write your Consumer Key'
CS = 'Write your Consumer Secret'
AT = 'Write your Access Token'
AS = 'Write your Accesss Token Secert'
# COM3を開く
s = serial.Serial('COM3', 115200)
# ツイート投稿用のURL
url = "https://api.twitter.com/1.1/statuses/update.json"
# 無限ループ
while 1:
data = s.readline()
# 先頭の「:」を取り除く
data = data[2:]
spilitdatum = data.decode('utf-8').split(":")
dict = {}
# key,value型にしてディクショナリに保存
for spilitdata in spilitdatum:
s_key = spilitdata.split("=")[0]
s_val = spilitdata.split("=")[1]
dict[s_key] = s_val
# センサーから検知がない時は「ts」のkeyしかとれないので、
# ここでは適当なkeyとして[id]で判断
if ("id" in dict):
# ツイート本文
# Twitterは同一本文だとStatus is a duplicateで403Statusになるので時刻をつける。
params = {"status": "Vibrate Detection! " + "\n" + datetime.now().strftime('%X')}
# OAuth認証で POST method で投稿
twitter = OAuth1Session(CK, CS, AT, AS)
req = twitter.post(url, params = params)
# レスポンスを確認
if req.status_code == 200:
print ("OK: %s" % req)
else:
print ("Error: %s" % req.content)
s.close()
3.TWE-Lite-25252AとTwitterの連携確認。
このままだと検知が多すぎる(一回のドアの開け閉めで2,3通の通知が来る)ので、
無線側の通知タイミング(デフォルト0.5秒)をへらしたり、Python側、サーバ側での調整が必要そう。
Twitterのリソースも使いすぎるしね;;
あとは、AWSIoTとかMQTTとか組み合わせるとIOTサービスのできあがり。
子供の夏休みの宿題に電子工作はいかがでしょう?
ということで、初めてQiita書いたけど疲れた。