RaspberryPiを用いたドアシステムの導入マニュアル
しばらく書き終わらなそうなので完成した部分から順次公開していきます。
2024/12/23 Mon 1~6章&7章(一部)公開
2024/12/24 Tue 7章更新
2024/12/26 Thu 7章更新
1.初めに
このシステムは、誰もが簡単に従来のシリンダー錠をセキュリティの高い電気錠化することを目的として開発しました。利用に関しては非営利目的に限り使用を可能とします。営利目的で使用したい方がいらっしゃれば私にご連絡ください。
2.必要な機材
このシステムの構築には下記の機材を用いています。同一機能のものであっても、型番の異なるものに関しては動作しない場合がございます。
1.Raspberry Pi
今回の開発ではRaspberry Pi 4を使いました。
2.SDカード
Raspberry Piに対応しているものであればなんでもOKです。
3.マウス、キーボード、ディスプレイ
Raspberry Piに対応しているものであればなんでもOKです。
4.Raspberry Pi ケース
冷却ファンがついているものを選んでください。
5.電源アダプター
Raspberry Piに対応しているものを使用してください。
特にRaspberry Pi5からは電源アダプターの規格が変更されているので注意してください。
6.Webカメラ
Raspberry Piに対応しているものならどれでも大丈夫だと思われます。
7.サーボモーター
今回の開発ではMG996Rを使用しました。
8.LCDモジュール
今回の開発ではILI9341を搭載したLCDモジュールを使用しました。
9.ジャンパ線
どれを使っても問題はないと思います。
1,2,5についてはスイッチサイエンスなどで売られているスターターキットを購入するのもおすすめです。
今回使用した機材の購入ページ
3. Raspberry Piの初期セットアップ
1.スターターキットを利用する場合
SDカードをRaspberryPiの裏面にセットします。
次にマウスとキーボードを下記画像の赤丸の位置に接続します。
映像用ケーブルのMicroHDMI端子を青丸のどちらかに接続し、もう一方をディスプレイに接続します。
電源ケーブルをピンク色の丸の部分に接続してください。
起動して、デスクトップ画面が表示されたら、初期設定を行う「Welcome to the Raspberry Pi Desktop」が表示されるのでNextをクリックします。
国、言語とタイムゾーンの設定です。Countryで「Japan」を選択すると、Language、Timezoneも自動的に設定されます。完了したら「Next」をクリックします。
ユーザーとパスワードの設定です。パスワードは確認のため同じものを2回入力します。従来、デフォルトのユーザー名は「pi」となっていました。そのため、ユーザー名piを前提とした解説記事も多く、初めての方や実験を目的とした場合はユーザー名「pi」でも問題はないと思われます。ですが、運用などその他の目的では、セキュリティの観点から独自のユーザー名を推奨します。
完了したら「Next」をクリックします。ユーザー名piを使用した場合は確認が出るのでOKをクリックします。
Wi-Fiの設定画面です。接続するWi-FiのSSIDを選択します。有線接続など、WiFiを使用しない場合は「Skip」で問題ないです。完了したら「Next」をクリックします。
Wi-Fiにパスワードが必要な場合はここで入力し、「Next」をクリックします。
デフォルトブラウザーの選択画面です。「Next」をクリックします。この画面が表示されない場合は次に進んでください。
Raspberry Pi Connectを有効にするか選択する画面です。後からでも有効化できるのでそのまま「Next」をクリックします。
インターネットに接続している場合は、ソフトウェアを最新バージョンにアップデートすることができます。アップデートしたい場合は「Next」をクリックします。アップデートは後からでも可能です。
アップデートには30分程度かかります。進捗が表示された後、完了したら「OK」をクリックします。
Setup Completeのダイアログが表示されたら完了です。「Restart」をクリックすると再起動します。
2.スターターキットを利用しない場合
PC(WindowsまたはMac)を用意し、下記リンクからRaspberry Pi Imagerをインストールします。
https://www.raspberrypi.com/software/
インストールしたらデバイスとOS、ディスクを選択します。
OSに関しては「Raspberry Pi OS」の使用を推奨します。
次へをクリックして、「設定を編集する」を選択しクリックする。
ユーザー名、パスワード、Wi-FiのSSID、パスワード、ロケール設定を行う。Wi-FiのSSIDは自宅のWi-Fiの名前を入力してください。ロケールはタイムゾーンは「Asia/Tokyo」、キーボードレイアウトは「jp」を選択する。
設定を入力したら、「保存」をクリックして直前の画面に戻り、「はい」を選択し書き込みを行う。
書き込み終わったSDカードをRaspberry Piに差し込みシステムを起動する。デスクトップ画面が起動したら、設定完了です。
4.コードのダウンロード
このレポジトリのコードをコピーしてください。
RaspberryPiのターミナルを開いて次のコードを実行してください。
cd Desktop
git clone https://github.com/yuki-4201/Door_System_Public
rm -rf .git
5.必要なモジュールのインストール
Raspberry Piのターミナルを開き次のコードを実行する。
pip install supabase==2.7.4
pip install discord
pip install opencv-python
pip install realtime
pip install pigpio
sudo apt-get install python3-rpi.gpio python3-spidev python3-pip python3-pil python3-numpy
pip3 install adafruit-circuitpython-rgb-display
pipを実行できないときは下記の記事を参考にする。
6.Discordの設定
Discordでサーバーを立ててwebhookを作成しWebhookURLを取得する。
下記の動画を参考してください。
7.Supabaseのセットアップ
まず、下記リンクからGithubに登録してください。
登録が完了したら、Supabaseを開きGithubと連携します。
Supabaseで新規プロジェクトを作成します。
Table Editorで「New Table」をクリックし「setting」テーブルを作成します。Columnsを次のように変更してください。
「id」「created_at」を右にある✖️を押して削除し、下にある「Add column」をクリックして「Item_name(text)」「1(text)」「2(text)」「3(text)」を作成します
次に「Door_log」テーブルを作成します。Columnsは次のように変更してください。
「id」「created_at」を右にある✖️を押して削除し、下にある「Add column」をクリックして「log_id(int8)」「created_at(timestaptz)」「certification(text)」「username(text)」「door(text)」を作成します。
log_id ・・・・・操作ログの通し番号
created_at ・・・操作が行われた時刻
certification ・・ユーザー認証
username・・・・ユーザー名(今回だと教師か性とかの区別のみ)
door ・・・・・・ドアの状態(解錠・施錠・操作なし)
「Door_log」を作成したらviewと呼ばれるテーブルを作成していきます。SQL Editorを開いて、次のコードを実行してください。
create view viewforgas as
select *
from
"Door_log"
order by created_at desc
limit
500;
1行目ではviewテーブルの名前を指定しています。2行目の*は検索条件を指定しない時に使用します。3行目のfrom以降は参照するテーブルを指定しています。最終行のlimitはviewに表示する操作ログの数を指定しています。
そしたら 「setting」テーブルに戻ってください。テーブルに設定情報を追加していきます。
$$
\begin{array}{c:lcr} Item_name & 1 & 2 & 3 \\
\hline \text{Systemstart} & \text{[hh]} & \text{[mm]} & \text{[ss]} \\
\hline \text{Systemend} & \text{[hh]} & \text{[mm]} & \text{[ss]}\\
\hline \text{color-hex} & \text{[color-code]} & \text{Null}& \text{Null}\\
\hline \text{description1} & text{[message]} & \text{Null} & \text{Null}\\
\hline \text{description2} & \text{[title]} & \text{Null} & \text{Null}\\
\hline \text{usename} & \text{[username]} & \text{Null} & \text{Null}\\
\hline \text{webhook-url} & \text{[WebhookURL]}& \text{Null} & \text{Null}\\
\hline \text{listname} & \text{viewforgas} & \text{Door-log} & \text{Null}\\
\hline \text{host-url} & [後述] & \text{Null} & \text{Null}\\
\hline \text{supabase-Authentication} & \text{[SupabaseURL]} & text{[API Key]} & \text{Null}\\ \end{array}
$$
上の表の[]で書かれているところを書き換えてください。
Systemstart&Systemendは生徒が利用可能な時刻の定義です。
Systemstart~Systemstartとなるように設定してください。日を跨ぐ設定には対応してません。
color-hexにはDiscordに送信するembedの色を指定しています。カラーコードを入力してください。表の都合でcolor-hexとなっていますがcolor_hexとしてください。
descriptionはDiscordに送信するメッセージとタイトルです。
1には送信するメッセージを、2にはタイトルを入力してください。
usernameはDiscordに送信するときのユーザー名です。
webhook-urlはDiscordのWebhookURLです。Discordの設定からコピペしてください。webhook-urlではなくwebhook_urlです。
listnameはそのまま入力してください。Door-logではなくDoor_logです。
host-url,supabase-Authenticationは後で説明します。それぞれのハイフン(-)をアンダーバー(_)に修正して入力してください。
Nullと書かれているところには何も書かないでください。
続きはまたいつか更新します。
管理マニュアルについてはこちら