Wake On LAN リピータをバージョンアップしました

インターネット側からLAN内のPCなどをWake On LAN 出来るようにする機器、Wake On LAN リピータのハードウエア版シェアウエア版(Raspberry pi用)をv5.0にアップデートしました。

変更点は以下の通りです。

  • MagicPacketの転送機能が稀に落ちることがあったので、プロセスを監視して停止しているときには再起動する機能を追加。(Wake On LAN リピータの最も基本的な機能は、インターネット側から送信されたMagicPacketを、ルータのポート転送設定でWake On LAN リピータに転送すると、Wake On LAN リピータがそのパケットをLAN内全部のPCにブロードキャスト転送する機能です。)
  • IPアドレスを固定する設定をした場合に、これまではDNSサーバーのアドレスの設定項目がなかったため、正しくDNSサーバーに問い合わせをすることができなくなり、NTPサーバーに接続できなくなって時刻合わせができなくなる問題があったため、DNSサーバーを指定できるようにした
  • USB連動タップ操作機能で、これまでは手動でオン、オフを切り替えるのみだったが、新バージョンではアドレスを指定してping監視し、応答がなくなったら自動的にオフ→オンする機能を追加した。 また、毎日定時にオフ、オンが出来る機能を追加した。

設定、操作はすべてブラウザで行います(MagicPacketの転送機能は操作不要)が、最新バージョンの操作画面は以下のような構成です。 画像を見ていただくとどのような機器なのかすぐにおわかりいただけると思います。

rep1
メインメニュー
rep2
設定:ダイナミックDNSの設定。no-ip、mydns.jp, dyn.comに対応しています。
rep3
設定:ネットワーク設定。DHCP有効と、スタティックが選択可能です。
rep4
設定:日時設定
rep5
操作:手動でMagicPacketを送信
rep6
操作:日時指定で単発でMagicPacket送信予約。この機能はGETでデータを渡しているので、ほかのプログラムからWake On LAN リピータにMagicPacket送信予約を入れることが簡単に実現できます。(たとえば録画サーバーの電源を自動で入れるなど)
rep7
操作:日時、曜日指定で繰り返しMagicPacket送信予約。 毎朝事務所のPCの電源を自動で入れるような場合を想定しています。
rep8
操作:USB連動タップの操作。フリーズしたPCの電源を強制的に入れ直したり、ping監視を使って不調のルータ、モデムの電源を入れ直すことも可能です。

最後の画像のUSB連動タップ操作機能ですが、ハードウエア版はRaspberry pi の基板に改造がしてあり、USBポートの5V電源がオン、オフできるようになっていますので、USB連動タップを直接USBポートに挿し込めば使用可能です。

tap
サンワサプライ TAP-RE7U

シェアウエア版で連動タップ機能を使用するには、同様の改造をRaspberry pi基板に施さねばなりませんが、かなり難しいです。(USBコネクタを2個とも取り外し、下段側のGNDパターンに細いドリルで穴を空けて絶縁した上で新しいUSBコネクタを取り付け、GND足とGNDパターン間にPower MOS-FETをスイッチとして取り付け、ゲートの足をGPIOピンに配線します)

改造に代わり、リレーモジュールをつかえばUSB連動タップを購入しなくても直接AC100Vのオンオフも可能になりますのでそのほうが簡単ですが、ACを扱うため正しく配線しないと感電や火災の原因になりますので自己責任でのみお試しください。

たとえばこちら たった171円です。 (ここで紹介する基板が安全かどうかについてはご自身でご判断ください。 AC100Vはショートすると火柱が上がるほど強力です。)

relay

GND、VCCにはRaspberry piのGPIOのGND(6ピン)、5V(2ピン)を接続し、IN1、IN2にはそれぞれGPIOの3ピン5ピンを接続します。 必要なものはこの基板とジャンパーケーブル4本、そして安いテーブルタップを途中で切断してリレーの端子にネジ止めすれば完了です。

 

ラズベリーパイで温泉卵

フィリピンの卵は新鮮でなく、生卵を食べるには覚悟がいる。 先日買った、GENSANブランドの卵は賞味期限まで2週間もあるのにすでに腐っていた(白身と黄身が混じっていて、端っこが真っ黒)。

で、生卵同様、大好きな温泉卵を完璧に作るべく、ラズベリーパイで温泉卵製造機を作成しました。

使ったもの

  • Raspberry pi B (余っていた古いもの)
  • 4GBのSDカード、電源、LANケーブル類(余っていたもの)
  • 温度センサ(CircuitRocksで購入)
  • リレーモジュール(CircuitRocksで購入)
  • ジャンパー線10本(CircuitRocksで購入)
  • その他部品類(余っていた古いもの、詳細は画像ご参照ください)

要となる温度センサ(DS18B20)は、よく見かける防水タイプで長いケーブルつきのもので185ペソ、リレーモジュールは1チャンネルで250V10Aのもので147ペソ。 PayPalで支払いが出来、送料はメトロマニラは150ペソで、注文の翌日にLBCで配達されました。(フィリピンでは注文の翌日配達は驚異的に素晴らしいです!)

https://circuit.rocks/ 素晴らしい。

こちらが届いた部品の写真です。

Exif_JPEG_420
クリスマスカードつき
Exif_JPEG_420
タッパーに入っていました

センサとリレーは先例にならい、以下のように配線しました。

Exif_JPEG_420
試しに配線した様子

GPIOのピン番号
1 センサー電源3.3V(赤)
2 リレー電源 5V(オレンジ)
3 リレー信号線(黄色)
6 センサーGND(黒)
7 センサー信号線(青)
14 リレーGND(緑)

センサーの電源(赤)と、センサー信号線(青)の間には4.7kΩのプルアップ抵抗をつけています。(ビニールテープでまいてあるところに内蔵)

プログラム作りですが、いつものようにIPアドレスを音声で読み上げる機能をまずインストールします。

続いて、センサの動作を確認するため、以下のことを行いました。

apt-get update
apt-get upgrade

そしてapacheとPHPのインストール。

apt-get install apache2 php5

nano /boot/config.txt でconfig.txtファイルを開き、一番下に

dtoverlay=w1-gpio

を追加して保存。

nano /etc/modules を開き、一番下に

w1-gpio
w1-therm

を追加して保存。

一度再起動してから、

nano /var/www/temp.php でファイルを作成し、以下の内容を貼り付けて保存。(こちらを参考にさせていただきました)

その後、LAN内のPCやスマホで http://ラズベリーパイのIPアドレス/temp.php を開いて温度が表示されれば温度センサーはOKです。

続いてリレーの動作について、

WiringPiのインストール

git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build

リレーをテストするスクリプトを作成

nano /etc/RelayTest.sh でファイルを作成し

と書いて保存したあと、

chmod 755 /etc/RelayTest.sh

で実行権限を与えます。 そのあと、

/etc/RelayTest.sh を実行するとリレーがカチカチ言いながらオンとオフを繰り返せばリレーOKです。

ここまで確認できたので、ケースを買いに行きました。 AC220Vがリレーモジュールの裏側に出ているので、バラバラでは危ないのでケースに入れる必要があります。 ケースはAlexanにあった一番大きいプラスチックケースで45ペソでした。 行ったのはTimog Avenue branchですが、道路沿いの駐車スペースにホームレス家族が座っていて車を止めにくかったので、お店の前の駐車場に入ったんですが、入り口のスロープが急な上に途中で角度が変わっていて、車の底をジョリっと言わしてしまいましたので、お出かけの方はご注意ください。(googleストリートビューから拝借した画像ですが、奥の小さな建物がお店で店員さんが二人いますが暇そうです。 画像のガードマンさんが招き入れてくれるまま駐車場に入ろうとすると、ジョリっと言わしてしまいますので注意。)

alexan

で、ケースに収めたのが以下の画像です。

Exif_JPEG_420
ACは電源タップを途中で切断したようになっています
Exif_JPEG_420
ほぼギリギリでした

デジタルアンプとスピーカーは引き出しの中に眠っていた部品ですが、”調理をスタートしました”、”30℃です”、”31℃です”...”設定温度に達しました”、”調理を終了しました”という音声、およびLANケーブルを接続して起動したときには自分のIPアドレスを話すようにするためです。

実際に作成したプログラムの中身は需要がないと思いますので割愛しますが、もし知りたい方がいらっしゃいましたらメールでご相談ください。

※12月28日追記:イメージファイルをダウンロードできるようにしました。 8GBのSDカードに書き込んでください。 Raspberry Pi B, B+, Pi 2で起動できます。 SSH接続はユーザー名 root, パスワード raspberry です。 起動時に音声でIPアドレスが流れますのでイヤフォンを挿し込んで起動してください。

音声で読み上げられるIPアドレスをブラウザで開くと設定画面が表示されます。

browser

設定内容は、最高温度(この温度に達すると電源オフ)、最高温度からx℃下がったら再度オン、最高温度に達したあとx分経過で終了(オフ)、の3つです。

そして、最後に実際に使ってみた結果です。

Exif_JPEG_420
シンプルな炊飯器に卵と水、温度センサーを入れて蓋をしてスタート

設定は最高温度69℃、-0.5℃で再度スイッチオン、30分調理にしました。

結果ですが...卵の画像を撮るまえに、パンツの後ろポケットに卵を入れたのを忘れて座ってしまい、ポケットの中で卵がぐちゃぐちゃになったので画像なしですが、黄身が硬めで白身はゆるい感じだったようです。

問題は、炊飯器のヒーターはアルミダイキャストの大きな土台の下に入っているのですが、69℃で電源が切れたあとも高温に熱せられた土台の余熱で5分位は水温が上がり続け、最高75℃になってしまったことです。 余熱を持たないシンプルな電気ポットのようなものを使うと改善されるものと思います。

うまく調理できるようになれば、フィリピンでも温泉卵が食べ放題、その他お酒の燗をつけるのもの上燗、熱燗自由自在です。

12月25日追記

炊飯器以外に、家には電熱器(1200wと600wの切り替えスイッチつき)があったので、電熱器に小さな鍋を乗せ、蓋をせずに再度チャレンジしてみました。

設定は最高温度66.5℃、-0.5℃で再度スイッチオン、30分で調理終了にしました。 途中経過は、水温31℃からスタートで10分後に設定温度に達してスイッチ・オフ、その後5分ほど温度がゆっくり上がり続けて最高で69℃、その後5分で66℃まで下がってスイッチが入り、以降は約30秒スイッチオン、約1分40秒スイッチオフを繰り返しながら30分の調理時間が経過して終了しました。

早速水で冷まして割ってみたのがこれです。

完成

白身は柔らかく、黄身はトロッとしていて完璧です。 お正月用に卵をたくさん買ってくることにします。

らじるらじるの新エリア

ラズベリーパイでらじる★らじるを聴取するスクリプトが多数公開されているが、新エリアに対応するためのアドレスを調査した。 それぞれラジオ第一、ラジオ第二、FMの順です。

札幌

rtmpe://netradio-ikr1-flash.nhk.jp/live/NetRadio_IKR1_flash@94838
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-ikfm-flash.nhk.jp/live/NetRadio_IKFM_flash@393307

仙台
rtmpe://netradio-hkr1-flash.nhk.jp/live/NetRadio_HKR1_flash@108442
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-hkfm-flash.nhk.jp/live/NetRadio_HKFM_flash@108237

東京

rtmpe://netradio-r1-flash.nhk.jp/live/NetRadio_R1_flash@63346
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-fm-flash.nhk.jp/live/NetRadio_FM_flash@63343

名古屋

rtmpe://netradio-ckr1-flash.nhk.jp/live/NetRadio_CKR1_flash@108234
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-ckfm-flash.nhk.jp/live/NetRadio_CKFM_flash@108235

大阪

rtmpe://netradio-bkr1-flash.nhk.jp/live/NetRadio_BKR1_flash@108232
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-bkfm-flash.nhk.jp/live/NetRadio_BKFM_flash@108233

広島

rtmpe://netradio-fkr1-flash.nhk.jp/live/NetRadio_FKR1_flash@311889
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-fkfm-flash.nhk.jp/live/NetRadio_FKFM_flash@344886
松山

rtmpe://netradio-zkr1-flash.nhk.jp/live/NetRadio_ZKR1_flash@73529
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-zkfm-flash.nhk.jp/live/NetRadio_ZKFM_flash@373226

福岡

rtmpe://netradio-lkr1-flash.nhk.jp/live/NetRadio_LKR1_flash@390316
rtmpe://netradio-r2-flash.nhk.jp/live/NetRadio_R2_flash@63342
rtmpe://netradio-lkfm-flash.nhk.jp/live/NetRadio_LKFM_flash@51072

VPN + WIFIアクセスポイント

ラズベリーパイ用シェアウエア(SDカードイメージ)、”VPN+WIFIアクセスポイント”を公開しました。 起動後1時間は全機能試用でき、1時間をすぎても電源を抜いて入れなおせばまた1時間使えますのでぜひお気軽にお試しください。

動作中の実機

vpnwifiap

Androidスマホで上記画像の実機にWIFI接続したところ

Screenshot_2016-09-24-14-31-24

Raspberry Pi 3 専用ですが、使い方は概略以下のような手順です。

1.SDカードイメージをダウンロードし、解凍します。

2.Win32DiskImagerなどで8GB以上のマイクロSDカードに書き込みます。

3.Raspberry Pi 3 にカードを差し込み、ルータに有線LANケーブルで接続します。 また、イヤフォン端子にイヤフォンを差し込んで耳に入れておきます。

4.Raspberry Pi 3 にACアダプタをつないで電源を入れます。

5.15秒ほどすると、”起動しました”という音声が聞こえ、その後ルータから割り当てられたIPアドレスが流れますのでメモします。

6.”VPN接続の設定を行ってください”という音声が流れます。 LAN内のPCかスマホのブラウザで上記でメモしたIPアドレスを開きます。(たとえば http://192.168.12.4 など)。 設定ページを開く際のユーザー名、パスワードはadmin, adminです。(設定ページ内で変更できますので必要に応じて変更してください)

7.自分用のSoftEther VPNサーバーのアドレスなどを入力します。たとえば下図のようになります。

setting2b

8.適用ボタンをクリックすると、VPNサーバーへの接続テストを行い、VPNサーバー側からIPアドレスが取得できる段階まで進むと”成功”の表示が出て再起動します。

9.再起動後は、”起動しました”、”IPアドレスは...”に続き、”VPN接続しました”、”ルーティングテーブルを書き換えました”、”WIFIアクセスポイントを起動しました”、”ブリッジ接続を完了しました”と音声が流れます。

この状態で、上記設定ページ内で指定したSSIDとパスワードでアクセスポイントが動作しています。 初期状態では以下のようになっています。

setting3

一度設定をすれば、設定済みのRaspberry Pi 3 を持ち歩いて、外出先の有線LANポートに接続して電源を入れると、自動的にVPN接続が確立し、アクセスポイントが起動しますので、以降設定画面を開く必要はありません。 (電源を切るときもACアダプタをいきなり抜いても、相性がよいSDカードを使っている限り、まず大丈夫です。)

アクセスポイントに接続したPCやスマホには、VPNサーバー側のルータから直接DHCPでIPアドレスが割り当てられるため、VPNサーバー側ネットワークに直接接続しているのと完全に同じ状態となります。 従って、サーバー側ネットワークの共有フォルダなどにも簡単にアクセスが可能です。

また、日本版のFireTVスティックのような、日本国内限定で使用できるデバイスも、このアクセスポイントにWIFI接続すれば海外でも日本のネットワークとして認識されるものと思います。(FireTVスティックを持っていないので試していませんが)

ただ、LAN内でだけ動画を共有できるような、たとえばHDDレコーダに録画した映像を海外で見られるかというと、多分無理です。 これら機器に用いられている規格にはLAN内にいるか、外部にいるかを判断するために通信のラウンドトリップタイムを使用しているため、VPN接続していてもその規格を満たすことができないからです。

本ソフトウエアの詳細につきましては、こちらからマニュアルをダウンロードしてご参照ください。

 

超高級版ホームラジオ完成

過去の記事で、Raspberry Pi用のI2Cオーディオ基板の Suptronics x400 について紹介をしたが、ようやくケースに収めて快適に使用できるようになった。

こちらが動作しているところ。 31年前に買ったスピーカー(PIONEER S-180D)といっしょに撮影した。

front

中身はこちら。ケース後方よりにRaspberry Pi 2 と Suptronics x400が二段重ねになったものを、両面テープつきの基板固定足で固定している。 Line outはケーブルでケース背面のRCAジャックに、ヘッドフォン端子も延長ケーブルを作ってケース全面の6.3mmヘッドフォン端子へと配線している。

side

続いて背面側。ケースにはもともと画像左端の電源スイッチ用の穴と、AC100V用の三極プラグを取り付けるための穴が開いていたが、三極プラグの穴を拡張して基板背面の端子がそのまま使えるようにした。 本当は穴なしパネルを使ってスピーカー端子、LAN端子、USB端子を背面に出したら美しいのだと思う。 左端の電源スイッチは電源用とはせず、x400基板上のオーディオアンプの有効、無効を切り替えるジャンパー端子に配線している。(ヘッドフォンで聞くときはメインアンプをオフにして使用するため)

back

こちらはボリュームシャフトの延長の図。ケースのボリュームつまみの穴の高さよりも2段重ね基板上のボリュームの位置のほうが高かったので、ユニバーサルジョイント2個とアルミパイプを使って連結した。 ケース側でボリュームつまみ、フロントパネル、シャフトともに金属のためガタガタしているうえにゴリゴリ感があるが、布をはさむとかグリスを塗るなどで改善できそう。 動きはスムーズです。

volume_shaft

古いスピーカーに最新のI2C DAC+デジタルアンプでradikoの音楽番組を聞いたり、iTunes内の曲をAirPlay経由で聞いたりしているが、美しく澄んだ音で楽しめている。

以下、今回使用した部品と購入当時の値段を一覧にしておく。

・Raspberry Pi 2  (RSコンポーネンツ)  4763円

・Suptronics x400 (GearBest) 26.01USドル(送料込)

・ケース 1506 full aiminum enclosure (ebay.com) 4222円(送料込)

・ユニバーサルジョイント6mm (Banggood) 2個 654円(送料込)

・6mmアルミパイプ1m (近所のホームセンター) 180円

・小物部品類(6.3mmステレオジャック, 3.5mmステレオミニプラグ, 3mm青色LED, 定電流ダイオード10mA, RCAジャック白, RCAジャック赤, スペーサーTP-20 4個, 貼り付けボスASR-6 4個)  (秋月電子)  690円

合計 13188円 (家にあった電線類、古いノートパソコン用ACアダプタは含まず)

満足度は高いのですが、加工が結構大変なので今のところ販売の予定はありません。

Raspberry pi B+ ELPIDAのRAMが載っていると起動しない

一部製品に Raspberry Pi B+を使用しているため、継続してRSコンポーネンツより購入しているが、今回購入したロット(9月初旬入荷分)で、既存のSDカードイメージを書き込んでも全く起動しない現象が発生した。

SDカードイメージは Raspbian Wheezyベースで作成したものなのだが、30枚テストした段階で25枚が起動できず、慌ててしまったのだが、起動できたものと起動できなかったものをよく見比べてみると、基盤のバージョン、レビジョンは同一でも、RAMのメーカーが違っていることがわかった。

起動できたものは従来通りSamsung製、起動できなかったものはELPIDA製のRAMが乗っていた。

こちらはSamsung製RAMが載った基盤。印刷が薄いので写真では見えないです。

samsung

こちらがELPIDA製。

ELPIDA

ELPIDA製のものでは、電源を入れたときに基板の赤と緑のLEDがつきっぱなしの状態で全く起動しない。

解決策は、起動できる基板にSDカードを差し込んでから

sudo apt-get update

sudo apt-get dist-upgrade

を実行すれば、そのカード(およびそのカードから作成したイメージファイル)で起動できるようになった。

予告なく仕様が変わると何だか面倒です。

ラズベリーパイ イメージファイルの圧縮

Windowsのパソコンを使ってRaspberry Pi用のプログラムを作成しているが、途中でSDカードが読めなくなってもフリダシに戻らないで済むよう、少し進むたびにwin32DiskImagerでイメージファイルのバックアップを取っている。

最終的に出来上がったものはGoogleドライブなどにアップロードしているのだが、イメージファイルそのもののファイルサイズはSDカードのサイズと同じ(SDカードが8GBならイメージファイルも8GB)でかなり大きい。

そこで、ZIPやRARで圧縮してからアップロードするのだが、圧縮率が低くてファイルがあまり小さくならないことがあり、圧縮方法について検討し、小さくできる方法に気づいたので記しておく。

ファイルの圧縮率が低かったのは、ホームラジオやラジオサーバーといったラジオ関連製品で、プログラム作成に伴うテスト中に複数のラジオ番組を録音していた。 完成時には録音ファイルは削除したのだが、この状態では圧縮率が低くファイルはかなり大きいままだった。

通常の方法でファイルを削除する場合、Linuxではrm、Winodwsではゴミ箱に入れてからゴミ箱を空にする操作を行うが、この場合はファイルのいわゆる”もくじ”部分を削除しただけで、SDカードやHDD上にはまだそのファイルの中身自体は残っている。 この状態でイメージファイルを作成すると、そのファイルの中身自体はイメージファイル内にあり、このランダムなデータの列が圧縮率を下げる原因だった。 つまり、00 00 00 00 や ff ff ff ffのように同じデータが延々続くイメージファイルであれば、圧縮するときに”ゼロゼロが4個”、”ffが4個”というように簡単に置き換えられるが、ランダムなデータではこれが出来ないので圧縮率が上がらないのだ。

そこで、イメージファイルを作成する前に以下の処理を行った。

df で現在の空き容量を調べる

df

この画像では、一番上の /dev/root の部分のAvailable列の 3303940(KB)が空き部分の容量である。

続いて

と入力し、実行する。 /dev/root 内に、tempfileという名前のファイルを、3303940(KB)分作成するのだが、かなり時間がかかるのでしばらく待つ。 終了するとこれまで空き容量だった部分に目一杯 tempfile というファイル名のファイルが作成されている。

最後に shred コマンドでファイルを完全に消去する。

各オプションの意味は、-v 処理過程を表示、 -n 0 ゼロ回上書き処理を行う(一回だけデータを書き込む)、-z 最後に全部のデータをゼロに書き換える(つまり00 00 00 00…)、-u 処理が起こったらファイルを削除する、という意味である。 shredはハードディスクに書き込まれているデータを完全消去するためのもので、磁気記録の場合は一度データを上書きしても、以前に記録されていたデータが薄く残っているので、なんどもランダムなデータを書き込んで見えなくするために -n で上書き回数が指定できるのだが、今回はデータを全部ゼロに書き換えるのが目的なので -n 0 で行っている。

この処理を行ってからファイルを圧縮してみたところ、処理前に比べて1GBあまり小さいファイルにすることが出来た。(8GBのイメージファイルでRAR5で圧縮後に1.2GB程度)

 

ラズベリーパイ ネットワークが接続と切断を繰り返す

motionpie という、モーション検出機能つきの監視カメラソフトがあり、数年前から自宅の車庫の軒下に Raspberry pi B とこのソフト、Logitechのウェブカメラで簡単な監視カメラを設置していた。 映像はスマホのブラウザで確認でき、動きがあったときは静止画像としてSDカード内に保存されていて、同じくスマホから確認することが出来る。

設置当初、苦労したのは、車庫の軒下まで10mほどの距離があり、室内に5VのACアダプタを設置して、そこから車庫までUSB延長ケーブルで電源を引っ張っていくと、電線の抵抗で電圧が下がってしまい、Raspberry pi が起動出来ないことだった。 AC220Vを軒下まで引っ張っていくことは、雨漏りしたような場合に漏電、感電の危険があるので当初から考えず、代替策として室内にDC12VのACアダプタを設置し、太い電源コードで軒下まで12Vを持って行って、軒下に12V→5Vのカーチャージャーを設置してRaspberry pi の直前で5Vに変換する手だった。 当初これでうまく行っていて数年間の間、数ヶ月に一度SDカードのファイル破損で起動しなくなることはあったがほぼ問題なく動作していた。

ところが先週、監視カメラに全く接続できなくなり、修復に3日もかかってしまったのでその状況を記録しておこうと思う。

まず最初に疑ったのはいつもおSDカード破損だったので、SDカードを書き直してみたが駄目、SDカードを交換してみても駄目だった。 次に、長期間半透明のガレージの屋根(波板)の下にあったRaspberry piが日光や温度で劣化したのかと思い、基板を新しいものに交換してみたが変わらず駄目だった。

そこで今度は電源を疑い、カーチャージャーの5V出力側コンデンサの容量抜けで電圧が下がったのかと思い、コンデンサを交換(もともと470uFが付いていたが手持ちがなく220uFに。ICのデータシート上のリファレンスは100uFとなっていた。)してみたが変化なく駄目で、さらに新しいカーチャージャー(100円のもの)に交換してみたが、症状は変わらずであった。

この時点で、具体的な症状として、電源投入後にルータからIPアドレス取得はうまく行っているのだが、ping応答がほとんどなく、たまに応答する、という状態であることを確認した。

もしかしてネットワークケーブルの問題か、と思い、ネットワークケーブルの折れ曲がり箇所を直したり、当初PoEで給電しようとして切断していた不要ケーブル部分(100Base-TはLANケーブルの8本の配線のうち4本しか使っていないので、残り4本で電源を供給しようと配線を切断していた)を接続しなおしたが症状は変わらずだった。

で、もしかしたら再起動を繰り返しているのかと考え、電源電圧のチェックをしたのだが、Raspberry pi 接続状態で5Vの電圧は出ているように見えた。(少なくともデジタルマルチメータの表示上はそう見えた)

今度はでデジタルマルチメータでは見えない電源ノイズが悪さしているのか、と考え、秋月電子で購入したペン型のデジタルオシロを取り出して、12V側、5V側の電圧波形をしてみた。

pico

実際の波形は保存し忘れたので貼れないのだが、数十秒ごとに数十ミリ秒間、電圧が4V前後まで低下してから回復する、を繰り返していることがわかった。 なるほど、これはきっとカーチャージャーに対して負荷が高すぎて電圧が下がっているんだと思い、とりあえずコンデンサを追加してごまかせないかと下記のようなケーブルを作って追加してみた。

capacitor

USB延長ケーブルの途中で皮をむいて、電源の+/-間に壊れたマザーボードから取り外したコンデンサ470uFを5個直列にくっつけたものである。 これをカーチャージャー出力とRaspberry piのマイクロUSB電源ケーブルの間に入れて、電圧が下がるのを防ごうとしたのだが、結果は波形上はわずかに改善されたが、やはり4Vを下回ってしまい駄目だった。

最初から数年間使用していたカーチャージャーも、新しく交換したのも5V1Aのものだったし、Raspberry pi B の消費電力は300mA程度、ウェブカメラはUSBなので最大500mAとしても1Aまでは行かないから1Aのチャージャーで大丈夫、という先入観があったのがなかなか解決に至らなかった原因だが、結局近所の CDR king に行って5V2Aのカーチャージャーを買ってきて交換したところ、ようやく正常に動作するようになった。

数年間1Aのチャージャーで動作したのは、恐らく当初はそのチャージャーも1A目一杯流せたのだろうが、経年変化でコンデンサの容量が下がってだんだん電圧が不安定になり不調に陥った。そこで自分が交換したのが当初の470uFでなく200uFのコンデンサだったので回復せず、さらに別の1Aのチャージャーに交換したがそれはもともと1Aに至る前に電圧が下がってしまう粗悪品だったのだと思う。

故障には何事にも原因があるのだから、技術者としては最初からちゃんと測定器を使って原因を調べるべきだった。 そうすれば何度も脚立を上がったり下りたりしなくてもすぐに解決できたと思われる。

Suptronics x400

先日の記事「楽しいラジオの製作」の最後の部分に書いたが、注文していたラズベリーパイ用のI2Cオーディオ拡張カード Suptronics x400 が到着した。

Suptronicsのホームページには会社の所在地が書かれていないが、電話番号の国番号が86なので中国だと思われる。 今回注文したのは 中国の通販サイト GEARBEST だが、発送はなぜかハンガリーのブダペストで、到着まで3週間かかった。 以前にもこの業者は納期が異常に長かったことがあったので、注文の際はご注意されたい。(PayPalで支払いをすれば、まあ安全です)

さて、届いた品物は早速 Raspberry Pi 2 に取り付け、ホームラジオのイメージを書き込んだSDカードを挿しこんで起動してみた。

 

raspi2_x400

電源は6~24V DCで、ジャックの外径がΦ5.5、内径がΦ2.5であり、推奨は18V~22Vとのことだったので、古いノートパソコンのACアダプタ(19V)がぴったりだった。 なお、Raspberry pi には拡張カードからGPIOピンを通じて5Vが供給されるので、マイクロUSB端子に5VのACアダプタを接続する必要はない。(焼損の危険があるので接続してはいけない。)

ホームラジオのイメージはRaspbian Wheezy だが、Kernel Versionが4.1にアップデート済であったので、こちらのページの解説通りの設定ですぐに使用できるようになった。

音質についてはまだ十分確認していないのでコメントは控えるが、スペック的には素晴らしいので期待は大きい。

  • フルHDオーディオ 24bit/192KHz
  • SNR 112dB, THD 0.0019%
  • Audiophile TI Burr Brown 32-bit/384kHz DAC (TI PCM5122)
  • I2Cオーディオ
  • ヘッドフォンアンプ部 (TI TPA6133A)
  • 20w x 2 (4Ω) デジタルアンプ(TO TPA3118D2)

GEARBESTでの購入価格は24.02USドルで送料込み(自分は追跡番号がないと安心できないので、オプションで追跡番号(0.19USドル)を追加したが、合計で2600円くらいでこのスペックのボードが手に入るのは正直すごいと思う。

いずれホームラジオの完成品として、このボードを追加した高級バージョンを検討したいと考えているが、美しいオーディオアンプ用ケースと加工費用だけで1万円近くになってしまうので、部材原価2万円では販売は難しそうで、当面は個人的に楽しみたい。

Suptronics x400は以下から入手できます

GEARBEST

Banggood

追記:その後、アンプケースに入れて個人的に高級バージョンを完成させて楽しんでいます。 詳細はこちらを御覧ください。

ラズベリーパイ起動時のIPアドレス読み上げ

ラズベリーパイ本体のサイズが小さいことを活かしてなにかをつくろうとしたとき、いちいちキーボードやディスプレイを接続する必要があるのでは意味がない。 でも、そのアプリケーションがいろいろな設定や操作が必要なものであるとき、簡単な方法としては市販のルータなどと同じくLAN内のパソコンやスマホのブラウザで設定画面を開けるようにするのが便利である。

しかし、ルータであれば初期状態でIPアドレスが固定されていて、たとえばバッファローのルータであれば、ルータのLAN側に接続したパソコンのブラウザで http://192.168.11.1 にて設定画面を開くことができるが、ラズベリーパイの場合は、起動するたびにルータからDHCPでIPアドレスを自動取得するため、現在のIPアドレスが何かを確認するには、ルータのステータス画面内からラズベリーパイらしきもののIPアドレスを見つけ出すか、LAN内を探索するソフトなどを使って検索する必要があった。 でも、そんな面倒くさいことが必要では、広く一般に使ってもらえる製品にはならないと思う。

というわけで本日は、起動のたびにIPアドレスを自動で読み上げる方法をご紹介する。 動作は、ラズベリーパイ起動時に、DHCPで取得したIPアドレスを音声で読み上げるだけだが、イヤフォン端子にヘッドフォンやスピーカーをつないで起動すればIPアドレスがわかるので便利だ。 音声はもともと録音したものを用意し、数字にあわせてファイルを再生する方法にしている。(当初は音声合成でやってみたが、負荷が高いときには音声がとぎれとぎれになったので録音音声を使うようにした)

  1. ラズベリーパイにSSHでログインする。

tera01

2. ディレクトリを /etc に移動する

cd /etc

3. IPアドレス読み上げ音声をダウンロードする

sudo wget http://www.starstonesoft.com/temp/voice.zip

4. ZIPファイルを解凍する

sudo unzip voice.zip

5. IPアドレス読み上げ用のスクリプトを作成する

sudo nano /etc/init.d/sayIP

Enterを押すとエディタ画面になるので、下記スクリプトをコピーしてからエディタ画面に貼り付ける

貼り付けたら CTRL+x キーを押し、yキー、Enterキーを押すと保存される。

6. 保存したスクリプトの実行権限を与える

sudo chmod 755 /etc/init.d/sayIP

7. 起動時に自動実行するように設定する

sudo update-rc.d sayIP defaults

8. 再起動してみる

sudo reboot

これでIPアドレスの音声が聞こえれば完成です。 自動実行をやめるには

sudo update-rc.d sayIP remove

を実行してください。