OrangePI PC を久々に触る IoTでUSB温度測定に利用してみる

IoTで、USBセンサー温度計から取得した温度をFTPで記録していくというシステムを作成してます。

古いパソコンを利用して構築して、うまく動く事を確認しました。

ネットワーク対応温度センサーを簡単に作る!

これを発展させ、施設の一角に設置したいという要望が出てきましたので、昔遊んでいたOrangePI PCで、構築し直そうかなぁと、設定を見直しながらやってみてます。


 

初期設定はだいぶ分かりやすくまとめていて
https://www.techlive.tokyo/orange/Linux03.html

こんな感じでできます。今回は、デスクトップマネージャが必要ないので、Debian_jessie_mini.img.xzを利用しました。
https://drive.google.com/drive/u/0/folders/0B1hyW7T0dqn6fndnZTRhRm5BaW4zVDVyTGlGMWJES3Z1eXVDQzI5R1lnV21oRHFsWnVwSEU

設定が完了すると、

初期パスワード
ユーザ名:orangepi
パスワード:orangepi

でログイン可能です。rootのパスワードもorangepiです。極力最低限で設定が済むように不要アプリケーションは導入しません。

基本的なアプリをインストール

apt-get install vim ssh

source.listをjpに書き換え

# cat /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie main contrib non-free

deb http://ftp.jp.debian.org/debian/ jessie-updates main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie-updates main contrib non-free

deb http://ftp.jp.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie-backports main contrib non-free

 

時刻を日本表示に変更

root@OrangePI:/home/orangepi# date
Mon Mar 19 04:41:53 UTC 2018
root@OrangePI:/home/orangepi# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
root@OrangePI:/home/orangepi# date
Mon Mar 19 13:41:56 JST 2018

キーボードの日本語対応

dpkg-reconfigure keyboard-configuration
Generic105(intl)
Japanese
Japanese
The default
No Compose

ま、基本的にSshで利用するのでキーボードも変更しなくてもいいかもですが、一応USBキーボードを接続する事も考えてキーボードレイアウトを日本語にしておきます。

電源ボタンが押されたらシャットダウンする

apt-get install acpi

あれれ、きかない。このボタン私のOrangePIは壊れてしまっているようで、このボタン何の反応もしません。ちなみに、shutdownコマンドを走らせたあと電源ボタンを押して起動もしてきません。

ACアダプタを抜き差しすると電源入ります。うむー。単に私のが壊れているだけなのか。OragePIがおかしいのか謎です。ま、深い事は気にしないで先に進めたいと思います。

USB温度計準備

USB温度計をOrangePI PCに差し込みます。

dmesg
[ 730.100124] usb 7-1: new low-speed USB device number 2 using sunxi-ohci
[ 730.335152] generic-usb 0003:0C45:7401.0002: input,hidraw1: USB HID v1.10 Keyboard [RDing TEMPerV1.4] on usb-sunxi-ohci-1/input0
[ 730.410985] generic-usb 0003:0C45:7401.0003: hiddev0,hidraw2: USB HID v1.10 Device [RDing TEMPerV1.4] on usb-sunxi-ohci-1/input1

これはちゃんと認識してます。

makeするのに必要なアプリを取得
apt-get install build-essential libusb-0.1-4 libusb-dev git

git hubから温度測定ソースを取得
git clone https://github.com/bitplane/temper.git

temper# vi temper.c
して、時刻表示部分を書き換え

if (!((tempc > -0.0001 && tempc = 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

mkdir /usr/local/sbin/temperature
mv temper /usr/local/sbin/temperature/
chmod u+s /usr/local/sbin/temperature/temper

ftpアップロード

ftpup.shを作成(ftpアップロードスクリプト)
#!/bin/sh

ftp -n <> /usr/local/sbin/temperature/ondo.txt
1 * * * * * /usr/local/sbin/temperature/ftpup.sh

ntpの設定

測定時間がずれないようNTP設定もして時間を調整しておく

apt-get install ntp

root@OrangePI:/usr/local/sbin/temperature# ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
*172.104.91.26 157.7.208.12 3 u 20 64 1 23.104 3.889 2.031
108.61.181.39 10.84.87.146 2 u 19 64 1 23.296 3.858 0.508
172.104.105.31 157.7.235.92 3 u 18 64 1 22.897 4.363 0.291
129.250.35.251 249.224.99.213 2 u 17 64 1 15.370 4.931 0.335

ntpq -pnでエラー

なんだか、再起動したらntpが動作しなくなっているようです。

# ntpq -pn
ntpq: read: Connection refused

で、ntpd start しようと思ったら

# /etc/init.d/ntpd start
bash: /etc/init.d/ntpd: No such file or directory

はて、何が起こったんだろう。

 /etc/init.d/ntp status
● ntp.service - LSB: Start NTP daemon
   Loaded: loaded (/etc/init.d/ntp)
   Active: active (exited) since Tue 2018-03-20 00:48:51 UTC; 22min ago

Jan 01 19:40:37 OrangeTemperature ntp[482]: Starting NTP server: ntpd.
Mar 20 00:48:51 OrangeTemperature systemd[1]: Started LSB: Start NTP daemon.

あれ、UTCに戻ってる

# date
Tue Mar 20 01:12:52 UTC 2018

日本時間表記に変更

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# date
Tue Mar 20 10:13:52 JST 2018
# ntpq -pn
ntpq: read: Connection refused
h# /etc/init.d/ntp start
[ ok ] Starting ntp (via systemctl): ntp.service.

なんだかうまくいかないのでリスタート

# /etc/init.d/ntp restart
[ ok ] Restarting ntp (via systemctl): ntp.service.

 

原因はこれっぽい

Jan  2 05:14:42 OrangeTemperature ntpd[524]: unable to bind to wildcard address 0.0.0.0 - another process may be running - EXITING

Jessieでは

/etc/network/if-up.d/ntpdate

で、ntpdateが動くが、

Jan  2 05:14:42 OrangeTemperature ntpdate[381]: sendto(www6339uj.sakura.ne.jp): Operation not permitted
Jan  2 05:14:42 OrangeTemperature ntpdate[381]: sendto(einzbern.turenar.xyz): Operation not permitted
Jan  2 05:14:42 OrangeTemperature ntpdate[381]: sendto(45.77.9.126.vultr.com): Operation not permitted

時刻同期に失敗し、ntpdateが動いたままになってしまうのか、

another process may be running

というメッセージが出る。

debianのバグリポート

Screenshot of bugs.debian.org

掲示板

Screenshot of askubuntu.com

を参考にすると、ntpdateスクリプト2行目に exit 0する事で

 cat /etc/network/if-up.d/ntpdate
#!/bin/sh

exit 0
set -e

実質ntpdateを起動時に動かないようにする事で対処するって事ですね。一応この対処で私の環境ではntpが動き始めたので良しとします。起動時ntpdateで強制的に時刻合わせができないのがちょっと残念ですが。

syslogが出てない

ntpの設定を調整するにあたって、syslogが出ていないことがわかったので、rsyslogを入れました。

# apt-get install rsyslog

 

これでOrangePIを利用した省スペース温度測定IoT機器のセットアップ完了です。

関連コンテンツ