今日の昼間は雨こそ降りませんでしたが、雷は激しく、思わず動画撮影したらいい音が取れました。手ごろな編集ソフトが無いのでyoutubeにアップして前後をカットしてコレクションにw
寝る前に窓の外を見てみると、北の空の雲がなさそうなので出てみると意外と涼しかったです。
そんな中さすがにラッキーなことは3度目は起こらず、結局1時間ぐらい外に居ました。
見えたものは…カシオペア座の下の方に上から下へ短く流れるものを見た気がするのと、飛行機か人工衛星の光が右へゆっくりと流れる光ぐらいでした。
今日の昼間は雨こそ降りませんでしたが、雷は激しく、思わず動画撮影したらいい音が取れました。手ごろな編集ソフトが無いのでyoutubeにアップして前後をカットしてコレクションにw
寝る前に窓の外を見てみると、北の空の雲がなさそうなので出てみると意外と涼しかったです。
そんな中さすがにラッキーなことは3度目は起こらず、結局1時間ぐらい外に居ました。
見えたものは…カシオペア座の下の方に上から下へ短く流れるものを見た気がするのと、飛行機か人工衛星の光が右へゆっくりと流れる光ぐらいでした。
日付としては一昨日になりますが、12日は天気が悪くなるとのことで前日の夜に少しベランダで夜空を眺めていました。youtubeでウェザーニュースなどでも幕張の夜空のライブ中継やっていましたが、私がちょうど一つ流星を見つけて満足して戻ったらライブは終わってました。時刻は23時20分ごろで北極星の下側に左から右へほぼ真横に流れました。見えた流星はかなり短め(手を伸ばして5~10㎝程度)でしたがはっきりと見えました。
そして今日はふと外をみると星が見えたのですこしベランダに出て北側を少し眺めているとほぼ真上にカシオペア座が見え、その下に右から左へ流れる流星を見ることができました。長さはいい感じの長さ(腕を伸ばしたところで20~30㎝程度かな?)でした。時刻は2:30過ぎかな…そのあと蚊取り線香に火をつけてスマホを構えてベランダで待機してみましたが、残念ながら写真に収めることはできませんでした。ベランダに出て2、3分もしないうちに見れたのがラッキーだっと思います。
昨日もyoutubeでライブが流れていましたが、北海道とどこかな。レーザー光線やら人工衛星やら色々と邪魔が入ってたようですが、ライブ中継で映ったのなら、どこかで編集して公開してくれると嬉しいですね。
全体でどのくらいの負荷がかかっているのか気になったのでどんな手段があるのか検索してみました。
Linuxでシェルレベルの時間計測は3つの方法がありそうです。
timeコマンドは秒単位ですが小数点を表示しているのでミリ秒程度の精度はあるようです。dateコマンドとSECONDS変数は秒単位となります。
コマンドレベルで利用するのに便利なのはtimeで、シェルスクリプトで利用するなら表示形態によってdateコマンドかSECONDS変数を利用するか変わるのではないでしょうか。
試しに実行してみました
pi@rasp4b4g:~/gpioread $ time ./dht2 -h
未知のオプションが指定されました。
dht ver.0.1 debugコードコミコミ版
指定可能なオプション
--debug : デバッグ情報の表示
--gpio n : GPIOピン番号(デフォルトはGPIO5番).
--type x : DHT11かDHT22を指定する。(デフォルトはDHT11)大文字、小文字の判別はしない。
指定された型の手順でセンサーから読込み、湿度、温度を出力するが、
読込んだデータをもとに判定しできる限り出力する。
ただし、その時のリターンコードはエラーとなる。
--oneread : 無指定時はセンサーから2回読込み、2回目に取得した値を出力する。
このオプションが指定されるとセンサーからの読込を1回だけに限定する。
センサーがスリープしていた場合はスリープ前の値が出力される。
real 0m0.010s
user 0m0.000s
sys 0m0.011s
最初からなんか数字がおかしい感じなので調べてみると
real > user + sys
という関係になると思いますが、0.001sずれている結果に。
気を取り直して、同じような状態になるようにオプションをつけてcで作成したものとpythonとで比較したいと思います。
pi@rasp4b4g:~/gpioread $ time ./dht2 --oneread
temperature : 35.6
humidity : 60.0
real 0m0.044s
user 0m0.001s
sys 0m0.043s
pi@rasp4b4g:~/gpioread $ time python3 ./dht.py --onetime --nodirect
DHT results.
Conversion : DHT11V1.3
Temperature : 35.5 C
Humidity : 60.0 %
real 0m0.257s
user 0m0.136s
sys 0m0.052s
実行時間で比較すると0.2s程度python側の方が時間がかかっているようです。実行時間が長いpythonでは確実に割り込みによって実行時間が伸びている感じがします。
この差の大小を考えるには運用方法とそれぞれの利点と欠点を比較する必要がありますね。
個人レベルとしては、
といったpythonの利点がかなり有利なのでpython以外の選択肢はない気がしていますが、それでも常駐させるような形のものをpythonで書くのはどうかという部分も引っかかっています。
この数字はその時の判断材料となりそうです。
c側のコマンドがサンプリングバッファを利用しない形に対応していないので --nodirectとして実行していますが、先日書き換えた結果どのくらい効果があったのか見てみたいと思います。
pi@rasp4b4g:~/gpioread $ time python3 ./dht.py --onetime
DHT results.
Conversion : DHT11V1.3
Temperature : 35.6 C
Humidity : 60.0 %
real 0m0.246s
user 0m0.134s
sys 0m0.042s
時間にして0.257s - 0.246s = 0.011s まぁこんなものでしょうwメモリー操作なら数メガ単位の操作にならなければ、個人レベルのデータ量であればそこまで気にする必要はなさそうです。
pi@rasp4b4g:~/gpioread $ python3 ./dht.py --debug --nodriver
Output for debugging.
gpio_no : 5
No driver is used.
OSError : 1 IsNoDriver
Sampling is performed without using a driver.
respons low : 82
respons high : 87
data low : 51 ~ 55
data high '0': 23 ~ 26
data high '1': 69 ~ 72
data format : 3F 00 23 06 68
2nd read.
OSError : 1 IsNoDriver
Sampling is performed without using a driver.
respons low : 85
respons high : 89
data low : 43 ~ 113
data high '0': 21 ~ 29
data high '1': 66 ~ 73
data format : 2F 00 23 06 68
CRC Error.
ErrorCode : 2 retry.
OSError : 1 IsNoDriver
Sampling is performed without using a driver.
respons low : 82
respons high : 87
data low : 48 ~ 133
data high '0': 21 ~ 29
data high '1': 65 ~ 72
data format : 3F 00 23 06 D0
CRC Error.
ErrorCode : 2 retry.
OSError : 1 IsNoDriver
Sampling is performed without using a driver.
respons low : 88
respons high : 87
data low : 48 ~ 58
data high '0': 21 ~ 29
data high '1': 65 ~ 72
data format : 3F 00 23 06 68
DHT results.
Retry count : 2 time(s)
Conversion : DHT11V1.3
Temperature : 35.6 C
Humidity : 63.0 %
pi@rasp4b4g:~/pmon $ ls
Makefile pmon_ca9.h pmuser.c test.c
pi@rasp4b4g:~/pmon $ make
make -C /lib/modules/5.4.51-v7l+/build M=/home/pi/pmon modules
make[1]: ディレクトリ '/usr/src/linux-headers-5.4.51-v7l+' に入ります
CC [M] /home/pi/pmon/pmuser.o
Building modules, stage 2.
MODPOST 1 modules
CC [M] /home/pi/pmon/pmuser.mod.o
LD [M] /home/pi/pmon/pmuser.ko
make[1]: ディレクトリ '/usr/src/linux-headers-5.4.51-v7l+' から出ます
pi@rasp4b4g:~/pmon $ ls
Makefile modules.order pmuser.c pmuser.mod pmuser.mod.o test.c
Module.symvers pmon_ca9.h pmuser.ko pmuser.mod.c pmuser.o
pi@rasp4b4g:~/pmon $ gcc -o test test.c権限がないと、例外が発生するのも確認。
pi@rasp4b4g:~/pmon $ ./test
Illegal instruction
pi@rasp4b4g:~/pmon $ sudo insmod ./pmuser.ko無事動作確認が取れました!
pi@rasp4b4g:~/pmon $ ./test
time = 94, x = 500500
pi@rasp4b4g:~/pmon $ ./test
time = 105, x = 500500
pi@rasp4b4g:~/pmon $ ./test
time = 94, x = 500500
pi@rasp4b4g:~/pmon $ sudo rmmod pmuser