2019年03月
2019年03月15日 14:03
1.使ったもの
ラズベリーパイ
型番: Raspberry Pi 2
記憶域: MicroSDカード(8GB Class10)
OS: Raspbian Jessie with PIXEL
IP: 192.168.11.100
設定・テスト用PC
OS: Windows7
IP: 192.168.11.6
アプリケーション:
Win32 Disk Imager → OSイメージファイルをMicroSDカードに書き込むときに使う。
WinSCP → PCで作成したファイルをSFTPプロトコルでラズベリーパイに書き込むときに使う。
Tera Term → SSHプロトコルでラズベリーパイをPCから操作するときに使う。
FeliCaリーダー
サーボモーター
型番: RB996A
2.ソフトウェア設定
①Win32 Disk ImagerでOSイメージをPCに接続したMicroSDカードに書き込む。
②MicroSDカードをラズベリーパイに挿して起動後、インターネットに接続してアップデート実行。
$ sudo apt-get update
$ sudo apt-get upgrade
③スクリプトを編集するのでvimをインストールする。
$ sudo apt-get install vim
④サーボモーター制御ツール「ServoBlaster」をインストールする。
$ sudo apt-get install git-core
$ git clone git://github.com/richardghirst/PiBits.git
$ cd PiBits/ServoBlaster/user/
$ make
$ sudo make install
⑤FeliCaリーダーを使うため「nfcpy」をインストールする。
$ sudo apt-get install python-pip
$ sudo pip2 install --upgrade pip
$ sudo pip2 install nfcpy
ラズベリーパイ
型番: Raspberry Pi 2
記憶域: MicroSDカード(8GB Class10)
OS: Raspbian Jessie with PIXEL
IP: 192.168.11.100
設定・テスト用PC
OS: Windows7
IP: 192.168.11.6
アプリケーション:
Win32 Disk Imager → OSイメージファイルをMicroSDカードに書き込むときに使う。
WinSCP → PCで作成したファイルをSFTPプロトコルでラズベリーパイに書き込むときに使う。
Tera Term → SSHプロトコルでラズベリーパイをPCから操作するときに使う。
FeliCaリーダー
メーカー: Sony
型番: RC-S380
サーボモーター
型番: RB996A
2.ソフトウェア設定
①Win32 Disk ImagerでOSイメージをPCに接続したMicroSDカードに書き込む。
②MicroSDカードをラズベリーパイに挿して起動後、インターネットに接続してアップデート実行。
$ sudo apt-get update
$ sudo apt-get upgrade
③スクリプトを編集するのでvimをインストールする。
$ sudo apt-get install vim
④サーボモーター制御ツール「ServoBlaster」をインストールする。
$ sudo apt-get install git-core
$ git clone git://github.com/richardghirst/PiBits.git
$ cd PiBits/ServoBlaster/user/
$ make
$ sudo make install
⑤FeliCaリーダーを使うため「nfcpy」をインストールする。
$ sudo apt-get install python-pip
$ sudo pip2 install --upgrade pip
$ sudo pip2 install nfcpy
$ pip show nfcpy
3.ドアロック機構の作成
追記します。
4.サーボモーターの動作確認
追記します。
5.FeliCaのIDm(製造ID)を確認
追記します。
6.スクリプト作成・実行
①下記スクリプト「felica_lock.rb」を作成し、「/home/pi/nfcpy/examples/」に保存する。
「4.」「5.」で調べた数値を反映させる。
USERS = {"wena wrist pro" => "0134***********",
"パスモ" => "0134*************",
"イカガール" => "04CEC26A3A4D80",}
UNLOCK_ANGLE = "100"
NEUTRAL_ANGLE = "50"
LOCK_ANGLE = "0"
class Initialize
def get_keyboard_input
puts "\n--------------------\n\n操作を行ってください。\n\nNFCタグ読み取り:[0]、施錠:[.]、開錠:[パスワード]"
case gets.chomp
when "."
puts "ドアを施錠します。\n"
`echo 2=#{LOCK_ANGLE}% | sudo tee /dev/servoblaster`
sleep(2)
`echo 2=#{NEUTRAL_ANGLE}% | sudo tee /dev/servoblaster`
get_keyboard_input
when "0"
puts "NFCタグを読み取ります。"
when "12345678"
puts "パスワードが一致しました。\nドアを開錠します。\n"
`echo 2=#{UNLOCK_ANGLE}% | sudo tee /dev/servoblaster`
sleep(2)
`echo 2=#{NEUTRAL_ANGLE}% | sudo tee /dev/servoblaster`
get_keyboard_input
else
puts "パスワードが違います!!\n"
get_keyboard_input
end
end
end
confirm = Initialize.new()
confirm.get_keyboard_input
def nfc()
`sudo python /home/pi/nfcpy/examples/tagtool_2.0.py`
end
def idm(text)
m = text.match(/ID=(.*?)\s/)
idm =m[1]
print("IDm = #{idm}\n")
`echo #{idm} >>/home/pi/nfcpy/examples/chokkin_read_ID.txt`
return idm
end
def unlock()
print("開錠権限があるユーザーです。\nドアを開錠しました。\n")
`echo 2=#{UNLOCK_ANGLE}% | sudo tee /dev/servoblaster`
sleep(2)
`echo 2=#{NEUTRAL_ANGLE}% | sudo tee /dev/servoblaster`
end
loop do
idm = idm(nfc)
unlock_user = USERS.key(idm)
unless unlock_user == nil
print("おかえりなさい、#{unlock_user}さん。\n\n")
unlock
confirm.get_keyboard_input
else
print("開錠権限がないユーザーです。\n")
confirm.get_keyboard_input
end
end
"パスモ" => "0134*************",
"イカガール" => "04CEC26A3A4D80",}
UNLOCK_ANGLE = "100"
NEUTRAL_ANGLE = "50"
LOCK_ANGLE = "0"
class Initialize
def get_keyboard_input
puts "\n--------------------\n\n操作を行ってください。\n\nNFCタグ読み取り:[0]、施錠:[.]、開錠:[パスワード]"
case gets.chomp
when "."
puts "ドアを施錠します。\n"
`echo 2=#{LOCK_ANGLE}% | sudo tee /dev/servoblaster`
sleep(2)
`echo 2=#{NEUTRAL_ANGLE}% | sudo tee /dev/servoblaster`
get_keyboard_input
when "0"
puts "NFCタグを読み取ります。"
when "12345678"
puts "パスワードが一致しました。\nドアを開錠します。\n"
`echo 2=#{UNLOCK_ANGLE}% | sudo tee /dev/servoblaster`
sleep(2)
`echo 2=#{NEUTRAL_ANGLE}% | sudo tee /dev/servoblaster`
get_keyboard_input
else
puts "パスワードが違います!!\n"
get_keyboard_input
end
end
end
confirm = Initialize.new()
confirm.get_keyboard_input
def nfc()
`sudo python /home/pi/nfcpy/examples/tagtool_2.0.py`
end
def idm(text)
m = text.match(/ID=(.*?)\s/)
idm =m[1]
print("IDm = #{idm}\n")
`echo #{idm} >>/home/pi/nfcpy/examples/chokkin_read_ID.txt`
return idm
end
def unlock()
print("開錠権限があるユーザーです。\nドアを開錠しました。\n")
`echo 2=#{UNLOCK_ANGLE}% | sudo tee /dev/servoblaster`
sleep(2)
`echo 2=#{NEUTRAL_ANGLE}% | sudo tee /dev/servoblaster`
end
loop do
idm = idm(nfc)
unlock_user = USERS.key(idm)
unless unlock_user == nil
print("おかえりなさい、#{unlock_user}さん。\n\n")
unlock
confirm.get_keyboard_input
else
print("開錠権限がないユーザーです。\n")
confirm.get_keyboard_input
end
end
②OS起動時に自動でスクリプトが開始されるよう「/home/pi/.bashrc」の最後に下記行を追記する。
sudo ruby /home/pi/nfcpy/examples/felica_lock.rb