実用化するらしい。
2022年春まで10機配備予定。
電源が地上からの有線というのが痛いが…そのうち指向性の高い電波での送電も想定しているだろうから、かなり明るい話題だ。
ソフトバンクすごいな!
ラズパイゼロで、温度測定をしてDBに格納できた。となると、もう少し分かりやすく表示したいものだ。
そうだ、ラズパイ4に入れたnginxとphpのようにデータを表示できないだろか?そうだ、やってみよう。
ゼロにさせたいお仕事は、定時にカメラ撮影、温度湿度測定、ブラウザ表示だ。ラズパイなら常時電源オンにしておけるから連続測定と情報の表示が可能になる。こりゃ面白そうだ。
ラズパイゼロって処理能力の面からそんなにたいしたことはできないって言うが…どこまでできるのか?
で、今回ラズパイゼロに入れたのは、
nginx, php7.3-fpmと、以前にやったことと同じ。ただ、ゼロで動くのか?は分からん。ま、やってみよう。
で、動いたね。
◆ブラウザで撮影画像を表示
◆ブラウザで温度・湿度のデータを表示
phpでDBにアクセスしてデータを取り出すのはやったことがなかった。直近はpythonをいじっていたのでphpとかすっかり忘れてた…。phpってちょっと独特だな~と改めて実感。
DBから取り出したデータをfetchall()でそのままprintしたら↓になった…これはダメだろ。
最初はcould not find driverと出た。あれぇ、なんで?ググったら結構な人がこれでハマってたみたいで。で、以下のように入れなおして解決した。(php7.3使っているので)
$ sudo apt-get install php7.3-sqlite3
◆とりあえずできたこと
・気温と湿度を取得し、DBへ格納する
・カメラで静止画を撮影する
・静止画をフォルダに保存
・PHPでフォルダ内をなめて、ブラウザにリスト表示する(画像リンク入り)
・気温と湿度のデータをDBから取得し、PHPでブラウザに表示
だいたい出そろってきた。とりあえずやりたいのが、カメラによる定点観測、同時に温度・湿度測定、情報は自宅内のwi-fiでブラウザにアクセスして見たい(観測する部屋と寝る部屋が違う→プチ遠隔操作)あ、あと夜間は暗いからLEDを点灯して撮影したい…あ~~~、行き当たりばったりは仕方ないねぇ。
それにしても外はすごい雨だな~~洪水警報???
ヤガ?の幼虫を外に放してきた。
シャクトリムシってタイプで、数日間自宅で桜の葉っぱとかを与えていたがイマイチ食べがよくない。
やはり外の方がいいのかな?
◆元気になった
桜の木の葉っぱに放したら元気いっぱいに動き始めた。やはり外がいいんだよね。
コイツは自宅の前に転がっていたのを保護。変な灰色をしていたが数日前に脱皮したら薄い黄色?白?っぽい色になった。
いいのかこんなに目立つ色になって?
↑コイツも元気に葉っぱを食べ始めた。
コイツは拾ってきたときは緑色のイモムシだったが、数日前に脱皮したら茶色になった。
どちらもガだと思うけど、どんな成虫になるのか見れなかったのが残念。
いまはアゲハチョウの飼育だけでも忙しいから仕方ないところ。
元気にそだっておくれ。
ミートソース。
またかい。
しかし上手くいくと作りたくなる。
そりゃそうだ、美味しいんだから。
逆に不味いと作らなくなる。
昨日作ったひき肉とキャベツのレンジ蒸しはちょーっと改良が必要だな…レンジで作ることができるのはお手軽だけど。
それでは、本日のミートソース
◆玉ねぎ甘味を出す
◆ひき肉、ニンジンを投入
料理酒で臭みとり
◆トマト缶投入〜煮込み酸味飛ばし
◆味付け
薄味なので、あとはスライスチーズ入れたりすれば塩っけが出てきて味がしっかりする。この辺はお好みで。というか、この時点でもかなり塩分入ってるはずだからね。。
◆食べる
美味しいんだけど、調理で1時間くらいかかるのがね…まぁ美味しいものを食べるためなら仕方ない。
おわ、暫く耳にしてなかったな、これ。
きてるね〜、これは。
Android版の不具合はやばいな。
使えると思ってインストールした人達はゴミをインストールさせられた訳だ。
というかCOCOAの存在すら忘れていたし。それくらいのものを税金いくら使って作って放置したのか?が問題だよな。
え?3.9億円⁇
意外と名だたる企業が出ている。
大企業は発注者からすればそりゃ安心感ある。
◆え?オレが管理するの?
↑笑えるよね、職員は事業者が管理するものだと認識していた…って。
発注者が理解しないでどーするんだよ。
アホか。
◆無理だ無理
↑ 行政経験しかない職員が高度な判断をするのは無理だ…そりゃそうだ。
無理だ無理〜亀の腹筋〜♪
だいたいさ、マイナンバーも普及していない状態でどうやって大多数の国民にアプリをインストールさせるんだよ。任意って時点でこんな不安なアプリ入れるワケないじゃないの。
というか、行政始動のIT案件って不安でしかない…って国民はすでにそのように認識しているからな。
六法全書ばかり読んでるとこーなっちゃうんだろな…何に縛られてるんだろ、この国は。
前回はpythonのWEBスクレイピングで気象情報を取得、気温・湿度のグラフを作成するところまでやった。そうだ、今度はラズパイの温度計測データと比較してみよう。WEBから得られる気温・湿度の情報と、自宅内の実際の気温とを比較・・・つまり、他から得た情報、自分で採取した情報、この2つに乖離がないか?(あるわけないけど)ということを調査する・・・自分で取得したデータっていうところが今回のキモだ。電子工作をするなら自分でデバイスをいじってデータを取得してみたいよね。あと、python にも慣れてきたからスクリプトを書くのが楽しいってのもあるか。
ラズパイ内のpythonに追加したモジュールは、schedule, sqlite3, datetime
◆DB/テーブル作成
# =================================== # 特定DBのテーブル有無確認後、作成しなおす # =================================== import sqlite3 # DB接続、カーソル起動 connection = sqlite3.connect('TEST.db') cur = connection.cursor() # =================================== def CheckTableExistence(): cur.execute('SELECT COUNT(*) FROM sqlite_master WHERE TYPE="table" AND NAME="HIH6130"') def CreateTable(): sql = 'CREATE TABLE HIH6130(id INTEGER PRIMARY KEY AUTOINCREMENT, temp INTEGER, humid INTEGER, time STRING)' cur.execute(sql) def DropTable(): sql = 'DROP TABLE HIH6130' cur.execute(sql) # =================================== #テーブル存在確認 CheckTableExistence() if cur.fetchone() == (0,): #存在しないとき print("Table is not existed then created") #テーブルがなかったら作成する CreateTable() else: print('Table exists, then deleted old one and created new one') #テーブルがあったら削除する DropTable() CreateTable() connection.commit() connection.close() # =================================== print('--------------------') print('Check table; end of line')
個人的な印象だけど、sqlite3ってすごーいラクチン。さすがアプリケーション内のモジュールだ。MariaDBみたいに別サーバだと接続がちょっとややこしい。個人で軽い検証程度ならsqliteで十分だね。
◆気温・湿度の取得、DBへ格納
#! /usr/bin/env python3 import time import datetime import smbus import schedule import sqlite3 i2c_channel = 1 i2c = smbus.SMBus( i2c_channel ) def job(): Measure() def Measure(): # Measurement for i in range(0,5,1): i2c.write_quick(0x27) time.sleep(0.1) dac = i2c.read_i2c_block_data( 0x27, 0, 4 ) h = ( ( dac[0] & 0x3f ) << 8 ) | dac[1] humi = (float)(h) / 16383 * 100 t = ( dac[2] << 6 ) | (dac[3] >> 2) temp = (float)(t) /16383 * 165 - 40 now1 = datetime.datetime.now() now2 = now1.strftime('%Y-%m-%d %H:%M:%S') # Get them into DB dbregist(temp,humi,now2) # Show the data on Display (for checking) print ( "Time : %s " % now2 ) print ( "Temperature : %.2f C" % temp ) print ( "Humidity : %.2f %%" % humi ) print ( "--------- : ") time.sleep(1) def dbregist(t,h,now2): dbname = 'TEST.db' connection = sqlite3.connect(dbname) cur = connection.cursor() sql1 = 'INSERT INTO HIH6130(temp, humid, time) VALUES(?,?,?)' cur.execute(sql1,(t, h, now2)) connection.commit() cur.close() connection.close() print('--------------------') print('DB; end of line') # Do Job for a certain period of time schedule.every(10).seconds.do(job) # Wait until Doing Job while True: schedule.run_pending() time.sleep(1)
◆DB内容を読み込んでディスプレイに出力
#! /usr/bin/env python3 import sqlite3 #import pandas as pd #import matplotlib.pyplot as plt dbname = 'TEST.db' connection = sqlite3.connect(dbname) cur = connection.cursor() sql3 = 'SELECT temp, humid, time FROM HIH6130' c3 = cur.execute(sql3) result3 = c3.fetchall() print(result3) """ df1 = pd.DataFrame(result1,columns=["temp"]) df2 = pd.DataFrame(result2,columns=["humid"]) pd.set_option("display.max_colwidth", None) pd.set_option("display.max_rows", None) #print(df1) #print(df2) """ cur.close() connection.close() print('--------------------') print('SeeDB; end of line')
◆実行結果(データ取得、DB書き込み)
実際には1時間ごとにデータを取得して24個のデータをグラフ化する…ということをしたい。が、データ取得のテストなので10秒ごとに5回分のデータを取得するようにしている。scheduleモジュールもしっかり動いてるし問題なさそう。
◆実行結果(DB情報の読み出し)
pandasで書き出そうとしたんだけど、なんかうまくいかない。なんかmoduleの読込でおかしい。なので、今回は単にDBからデータの吐き出しまで。ほんとはここからMatplotでのグラフ書き出しをしようかと思っていたけど、pandasで詰まってしまいそこまで到達していない。
◆4/19追記。pandas解決