本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
便利なUSB温度センサー
温度を計測してリアルタイム更新、webで表示するシステムが欲しいと言われました。なんか、そんなシステムを展示会で見たことがあったので、問い合わせてみたところ、カスタマイズ費用が必要だとか。
予算2,000円以内
それだとお金かかるなぁと思いながら、んじゃ、なんか自作してみますかとやってみました。
こんな感じで実現しました。パソコンの熱をじかに拾わないように、USBの延長ケーブルをつけています。
低スペックPCでOK
パソコンはPenMの10年以上前に購入した機械です。新たに新品パソコンを買うのはもったいない。ほとんど価値がない捨ててもいいようなパソコンです。IoTで温度計測FTPでファイルアップロードするくらいだったら、十二分な性能を持っています。
パソコンの選定
パソコンのスペックは必要ありません。とりあえず動けばOKというレベルです。できたら眠っている古いパソコン、友達からもらえるようなパソコンで済ませましょう。
OS選定とインストール
OSはDebianを選択
やっぱりLinuxが利用できるっていいですよね。相当古いVAIO VGN-Y90PSYを引っ張り出してきて、Debian Jessieをインストールしました。もう捨てるしかないっていう10年以上前に購入したパソコンなのでとりあえず原価0円です。
Windowsも優れたOSだと思いますが、用途によってLinuxも使えるようになっていた方がいいです。それから、本当はStrechを利用しようと思ったのですが、ネットワーク細部の設定が変わっていて使い勝手が、、、分からない。
単にVAIO VGN-Y90PSYと相性が悪かっただけなのかもしれないけど。Jessieをインストールしてもネットワークが利用できない事態に遭遇しました。なぜなんだろうnetインストールはうまくいくのに、ゲートウェイだけ設定されないようです。仕方ないので、ゲートウェイだけ手動で設定しました。なんか変な感じです。
Jessieなら
routeの確認
route
default routeの追加
route add default gw 192.168.0.254
Strechなら
routeの確認
ip route
default routeの追加
ip route add default via 192.168.0.254
SSHサーバと、標準ツールのみインストールします。デスクトップ環境は必要ありません。
USB温度計の購入インストール
USB thermometer-528018
USB温度計を準備します。
amazonで980円のUSB温度計測装置と、10年以上前に購入した古いパソコンを持ち出して作ってみたら、チョー簡単に温度計測ができました。
おもむろにDebianを起動して、USBを差し込むと
[ 268.384070] usb 3-2: new low-speed USB device number 2 using uhci_hcd [ 268.560075] usb 3-2: New USB device found, idVendor=0c45, idProduct=7401 [ 268.560087] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 268.560096] usb 3-2: Product: TEMPerV1.4 [ 268.560104] usb 3-2: Manufacturer: RDing [ 269.239310] input: RDing TEMPerV1.4 as /devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.0/input/input10 [ 269.241652] generic-usb 0003:0C45:7401.0001: input,hidraw0: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-0000:00:1d.1-2/input0 [ 269.254702] generic-usb 0003:0C45:7401.0002: hiddev0,hidraw1: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-0000:00:1d.1-2/input1
ちゃんと認識してる。
temperアプリをmake
そして、これを利用するために、アプリをmakeします。
makeするために必要なアプリを入手します。
apt-get install build-essential libusb-0.1-4 libusb-dev git
CDも付属してますがプレーヤーを持ち出すのも面倒だったので、gitで公開されているソースコードを取得しました。
#git clone https://github.com/bitplane/temper.git Cloning into 'temper'... remote: Counting objects: 73, done. remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 73 Unpacking objects: 100% (73/73), done.
日付時刻表示を日本のフォーマットへ
# cd temper temper# vi temper.c
以下2行のように書き換えます
utc = localtime(&t);
strftime(dt, 80, “%Y-%m-%d %H:%M:%S”, utc);
書き換えるとこのようになります。
if (!((tempc > -0.0001 && tempc < 0.0001) || passes >= 4)) { /* Apply calibrations */ tempc = (tempc * scale) + offset; struct tm *utc; time_t t; t = time(NULL); utc = localtime(&t); char dt[80]; strftime(dt, 80, "%Y-%m-%d %H:%M:%S", utc); printf("%s,%f\n", dt, tempc); fflush(stdout); return 0; }
いよいよmake
temper# make gcc -Wall temper.c pcsensor.c -o temper -lusb pcsensor.c:50:18: warning: ‘reqBulkLen’ defined but not used [-Wunused-const-variable=] const static int reqBulkLen=8;
変な警告出たけど、気にしないで進めます。
そしてできたbinファイルを実行権限をつけて移動します
# mv temper /usr/local/bin/ # chmod u+s /usr/local/bin/temper
temper実行
計測はこんな感じです。
temper.cを書き換えない場合はこのような表記になります。
/usr/local/bin/temper 06-Mar-2018 08:24,21.588518
temper.cを書き換えると日本でも見やすい表記になります
# /usr/local/bin/temper 2018-03-07 15:17:00,21.267050
この値を、ftpかなんかで、次回は公開サーバにもっていこうと思います。
980円でIot
このUSB温度計の原価ってどれくらいなんでしょうね。送料込みで980円ですから。
FTPでファイルアップロード
ftpコマンドのインストール
# apt-get install ftp パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが新たにインストールされます: ftp アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。 61.5 kB のアーカイブを取得する必要があります。
手動で温度ファイルをアップロードする
#ftp ftp> open ftp.hanako.jp Connected to ftp.hanako.jp. 220 FTP Server ready. Name (ftp.hanako.jp:hanako): hanako 331 Password required for hanako Password: 230 User hanako logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> put /home/hanako/ondo.txt /ondo.txt local: /home/hanako/ondo.txt remote: /ondo.txt 227 Entering Passive Mode (150,95,240,39,254,35). 150 Opening BINARY mode data connection for /ondo.txt 226 Transfer complete 960 bytes sent in 0.00 secs (13.4636 MB/s)
アップロードシェルスクリプトを作成
# cat ftpup.sh #!/bin/sh ftp -n <<END open ftp.hanako.jp user hanako pass_word put /home/hanako/ondo.txt /ondo.txt END
CRONに仕込む
これをクローンに仕込んでしまえば完成です。temperを毎時0分に実行、温度を記録。毎時1分にftpでwebサーバにアップロードです。
0 * * * * /usr/local/bin/temper >> /home/hanako/ondo.txt 1 * * * * /home/hanako/ftpup.sh
Orange PI PCで設定
最終的に、温度を測りたい設置場所はLANは来ているけど、スペースはそんなに確保できないという場所でした。そこで、むかーし購入したOrangePI PCを引っ張り出してきて設定・設置。手のひらサイズの温度計測システム完成です。
Orange PIでの設定はこちらで
Orange PIとはから初期設定まで、こちらでご覧いただけます。
webで日付・温度・時刻を自動更新
web上で表示する時に日付、温度、時刻が自動的に更新されていく仕組みにします。
# cat ftpup.sh #!/bin/sh # 日付時刻更新型温度アップロード /usr/local/sbin/temperature/temper | awk '{print $1}' > ondo.txt /usr/local/sbin/temperature/temper | awk '{print $2}' | awk -F, '{print $1}' >> ondo.txt /usr/local/sbin/temperature/temper | awk -F, '{print $2}' >> ondo.txt ftp -n <<END open ftp.hanako.jp user hanako ******* put /usr/local/sbin/temperature/ondo.txt /ondo.txt END
こんな感じでawkしてテキストはこのように表示されます
2018-10-19 11:21:03 21.331343
HTML化して埋込
さらにHTML化してうめこみます。
#!/bin/sh #温度用 #/usr/local/sbin/temperature/temper | awk '{print $1}' > /usr/local/sbin/temperature/digi.txt #/usr/local/sbin/temperature/temper | awk '{print $2}' | awk -F, '{print $1}' >> /usr/local/sbin/temperature/digi.txt #/usr/local/sbin/temperature/temper | awk -F, '{print $2}' >> /usr/local/sbin/temperature/digi.txt /usr/local/sbin/temperature/temper | awk '{print $1}' | awk -F- '{print "<p>"$1"年"$2"月"$3"日<br>"}' > /usr/local/sbin/temperature/digi.html /usr/local/sbin/temperature/temper | awk '{print $2}' | awk -F, '{print $1}' | awk -F: '{print $1"時"$2"分<br>"}' >> /usr/local/sbin/temperature/digi.html /usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print $1"."substr($2,1,1)"℃</p>"}' >> /usr/local/sbin/temperature/digi.html ftp -n <<END open hanako.or.jp user hanako ********* put /usr/local/sbin/temperature/digi.html /digi.html END
awkで欲しいところだけ取って、HTMタグを一緒に記載します。
-4℃以下が計測できない
運用をしていたら、とっても寒い日に 263.4441℃と表示され、なんじゃこりゃっていう状態に。調べたら、この温度計-4℃以下は計測できない仕様。なので、シェルスクリプトを書き換えました。
#!/bin/sh #温度用 #/usr/local/sbin/temperature/temper | awk '{print $1}' > /usr/local/sbin/temperature/digi.txt #/usr/local/sbin/temperature/temper | awk '{print $2}' | awk -F, '{print $1}' >> /usr/local/sbin/temperature/digi.txt #/usr/local/sbin/temperature/temper | awk -F, '{print $2}' >> /usr/local/sbin/temperature/digi.txt /usr/local/sbin/temperature/temper | awk '{print $1}' | awk -F- '{print ""$1"年"$2"月"$3"日
"}' >> /usr/local/sbin/temperature/digi.html; fi; done; ftp -n <
"}' > /usr/local/sbin/temperature/digi.html /usr/local/sbin/temperature/temper | awk '{print $2}' | awk -F, '{print $1}' | awk -F: '{print $1"時"$2"分
"}' >> /usr/local/sbin/temperature/digi.html /usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print $1}' |while read a;do if test $a -gt 100;then echo '-4℃以下' >> /usr/local/sbin/temperature/digi.html; else /usr/local/sbin/temperature/temper | awk -F, '{print $2}' | awk -F. '{print $1"."substr($2,1,1)"℃どのように書き換えたかはこちらに詳細を。ちゃんと整理したコード体系にしないとなぁと思いつつ、いつも時間がないので、とりあえず的な書き方が積みあがっちゃいました。(-_-;)
iframeで埋め込む
HTML側では、iframeで埋め込みました。外部HTMLファイルを指定して、自分のサイト上に表示します。
<iframe src="https://hogehoge.org/digi.html" width="~" frameborder="0" scrolling="no"></iframe>HTMLへの埋め込み方はいろいろあるので、こちらもご参考に