Skip to main content

pi で遊んでみる (MRTG)

MRTG

pi に限らず普通にLinuxで使える話です。
MRTGをRaspberry pi上で動かし続けたのがSDカードの寿命を縮めたのかもしれないなと反省中。
もしかしたらSDカードの寿命を縮める処理かもしれません。5分毎に書き込むのは多い処理ですね。
他のちゃんとしたサーバで動かした方が良かったのかもしれない。

懲りずにもう一度構築してみました。書き込み先をRAMディスクにしてSDカードへの書き込みを減らしてみました。

http://netlog.jpn.org/r271-635/2013/04/raspberry_pi_mrtg.html

syslogにcron起動ごとのメッセージを書き込まないようにする。

 

バックアップは/run/shm/mrtg (/var/www/mrtg)以下をがさっと取っておけばいいようです。logファイルだけでもいい。/etc/mrtg.confもバックアップしましょう。

MRTGはルータ等の通信機器のログをグラフにするために作られています。そのため温度等他のものに流用しようとするといろいろと不具合があります。オプションをフル活用して対応します。
以下の様な設定でCPU温度と室温をグラフにしてみました。

ちゃっちゃっとファイル名とかパス名を編集するシェルスクリプトの小ネタ。
普段使わないからすぐ忘れる。

http://dharry.hatenablog.com/entry/20090211/1234290856

pi で遊んでみる (マウント)

各種ディスクのマウント

USBメモリ

USBメモリにコピーしたりバックアップしたり。ポピュラーな方法ですね。
手作業でやるなら、
$ tail dmesg
$ sudo mkdir /media/usb
$ sudo mount -t vfat /dev/sdb1 /media/usb/

Windowsファイル共有(sambaクライアント)

家の中のNASをマウントして使用する。
$ sudo mkdir /media/nas
$ sudo chmod 777 /media/nas
$ sudo mount -t cifs -o username=ahirustudio,password=password //192.168.0.100/share/raspi /media/nas

webdavによるクラウドサービスの利用(box.com)

box.com のサービスを使った方法で5GBまでなら無料らしいです。
英語斜め読みでもコマンド打っていけばなんとかつながるはずー。
https://www.box.com
http://www.sbprojects.com/projects/raspberrypi/webdav.php
うちではncftp(ncftpput)でサーバにあげたりしています。

逆にRaspberry piをファイルサーバにする方法もありますが、普通にNAS買ってきた方がいいですよ。

バックアップ

Linuxなのでddとrestoreでいいのでしょうが、SDカード運用の場合はちょっと?です。
OSが頻繁にアップデートするので、その度に作り直すのもそれはそれで勉強としては悪く無いかなと思っています。

俺バックアップ

以下のファイルをtarして保存。

/home/pi/bin
/home/pi/etc
/home/pi/var
/var/www
/etc/rc.local
/etc/mrtg.conf
/run/shm/mrtg/*

俺手作業リストア

rasp ダウンロード

http://www.raspberrypi.org/downloads

(Raspbian を使っている)

SDカード作成(Mac)

$ df -h
$ sudo diskutil unmount /dev/disk3s1
$ sudo dd bs=1m if=2013-02-09-wheezy-raspbian.img of=/dev/rdisk3
$ sudo diskutil eject /dev/disk3s1

Raspiをテレビにつないで起動。

Raspi configで各種設定。
startxしてWi-fi設定。
IPアドレスは以下。固定IPにした方がいいかも。うちではDHCPだけどMACアドレスで固定。
hostname -I

SSHで接続

あとはコピペでコマンド実行。

$ sudo apt-get update
$ sudo apt-get -y upgrade
$ sudo apt-get -y install davfs2 fswebcam imagemagick lighttpd bc mrtg vim ttf-mscorefonts-installer ncftp libi2c-dev

(10分以上かかるかも。途中でボタンを押す必要がある。)

エディタはnanoよりvimの方が慣れているのでcrontabのエディタを変更します。
raspberry pi は次のコマンドで変更するそうです。
$ sudo update-alternatives --config editor

ユーザ(pi)のディレクトリの整理

bin と etc と var を作っておく。

$ mkdir bin var etc

/var/www/ のオーナをpiに変更。

$ sudo chown pi:pi /var/www/ /var/www/*

vi /etc/rc.local

## RAM Disk
$ sudo RAMDISK="/run/shm/wk"
$ sudo mkdir  ${RAMDISK}
$ sudo chmod  777  ${RAMDISK}

$ sudo ln -s /run/shm/wk /var/www/wk

バックアップしたファイルを戻す。

USBメモリ復旧

OpenMediaVaultの起動ディスクに使っていたTranscendの安USBメモリは3ヶ月後に死んだ。
起動ディスクとしてのUSBメモリの運用は読み書きが多いので薦められないと言われていたものなのでTranscendの品質の問題ではない。これはUSBメモリの仕組み上しょうがないものである。
死んだと言っても実際にどうなったかというと、USBメモリとしてハードウエアの認識(マウント)はするが中身が空。フォーマットをしようとしても書き込み不可になってしまいどうにも出来ない状態になってしまった。まったく使えないUSBメモリになったわけだ。
当時、修復ツール等を試してみたが書き込み禁止のメッセージが出て何もできなかった。
安物だったのでそのままジャンク箱へ入れた。これが二年くらい前の話。

最近になってTranscendのサイトにある修復ツール(JetFlash Online Recovery)をなんとなく試してみた。
使ってみると途中で固まってしまう。やっぱダメかと思ったがそのまま放置していたらいつの間にか処理が完了していた。30分くらい放置していたのではないかと思う。
そうしたら普通に読み書きが出来るUSBメモリになった。
直った?ファイルを書き込んだり読み出したりできている。

一度酷使したメモリなので重要な用途に使う気は無いが、一時的に使うUSBメモリとして使おう。少しうれしいですね。Transcendの好感度が上がった。
Transcend JetFlash 300 4GB TS4GJF300 (安物)

ちなみに同時期に同じ使い方をしてダメになったよく知らないブランドのUSBメモリも修復を試してみたがTranscendじゃないのでダメでした。こっちはただのゴミのままです。

マジで使うUSBメモリのおすすめはSanDisk Extreme USB3.0 (SDCZ80) だけど、日常使いのものならば修復ツールが優秀そうなTranscendが安くていいかも。Transcend より安いものもあるが、100円くらいの差ならTranscendがよくね?という話。
(個人の感想です)

pi で遊んでみる (GPIO)

DS18B20 温度センサーの追加。

ds18ledpicRaspberry Pi にはGPIOがあるのが特徴です。ここにいろいろなものを接続することができます。普通のPCではこれができません。
自作のものをつけるので基板が壊れる可能性があるのですが、Raspberry Piなら壊れても損害額は小さくなります。これがいいところですね。

今回は簡単に使えて、わかりやすいセンサーを試してみました。温度センサのDS18B20 (秋月で300円。高い方だな。) です。温度をデジタルの数値で返すセンサなので調整不要なところがいいですね。

ds18led今回はDS18B20とLEDをGPIOにつけるためにこんな風にハンダ付けしてまとめました。
本体から離すためにコードの先についているのが温度センサです。
LEDは二色のLEDを使っています。(手元に余っていたので)
図は Raspberry Pi の基板にさした状態を上から見た図です。写真の反対側から見たものになります。緑と赤のLEDがそれぞれGPIO17と27に繋がっています。
rootではないと作業が出来ない場合があるのでそのときはsudo -iでrootになってしまうのも手です。

LED点灯

LEDの点滅は以下のようにできます。

## Set up GPIO 17,27 and set to output
$ echo "17" > /sys/class/gpio/export
$ echo "27" > /sys/class/gpio/export
$ echo "out" > /sys/class/gpio/gpio17/direction
$ echo "out" > /sys/class/gpio/gpio27/direction

## Write output
$ echo "1" > /sys/class/gpio/gpio17/value
$ echo "1" > /sys/class/gpio/gpio27/value

## Write output
$ echo "0" > /sys/class/gpio/gpio17/value
$ echo "0" > /sys/class/gpio/gpio27/value

## Clean up
$ echo "17" > /sys/class/gpio/unexport
$ echo "27" > /sys/class/gpio/unexport

ledtest.sh (シェルスクリプト)

#!/bin/sh
## Set up GPIO 17,27 and set to output
echo "17" > /sys/class/gpio/export
echo "27" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
echo "out" > /sys/class/gpio/gpio27/direction

## Write output...
echo "1" > /sys/class/gpio/gpio17/value
echo "0" > /sys/class/gpio/gpio27/value
sleep 2
echo "0" > /sys/class/gpio/gpio17/value
echo "1" > /sys/class/gpio/gpio27/value
sleep 2
echo "1" > /sys/class/gpio/gpio17/value
echo "1" > /sys/class/gpio/gpio27/value
sleep 2

## Write output 0 
echo "0" > /sys/class/gpio/gpio17/value
echo "0" > /sys/class/gpio/gpio27/value

## Clean up
echo "17" > /sys/class/gpio/unexport
echo "27" > /sys/class/gpio/unexport

これでLEDが点いたり付いたりします。
単純なことですが、これを普通のパソコンでやるのは難しいし、配線を間違えてマザーボードを壊す事などを考えるとこのRaspberry pi でこういうことが出来ることの便利さを感じます。
LEDの部分をブザーにしたら音が鳴ります。モータにしたら回転します。リレーにすれば家電が動きます。赤外線LEDをつければリモコンが動きます。
「ロボット」というものはこういうもので出来ているわけです。

まずはLEDを点滅できるというのをテストしてみました。
これだけでもサーバで何かをチェックして点灯させるという仕組みを作れば便利です。

gpiozero

最近はスクリプトはpythonで書くようなので、GPIO用のモジュールがすでにインストールされていました。
GPIO17のピンにつないだLEDを点滅させるのは以下のスクリプトを実行です。

from gpiozero import LED
from time import sleep

led = LED(17)

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)

温度計 (DS18B20)

温度センサをつけると室温が測れるようになります。意外と自宅の室温のログを取る道具が無いものなので便利です。夏はサーバ周りの温度をチェックしていました。これで留守の間、エアコンを止めている間の温度がわかります。ペットを飼っている人にも便利でしょう。
今回は秋月で買ってきた温度センサを使ってみます。このセンサの使い方は英語ですが詳しく書いてあるものがありました。アメリカのパーツ屋さんの資料です。
http://learn.adafruit.com/downloads/pdf/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing.pdf

2016年3月に以前書いていた通りに作業をしようとしたらうまく認識してくれません。
少し試行錯誤してみました。

$ sudo echo dtoverlay=w1-gpio-pullup=on,gpiopin=4 >> /boot/config.txt
$ sudo modprobe w1-therm
$ ls /sys/bus/w1/devices/
28-000003b716fb  w1_bus_master1

次のようなコマンドで温度が表示されます。
これは摂氏(℃)で表示されるので使いやすいのですが、マイナスの値は使用できません。そのためマイナスの温度が無さそうな室温を測るのに使ってみました。

$ sudo modprobe w1-gpio
$ sudo modprobe w1-therm
$ ls /sys/bus/w1/devices/
28-000003b716fb  w1_bus_master1
$ cat /sys/bus/w1/devices/28-000003b716fb/w1_slave
71 01 4b 46 7f ff 0f 10 56 : crc=56 YES
71 01 4b 46 7f ff 0f 10 56 t=23062

結果の一行目がYESの時の二行目のt=の値が温度です。1000倍した値が出ています。
センサが一個だけならば cat /sys/bus/w1/devices/28-*/w1_slave でもいいですね。
テキストで値が取れればあとは適当に編集すればいろいろと使えます。

CPU温度

CPUの中に温度センサがすでに入っているのでCPUの温度は知る事ができます。次の様に表示できます。

cat /sys/class/thermal/thermal_zone0/temp

こんなスクリプトを作ってみました。
温度センサの値とCPU温度を表示します。これはあとでMRTGで使います。

#!/bin/sh
#
temp1=0
temp2=0
temp1max=0
temp2max=0
temp1min=99999
temp2min=99999
wk1=0
wk2=0
temp1path="/sys/bus/w1/devices/28-000003b716fb/w1_slave"
temp2path="/sys/class/thermal/thermal_zone0/temp"
# function
cputemp()
{
  wk=`cat ${temp2path}`
  return $wk
}
roomtemp()
{
  wk=`cat ${temp1path}`
  yes=`echo ${wk} | grep -c "YES"` 
  if [ ${yes} -eq 1 ];then
    tmp=`echo ${wk} | grep "t\=" | sed -e s/^.*t=// `
    return ${tmp}
  else
    return 0
  fi
}
# main
for i in 0 1 2 3 4
do
  sleep 0.5
  cputemp
  temp1=$?
  roomtemp
  temp2=$?
##  echo $temp1 $temp2

  if [ $temp1 -le $temp1min ];then
    temp1min=$temp1
  fi
  if [ $temp1 -ge $temp1max ];then
    temp1max=$temp1
  fi
  if [ $temp2 -le $temp2min ];then
    temp2min=$temp2
  fi
  if [ $temp2 -ge $temp2max ];then
    temp2max=$temp2
  fi
  wk1=`expr ${wk1} + $temp1`
  wk2=`expr ${wk2} + $temp2`
done
#
temp1=`expr \( ${wk1} - $temp1min - $temp1max \) / 3 `
temp2=`expr \( ${wk2} - $temp2min - $temp2max \) / 3 `
echo $temp1
echo $temp2
echo "0"
echo "Temp"
##__END__

(2014/12/1)
(2016/3/21)

Pebbleのメモ

http://getpebble.com

Pebbleは「スマートウォッチ」と言われる、2013年にこれから流行るんじゃないかと思われているガジェット。
スマートフォンと連携して情報を表示する腕時計です。
小型のスマートフォンのようなところもあり、アプリケーションが動作するあたりからスマートウォッチと呼ばれたりします。
加速度センサーが使われているので、手首をくいっとひねるとバックライトが点灯するなんて小技があるのが「スマート」な感じでしょうか。

 

実際はどうなのよ

大きさはちょっと大きめの腕時計。プラスチックなので高級感はまったくありません。
バッテリーはだいたい一週間はもちます。これはこの手のデジタルガジェットとしては優秀な方だと思います。
内蔵フォントには漢字が無いので日本語表示はできません。そのため、電話がかかってきた時やSMSを受信した時には「□□□ □□□」と表示されるので魅力は半減です。
iPhoneのミュージックプレイヤーの操作もできるのですが漢字の曲名が表示できないので使いづらいのが残念です。

良い点

  • 意外とバッテリーがもつ。約一週間もちます。過去のいろいろなモバイルガジェットを考えるととても優秀。
  • 防水。(水没等は試していないですけど)
  • シンプルなデザイン。小さい/軽い。(アメリカ人には小さすぎないのか心配)
  • 腕をひねると加速度センサによって点灯するバックライト。
  • 複数セットできるアラーム。
  • iPhoneへの電話/SMS/メールの着信が表示される。
  • 普通に「ちょっと変わったデジタル時計」として使えます。

欠点

  • 漢字が使えない。着信/SMSが文字化け。Musicの曲名も文字化け。
  • アラームがバイブのみで音が出ない。
  • ボタンが固い。
  • アプリを使う/作るには少なすぎるボタン。
  • メモリが少ない。(数MBかも)

その他

  • 充電が専用ケーブルなのが欠点ではあるけれど、それは防水との引替えなので悪くない。
  • USB専用充電ケーブルは充電のみで、通信はすべてBluetoothです。ファームのアップデートも無線。
  • 画面がE-Paperじゃなくて液晶じゃないか疑惑がある(笑)。電池が切れると白く(グレーというか)なるので液晶だと思います。グレースケールではないためフォントのジャギーが気になります。
  • 近年のApple製品を見慣れるとジャギーのあるフォントはちょっとありえない感じ。小さめのフォントはきたなく見えてしまいます。
  • バッグの中や、充電中のiPhoneへの着信がわかるので意外と便利です。仕事中はiPhoneを机の上に置いたりしているので。しかし漢字表示ができないのでかかってきたのがわかるだけなのが残念です。SMSも同じく。
  • ミュージックの操作も文字化けで使えません。洋楽だけの方ならまぁいいかもしれません。前後の曲に移動できるだけなのでこれもバッグやポケットの中のiPhoneを取りださずに現在の曲名が確認できるという感じでしょうか。シャッフル再生の時に便利そうです。

スマートウォッチ

App Storeから httpebble をiPhoneにインストールして、pebbleの方に Futura Weather をインストールしました。
数分たつとpebbleに天気と気温が表示されてます。なんか笑えます。
httpebbleの方で勝手に現在地情報を取って気象情報サイトからデータを引っ張ってきます。httpebbleにはほとんど操作する部分が無く、「Connect」ボタンしかないっす。
pebbleには他にも天気表示アプリがありますが、これがシンプルで、気温も摂氏(°C)なのでいい感じです。アメリカのアプリだと華氏(°F)のものが多くて日本人向きではないんですよね。
全然当たらない天気予報ですがいいんです。スマートウォッチっぽいから。かなり微妙です。

91 weather というpebbleのフェイスもあるのですが、これはうまく天気表示ができませんでした。時刻と天気の他に着信数、SMS数、日の出、日の入なども表示できるようなのですが。なにかエラー処理が違うのかな?
「CW27」という表示が意味がわからなかったのですが、「Calendar Weeks」という値で今週が今年の何番目の週かという表示です。日本ではあまり使われない値ですね。

いまのところスマートウォッチのキラーアプリのようなものは出てきていないようです。ちょっと前の携帯電話の背面液晶程度のものですね。とにかく漢字表示ができない点がマイナスです。

まだまだ開発中で機能の追加が続いています。2013年8月にiOSとの連動でメールの表示ができるようになりました。(andoroidは以前から)
(2013/07/08)

(2013/08/05)

追記

「Smartwatch Pro」というiOSアプリをインストールしてみました。
iPhoneのカレンダー情報、リマインダー、Twitter等と連携します。
しかし、iPhoneとpebbleの連携はしばらくたつと切れてしまうんだよなぁ。httpebbleもそうなんだけど、メール等の他の通信があると切れてしまう場合が多いような感じ。
なかなか上手くいきませんね。

(2013/09/02)

 

Pebble その後

2013年11月のPebbleの話。

Firmware 1.13 がリリースされました。
iOS の通知に対応したのがポイント。メールもtwitterも表示されます。相変わらず日本語は未対応ですが。

そして次期バージョンのFirmware2.0の話が出てきました。
Pebble SDK Ver.2 と Firmware 2.0(Beta1) が用意されています。BETA2になったら入れてみようと思います。
さらに高機能になるようです。

しかし問題はそれなりにありそうです。
FW2ではWatchFaceは新バージョン用のものが必要です。これまでのものは使えないらしい。
また、本体メモリサイズの問題から日本語フォントが載る可能性は低いようです。

韓国語改造ファームがあるような話も見られますが日本語対応はあまり期待しないでおこう。

(2013/11/15)

Pebble さらにその後

2013年12月のPebbleの話。

Firmware 2.0を入れてみました。
まだまだBeta4ですが使いやすくデザインが変更されていると思います。
開発ツールも使えています。

(2013/12/30)

Pebble さらにその後

2014年11月のPebbleの話。
Firmware 2.8
安定して稼働中です。ラテン文字対応、絵文字対応が少しづつ進んでいますが日本語は相変わらずダメですね。
無理やり日本語の一部だけを表示できるように改造している方も出てきました。やはりメモリサイズのためかフォントが載らないようです。
Appleも半年後にはスマートウォッチを発売開始するということで、それに合わせたのか他社からもたくさん出てきました。しかしどれもバッテリーがもちません。

(2014/11/24)

Maker Fair Tokyo 2014

東京ビッグサイトで行われた Maker Fair Tokyo を見てきました。

ビッグサイトの西館の上という、コミケットで言えば企業ブースの場所です。昔はこのイベントは東工大の体育館でやっていたのだからだいぶ規模が大きくなったものです。
今回も子供と女性の多いイベントで、非常に不思議な空間ですね。Makerはかっこいいのか?

個人で出展している人の中に大学の後輩の名前があったのでなんとなく行ってみた。
25年ぶりに会うのだけどお互い見た目が変わってないのがなんだかおかしい。
謎な機械を作っていた。

そして、いつも出ている今江科学の今回のネタはスタートレックの宇宙船型ラジコン潜水艦。クリンゴン語で書かれたチラシを渡された(読めない)。
推進は水中モーターの代わりに電動灯油ポンプをバラして使っていた。水回りの処理を作るときには安くて効率よくできるらしい。簡易ポンプとしてはかなり優秀な製品のようだ。バック用のノズルもおもしろくできてる。

興味深かったのはマクニカのブースで展示していたBluetoothモジュール。技適を取ったモジュールが980円という激安だった。これならおもちゃとして何か遊べそうだ。

お土産としてはスイッチサイエンスにRaspberry Pi B+用のケースがあったので買って来た。本体はB+が出た時に買ったのだけどケースがまだ出ていなかったのだ。これできちんとケースにおさまった。

明和電機の社長が会場内を普通にウロウロしているのが面白い。

pebble の watchface を作ってみる

pebbleの開発情報は英語だけですがあります。
もともとそれほど複雑な機能は無いので英語でもなんとかなりそうです。
https://developer.getpebble.com/

サンプルを元にpebble の watchface を作ってみました。

デジタル時計のサンプルとしては一番シンプルなclassioがわかりやすかったですね。コメント含めても60行しかありません。指定した座標に時刻を表示するだけです。
ソースを見ると時刻をフォーマットして返すAPIがあるのでそれで文字列を受け取って画面に表示するだけでいいようです。これはとても簡単だ。
サンプルは以下の一行で一気に取ってきておしまいにしていました。これで「12:34:56」というような文字列が取れます。
strftime(time_text, sizeof(time_text), "%T", tick_time);r /> アナログ時計の場合は三角関数で針の長さを計算して表示しなければならないので敷居が高いと思います。が、サンプルを参考にすればなんとかなるでしょう。

UNIX秒を使おうと思っていろいろながめてみたのですが、どうやらUNIX秒は利用できないようでした。
pebbleでは時刻はローカル時刻のみを使っているので、タイムゾーンを持っていないのです。そのためにUTCを計算できません。
pebbleがタイムゾーンをサポートしない限り利用はできないでしょう。日本限定として時差を計算して作る事は可能ですがね。

SDKインストール

ここで時間をさかのぼりSDKのインストールの話。
SDK2のBeta2が出たら試してみようと思っていたら、すぐに出てきた。そこで早速インストールしてみました。
ファームウェアVer.2では従来のWatchFaceは使えません。Ver.2用のWatchFaceが必要です。
Beta版ではありますが大きな問題は無く使えています。通知もそれなりに届いています。アラームに変なバグがあったものもBeta4では直っているようです。
まずは iPhone アプリと pebble 本体のアップデート。
BetaのiPhoneアプリをインストール。そしてpebbleのファームのアップデートはiPhone経由。PCを使わないのが新鮮です。手順は良く変更されるのでがんばって英語を読みましょう。
iPhoneの「設定」から「pebble」を探してみると「Developer Mode」という謎のスイッチがあるのでそれをオンにする。
作ったアプリは無線LANで転送するため、iPhoneをローカルの無線LANに繋ぎます。

次に開発機(PC)の準備。
まずはSDKのインストールをOS X Marvericksで試してみたのだけど上手くいかないのであっさりあきらめてVMware Fusionの上にUbuntuを作ってそこにインストールした。
とりあえずhello worldがビルドできた。(英語斜め読みでやっていたので失敗も多かったのだけど…)
iPhone の pebble アプリを起動してDeveloper Connection を Enabled にすると作ったアプリが転送できるようになります。転送コマンドで母艦からiPhone経由でpebbleにインストールされた。
hello worldが動いた。watchfaceかと思ったらアプリだった。ボタンを押すと表示が変わるものでした。

「Example」フォルダにあるものをbuildしてインストールしてみた。Big Time が好きなので追加しちゃう。

pebbleはエミュレータが無いので実機に入れて試すというなかなか野蛮な開発環境です。
この後の開発中にはクラッシュ画面を何度も見る事になるのだった。リブートなんかもしちゃう!
ノーコンになって再起動したりもしましたがpebble本体は無事です。

サンプルで練習

ビルド、転送、スクリーンショットは以下のコマンド。
最小限の引数で動きます。
スクリーンショットは表示されている画面を日付時刻の付いたPNGファイルで保存します。

$ pebble build
$ pebble install --phone 192.168.1.23
$ pebble screenshot  --phone 192.168.1.23

アプリ開発

$ pebble new-project hogehoge から始めるのが正しいのでしょうが、今回はclassioのサンプルソースから改造して作ってみました。
appinfo.json の中にUUIDがあり、他のアプリとかぶりんちょしては困るので、新規にnew-projectして作ったファイルのUUIDと入れ替えてみます。
このファイルの中にバージョンやファイル名を書くのですが、ここでVer.2用にするのでしょう。
適当にそれっぽく書き換えておけばよさそうです。

WatchFace、アプリのサイズの上限が24KBです。
一番単純なサンプルでサイズが3KBくらい。pebbleの画面サイズ(168×144)の白黒png画像が2KBくらいだからたくさんの画像を使ったものは作れなさそうです。
画面サイズが非常に小さいので、デザインはドット単位での試行錯誤が必要でしょう。
ファイルサイズの問題から日本語フォントを追加することも難しいでしょう。漢字の画像を用意して日付と時刻程度は表示できそうですが。

pebble を使っている日本語を使う方々。

日本にも何人かは pebble を買って、さらにアプリの開発までやっている物好きな方がたくさん(?)いるようです。

http://blog.makotokw.com
http://nozaki.com
http://marrone.jp/labo/
http://hitoriblog.com
http://awwa500.blogspot.jp/

pi で遊んでみる (Webカメラ)

Webカメラの準備

Raspberry pi にはUSBがあるので簡単に市販のWebカメラ(UVC)がつながります。今は純正のカメラもあるのですが手元にあるLogicool(Logitech)のC270というものをつないでみます。
経験上、Webカメラは激安のものよりは有名メーカーの最低グレードのものの方が良いような気がします。
Raspberry pi はCPUが弱いので動画にはあまり向きません。おとなしく静止画を撮影させてみます。
Raspberry pi では電源の心配があるのでセルフパワーのUSBハブにWebカメラを接続して電源はUSBハブに助けてもらいます。

$ sudo apt-get install … でソフトウエアの追加をします。
(今回使わないものも入ってますが)

  • fswebcam : Webカメラを使うためのツール
  • imagemagick : 画像処理用
  • nginx : webサーバ
  • bc : 計算
  • mrtg : MRTG
  • vim : エディタ
  • ttf-mscorefonts-installer : マイクロソフトのTrueTypeフォント

MRTGで以下のエラーが出るのでsedのスクリプトを一発流す。
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=36&t=13044
sudo sed -i 's|import\ Socket6;|Socket6->import\(qw\(inet_pton\ getaddrinfo\)\);|' /usr/share/perl5/SNMP_Session.pm

インストールの処理に非常に時間がかかるようです。これがraspberry piの貧弱な性能なのか。

Webカメラの撮影

$ sudo fswebcam /var/www/html/test0001.jpg

これだけでとりあえず写真が撮れると思います。
パソコンのWebブラウザから http:/(RasPiのアドレス)/test0001.jpgで画像が表示できるでしょう。
ファイルの出力先をwebサーバのディレクトリにするとリモートで確認しやすいです。

$ sudo fswebcam -d v4l2:/dev/video0 -p YUYV -r 640x480 --top-banner -S 5 --font /usr/share/fonts/truetype/msttcorefonts/arial.ttf:16 /var/www/html/test0002.jpg

こんな感じで撮影時刻がついた画像ができました。
オプションはファイルに書いて読み込ませる事ができます。
テキストファイルに長いオプション名の–を取ったものと値を一行ずつ書いたものを作ればよいようです。コマンドが短くなって見やすくなりました。

$ sudo fswebcam -c fswebcam.conf /var/www/html/test0003.jpg

sudo で操作するのもめんどうなので、 vigr を起動して、video と audio に自分のユーザグループを追加しておきました。最近は最初から追加されているようです。
これをcronで回して、FTPやwebサーバと組み合わせればお天気カメラ、監視カメラになります。

nginxの設定

Webサーバは最近のドキュメントが多いnginxを入れてみました。
/var/www/html 以下が公開されます。

ディスク書き換え問題

Raspberry Pi は低価格の教育用コンピュータという点もあり、ストレージにSDカードを使っています。安いのはいいのですが、書き換えが多い処理をしているとSDカードがエラーを出してしまいます。(死にます)
30分ごとに写真を撮ってMRTGで温度を記録していたら、三ヶ月で使えなくなりました。
教育用として短期間使う場合は問題がありませんが、仕事に使うサーバは Raspberry Pi じゃなくてちゃんとしたマシンを使用しましょう。
今回はSDカードへの書き込みを少しでも減らすために Ram Disk を使用してみます。最近のLinuxでは最初から利用できるようになっているようです。
df -h で表示をみると /run/shm/ というものがRam Diskです。
Webカメラのファイルの出力先をRamディスクにして、webサーバのディレクトリへのシンボリックリンクを作っておきます。webサーバの設定でシンボリックリンクを有効にすれば使えるでしょう。(たぶんそのまま使える設定だと思う。)

起動スクリプト

/etc/rc.local に起動時の処理を追加します。
起動時にRAMディスクの中に必要なディレクトリを作成しておきましょう。

mkdir /run/shm/webcam
chmod 777 /run/shm/webcam

まとめ

以下のファイルを作り、調整するとブラウザで過去24時間の写真が見れる「監視カメラ」が作れます。
各種値を調整すればそれなりに目的のものになると思います。

(/home/pi/etc/fswebcam.conf)

device     v4l2:/dev/video0 
palette    YUYV 
resolution 640x480 
top-banner
skip       5 
font  /usr/share/fonts/truetype/msttcorefonts/arial.ttf:16

(/home/pi/bin/takepic.sh)

#!/bin/sh
# ファイル名は時刻
filename=`date +%H%M.jpg`
/usr/bin/fswebcam -c /home/pi/etc/fswebcam.conf /run/shm/${filename}

crontab -e でcronに登録。

# 60分毎に撮影
0 * * * * /home/pi/bin/takepic.sh

/var/www/webcamindex.html

<html>
<body>
<img src="/ram/0000.jpg"/><br>
<img src="/ram/0100.jpg"/><br>
...(略)...
<img src="/ram/2200.jpg"/><br>
<img src="/ram/2300.jpg"/><br>
</body>
</html>

この他に ZoneMinder という監視カメラのツールもあります。これでもっと高度な監視カメラになるようです。 ちゃんとマニュアルを読まないと使えなさそうなので使ってませんが。

Logitech QuickCam Orbit MP

Logitech (Logicool) のwebカメラで上下左右にカメラが動く珍しい機種がある。
長い間この機能のLinuxの使い方がわからないでいたがやっと判明した。
一応、UVC対応カメラなのでfswebcamで撮影できるようにするまでは普通のカメラと同じ。
追加で v4l-utilsとuvcdynctrlをインストールする。
v4l2-ctl -L で使用できるコマンドの一覧が表示される。ここにpan_relativeなどが出てきたらOK。
get install v4l-utils uvcdynctrl
v4l2-ctl -c pan_reset= でパンのリセット、v4l2-ctl -c pan_relative=1000で左に動く。右に動かしたい時は負の値。チルトも同様。
(2014/11/1)
(2016/3/21)

pi で遊んでみる (起動)

起動前の準備

起動させるまでにはそれなりに準備が必要です。まずは本体の他に以下のものを揃えると良いでしょう。
無しで運用も可能ですが最初のインストールの時には揃えておいた方が楽です。

  • USBキーボード
  • USBマウス
  • 8GBのSDカード(class 4で良い)
  • microUSBケーブルと電源
  • LANケーブル
  • ディスプレイまたはテレビとケーブル
  • パソコンとネットワーク環境

SDカードはClass4でもClass10でもあまり差は無いと言われています。CPUがそれほど速くないしその他の周辺チップの性能も期待するほど速く無い。LANも100/10で全体的に遅いのでSDカードだけ速くなっても効果は無さそうです。SDカードはそれよりも高寿命なものが良いでしょう。HDDの代わりにSDカードを使っているので使い方によっては3ヶ月くらいで死にます。2016年の時点では最低でも8GBのものを用意するようにということです。
コマンドラインでしか使わないという場合でもマウスがあると楽できます。

SDカードの作成(2016)

https://www.raspberrypi.org/downloads/
ここから「NOOBS」をダウンロードします。
サーバが遅いのでTorrentでダウンロードした方が早く終わります。
ダウンロードしたファイルは展開(解凍)します。

https://www.raspberrypi.org/help/noobs-setup/
次にこのビデオを見れば大体わかるとおもいます。
最近のRasPiはmicroSDカードですね。
これを書いている時点のNOOBSにはRaspbianしか入っていません。ビデオのインストール画面と少し違います。

SD Association のWebサイトから「SD Formatter 4.0」をダウンロードして、インストールしてください。
なるべくパソコン本体についているSDカードスロットにSDカードをセットして「SD Formatter 4.0」でフォーマットしてください。
フォーマットが終了したら、展開したNOOBSのフォルダ(NOOBS_v1_9_0等)の中身をSDカードにドラッグコピーします。

以前より簡単になってますね。

SDカードの作成(2013) これは昔のやり方です

まず最初にシステム用のSDカードを作成します。以下の手順はMacの場合です。
英語ですが以下に手順があります。
RPi Easy SD Card Setup

システムは「2013-07-26-wheezy-raspbian.img」を使ってみました。最新のものを使った方が良いでしょう。
作業は「ターミナル」で行います。$ df -h で現状を確認の上、SDカードを挿してもう一度$ df -h してください。それでSDカードがどのようにシステムにマウントされたのか確認します。
仮にマウント先が /dev/disk3s1 とします。この「disk3」のところが他の数字だったならば以下の「disk3」も自分の環境での値に変えて下さい。
これはSDカードを書き換えるコマンドなので、disk3のところを間違えると大変な事になります。

1. $ df -h
2. Insert SD catd.
3. $ df -h  (ここでどのdiskに繋がったか確認する)
4. $ sudo diskutil unmount /dev/disk3s1
5. $ sudo dd bs=1m if=image.img of=/dev/rdisk3
6. $ sudo diskutil eject /dev/rdisk3

ddの処理は数分間画面に変化がないので気長に待つ。

起動前準備

Raspberry pi に各種ケーブルを取り付けます。電源スイッチはありません。microUSBは電源なので接続しないでおきます。
USB関係が弱そうなので、後からキーボードやマウスを抜き差しすると再起動してしまったりします。あらかじめ全部接続してから起動するようにした方が良いでしょう。USBハブはセルフパワー(ACアダプタ付き)を使った方が良いようです。(2014年に出たB+からはUSBの電源が強化されたという話です。以前はUSB周りが不安定でした。)
モニタは普通のテレビも使用できるので便利です。
Raspberry pi は日本語キーボードでも使用できるので手元にあるものでいいのですが、この手の「へんなもの」を操作する時はUSキーボード(アメリカ仕様)の方がなにかと便利です。

前の手順で作成したSDカードをRaspberry Pi にさします。

起動・インストール

全部接続し終わったら最後にmicroUSBの電源を接続します。これで起動が始まります。
Linuxでおなじみの起動メッセージがスクロールされて行きます。
最初にインストールするOSの選択画面になります。2016年初頭ではRaspbianのみが選択できるようです。
マウスで選択して、Installアイコンを押します。
この時に画面下の言語設定をEnglish(US)にして作業する方がいいかもしれません。Raspberry Piはイギリス製なのでデフォルトはEnglish(UK)です。このままだと時々見慣れない表示になります。(日本語も選べますが個人的にはUSで使う方が楽なので)
インストールは20-40分かかります。
再起動すると使い始められます。

初期設定

初期はこの後に初期設定をする画面が出ていたのですが、インストーラが自動でやってくれるようです。
ユーザは「pi」、パスワードは「raspberry」が初期状態です。
一番左のメニューのPreferencesの中の「Raspberry Pi Configuration」から各種設定の変更ができます。
Time ZoneをAsia/東京に設定することと、SSHをEnableにしておく以外は適当に環境に合わせて変更しておくと良いでしょう。
後述のraspi-configもまだ使えるようです。

raspi-config(古い情報)

最初に画面に出るのは「Raspberry Pi Software Configuration Tool (raspi-config)」です。
これで初期設定をします。
この設定を後でもう一度使いたい時には $ sudo raspi-config です。

  • Expand Filesystem : SDカードの空き容量を全部使うようにする。最初に一度実行する。
  • Change User Password :デフォルトユーザ「pi」のパスワード変更。
  • Enable Boot to Desktop/Scratch : 起動後に普通のパソコンのようにGUIを表示したいときは「Desktop log in …」。
  • Internationalisation Options
    • Change Locale : en_US,UTF-8 UTF-8 と ja_JP,UTF-8 UTF-8 の二つを設定。defaultはUS。
    • Change Timezone : 時刻をAsia/Tokyoにします。
    • Change Keyboard Layout : USキーなので Generic 105-key (Intl) PC / English (US) / English (Macintosh) / The default … / No compose key / terminate X はYes
  • Enable Camera : カメラパーツの設定
  • Add to Rastrack : Rastrack設定
  • Overclock : オーバークロックできるようです。。。
  • Advanced Options : オプション
    • A4 SSH : SSHをEnableにする。
  • About raspi-config : About …

とりあえず画面に従って再起動しましょう。
コマンドを入れて再起動は$ sudo shutdown -r nowです。

無線LANアダプタ

右側のメニューに有線LAN、無線LANのアイコンがあります。
DHCPであれば簡単にネットワークに接続できるでしょう。
ここでSSHで接続できる事を確認したら、後は電源ケーブルだけあればraspberry pi が使えるという事です。
とりあえず$ sudo apt-get update 、 $ sudo apt-get upgrade してパッケージを最新の状態にしておきましょう。Windowsで言えばWindows Updateみたいなものです。(これもとても時間がかかります)
これでLinuxサーバとして Raspberry Pi が使えます。

無線LANアダプタ(古い情報)

Raspberry Pi を無線にすると遠くに置けるので面白い使い方ができます。
試しに無線LANアダプタを付けてみました。
ググって動作実績がありそうなPlanexのGW-USNano2を使ってみました。1000円以下で売っているものの一つです。
セルフパワーUSBハブに接続することでraspiから直接電源を取らないようにしました。
(他にバッファローのWLI-UC−GNも使っています。)

起動後に、$ startxでGUI画面が出てきます。デスクトップに「WiFi Config」というアイコンがあるのでこれを起動します。後はWindowsなどの一般的なWi-Fiの設定画面が出て来るので適当に値を入れれば無線LANが繋がるようになるでしょう。

ここでSSHで接続できる事を確認したら、後は電源ケーブルだけあればraspberry pi が使えるという事です。この状態では特にメリットはありませんが、Webカメラをつけたり、温度センサ、LEDなどを使い始めるとUSBの電源ケーブルのみで動く小型コンピュータというのが便利な事がわかります。

SSHで接続してサーバの様に使うという人はここから先はディスプレイもキーボードも不要です。
他のPCからSSHでログインして操作するとwebの記事のコピペでコマンドが入力できるので楽です。

$ ifconfigでもIPアドレスが確認できるのでメモしておきましょう。
ログインユーザは「pi」です。パスワードはインストール時に決めたものになります。
とりあえず$ sudo apt-get update 、 $ sudo apt-get upgrade してパッケージを最新の状態にしておきましょう。Windowsで言えばWindows Updateみたいなものです。

これでとりあえずLinuxサーバとして Raspberry Pi が使えます。

うちの設定では無線LANが省電力で動こうとしているのかすぐに休んでしまいます。
SSHで入ってちょっと休むとしばらく反応が返ってこなくなってしまいます。
そのせいかwebサーバなどももっさりと動くのが残念なところです。SSHで作業をするときは有線LANの方が良さそうです。

(2014/10/1)
(2016/3/20)