Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 891

Raspberry Pi で入退室記録的なものをやってみた

$
0
0

Felica使って遊んでみたいなと思ったので PaSoRiを買ってみた。

f:id:mattintosh4:20170625193452j:plain

とりあえず Pythonの nfcpy モジュールで IDmは取得できるようになったので、SQLiteIDmのリストやら社員名簿やらを作った。本当は Pythonオンリーで書きたかったけど、時間がなかったので Shell から Pythonを呼び出すようにした。外部サービスに投げるテストとして Tocaro を利用。

f:id:mattintosh4:20170625193507p:plain

とりあえず IDmと社員番号、社員番号と名前を紐付けられるようなテーブルを作成。時間を記録するテーブルは SQLiteCURRENT_TIMESTAMPに任せる。もうひとつ、「入」と「出」を記録するテーブルを作ってフラグを更新するようにしておくといいかもしれない。(帰るときにカード通し忘れるとずっと入室したままになるので0時リセットとかも組んで)

createtable FELICA_EMP (
    'IDM'       TEXT    NOTNULLUNIQUE
,   'EMP_ID'    TEXT    NOTNULL
,   'TYPE_ID'NUMBER
);

createtable EMPLOYEES (
    'EMP_ID'NUMBERNOTNULLUNIQUE
,   'LNAME'     TEXT    NOTNULL
,   'FNAME'     TEXT    NOTNULL
,   'E_LNAME'   TEXT    NOTNULL
,   'E_FNAME'   TEXT    NOTNULL
,   'H_LNAME'   TEXT    NOTNULL
,   'H_FNAME'   TEXT    NOTNULL
);

createtable FELICA_TYPE (
    'TYPE_ID'NUMBERNOTNULLUNIQUE
,   'NAME'      TEXT    NOTNULLUNIQUE
);

createtable TIME_CARD (
    'TIMESTAMP'DATENOTNULLDEFAULT CURRENT_TIMESTAMP
,   'IDM'       TEXT    NOTNULL
);

insertinto FELICA_EMP  values('01010XXXXXXXXXXX',00000,1);
insertinto FELICA_EMP  values('01010XXXXXXXXXXX',00000,2);
insertinto FELICA_EMP  values('01140XXXXXXXXXXX',00000,3);
insertinto FELICA_EMP  values('01120XXXXXXXXXXX',00000,4);

insertinto EMPLOYEES   values(00000,'山田','太郎','やまだ','たろう','Yamada','Taro');

insertinto FELICA_TYPE values(1,'Suica(JR)'        );
insertinto FELICA_TYPE values(2,'Suica(りんかい線)');
insertinto FELICA_TYPE values(3,'Suica(モノレール)');
insertinto FELICA_TYPE values(4,'PASMO'            );


出勤記録的なやつ #RaspberryPi #NFC #Suica

Makoto Yoshidaさん(@mattintosh4)がシェアした投稿 -


圧電スピーカーを買ったまま使ってなかったので、ファミリー○ートの入店音を PWM で作成。音楽やってたはずなのに楽譜全然よめなくなっててびっくり。MIDIデータでそのまま投げられると楽なんだけど、とりあえず八分音符で周波数ベタ書き。

#!/usr/bin/python2import RPi.GPIO as GPIO
import time

gpio_pin = 4

GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio_pin, GPIO.OUT, initial = GPIO.LOW)
p = GPIO.PWM(gpio_pin, 440)

scales = [
    369.994
,   311.127
,   220.000
,   311.127
,   329.628
,   440.000,440.000,440.000
,   329.628
,   369.994
,   329.628
,   220.000
,   311.127,311.127
]

try:
    p.start(20)
    for i in scales:
        p.ChangeFrequency(i)
        time.sleep(0.3)
    p.stop()
finally:
    GPIO.cleanup()



実用するかどうかと言われれば多分しない。というのも、SQLiteとか Oracleとか使える人がいないからデータベースの管理ができないのよね。(CSVをパースしたりでもいいんだけどさ…)


Viewing all articles
Browse latest Browse all 891

Trending Articles