# 情報通信実験5 IoT作成 ## 案出し - 外からエアコンをつける - 二酸化炭素濃度を測って換気を促す - 駅の歩く振動で発電 - 二酸化炭素濃度を測って換気扇を回す、扇風機 - 明るさを検知して電気をつける - 忘れ物を無くす - ドアが開けられたことをスマホに通知 - 食堂で席の空き具合を検知。待ち時間の推定 - スマホの通信容量の残りを金で売買 - 電気がついたらエアコンなどをすべてつける - 電気の明るさを自動で調整(勉強の時は明るく、寝る時は暗く) - スマホの充電をシェア - 高齢者が自宅で筋力を測定して、それを家族が見れるようにする - スマホの画面を別の指紋が操作したらクラウドのアカウント等に通知 - スリッパにIOTを搭載し、自動でスリッパをそろえる - 靴にIOTを搭載し、何歩歩いたかをシェアして健康確認 - アルコール消毒すると同時に体温測定 - 目覚まし時計と連動していつ起きたか記録される。(電気のon offで就寝時間の記録) - 電子レンジの使用時間で食事の時間を記録 - 風呂を沸かした時間で風呂の時間を記録 - ドアの開け閉めで外出の頻度を記録 - 冷蔵庫の内容量 ## 題材 生活リズムを記録して共有するシステム - 目覚まし時計と連動していつ起きたか記録される。(電気のon offで就寝時間の記録) - 電子レンジの使用時間で食事の時間を記録 - 風呂を沸かした時間で風呂の時間を記録 - 靴にIOTを搭載し、何歩歩いたかをシェアして健康確認 - ドアの開け閉めで外出の頻度を記録 - トイレの使用時間を記録 ### スマートフォンとの差別化 - スマホを持っていない高齢者が生存してるかすぐに確認できる ### 実装すること - センサー - センサーに反応したらサーバに投げる - データを蓄積するサーバ - センサーからのデータを受け取りデータの蓄積 - データから何をしたかを判定 - 値がいくつから押したとするか - option - ユーザ(センサ)の識別する - データを格納 - リクエスト(URLから)がきたらデータを返す - 仕様技術 - センサはCを書き換える - リクエストを出す箇所(timeを追加した関数だと思う)を書き換えたらよさそう(??) - Python - Webサーバはflaskでつくる https://flask.palletsprojects.com/en/2.0.x/ - 実験プログラムから拡張していく - スライドの作成 ```python= from flask import Flask,request,jsonify,make_response, render_template import datetime app = Flask(__name__) # print(app.config) # global variables data_count=0 time_list = [] index_list=[] list_max = 100 @app.route("/") def hello(): # this is test page return "Hello World !!" @app.route("/getadc",methods=['GET']) def getadc(): #-------------------------------------------- # print( 'Request = {}'.format(request.args) ) # global data_count global index_list global time_list global adc_list global list_max adc_value=request.args.get('ADC', type=int) dt_now = datetime.datetime.now() if data_count != 0 and (dt_now - time_list[-1]).total_seconds() < 60: return jsonify( { 'adc':adc_value }) # print( "ADC = ", adc_value) print('Count = ', data_count ) # if len(index_list) > list_max: time_list.pop(0) index_list.pop(0) # index_list.append(data_count) time_list.append(dt_now) data_count=data_count+1 # # print( 'index list = {}'.format( index_list ) ) # print( 'adc list = {}'.format( adc_list ) ) #-------------------------------------------- # return jsonify( adc=adc_value ) return jsonify( { 'adc':adc_value }) @app.route("/time") def time(): global time_list global data_count NAME = "Wake up time." MESSAGE = "No Data" if data_count > 0: MESSAGE = time_list[-1].strftime('%Y-%m-%d %H:%M:%S') return render_template('index1.html', title = NAME, message = MESSAGE) if __name__ == "__main__": app.run(host="0.0.0.0", port=50000, debug=True, threaded=True) ``` .pyファイルと同じフォルダにtemplatesというフォルダを作成し、その中にindex1.htmlとして保存 ``` <!doctype html> <html lang="ja"> <head> <title>Index</title> <meta charset="utf-8"/> <style> body {margin:10px;} h1 {color:lightgray;font-size:30pt;} p {font-size:18pt;} </style> </head> <body> <h1>{{title}}</h1> <p>{{message}}</p> </body> </html> ```