概要

RS-232C出力のバーコードリーダーをAPBLE001-RSを使用してRaspberry Pi 4に接続します。

バーコードリーダーで読み込んだISBNコードをPythonスクリプトでkintoneへ送信する手順を説明します。

kintoneはクラウド上にデータを置いてオリジナルのシステムを構成し、ブラウザやスマホアプリで操作することが直感的にできるサイボウズ社のサービスです。自社でIoT用のサーバやアプリを用意するコストや手間を考えた時に、導入のためのしきいを下げる選択肢の一つとなり得ます。

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

Kintoneでのバーコードアプリ作成

バーコードのISBNコード13文字と、その日時を記録するアプリを例として作成します。

Kintoneでバーコードアプリを作成

新しいアプリを作成し、タイトルをバーコードにします。フォームのタブから文字列と日時をドラッグして、それぞれ名前をISBNコードと日時にします。

Kintoneのフィールド名・フィールドコードの設定

文字列の方は、フィールド名をISBNコード、文字数は13文字、フィールドコードはcodeに設定します。

KintoneでAPIトークンを表示する

設定タブからAPIトークンを選択します。

KintoneのAPIトークンの設定

APIトークンを生成し、レコード追加の権限を付与します。トークンの文字列はPythonスクリプトの方で使用するのでコピーしておいてください。

アプリ番号

アプリを選択し、ブラウザのURLのところを見ると

subdomain.cycybozu.com/k/9/

のように書かれていると思います。その最後の部分の数値(上記例では9)がアプリの番号です。これも、Pythonスクリプトで使用するためメモして置いてください。

ソースコード

初期設定

まずRaspberry pi 4のPython環境をリンクの手順を参照して設定してください。追加でkintoneでデータを送信するために、requestsモジュールを以下のコマンドを打ち込んでインストールしてください。

sudo pip3 install requests

以下に、バーコードリーダが読み取ったISBNコードをkintoneへ送信するPythonスクリプトを示します。Kintoneのサブドメインとアプリ番号、APIトークンを適切なものに置き換えてください。

# coding: utf-8

import requests
import serial

SUBDOMAIN = "yoursubdomain" # kintoneのサブドメイン({subdomain}.cybozu.com)
APP_ID = "9"                # アプリ番号
API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
ISBN_CODE_LENGTH = 13 + 2   # 改行コード分2文字追加

SERIALPORT = '/dev/ttyAPBLE'

def openser():
    try:
        ser = serial.Serial(port = SERIALPORT, baudrate='9600',
                            bytesize=serial.EIGHTBITS,
                            parity=serial.PARITY_NONE,timeout=0.5)
    except Exception as e:
        print(e)
    return ser

# kintoneへのPOST
def registToKintone(subdomain, apiToken, dic_data):
    url = "https://" + subdomain + ".cybozu.com/k/v1/record.json"
    headers = {"X-Cybozu-API-Token": apiToken,
               "Content-Type": "application/json"}
    response = requests.post(url, json=dic_data, headers=headers)
    return response

def kt_main(code):
    ISBNcode = {}
    ISBNcode["value"] = code
    record = {}
    record["code"] = ISBNcode
    dic_data = {'app': APP_ID, 'record': (record)}    
    registToKintone(SUBDOMAIN,API_TOKEN,dic_data)

if __name__=='__main__':
    ser = openser()
    while True:
        line = ser.readline()
        if len(line)==ISBN_CODE_LENGTH:
            code = line.decode()
            kt_main(code.rstrip('\r\n'))
        else:
            if line !=b'':
                print(line)

APBLE001-RSとバーコードリーダの接続

バーコードリーダにAPBLE001-RSを接続した様子

アプリを実行した様子

python3 barcodeKintone.py

上記コマンドで、スクリプトを実行し、バーコードリーダでコードを読み取ると、以下のようにクラウド上のkintoneのアプリにデータが反映されます。これは、PCのブラウザやスマホのアプリから確認できます。

バーコードアプリを動作させた様子