Raspberry Pi を使って何かを作ってみよう
とうことで、図書管理システムを作ってみたお話です。
前回の記事でセットアップした Raspberry Pi 3 Model B を使いました。
本の貸出を管理するシステム
NFCリーダーに社員証をかざすことで、本の貸し出しと返却のデータを登録します。本の認識はバーコードリーダーで行います。
完成イメージとしてサイボウズさんの記事を参考にさせていいただきました。
タイトルの通り、結構雑に作っており画面も CUI のみ、データベースは Datastoreのみ、バグも多い。。。という状態ですが、とりあえず動く状態になったので一旦まとめておきます。
使ったデバイス
キーデータとしては下記を使用してます。
- NFC IDm
社員証から取得できるNFCのID。 - ISBN13
書籍ごとのユニーク番号。書籍にバーコードとして印字されている。
これらの読み取りのために、NFCリーダーとバーコードリーダーを使用しています。
Raspberry pi 3 Model B
Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Clear)-Physical Computing Lab
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (4件) を見る
PaSoRi S380
ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380
- 出版社/メーカー: ソニー(SONY)
- 発売日: 2012/10/10
- メディア: Personal Computers
- 購入: 5人 クリック: 9回
- この商品を含むブログ (18件) を見る
バーコードリーダー BC-BR900L-B
ビジコム バーコードリーダー 二アレンジCCD USB 黒 液晶読取対応 BC-BR900L-B
- 出版社/メーカー: BUSICOM(ビジコム)
- 発売日: 2012/06/22
- メディア: オフィス用品
- 購入: 3人 クリック: 32回
- この商品を含むブログ (1件) を見る
使った技術
- Raspbian: ラズパイのOS
- Python
- nfcpy: NFC読み込みライブラリ
- luigi: ジョブフローフレームワーク
- Google Cloud Datastore: ドキュメントDB
- Google Book APIs: 本の情報取得
- Docker: Raspbian上で稼働
こんな構成
実装について
メインフレームワークとして sptify/luigi を使用しています。
本記事で luigi の詳細には触れませんが、ジョブフローフレームワークとしてよくできているなと感じました。(どっかで記事書きます)
ソースコードは Github で公開しています。
苦労したこと
- NFCリーダーの認識がOSによって異なる
Macで認識されるリーダーがラズパイから認識できないとう事象がありました。旧モデル PaSoRi S370 がラズパイだと認識されず、かなり時間を使ってしまいました。結局新モデルの S380 を購入しました。。 - DockerからNFCリーダーを認識させる
NFCリーダーが接続されているUSBのパスを起動時の引数に渡して上げる必要があります。docker run --device=/dev/bus/usb/001/001
のような感じです。参考: https://hub.docker.com/r/warapy/nfcpy-tagtool/ - Dockerイメージが Alpine Linux だとNFCリーダー動かすライブラリがいろいろ足りない
結局Ubuntuにしました。root 以外のユーザーからもNFCリーダーを使用できるように以下の設定も行います。
RC-S380 などデバイス毎に設定は異なるので、以下を参考に設定してください。
やってみて思ったこと
なんとなく動くものが出来上がりました。これだけの実装でNFCカードが読めたりと、ラズパイを使うといろんな楽しいものが作れそうです。
- ラズパイは高機能、デフォルトで色々動く
- ラズパイではDockerを動かすべし
- 夏休みの自由研究にちょうどいい
今後まとめていくこと
- luigiのあれこれ
- Google Cloud Datastoreのあれこれ