LoginSignup
17
11

More than 5 years have passed since last update.

TWE-Lite-2525Aで開閉センサ(Twitter連携) を作ってみた

Last updated at Posted at 2016-08-15

TWE-Lite-2525Aで開閉センサもどきを作ってみた

 夏季休暇を利用して、電子工作にチャレンジして見ました。Qiita初投稿です。

今回のゴール

 小型の加速度付きIOTセンサ(TWE-LITE-2525A)を利用して振動(加速度)を検知、TwitterのAPIにPOSTする。

 DSC_0448.png

 今回購入したもの

  秋月電子から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側モノスティックに書き込みます。
3 monopg.png

 別ウインドウなどでMONOSTICKが認識されていると、本アプリケーション側で認識されないのでご注意を。
 そのほか、認識されない場合はUSBを抜き差しするとよいかも。

 1-3.センサー側へのファームウェア書き込み

 上記、TWE-LITE プログラマを利用して、センサ側に書き込むファームウェア   
 (1.Samp_Monitor_EndDevice_Input_JN5164_CNFMST_1_6_1.bin)をUSBに書き込みます。

 動画の要領で、任意の設定に変更します。(「S」で設定を保存を忘れないように)
 TeraTermでのシリアル接続やボーレートの設定等細かいものは別途公式を参考。

 今回の設定は以下画像を参考
sensor.png

 設定完了後、センサをUSBに近づけたままリチウム電源を入れて、
 センサ側ファームの書き換えをしてください。

 1-4.USB側へのファームの書き込み

 TWE-LITE プログラマを利用して、USB側に書き込むファームウェア
 (3.Samp_Monitor_Parent_JN5164_1_6_1.bin)をUSBに書き込みます。

 動画の要領で、任意の設定に変更します。(「S」で設定を保存を忘れないように)

 今回の設定は以下画像を参考
usb.png

 USB側はこのままで設定が完了です。

 1-5.動作確認

TeraTermから確認をすると、以下のようにkey=valueの状態で各種値を取得できます。

センサーの反応がない場合は、「ts」タグのみが出力されます。
 x軸、y軸、z軸が取れてますね。(今回はそこまで見ません)
kyacchi.png

2.Python側プログラムの作成

 初めてPython書いてみました。
 Pythonのインストール、TwitterAPI作成については別途参考願います。

 PythonでのTwitter(OAuth)連携はrequests-oauthlibという Python 用の OAuth 認証ライブラリを利用。
 こんな感じでライブラリをインストール。

pip install requests requests_oauthlib

 モノワイヤレス社のHPにあるサンプルを参考にコードを作成。
 全体のソースコードはこんな感じ。

DetectionTweet.py
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の連携確認。

 簡易ですが、ドアにピタリ。
DSC_0450.png

 ドアの開閉で見事Tweetしてくれました。
cmd.png

Detect.png

 このままだと検知が多すぎる(一回のドアの開け閉めで2,3通の通知が来る)ので、
 無線側の通知タイミング(デフォルト0.5秒)をへらしたり、Python側、サーバ側での調整が必要そう。
 Twitterのリソースも使いすぎるしね;;

 あとは、AWSIoTとかMQTTとか組み合わせるとIOTサービスのできあがり。
 子供の夏休みの宿題に電子工作はいかがでしょう?

 ということで、初めてQiita書いたけど疲れた。

17
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11