Back to tech

IM920を簡単に使えるモジュールを作ってみた

3 min read
Table of Contents

Python2.x系で使えるIM920のモジュールを作ってみた

一文書けば簡単に設定ができるので便利

とりあえずは使えそうなコマンドをモジュール化した(そのうち追加するかも)

IM920ってなんぞやって人は↓

www.interplan.co.jp
www.interplan.co.jp

使い方・初期設定

  • Pythonでシリアルポートが使えるようにすること!
sudo pip install pyserial
  • Python2.x系のみ動作確認済み
  • Linuxのみ動作確認済み windowsで起動したい場合は、setSerial(mybaudrate)にある

port = ‘/dev/ttyUSB0’ を

port = ‘com12’ などにすると接続できる

  • ペアリング

Srid(ボーレート,‘ペアリングしたいID’)

ex) Srid(19200,‘5187’)

  • ペアリングしたIDを削除

Erid(ボーレート)

ex) Erid(19200)

  • 文字列の送信

Send(ボーレート, ‘送信したい文字列’)

ex) Send(19200, ‘Hello’)

  • 文字列の受信

Reception(ボーレート) ※returnで文字列が帰ってくる!

ex) print Reception(19200)

  • 中継器化(リピータ)

Repeater(ボーレート) ※ctrl+cで終了する

ex) Repeater(19200)

  • 固有IDの表示

Rdidボーレート

ex) Repeater(19200)

  • ボーレートの設定

Sbrt(ボーレート, ‘ボーレート設定’)

※設定したいボーレートの設定を入れる

0:1200bps 1:2400bps 2:4800bps 3:9600bps 4:19200bps 5:38400bps

ex) Sbrt(19200, ‘4’)

プログラム

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
パッケージpyserialをインストールすること
pytho2.x系で動作
Creater:Kaname Takano
'''
import serial
import binascii
import signal
import sys

'''
ctrl+cの命令
'''
def signal_handler(signal, frame):
    sys.exit()

'''
serial.Serialの設定
mybaudrate:ボーレート
'''
def setSerial(mybaudrate):
    com = serial.Serial(
        port     = '/dev/ttyUSB0',
        baudrate = mybaudrate,
        bytesize = serial.EIGHTBITS,
        parity   = serial.PARITY_NONE,
        timeout  = None,
        xonxoff  = False,
        rtscts   = False,
        writeTimeout = None,
        dsrdtr       = False,
        interCharTimeout = None)

    #bufferクリア
    com.flushInput()
    com.flushOutput()
    return com

'''
固有IDの読み出し
mybaudrate:ボーレート
'''
def Rdid(mybaudrate):
    com = setSerial(mybaudrate)
    com.flushInput()
    com.write(b'RDID' + b'\r\n')
    com.flushOutput()
    print com.readline().strip()
    com.close()


'''
ボーレートの設定
mybaudrate:現在のボーレート
setbaudrate:セットするボーレート(文字列でもってくること)
    0 1200bps
    1 2400bps
    2 4800bps
    3 9600bps
    4 19200bps
    5 38400bps
'''
def Sbrt(mybaudrate, setbaudrate):
    com = setSerial(mybaudrate)
    com.flushInput()
    com.write(b'ENWR' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.write(b'SBRT ' + setbaudrate + b'\r\n')
    com.flushOutput()
    com.readline()
    com.write(b'DSWR' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.close()

'''
ペアリング
mybaudrate:ボーレート
args:ペアリングしたいID(文字列にすること)
'''
def Srid(mybaudrate, args):
    com = setSerial(mybaudrate)
    com.flushInput()
    com.write(b'ENWR' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.write(b'SRID ' + args + b'\r\n')
    com.flushOutput()
    com.readline()
    com.write(b'DSWR' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.close()

'''
ペアリングの削除
全て削除されるため注意!
mybaudrate:ボーレート
'''
def Erid(mybaudrate):
    com = setSerial(mybaudrate)
    com.flushInput()
    com.write(b'ENWR' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.write(b'ERID' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.write(b'DSWR' + b'\r\n')
    com.flushOutput()
    com.readline()
    com.close()

'''
送信
mybaudrate:ボーレート
args:送信したい文字列 (数字の場合も文字列型にすること)
'''
def Send(mybaudrate, args):
    com = setSerial(mybaudrate)
    com.flushInput()
    com.write(b'TXDA' + binascii.b2a_hex(args.decode('utf-8')) + b'\r\n')
    com.flushOutput()
    com.readline()
    com.close()

'''
受信
アスキーコードから文字列に変換したものを返す
mybaudrate:ボーレート
'''
def Reception(mybaudrate):
    com = setSerial(mybaudrate)
    com.flushInput()

    text = ""
    text = com.readline().decode('utf-8').strip() #受信と空白の削除
    text = text.replace("\r\n","")
    text = text.split(":")[1]
    text = text.split(",")

    cngtext = ""
    for x in text:
        cngtext += chr(int(x,16))

    com.close()
    return cngtext

'''
中継機化
mybaudrate:ボーレート
'''
def Repeater(mybaudrate):
    com = setSerial(mybaudrate)
    com.flushInput()

    signal.signal(signal.SIGINT, signal_handler)

    while True:
        text = ''
        com.flushInput()
        text = com.readline().strip()
        if text == '': continue
        texts = text.split(':')
        if len(texts) > 1:
            text = text.split(":")[1]

        com.write(b'TXDA ' + text + b'\r\n')
        com.flushOutput()
        com.readline()

if __name__ == '__main__':
    #ペアリング
    #Srid(19200,'5187')

    #削除
    #Erid(19200)

    #文字列送信
    #Send(19200, 'Hello')

    #文字列受信
    #print Reception(19200)

    #中継機化
    #Repeater(19200)

    #固有ID
    #Rdid(19200)

    #ボーレート設定
    #Sbrt(19200, '4')