全2件 (2件中 1-2件目)
1
職場でNFCを読み込んでスプレッドシートにidmを記載するということがしたかった。要は出退勤簿に近しいもの。最初スマホでアプリ作って出来れば…と思ってたけどapiのコントロールができずに断念。ならば簡単にアプリが作れるappsheet使えばいけんのちゃうん?って作ってみたけど上手くidm読み込んでくれん…そういうわけで最終的にpythonを使うことと相成りました。趣味でプログラミングしているという皆さん、お元気でしょうか(←挨拶で、プログラミングのプの一筆目ぐらいしか知らない私がpythonやってみた記録あ、Windowsでやってます。まずpythonいじるのにVisualstudioをインストールする。環境変数とかその辺は他のサイトで説明してるから割愛私の環境Windows10Visualstudio2022V17.1.3RC-S380/Sで、pythonを使う理由となったnfcpyってなdllとかいう補助ソフト的なものを入れる。(よくわかってないで、nfcpyの導入は本家サイトの通りに行う。ついでにSpreadsheetをpythonで扱うためにjsonファイルを取得しておく。これも他サイトが詳しく説明してくれてるのでそっちに任せる。以下pythonプログラムnfc-spreadsheet.py#NFCを取り扱うimport。pip install nfcpyで入るimport nfc#バイナリ型を文字にしたいのに使うやつimport binascii #googlespreadsheetに読み書きするやつimport gspread#どっちかでええんとちゃうの?とか思っているimport datetimeimport time#こいつにちょっと手古摺らされた。Windows環境では1.3.0の最新版を入れるとエラー吐くfrom playsound import playsound#pipしようとしたら無いって言われたけどimportしてあるランダムさんimport random# サービスアカウントキーファイルの読み込み。**部分にjsonファイル名を入れる。jsonファイルもgspread_client = gspread.service_account(filename="*********************.json")# Google スプレッドシートを開く。****はスプレッドシートのID#さらにシート1の指定spread_sheet = gspread_client.open("*******")sheet1 = spread_sheet.sheet1# 待ち受けの1サイクル秒TIME_cycle = 1.0# 待ち受けの反応インターバル秒TIME_interval = 0.1# タッチされてから次の待ち受けを開始するまで無効化する秒TIME_wait = 2#def使ってるので適当に後ろに放り込んだらエラー吐いた。当たり前。def connected(tag): #バイナリ型でIDmを引っ張り出す idm = binascii.hexlify(tag.idm) str(idm) print(idm) #が、このままだとidmがバイナリ型で送れない… #なのでデコード。これだけでよい。base64なんて要らんかったんや data_encode_str = idm.decode('utf-8') # A2から順に年月日、時間、IDmを入力するようにセルを更新 now = datetime.datetime.today() new_date = ['{0:%Y/%m/%d}'.format(now),'{0:%H:%M:%S}'.format(now),data_encode_str] #append_rowで勝手に最終行取ってくれる。便利 sheet1.append_row(new_date, value_input_option="USER_ENTERED") #おまじない return False# NFC接続リクエストのための準備。212Fは(FeliCa)を示す。#接続定義(これでUsbReaderを起動した後変数conectedを呼び出してる。while True: clf = nfc.ContactlessFrontend('usb') clf.connect(rdwr={'targets':{'212F','424F'},'on-connect': connected})#読み取り時にランダムで音声が流れるように。鶏がレア。5%とかの確率#ただし注意すべきがplaysoundは==1.2.2とかで最新版以外を入れないと音出ない i = random.randint(1,20) if i <= 10: playsound("cat.mp3") elif i >= 11 and i <= 15: playsound("dog.mp3") elif i >= 16 and i <= 19: playsound("dog2.mp3") elif i == 20: playsound("ckn.mp3") time.sleep(TIME_wait) #return False(clf) clf.close()以上。コメントにその時苦労した点をいくつか書いてあるwバイナリ型から文字列に変換するときにはBase64とかいうコマンド使わんとあかんみたいな解説が書かれ方してたから、その通りに引っ張ってきたら4文字文字列みたいに変換されてしまったりしてちょっと苦労。結果、デコード一発で終わりっていう…あとDateの入力形式が未だによく分かってない。0:%Y/%m/%d これがなんで2022/04/04になって0:%H:%M:%S 22:00:00になるのかほんま分からんwNFCのタグにもタイプがあって、type4tagみたいなの取得すると毎回Idが変わるのでtype3tagを取得するようにしたのが'targets':{'212F','424F'}なのでFelicaとか特化で読み取る。このtarget外すとType2tagとか読み込んだ時に落ちる。理由は聞くなwplaysoundは1.3.0が最新版っぽいんやけどWindows環境か何か、最近エラーを吐くらしく、1.2.2程度の環境なら問題ないっぽいのでダウングレードする必要がある。これであとはスプレッドシート側の設定はそれはそれでする必要あり。あとはスプレッドシート側で式書いたりVlookup使ってIDと個人を紐つけて入力できるようにしておけばおk休日丸一日かけて出来上がったのがコレ。ただしexe化しようとするとエラー吐く。もう嫌。じゃ、そんな感じでノシ
April 4, 2022
コメント(0)
なにやら書けるネタはいっぱいあった気はするけど中々書く気にならなかっただけ。筆不精が続く皆さん、お元気でしょうか(←挨拶チャーシュー作ったりコンサーティーナ買ったり麻雀卓(点計算機部分)修理し直したり艦これイベントクリアしたりアパート外壁塗装で車に飛沫が飛んで直したりコロナ禍もあって中々外に出ることもなくなって、でも不自由はしていないwあ、でもコンサーティーナはちょっと楽しいので書いておくか3月中旬ぐらいにアリエクで3万で購入致す。30ボタン式アングロコンサーティーナ。アコーディオンと似たような蛇腹楽器…なのですがコンサーティーナ民はアコーディオンと一緒にされると怒るらしい…私もそのうち多分そうなるのであろうバンドネオンともまた違う。しかしバンドネオンも知名度は(無い意味で)同レベルよなwしかし難しい…購入したのはアングロと呼ばれる押し引きで違う音が出るタイプの。(押し引き同音はイングリッシュタイプらしい)今までフィドルでアイリッシュの入門部分は触ってたから数曲程度は頭に入ってるんやけど、右手左手でドレミの配置が違う…というかまず調がC/D調ということでそれ以外の曲を弾こうとすると移調せなならんのか、楽譜通り弾いても違う感じになる…フィドル弾いてる時は楽譜なんて見てなかったから気付かんかったけどwアイリッシュ入門の本買ったけど楽譜あてになんねぇ…そして何より難しいのが独習するに良い参考動画の量が無いこういったマイナー楽器はブルーオーシャンではあるんやろうけど需要が少なすぎるwみんな上手く弾いた動画はアップしてくれるんやけど上手に教えてくれる動画が無いwフィドルは手元だけでも映してくれればどこ押さえてるか分かるから感覚的に分かるんやけど、コンサティーナは左右あるから2つの動画を合わせないといけないという部分もあってアップしにくいんやろな…あとコンサーティーナが独習難しいのは一度音を間違えると(蛇腹を)全く同じ状態から始められないという点だと思っている。フィドルなりバイオリンは間違ったところから弓の位置さえ気をつければすぐに弾き直しできるんやけど、コンサーティーナは蛇腹を全く同じ状態から始めるのに手間がかかる。開ききりそうな時に間違って、再度開く音を出そうとすると出せないとかある。そうするとすぐに修正できなくて曲が完全に止まってしまうとかある。あと微妙に音でかいw消音器つけたフィドルの方が小さいまである今の時期は出勤遅い日が無いから午前中に練習できない。土日に頑張るかぁじゃ、そんな感じでノシ
April 2, 2022
コメント(0)
全2件 (2件中 1-2件目)
1

![]()
