この記事はQRコードを使った入場システムを自作する。シリーズの記事です。
#前回
QRコードを使った入場システムを自作する。でなんとなく概要と経緯を説明しました。今回からは実践編です。
#QRコードを発行するには。
PythonでQRコードを生成できるモジュールがあったのでそれを使う。
###まずはインストール
$ pip3 install qrcode
###実際に書いてみる。
import qrcode
#QRコードのサイズを指定
qr = qrcode.QRCode(box_size=5)
#QRコードにする文字列
qr.add_data('Hello_World')
#QRコードを作成
qr.make()
#QRコードを画像化
img = qr.make_image()
#生成した画像を保存
img.save('test.png')
print('Success Generated.')
###作成した結果...
作成されたQRコード
読み取ってみると...
読み取った結果
簡単に作成ができました。
#作成したQRコードを独自のフォーマットに基づき発行しdbに登録する
以下の大まかな手順により発行しdbへ登録する
- 上記のソースコードを利用し独自のフォーマット(後述)でQRコードを作成する。
- MySQL上"testdb"の"QRtest"テーブルにQRコード(ID)と発行した時刻を保存する。
(今回はMySQLの環境構築とラズパイ鯖の構築方法は省きます。)
MySQLをPythonで使えるようにする。(PythonからMySQLに接続するためにmysqlclientパッケージを利用する。)
筆者の実行環境がmacOSであったためまずは以下の手順でライブラリをインストールした。
$ brew install mysql-connector-c
次に
pip install mysqlclient
する。
これでdbにアクセスする準備はできました。
###...独自のフォーマットとは。
発券されるQRコードを識別できるように券種情報を上3桁、ユーザーIDを下9桁をそれぞれ特定の範囲でランダムに生成し組み合わせることでQRコード(ID)を作成する。
###実際に書いてみる。
'''
author: @inchoxd
ver: 0.1.1
2019/12/5: MySQLに対応
2019/12/5: QRコードの生成とdbへの登録機能を追加
'''
import qrcode
import random
import os
import datetime
import mysql.connector as testdb
#サイズの指定
qr = qrcode.QRCode(box_size=15)
'''
QRコードのフォーマット
***@@@@@@@@@ -> 12ケタ
***---------: 3ケタ, 券種
---@@@@@@@@@: 9ケタ, ID
'''
#券種
ctype = random.randint(693, 862)
#ID
csid = random.randint(100000000, 999999999)
#券種とIDを文字列に変換してQRidを生成
QRid = str(ctype) + str(csid)
#時刻と日付を取得し文字列へ変換
date = datetime.datetime.now().strftime('%Y/%m/%d')
sdate = str(date)
time = datetime.datetime.now().strftime('%H:%M:%S')
stime = str(time)
#QRコードの生成
qr.add_data(QRid)
qr.make()
#QRコード画像を生成
img = qr.make_image()
#/QRimgフォルダへ保存
img.save(os.path.join('./QRimg',str(QRid)+'.png'))
#MySQLへ接続
conn = testdb.connect(
user = 'tester',
password = '12345',
host = '192.168.x.x',
port = '3306',
database='QRtest'
)
#接続ステータスを確認
conn.ping(reconnect=True)
print(conn.is_connected())
cur = conn.cursor()
#table: QRidへデータを格納
table = 'QRid'
cur.execute("INSERT INTO QRid VALUES (%s, %s, %s)", (QRid, sdate, stime))
#MySQLへの接続を終了
cur.close()
conn.commit()
conn.close()
print('Data Saved!')
print(str(date)+' '+str(time)+'| Generated Successfully.')
###実行した結果...
ターミナル
MySQL
作成されたQRコード
読み取った結果
QRコードを作成しdbへ登録。そして生成されたQRコードが読み取れました。
QRコードを作成するスクリプトの基礎的なものは完成しました。
#次回予告
[2] 作成したQRコードを読み取り識別する。