[前半](本当の)0からNFCでカギを操作するソフトを作る。

こんにちは。もりかぷです。
大変急な展開ですが、

NFCでロッカーのカギを操作したい…!

と思ったので初心者でもなるべくわかりやすいようにやっていきたいと思います。
そもそも、何があってこうなったのかというと、ロッカーに機材を入れた際に重さで勝手にドアが開いて困っていました。ですが、だからと言って鍵をかけるほどのものではなく、いちいち鍵を取り出すのが面倒という経緯からこうなりました。

では早速作っていきます。

なお、今回は簡易的に作成するため、実用にはセキュリティ上問題があるためどうでもいいものに付けるレベルにして下さい。
また、この手順で製作する場合、自己責任の上で製作してください。

ここで言うセキュリティ上の問題は、カードエミュレーションでIDmを偽装できるので、時間を掛ければ認証突破できてしまうのです。(かなり時間がかかるのでやる人はあまり居ないと思いますが…念の為)

要するに家の鍵など重要な部分には付けないようにしましょう。

必要な知識

・キーボード、マウスの使い方
・microSDカードのフォーマット方法
・zipファイルの展開(解凍)方法
・ファイルのコピー方法
・根性

必要なもの

・作業用パソコン
・NFCチップ
・Raspberry Pi
・USB電源
・8GB以上のmicroSDカード
・マウス
・キーボード
・NFCリーダー
・+ドライバー
・サーボモーター
・小型ディスプレイ(あると便利)

今回用意したもの

・SDカードリーダーライター付きパソコン
Raspberry Pi 3
Transcend microSDHC カード 32GB Class10
Cheero Power Plus 3 Premium 20100mAh
Sony 非接触カードリーダー/ライター PaSoRi RC-S380
Decaker 53in1 精密トルクドライバーセット
SG5010 デジタルサーボ
Diginnos DG-NP09D バッテリー内蔵モバイルモニター
3Mスコッチ超強力両面テープ
Logicool K270 無線キーボード
・どっかのマウス
イナズマイレブン イレブンバンド 雷門モデル(これをNFCチップとして使いました。ぶっちゃけSuicaやnanano等でもOK)
ジャンパー線
・microUSBケーブル
・HDMIケーブル
・根気とお茶とポッキー(某コラボで大量に買ったため)

作ろう

1.Raspberry Piの初期設定

初期設定の前にそもそもRaspberry Piって何?という方もいると思います。
Wikipediaで調べてみると…

Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータイギリスラズベリーパイ財団(英語版)によって開発されている。日本では略称としてラズパイとも呼ばれる。

主に教育で利用することを想定しているが、IoTが隆盛した2010年代後半以降は、安価に入手できるIoT機器として趣味や業務に広く用いられている。IoT教育においては、ソフトウェア開発に強いRaspberry Piと、ハードウェア開発に強いArduinoの組み合わせが一般的である。

Raspberry Pi – Wikipediaより引用

なんか難しいこと書いてありますね。
とりあえず、今は制御を簡単にしてくれる基盤レベルで大丈夫です。(この書き方だと詳しい人から怒られそうだけど察して下さい)

細かいところは置いといて、準備をしていきましょう。

早速ですがRaspberry Piを出していきましょう。

この基盤がRaspberry Piです。製造元によってパッケージのデザインが違う場合がありますが、仕様は変わらないので安心して下さい。

まず、Raspberry Piを動作させるにはOS(オペレーティングシステム。WindowsとかmacOS、Linuxなどのこと)が必要です。
そのため、SDカードにOSを書き込む必要があります。

という事で比較的簡単であるNOOBSを使ってOSをインストールします。
まず、Raspberry Pi公式サイトよりNOOBSをダウンロードしていきます。

Download NOOBS for Raspberry Pi

リンクを開くと下の画面のようになると思います。

今回は普通のNOOBSを使うため、左のメモリーカードのアイコンの「Download ZIP」をクリックして下さい。
Torrentについて知識のある方は「Download Torrent」でTorrentファイルをダウンロードして、クライアントでダウンロードしても大丈夫です。

ちなみにLiteとの違いは書いてある通り、RaspbianとLibreELECがオフラインインストールできるかできないかの違いです。
ダウンロードが完了したら、ファイルを解凍していきます。
また、Raspberry Piに挿入するmicroSDカードをFAT32でフォーマットしておきます。
ファイルの解凍、microSDのフォーマットが完了したら、解凍で得られたファイル全てをmicroSDカードにコピーしていきます。
解凍方法は各環境によって変わってくるため、各自で行なって下さい。

フォルダの中身を全部SDにコピー

コピーが完了したら、microSDカードをRaspberry Piに挿入します。

その後、microUSBケーブルをRaspberry Piに接続し電源を入れます。

HDMIケーブルとディスプレイとの接続も忘れずに!

電源を入れるとOSインストーラーが起動するので「Raspbian(なんか巻いているマーク)」にチェックを入れ、Installを選択してOSインストールを開始します。
確認ダイアログが出るので「Yes」を選択

Yesを押すと画面が切り替わり、インストール画面になります。完了するまでにお茶でも飲みましょう。

インストールが完了すると「OS(es) installed Successfully」と出るので、「OK」を選択し再起動を行います。

再起動後、デスクトップが表示されたらOSインストール完了です。
初回起動時にRaspberry Piの初期設定ダイアログが出るので以下の通りに設定します。

1. 初期設定画面。Nextを押す。
2. 国設定 画面のようにする
3. パスワードの変更。初期状態ではUS配列設定になっているため、記号に注意。
4. Wi-Fi設定。必要に応じて設定。自分は有線で接続した為スキップした。
5. アップデートの確認。Nextを押す。
6. 完了後、OKを押す。

ここで注意です。
国設定の時に「Language : Japanese」に設定しましたがこのままでは、フォントの不足により文字化けが発生するため、事前に不足しているフォントをインストールする必要があります。
そのため、Rebootは押さず、ウィンドウを閉じて下さい。

7. 設定完了。Rebootは押さずに右上のバツを押して閉じる

それでは、フォントのインストールを行なっていきます。
インターネットに接続した状態で、左上にあるTerminalをクリックし起動します。

黒い画面がでたら起動完了です。この画面については「2. ライブラリをインストールしよう」で説明します。

ではこの黒い画面に

sudo apt install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

と入力してEnterキーを押して下さい。

Enterキーを押すと「Do you want to continue?[Y/n]」と聞かれるのでYを入力してEnterキーを押します。
するとインストールが始まるので待ってます。

インストールが終わったら同じように

sudo apt install uim uim-anthy
sudo apt install jfbterm

これら一つずつ入力してEnter、同じようにインストールを済ませて下さい。
次に

sudo raspi-config

と入力してEnterキーを押して下さい。
すると次のような画面が表示されるので、「4 Localosation Options」に矢印キーでカーソルを合わせ選択します。


選択後、地域関連のメニューに入れるので、「I1 Change Locale」を選択。

次の画面でロケール生成選択を行います。次のスクショは様々な事情により日本語で表示されていますが、実際は英語で説明文が表示されます。

ちなみに説明文は

ロケールとは、複数の言語を切り替え、ユーザーが自身の言語・国・文字・並べ替え順序などを使えるようにするための仕組みです。

生成したいロケールを選択して下さい。UTF-8ロケールは、特に新規にインストールしたものであれば、デフォルトで選択されているはずです。その他の文字セットは、より古いシステムおよびソフトウェアとの後方互換性のために役立つでしょう。

生成するロケールの選択:

と書いてあります。今はそこまで気にしなくて良いので、矢印キーを使って「ja_JP.UTF-8 UTF-8」のところまでカーソルを合わせ、スペースキーで左のチェックボックスが[*]となるようにします。
既にチェックが付いているならば大丈夫です。
チェックをつけたらTabキーを押しのところでEnterキーを押します。

続いて、次のような画面が表示されるので「ja_JP.UTF-8」にカーソルを合わせEnterキーを押します。
その後、ロケールの生成が行われ、生成完了すると最初のメニュー画面に戻るので、Tabキーを押しを選択。
最後に次のコマンド

sudo reboot now

を入力し、Enterキーで再起動を行います。
再起動後、初期設定画面が表示される場合があるので、同じように設定します。
最後は「Done」ボタンがあるので、押して完了です。

これで「ステップ1. Raspberry Piの初期設定」は完了です。お疲れ様でした。

2.ライブラリをインストールしよう

今回、NFCを読む込む際にPythonライブラリ「nfcpy」を用います。

ちなみにライブラリとは、プログラム上の代行サービスのようなものです。
本来、0からコードを書かないといけないような動作を、ライブラリにプログラムの一部として処理をお願いする事で、希望の処理を代理してくれるようなものです。

簡単に言えば、本来作らないといけない部品を、お店から同じ部品を購入することによって大幅に開発時間を短縮してくれるようなものです。

今回使うライブラリは最初からインストールされていないので、pipというPythonのパッケージ管理システム(ここで言うパッケージは、ソフトウェアのようなもの)を用いてインストールを行います。
という事でさっき使った「Terminal(コンソールアイコン。黒くて白い矢印みたいなものが入ったアイコンね。)」をクリックし、端末を起動します。
端末が起動すると

pi@raspberrypi ~ $

と出て入力待機状態となり、コマンドが入力できるようになります。
ちなみに「pi」の部分が現在ログイン中のユーザー名、「raspberrypi」の部分がホスト名となります。
別のユーザーでログインしている場合やホスト名を変更した場合、これらの表示が変わるので必ず「pi」と「raspberrypi」でないといけないというわけではありません。
では早速nfcpyをインストールしていきましょう。

インストール方法は簡単です。
簡単なコマンドを入力するだけです。

root権限というのはそのまま説明すると難しいので、例えば、王様と子分がいたとします。
王様はもちろん国のトップなので、どんな事でも決めることができますね。
ですが、子分はどうでしょうか。子分は国に関わる事は決めることができないでしょう。

つまり、重要な事にも指図する権限があるのが王様(root権限)です。
なので、今回はOSのシステムに関わる部分を操作するので、root権限が必要です。
もちろんですが、root権限は本来操作できない部分も操作できるので、必要な時以外は使わないようにしましょう。
ちなみにこのroot権限を使うと、同じコンピュータ上の他の人のパスワードを変えたりすることもできます。(悪用したらダメだよ。)

では、このroot権限を使うにはどうすればいいのか。
簡単です。rootで実行したいコマンドの前にsudoという4文字を入れるだけです。
つまり、hogehogeというフォルダ(コマンドについては後ほど説明します)をroot権限で作成したい場合、通常は

mkdir hogehoge

というコマンドの前になりますが、この前にsudoを入れるだけ!

sudo mkdir hogehoge

なんとこれだけで、root権限で実行できます。
ちなみに、誰でもroot権限が使えてしまうと勿論セキュリティ上問題があるので、sudoを使えるユーザーを実際は制限します。
制限方法については割愛します。

では、説明はこれぐらいにしておいて、PythonでUSBデバイスが扱えるようにPython-USBをインストールします。

sudo apt install python-usb

と入力しEnterキーを押し実行してください。
すると、ものすごい速度で画面が動くと思います。ある程度するとまた、

pi@raspberrypi ~ $

に戻るので戻ったら完了です。

sudo apt install python-usb 実行後の画面

続いてnfcpyをインストールします。
インストールするには以下のコマンドを実行します。

sudo pip install nfcpy

これを実行するとまた画面が動き出すので

pi@raspberrypi ~ $

に戻るまで待ちます。戻ってきたらnfcpyのインストールは完了です。

sudo pip install nfcpy実行後の画面

これで「ステップ2. ライブラリをインストールしよう」は完了です。お疲れ様でした。

長くなってしまったので、一旦これで前半戦は終了させていただきます。
続きは後半戦で!

[su_button url=”https://eleken.jp/archives/1886″]後半戦はこちら![/su_button]

コメントやツッコミをどうぞ。