ラズパイを用いたNFCリーダの作成③

前回までは、ラズベリーパイとモジュールの接続の方法や、仕組みなどを説明してきました。まだ、見ていない方は見てみてください。

今回は、実際にPythonのコードとどんなことに気を付けてコードを書いたかを残していきたいと思います。

おしながき

  • 使うライブラリ一覧
  • メインのコード
  • LINEを送信するためのコード
  • MFRC522を読み込むためのいろいろなファイル
  • まとめ

以上5本立てでいきます。

使うライブラリ一覧

今回使うライブラリは

インストールしてください!

メインのファイル

  • time
  • sympy

LINEの送るファイル

  • line-bot-sdk
  • json

NFCを読み込むファイル

  • sys

これらが使用するライブラリになります。timeやsysといった有名ライブラリはanacondaパッケージに入っていますが、line-bot-sdkといったマイナーなライブラリはパッケージに入っていないので、ターミナルやコマンドプロンプトからインストールしましょう!

メインのコード

import linebot2
from time import sleep
import sample

memberlist={'000000000000':'20e18AA','1111111111111':'20e18BB','222222222222':'20e18CC'}
#memberlistには'タグの12桁':'管理したい学籍番号'の順番で記述

membercount={'20e18AA':0,'20e18BB':0,'20e18CC':0}
#membercountは入退室を管理する番号
 
while True :
    id_num = sample.read()
    print(id_num)
    number= str(id_num))
    print(memberlist)
    try :
        input_count = memberlist[number]
        #print('input_count:',input_count)
        #input_count(学籍番号)
        for i in membercount.keys() :
            if input_count == i :
                membercount[i]=membercount[i]+1
                if membercount[i]%2==1 :
                    message=i+'入室しました'
                    linebot2.main(message)
                    print('Complete')
                    sleep(3)
                    break
                else :
                    message=i+'退室しました'
                    linebot2.main(message)
                    print('Complete')
                    sleep(3)
                    break
            else :
                continue
    except KeyError:
        input_new=input('新しく登録しますか?_はい→1いいえ→2')
        if input_new=='1':
            input_name=0
            input_figure=input('学籍番号を教えて下さい(半角英数字)')
            membercount[input_figure]=input_name
            memberlist[number]=input_figure
            print('登録できました')
            sleep(5)
            continue
        else:
            print('はじめからやり直してください')
            sleep(5)
            Continue

この長いのが今回のメインのコードになります。前回のブログでの登録していないタグが来たときにも、新しく辞書に追加できるように仕様を変更しました。基本的にはwhileで回しながら、分岐をしていく簡単なものです。書き方がかなり乱雑ですが、一応動きます!

LINEを送信するためのコード

import json
from linebot import LineBotApi
from linebot.models import TextSendMessage


file=open('info.json','r')
info= json.load(file)

CHANNEL_ACCESS_TOKEN=info['CHANNEL_ACCESS_TOKEN']
line_bot_api=LineBotApi(CHANNEL_ACCESS_TOKEN)
def main(message):
    messages=TextSendMessage(text=message)
    line_bot_api.broadcast(messages=messages)
{CHANNEL_ACCESS_TOKEN":"ここにアクセストークンをペースト",
"USER_ID":"ここにユーザIDをペースト"}

 ここでは、LINEを送信するためのコードになります。ポイントはJsonファイルを使用しています。JsonファイルでユーザIDとアクセストークンを保存することで、スマートになるのかなと思います。

 Pythonファイルでは、Githubに公開されているものから使用する部分を残したものになります。一つ変更点があります。、公式ドキュメントの例では、「line_bot_api.push_message」となっていますが、「line_bot_api.broadcast」に変更することです。push_messageではUserIDの1番先頭の人にしかLINEが送られません。今回は、複数名に入室のLINEを送信したいので、push_messageでは要件に合いません。しかし「line_bot_api.broadcast」に変更することによって、全員に送信することになるので、非常に便利です。

MFRC522を読み込むためのいろいろなファイル

この隣のファイルは前回のブログでも紹介したGitHubのファイルになります。前回のブログからダウンロードした場合にはダウンロードは不要です。このファイルの中には追加でSample.pyのファイルがあります。そのファイルは今回の「入退室システム」用に引数や、return値をいじったものなので、使用する際には活用していただけたらと思います。

まとめ

以上が「入退室システム」のコードになります。繰り返しになりますが、コードの書き方が綺麗ではなく、見にくい箇所や回りくどい書き方や間違っているが多々あると思います。そのときには、良い感じにしていただいて使っていただけたらと思います。

一つの作成を通じて、Pyhtonだけでなく、LINEについて、ラズベリーパイについて、たくさんの学びにつながりました。教育学部技術科の範疇は超えているかもしれませんが、このような学びを行うことができて良かったと思います。

以上で「ラズパイを用いたNFCリーダの作成」終了です。

ラズパイを用いたNFCリーダの作成②

今回は、実際にどのようにNFCリーダを作ったのかをこのブログを通じて残していきたいと思います。

おしながき

  • ラズペリーパイとモジュールの接続方法
  • モジュールとNFCの簡単な仕組み
  • 入退室システムの簡単な説明
  • まとめ

以上の3つで今回は作成していきたいと思います。前回のブログはこちらから見れるので、見ていない方は先に見てもらったほうがいいと思います!

ラズペリーパイとモジュールの接続方法

ラズベリーパイとモジュールの接続に関してはとても簡単です。図で表すとこのようになります。

ラズベリーパイとの接続方法を表した図

また、複数のセンサを活用したいときにはブレッドボード使うと複雑にはなりますが、レベルが高いこともできるようになります。インターネットで調べると細かい規格なども出てくるので、興味がある人は調べてみてください!

モジュールとNFCの簡単な仕組み

NFCとモジュールはどのような仕組みで個々のタグを識別しているのでしょうか?

このモジュールにはされている白いカードと青いタグが付属されています。それらにはそれぞれ12桁の番号が登録されています。それらを読み取ることで個々のタグを識別することができます。

今回はその番号と管理したい学生の学生番号をPythonの辞書形式である「キー」「値」で結びつけることができます。

では、どうやって番号を読み取るのか?

それは、すでに作られてるファイルを使います。

Githubから既存で作られているものを使います!リンクはこちらからお願いします!

入退室システムの簡単な説明

簡単な説明をGoogleスライドにまとめました。こちらをご覧いただけたらと思います。

まとめ

今回は「ラズベリーパイとモジュールの接続方法」「モジュールとNFCの簡単な仕組み」「入退室システムの簡単な説明」を行いました。前回に比べ内容が少し深くなり、専門知識感が増したかなと思います。 この入退室システムは一例にすぎなく、もっと他にいい管理方法やライブラリがあると思うので、もう少し、学習を進めたらと思います。次回はPythonのコードをもとに作成したものを解説していきたいと思います。

はんだ付け

こんにちは。二年のらんです。

先日電気電子実習ではんだ付けを行いました。

はんだ付けで気を付けることとしては、安全に使うことはもちろんですが、はんだはすぐに固まってしまうので、はんだ→はんだごての順に基板から離すようにしましょう。

それにしても基板に抵抗やトランジスタをはんだ付けするだけで機械が動くなんてすごいですよね。

今後の実習もみんなで楽しく頑張っていきたいと思います。

最後に、はんだ付けの練習のときに作ったものを載せておきます!

ラズパイを用いたNFCリーダの作成①

どうもこんにちは、NFCを皆さんご存じでしょうか?身近なところだと、Suicaなどの交通系ICやUNIQLOやGUなどの会計の時に自動でアイテムを識別してくれるのもNFCの技術が用いられています。

さて今回作っていくのは、「ラズベリーパイ」「NFC」を組み合わせて、研究室の入退室システムを作っていこうと思います。

おしながき

  • システム要件
  • 今回使用するNFCリーダのモジュールについて
  • 通知方法について
  • まとめ

システム要件

今回のシステム要件(作りたいもの)は以下の通りです。

  • 言語はPython
  • NFCリーダ「MFRC-522 RC522 RFID」の採用
  • カードを読み取ったときにLINEにて通知を行う
  • 複数名での使用を想定

以上が今回作りたいものになります。

今回使用するNFCリーダのモジュールについて

今回使用するNFCリーダはAmzonなどで購入することができる格安モジュールのMFRC-522 RC522 RFIDになります。ここにAmazonのリンクを貼っておきます。

これはとてもお手軽に購入することができるので、チャレンジがしやすいと思います!また、別の方法としてPaSoRi RC-S380を使用する方法もありますが、今回は格安モジュールで作成をしたいと思います。

※格安モジュールでははんだ付けが必要となるので、ご注意いただけたらと思います。

Qiitaの方に別のNFCリーダの記事もあったので、共有します!

https://qiita.com/pf_packet/items/9a50d9f3b1f478930b02

通知方法

通知方法はLINEのAPIを使います。LINEのAPIには「LINENotify」と「LINEMassaging API」がありますが、今回は「Massaging API」を使ってみたいと思います。MassagingAPIはLINENotifyに比べると扱うのが難しいですが、その分できることもたくさんあるので、使いこなせる日が来たら良いなと思います。今回はメッセージを送信するだけなので、LINENotifyでも代用ができます。なので、LINENotifyを使う場合にはアレンジして使っていただけたらとおもいます。 

LINENotify公式サイトはこちら

LINE MessagingAPI公式サイトはこちら

まとめ

今回はこれから作成する作品についてのシステム要件と使用するモジュール、使用するAPIサービスを紹介しました。次回以降からは作成したコードから少しずつ解説も混ぜつつできたらなと思います。また別でLINENotifyは扱いたいなと考えています。

今回はこれで終わります。

PythonでWebスクレイピング

どうも。magnetです。

最近の情報系の授業において、「スクレイピング」というものを学びました。

スクレイピングについて詳しく知りたい方は、

「ゆう」が書いたこちらの記事をどうぞ~

その授業で各自製作の課題が課されたので、

とあるサイトをスクレイピングしてみました!!

以下に私が書いたコードを載せておきますね~。

import requests
from bs4 import BeautifulSoup
# importでrequestとbs4のBeautifulsoupを読み込みます。
# Webページを取得して解析する

load_url = "とあるサイトのURL"
# とあるサイトのURLをload_urlと定義。
html = requests.get(load_url)
# htmlをrequestのgetというメソッドを使い、 するものだと定義する。
soup = BeautifulSoup(html.content, "html.parser")    # HTMLを解析する
#ちょっとよく分からない。
# ~ここまでで、HTML全体を表示するプログラムは完成~

menu_all = soup.find_all(class_ = "menu-list")
# menu_allと定義します。

for menu in menu_all :
#for 関数 in リスト でmenuの中にmenu_allを何回も入れていきます。
    menu_name_full=menu.find_all('h4',attrs={'class':'menu-name'})
    #menu_nameを全て探すことを、menu_name_fullと定義します。
    for menu_name in menu_name_full :
    #menu_nameの中にmenu_name_fullを何回も入れていきます。
        print(menu_name.text)
        print()
        #printで指定したものの表示と、見やすいように空白を表示しています。

それぞれのコードの詳しい説明は#で書いてある文を参照してみて下さい!

これを実行すると、、、

メニュー一覧が出てきます。。

やってることそんなに難しそうじゃ無いじゃんか。

って思うかもしれませんが、

実際やってみると結構重めです……

なかなか理解出来ずに困ってましたが、

周りの助けも有りなんとか完成できました!

手伝って下さりありがとうございました。

今回のものは、メニュー一覧だけの表示となっていますが、

カロリーや値段も対応して表示出来ると、

データサイエンスみが増しますね。

また、完成したら投稿したいと思います。

ではでは。

あ、あと興味があればぜひ最新の投稿もご覧下さい!

Webページの作成

おはようございます。magnetです。

ずっと前に以下のページで streamlit を使ったWEBページを紹介しました。

(興味があればこちらもご覧下さい!)

そこで、今回はレポート作成に役立つようなサイトを作りたいと考え、

文字数カウントサイト

なるものを作りました。

https://share.streamlit.io/maglill/saisyonoyatu/main/mojisuu.py

上記のURLから飛ぶことが出来るので一回見てみて下さい!

これはサイト名通り、Wordなどに書いた文字をコピー&ペーストしてカウントボタンを押すと文字数をカウントしてくれます。

WordとかGoogleドキュメントに文字数を数えてくれる機能があるのは知りません笑

改善点としては英単語とかは文字数ではなく単語数が主流なので、正確に数えてくれません。

例えば、yesは3文字、weは2文字、canは3文字というようになります。

あくまで文字数ですからね~……

気分によって使い分けてみては?

最後に、コードを貼って終わりとします。ここまでご覧頂きありがとうございました!

import streamlit as st

st.title('文字数カウントサイト')
st.write('')
#ただの改行
'このサイトは入力された文章の文字数をカウント出来るサイトです。'
'「文字数足りてるかな?」と思ったら活用してみて下さい。'
st.write('')
#ただの改行

text=st.text_input('↓ ↓ ↓  入力してね  ↓ ↓ ↓')
#これ1つでテキストボックスも完備。

st.write('')
#ただの改行

n=len(text)
#textをnと置く。

if n==0:
    st.write('文字が入力されていないよ。')
    #未入力の時

if st.button('カウント'):
    st.write('文字数は',n,'です。')
    #ボタン押したとき文字数表示
    if n==0:
        st.write('nothing in the textbox. are you kidding me :△')    
    elif 1100<= n <=1300:
        st.write('およそA4一枚程度だよ。')
    elif 20000<= n <=40000:
        st.write('おおよそ卒業論文の文字数だよ。')
    else:
        st.write('')

Webアプリケーションを作りました

こんにちは。
信州大学 教育学部 小倉研2年の peace です。

大学の情報の授業で、Webアプリケーションを作成しました。
是非、下のURLからアプリケーションを利用していただければと思います。
URL:https://share.streamlit.io/i-yuki1218/peace_2346/main/streamlitworks1.py

中身が気になる方は、以下のコードをご覧下さい
(参考になるかは分かりませんが,、主要部分のみ載せておきます,,,)

ソウルナンバー診断の一部を公開!参考になれば幸いです(*^o^*)

あっ、作品の説明がまだでしたね、、、
今回のWebアプリケーションでは「ソウルナンバー診断」ができます!
生年月日を打ち込むだけで正確や相性が診断ができるので、
家族や友達と楽しんでいただけたらと思います!(年末年始の集まりで盛り上がるかも?)

授業で教材?を作りました!!

こんにちは!magnetです。

最近寒くなりましたね。外気温が低くて研究室がなかなか温まりません。

そんなご時世ですが頑張っていきましょう!

 

それでは本題に……

最近の授業で「streamlitを使ったサイトを作ろう」という課題が出ました。

私は迷ったあげく以下のサイトを作りました。

一回訪問してみて下さい。決して怪しいサイトではないので!!

https://share.streamlit.io/maglill/saisyonoyatu/main/sagi.py

下のコードは、是非参考にして下さい!

import time
import streamlit as st
from PIL import Image

st.title("おめでとうございます。")
st.write("あなたは2021年間ビジターアンケートの参加者に選ばれました!")
st.write("Chrome「ありがとう」を込めてApple iPhone 13 Pro が当たる")
st.write("チャンスを差し上げます!")

#iPhineの画像入れる。
img=Image.open('sumaho.png')
st.image(img, caption='iPhone13Pro',use_column_width=True)

st.write('iPhone13Pro')
st.write('定価:¥146800')
st.write('期間限定:¥500')

st.write("")
st.write("")
st.write("以下の質問に答えて下さい。")
st.write("")

option=st.selectbox("1日に約何時間ネットを見ますか?",list(['1','2','3','4','5','それ以上']))
option=st.selectbox("普段何時間SNSを見ますか?",list(['1','2','3','4','5','それ以上']))
option=st.selectbox("普段何時間動画を見ますか?",list(['1','2','3','4','5','それ以上']))

st.write("")#改行のためにおいた。
st.write("")

status_area = st.empty()

# カウントダウン
count_down_sec = 10
for i in range(count_down_sec):
    # プレースホルダーに残り秒数を書き込む
    status_area.write( f'あと {count_down_sec - i}   秒で自動的に申請されます。')
    # スリープ処理を入れる
    time.sleep(1)

status_area.write('回答を送信しております。しばらくお待ち下さい。')

latest_iteration = st.empty() #空コンテンツと⼀緒に変数を作成
bar = st.progress(0)#プログレスを作る 値は0
for i in range(100):
    latest_iteration.text(f'Iteration{i+1}')#空のIterationにテキストを⼊れていく
    bar.progress(i +1)#barの中⾝をぐいぐい増やしていく
    time.sleep(0.01)
    
st.write("申請が完了しました。")

st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")

st.text("以下にあなたの情報を入力して下さい。")
st.text_input("お名前")
st.text_input("住所")
st.text_input("電話番号")
st.text_input("連絡の取れるメールアドレス")
st.write("")
st.text_input("何か要望があればお書き下さい。")

st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")

#回答送信ボタン
st.text('※回答送信には時間がかかります。')
if st.button('送信'):
    st.balloons()
    st.write("")
    st.write("")
    st.write("")
    st.write("")
    st.write('本部への送信が完了致しました。')
    st.write('お届け予定日は4月1日以降です。')
    st.balloons()
else:
    st.write('')

 

 

ね?怪しくなかったでしょ?

これ、情報モラルとかそういうとこで教材として使えると思うんです。(まだ不完全ですが)

無断使用全然OKなので困ったら是非使ってみて下さいね!

 

と、言うことでmagnetがお伝えしました~!

ロゴを作成しました!

こんにちは。
信州大学 教育学部 小倉研2年の peace です。

作品紹介ページの記念すべき第1回目の投稿は、、、

「ロゴ」

です🎉

今後、小倉研究室の “顔” となる大切なものを、研究室メンバーがプレゼンしました。


今後も、様々な作品を紹介していくので、よろしくお願いします。

作品ページもよろしくお願いします

はじめまして!

信州大学 教育学部 小倉研2年の peace です。

これから、主に作品ページを担当していきます。

今後、研究室の活動が増えていくにつれ、
研究室メンバーの個性あふれる作品を紹介していくので、
見ていただけるとうれしいです。

よろしくお願いします。

野尻湖 とても綺麗でした。