概要

PythonのスクリプトでAPBLE001-RSを使い、電子天秤からデータを取得し、表示する手順を示します。

Raspberry Pi 4にRaspberry Pi OS 64bit Liteをインストールしたものと、Windows10をベースに説明します。

今回説明で使用致しますAPBLE001-RSは、以下のリンクからご購入いただけます。

Raspberry Pi4での例

Raspberry Pi4の初期設定(PySerialやudev)

今回、Raspberry Pi4にRaspberry Pi OS(64bit) LiteのApril 4th 2022版をインストールしたものを前提に進めます。特殊なことはしていないので、Raspberry Piの種類やOSのバージョンが違っていても、ほとんど変更なく動作すると思います。

インストール直後は、

sudo apt -y update
sudo apt -y upgrade

として、OSを最新の状態にしておきます。次に、PythonでUSB COMポートを使用するため、PySerialをインストールします。

sudo apt install -y python3-pip
sudo pip3 installl pyserial

次にudevの設定をします。

sudo sh -c "echo 'KERNEL==\"ttyACM*\",  ATTRS{idVendor}==\"13d6\", ATTRS{idProduct}==\"0109\", SYMLINK+=\"ttyAPBLE\"' >> /etc/udev/rules.d/90-apble.rules"

これでAPBLE001-PCをRaspberry PiのUSBコネクタに挿入した際に、決まった名前(ttyAPBLE)で参照できるようになります。

APBLE001を使用した電子天秤との接続

今回、A&Dの電子天秤FX2000iを使用しました。コマンドが同じならば、A&Dの他の機種の電子天秤でも動作します。

Raspberry Pi4のUSBコネクタにAPBLE001-PCを挿入、電子天秤FX2000iのRS232CコネクタにAPBLE001-RSを挿入します。ペアリングされていれば、どちらも緑色のLEDが点滅します。通常、出荷時にペアリングされています。もし、ペアリングされていない場合には、APBLE001-PCのスイッチを長押しし、LEDがオレンジ点灯状態にしてから、APBLE001-PCのLED状態を見ながらAPBLE001-RSのスイッチを長押しし、LEDが点滅を始めたらスイッチを離します。緑点滅になればペアリング成功です。

単発測定Pythonスクリプト

呼び出すと1回だけ重量測定結果を取得し、電子天秤のシリアルコードと一緒に表示するPythonのスクリプトです。

# coding: utf-8

import serial
import time

def openser():
    try:
        ser = serial.Serial(port='/dev/ttyAPBLE', baudrate='2400',
                            bytesize=serial.SEVENBITS,
                            parity=serial.PARITY_EVEN,timeout=0.5)
    except Exception as e:
        print(e)
    return ser

def get_serial_number(ser):
    serial_number = ""
    try:
        ser.write(b'?SN\x0d\x0a')
        line = ser.readline()
    except Exception as e:
        print(e)
        return serial_number
    if len(line)==13 and line != b'':
        line = line.rstrip()
        try:
            serial_number = line[3:11].decode()
        except Exception as e:
            print(e)
    else:
        print(line)
    return serial_number

def measure_single(ser):
    status = ""
    weight = ""
    unit   = ""
    try:
        ser.write(b'Q\x0d\x0a')
        line = ser.readline()
    except Exception as e:
        print(e)
        return status,weight,unit
    if len(line)==17:
        line = line.rstrip()
        try:
            status = line[0:2].decode()
            weight = line[3:12].decode()
            unit   = line[12:15].decode()
        except Exception as e:
            print(e)
    else:
        print(line)
    return status,weight,unit

if __name__=='__main__':
    serial_number = ""
    while serial_number=="":
        ser = openser()
        time.sleep(1)
        serial_number = get_serial_number(ser)

    status = ""
    while status !="ST":
        status,weight,unit = measure_single(ser)
        time.sleep(1)
    print(serial_number,status,weight,unit)
    #print(serial_number) # 電子天秤のシリアル番号
    #print(status)        # 測定状態(ST:安定)
    #print(weight)        # 重量測定値
    #print(unit)          # 測定単位
    ser.close()

上記をコピーして、balance_single.pyというファイルを作成し、実行すると以下のようになります。順に天秤のシリアル番号、測定状態、測定値、重量単位が表示されます。測定状態に関しては、安定(ST)で無い場合は測定を繰り返しているので、必ずSTになります。

pi@raspberrypi:~ $ python3 balance_single.py
00015827 ST +00020.33   g
pi@raspberrypi:~ $ 

Windows10のコマンドラインアプリ例

Windows10の初期設定

WindowsでPythonを動作させる環境は複数あるので、今回ご紹介するのは、そのうちの1つになります。特殊なことは行っていないので、Windows11でも同様に動作すると思います。

まずMicrosoftStoreを起動してPythonを検索します。

MicrosoftStoreでPythonを検索した時の画像

とりあえず2022年7月の時点で新しいPython3.10を選択し、インストールします。

Pythonのインストールが終了したら、コマンドプロンプトを起動して、

pip3 install pyserial

Pyserialをインストールします。

APBLE001を使用した電子天秤とWindowsPCの接続

今回、A&Dの電子天秤FX2000iを使用しました。コマンドが同じならば、A&Dの他の機種の電子天秤でも動作します。

WindowsPCのUSBコネクタにAPBLE001-PCを挿入、電子天秤FX2000iのRS232CコネクタにAPBLE001-RSを挿入します。ペアリングされていれば、どちらも緑色のLEDが点滅します。通常、出荷時にペアリングされています。もし、ペアリングされていない場合には、APBLE001-PCのスイッチを長押しし、LEDがオレンジ点灯状態にしてから、APBLE001-PCのLED状態を見ながらAPBLE001-RSのスイッチを長押しし、LEDが点滅を始めたらスイッチを離します。緑点滅になればペアリング成功です。

WindowsPCにはじめてAPBLE001-PCを挿入した場合には自動的にドライバがインストールされます。ドライバのインストールが終了するとCOMポート番号が表示されるので、記録しておいてください。不明な場合はWindowsのスタートアイコンを右クリックしてデバイスマネージャを起動してCOMポート番号を確認してください。

デバイスマネージャでCOMポート番号を確認

単発測定Pythonスクリプト(Windows用)

呼び出すと1回だけ重量測定結果を取得し、電子天秤のシリアルコードと一緒に表示するPythonのスクリプトです。Raspberry Pi用との違いはポートの指定がデバイスファイルになっているか、COMポートになっているかだけです。WindowsでもPythonをCygwinのようなUNIX環境で動作させている場合はデバイスファイル指定になります。

# coding: utf-8

import serial
import time

def openser():
    try:
        ser = serial.Serial(port='COM3', baudrate='2400',
                            bytesize=serial.SEVENBITS,
                            parity=serial.PARITY_EVEN,timeout=0.5)
    except Exception as e:
        print(e)
    return ser

def get_serial_number(ser):
    serial_number = ""
    try:
        ser.write(b'?SN\x0d\x0a')
        line = ser.readline()
    except Exception as e:
        print(e)
        return serial_number
    if len(line)==13 and line != b'':
        line = line.rstrip()
        try:
            serial_number = line[3:11].decode()
        except Exception as e:
            print(e)
    else:
        print(line)
    return serial_number

def measure_single(ser):
    status = ""
    weight = ""
    unit   = ""
    try:
        ser.write(b'Q\x0d\x0a')
        line = ser.readline()
    except Exception as e:
        print(e)
        return status,weight,unit
    if len(line)==17 and line != b'':
        line = line.rstrip()
        try:
            status = line[0:2].decode()
            weight = line[3:12].decode()
            unit   = line[12:15].decode()
        except Exception as e:
            print(e)
    else:
        print(line)
    return status,weight,unit

if __name__=='__main__':
    serial_number = ""
    while serial_number=="":
        ser = openser()
        time.sleep(1)
        serial_number = get_serial_number(ser)

    status = ""
    while status !="ST":
        status,weight,unit = measure_single(ser)
        time.sleep(1)
    print(serial_number,status,weight,unit)
    #print(serial_number) # 電子天秤のシリアル番号
    #print(status)        # 測定状態(ST:安定)
    #print(weight)        # 重量測定値
    #print(unit)          # 測定単位
    ser.close()

上記例では、ポートをCOM3にしていますが、環境によって異なるので自分のPCでのCOMポート番号を確認して、変更してください。