dskst's diary

Life and Tech Blog

Raspberry Piで雑な図書管理システムを作った

Raspberry Pi を使って何かを作ってみよう
とうことで、図書管理システムを作ってみたお話です。

dskst9.hatenablog.com

前回の記事でセットアップした Raspberry Pi 3 Model B を使いました。

本の貸出を管理するシステム

NFCリーダーに社員証をかざすことで、本の貸し出しと返却のデータを登録します。本の認識はバーコードリーダーで行います。
完成イメージとしてサイボウズさんの記事を参考にさせていいただきました。

blog.cybozu.io

タイトルの通り、結構雑に作っており画面も CUI のみ、データベースは Datastoreのみ、バグも多い。。。という状態ですが、とりあえず動く状態になったので一旦まとめておきます。

使ったデバイス

キーデータとしては下記を使用してます。

  • NFC IDm
    社員証から取得できるNFCのID。
  • ISBN13
    書籍ごとのユニーク番号。書籍にバーコードとして印字されている。

これらの読み取りのために、NFCリーダーとバーコードリーダーを使用しています。

Raspberry pi 3 Model B

PaSoRi S380

ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380

ソニー SONY 非接触ICカードリーダー/ライター PaSoRi RC-S380

バーコードリーダー BC-BR900L-B

ビジコム バーコードリーダー 二アレンジCCD USB 黒 液晶読取対応 BC-BR900L-B

ビジコム バーコードリーダー 二アレンジCCD USB 黒 液晶読取対応 BC-BR900L-B

使った技術

  • Raspbian: ラズパイのOS
  • Python
    • nfcpy: NFC読み込みライブラリ
    • luigi: ジョブフローフレームワーク
  • Google Cloud Datastore: ドキュメントDB
  • Google Book APIs: 本の情報取得
  • Docker: Raspbian上で稼働

こんな構成

f:id:dskst9:20180811230755p:plain

実装について

メインフレームワークとして sptify/luigi を使用しています。
本記事で luigi の詳細には触れませんが、ジョブフローフレームワークとしてよくできているなと感じました。(どっかで記事書きます)

ソースコードは Github で公開しています。

github.com

苦労したこと

  • 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のあれこれ

参考