====== カードリーダー式入退室システムについて ====== ===== 目次 ===== - [[#概要]] - [[#学生証を指定する]] - [[#動かなくなったときは]] - [[#それでも直らないときは]] - [[#raspberrypiのピンについて]] - [[#pythonコードについて]] - [[#自動実行について]] - [[#実行フロー]] - [[#ライブラリのインストール]] - [[#serviceファイルの初期設定]] - [[#それぞれのファイルの中身]] - [[#こんなエラーが発生するかも]] - [[#なにかわからないことがあったときは]] ===== 概要 ===== 本システムは、指定した学生証をかざすと、扉を解錠するものです。 また、ロックが解除された状態で再び学生証をかざすと、扉は施錠されます。 なお、このシステムが動いている状態でも、鍵による解錠施錠は問題なく行えます。 ===== 学生証を指定する ===== ・学生証の管理はMemberID.jsonで行なっています。以下の点に気をつけて書き換えを行ってください。 ・学籍番号の最後の英語は大文字で記入してください ・jsonファイルの読み込みは、起動時1回のみなので、書き換えた際は再起動してください ・盗難リスクを考慮し、部室によく来る学生に限定するのが良いでしょう ===== 動かなくなったときは ===== 以下の順で確認、処置を行ってみてください。 ① ピンが指定の場所に刺さっているか確認 ② USBハブのランプが青く光っているか(通電しているか)の確認 ② 電源の抜き差しによる再起動 ③ マウス、キーボード、モニターを接続し、ソフト側の不具合を修正 ===== それでも直らないときは ===== 使用しているのはRaspberryPiZeroというもので、そんなにいいものじゃありません。 電源をぶち抜いたときにたまにSDカードが破損します(2敗)。 ディスクイメージをGoogleDrive(ディスクイメージ)に保存しているので、解凍してからSDカードに書き込んで貰えば大丈夫です......多分。 もしそれでも動かない場合は、以下の文章を読んでください。 大丈夫、あなたなら直せます! ===== RaspberryPiのピンについて ===== ケーブルは以下のようになっています。 茶色: サーボモーターと磁気センサーのGND → 6番 赤色: 磁気センサーの信号 → 16番 オレンジ: サーボモーターの信号 → 12番(18) 黄色: サーボモーターの電源 → 2番 RaspberryPiのピン配列は以下のサイトを確認してください。 https://learn.microsoft.com/ja-jp/windows/iot-core/learn-about-hardware/pinmappings/pinmappingsrpi ===== Pythonコードについて ===== googleDriveにまんま保存しています。(DoorLockSystem) gitHubにも保存しています。(https://github.com/EhimeCSR/DoorLockSystem) デスクトップに( /home/csr/Desktop/DoorLockSystem となるように)おいてください。 ===== 自動実行について ===== |serviceファイル|batファイル|Python実行| |AutoDoorLockSystem.service|AutoProcessRun.sh|DoorLockSystem.py| ===== 実行フロー ===== serviceファイル→batファイル→sudo & Python実行 ===== ライブラリのインストール ===== 下記のコードをターミナルで打ってください。 1️⃣nfcpy(nfcカードリーダー) |sudo pip3 install --break-system-packages nfcpy| *追記(2024.08.24):pipによるインストール時に --break-system-packagesが無いと動作しなかった *参考:ラズパイに怒られた話【error: externally-managed-environment】 #Python3 - Qiita 2️⃣discordwebhook(Discordに自動投稿する) |sudo pip3 install --break-system-packages discordwebhook| ===== serviceファイルの初期設定 ===== 注意: 以下のコードまんまで実行する際は、ユーザーネームを”csr”、 DoorLockSystem(Pythoコードの入ったフォルダ)はデスクトップに、AutoDoorLockSystem.service(serviceファイル)とAutoProcessRun.sh(batファイル)はDoorLockSystemの中においてください。 1️⃣serviceファイルを /etc/systemd/system に入れる。以下のコードを打てばOKです なお、以下のコードはserviceファイルがDoorLockSystemの中に保存されている前提のものです |sudo cp /home/csr/Desktop/DoorLockSystem/AutoDoorLockSystem.service /etc/systemd/system/| *ls /etc/systemd/system/による確認も推奨 2️⃣serviceファイルを追加したので、デーモンのリロードを行う |sudo systemctl daemon-reload| 3️⃣serviceファイルの自動実行を有効化する |sudo systemctl enable AutoDoorLockSystem| 4️⃣serviceを開始する(rebootでも(多分)可) |sudo systemctl start AutoDoorLockSystem| *何かしらサービスの動作設定をしたい場合に確認用(コードに調整を加えた際は一旦停止が必要?) リンク:https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9 5️⃣serviceが登録されているかの確認。”grep”は以下の文字列を含んだserviceファイルのみを検索する |sudo systemctl list-unit-files --type=service | grep Auto| 6️⃣Pythonファイルにsudo権限を渡す(batファイルにsudo Python3と書き込んだので不要?) |sudo chmod 755 /home/csr/Desktop/DoorLockSystem/DoorLockSystem.py| |sudo chmod 755 /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh| 7️⃣serviceが正常に動作しているかどうかの確認 |sudo systemctl status AutoDoorLockSystem| ===== それぞれのファイルの中身 ===== serviceファイル(AutoDoorLockSystem.service) [Unit] Description = AutoDoorLockSystem After = network [Service] Type = simple ExecStart = /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh [Install] WantedBy = multi-user.target batファイル(AutoProcessRun.sh) #!/bin/bash sudo pigpiod cd /home/csr/Desktop/DoorLockSystem/ sudo python3 DoorLockSystem.py ===== こんなエラーが発生するかも ===== 1️⃣statusを見るとバッチファイルのディレクトリが存在しないと言われる エラー例: |AutoDoorLockSystem.service: Failed at step EXEC spawning /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh : No such file or Directory| 原因: スクリプトファイルのシバン(shebang)行にWindowsの改行文字(^M、CR+LF)が含まれている可能性が高いです。 LinuxではLF(\n)のみを改行文字として認識するため、このような問題が発生します。 解決策: 下記コードを実行し、スクリプトの改行コードをLinux形式(LF)に変更する。 |sudo apt-get install dos2unix dos2unix /home/csr/Desktop/DoorLockSystem/AutoProcessRun.sh| ===== なにかわからないことがあったときは ===== 本システムを作成したのは、2016年入学の「Y」、2020年入学の「SAI/かんきつ」、2023年入学の「つむ」です。 わからないことがあればDiscord等で聞いてください。 問題が発生するごとにいろいろと更新してます。 適度に更新してください。 最終編集者:Toku 最終編集日:2024/8/24