投稿

ラベル(Raspberry Pi)が付いた投稿を表示しています

RaspberryPi の Wi-Fi を安定させる

Raspberry Pi を USB の Wi-Fi で LAN 接続しているのだが、これが不安定で、突然アクセスできなくなることが頻繁に起きていた。わざわざディスプレイやキーボードを接続して状況確認するのも面倒なので、その度に電源を抜いて強制リブートさせていた。でも、あまりに頻繁に起きるので、本格的に対策してみることにした。 調べたところ、不安定になる原因は Wi-Fi のパワーマネジメントのようだ。それをオフにしてしまうのが対策となる。それには、 "/etc/modprobe.d/8192cu.conf" というファイルを作り、以下の内容を書き込んで保存する。 options 8192cu rtw_power_mgnt=0 これで、reboot 後、パワーマネジメントがオフになるので、Wi-Fi のトラブルは解決されるはずである。 また、SSH のセッションを切らないようにするため、"/etc/ssh/sshd_config" に、次の行を追加しておくと、良いらしい。 ClientAliveInterval 10 とりあえず、これらの設定で、今のところ快適に使えている。

Raspberry Pi で温度ロガーの続き(一応完結編)

イメージ
引き続き、Raspberry Pi で温度ロガーの続きなのだが、今回で一応完結。参考にしたサイトで紹介されていた方法が一通り動き、どうさないようもだいたい理解した。 出来上がったのが下のようなプロット。元々15分毎にログするところを、1分毎に改造した。右端でグラフが8度くらいから20度くらいまで急に上昇しているのは、エアコン暖房をつけたから。23.5度の設定で動かしたから、数分で目標温度まで温まっているのがわかる。 ちなみに、日時はUTCである。日本時刻で表示したかったのだが、ちょっと面倒だったので、また次回。 今回、ウェブでログを表示する段階で、「cron でスケジュールした温度計測がうまく動かず、温度が記録できない」という問題にぶち当たり、解決に少しばかり時間がかかった。その解決方法を記録しておく。 まず、cron の設定としては、 % sudo crontab -u www-data -e を実行して、 */1 * * * * /usr/lib/cgi-bin/monitor.py を追加する。これで、1分毎に温度が測定されてログされるはずなのに、全く記録されないのでデータがプロットされない。 monitor.py は実行権限があり、owner.group は www-data.www-data にしてある。念のためにこのスクリプトをシェルから実行すると、きちんとデータベースに書き込まれる。 何はともあれ、cron のログを取ってみる。これは、/etc/rsyslog.conf を開いて、コメントアウトされている cron.* の行のコメント解除し、sudo /etc/init.d/rsyslog restart を実行。 早速ログ (/var/log/cron.log) を見てみると、次のような記載が定期的に残っているので、スクリプトは起動されているみたい。 Jan 29 07:00:01 raspberrypi /USR/SBIN/CRON[21704]: (www-data) CMD (/usr/lib/cgi- bin/monitor.py) これだけではわからないので、crontab を少し書き換えて、エラーメッセージを別のファイルに記録するようにした。次のような感じ。 */1 * * ...

Raspberry Pi で温度ロガーの続き

前回は、Ruby のコードで SPI 経由で ADC (MCP3002) のサンプル値を読むことができた。そこで、これをデータベースに取り込み、Webから読めるようにしようと思い、ネットで調べてみたら、Pythonで書いているのが多かったので、それにならってみたのだが、どうも SPI の Python ドライバ(というかラッパーAPI?)py-spidev がうまく動かず、温度を読み取れない。 MCP3002 のデータシートも読みながら、xfer2 関数を呼び出してみるのだが、読み込まれるのは 0 とか、たまに、書き込んだ値がループバックのように返ってくるだけ。SPIかADCがおかしくなったのかと思いきや、Ruby のプログラムからは値が読めている。 調べていくと、 SPI のループバックテストをするコード spidev_test.c があったので、これを試したところ、SPIは問題なく動作している。 で、もういちどRPiを再起動したりして、いろいろやってみたところ、うまくいく方法が見つかった。 r = spi.xfer2([1, (2< とするとうまく行くようだ。もともと Ruby のコードや ADC のデータシートを参考にして、引数のリストを [0x68, 0x0] としていたけど、これだとうまくいかない。それどころか、SPIが中途半端な状態になってしまうのか、Ruby のプログラムで読んだ値までおかしくなってしまう。 実際にどんな波形が出ているのか気になるところだけど、とりあえず動いたのでよしとする。 今回参考にしているのは以下のサイト。 http://raspberrywebserver.com/cgiscripting/rpi-temperature-logger/

RasberryPi で温度ロガー作成計画(キックオフ)

今夜は、久々にラズパイ (RaspberryPi) で遊ぶ。と言っても、温度センサで温度を測ってみるというだけ。と言っても、簡単工作キットのアナログ温度センサとADC(アナログデジタルコンバータ)を使う。正直言って、ADCを意識的に使うの人生で初めてかもしれない。 ちなみに、ラズパイには ADC が無いので、ラズパイだけで温度センシングするには、デジタル出力の温度センサ(どうやら DS18B20 が有名らしい)接続するのが一般的のようだ。 でも、今回はキットに入っている温度センサ MCP9700E と、ADC MCP3002 を使う。(最初は MCP9700 もてっきりデジタル出力かと思っていたのだけど、データシート見ると違った。) 参考にするのは、キット提供元がやっているブログ「Raspberry Pi 電子工作」の記事 「Raspberry Piで温度センサー。部屋の気温を取得しよう」 。 まず、回路を組む。キットのブレッドボード上に配線する。一応データシート見て進めるのだが、結局、インストラクションに従う。最初、GNDの接続が間違えていて、ラズパイが起動しなくて焦ったが、接続を直したら大丈夫であった。 で、次に pi_piper が必要ということで、"sudo gem install pi_piper" を実行したのだが、「mkmf がない」とエラー終了したので、ネットで検索して "sudo apt-get install ruby-dev" を実行したらOKであった。 次にやることは、デフォルトで無効化されているSPIを有効化する。これは、 "/etc/modprobe.d/raspi-blacklist.conf" を編集して、 "#blacklist spi-bcm2708" とコメントアウトして再起動。 正しく認識されていれば、SPIは /dev/spidev* という形で見えているはずなのだが、見えていなかったので、別の方法 "raspi-config" から Enable にしてみた。今度はバッチリだった。 ここで、あまりに寒いので、床暖の入っている二階へ移動。ラフロイグのクォーターカスクを片手に作業を進める。ちなみに...

いまさらPHP

いまさらながら、PHPでコーディングをして遊んでいる。C言語的な感覚で、なおかつ、スクリプト言語の気軽さで記述できるところがなかなか良い。 HTMLと混ぜることもできるので、動的サイトが少ないコード量で実現可能でもある。ただし、プレゼンテーション(表示)とロジック(計算)が分離しにくいという問題もある。 完全に分離させようとするのであれば、プレゼンテーションのHTMLには、コンテンツ部分を特殊マークアップしておいて、PHPコードでそれを置き換える方法をとれば良いのだろう。 と、どうでもいいことを思っている。

TV録画閲覧サイトに検索機能を追加

イメージ
TV録画(録画じゃなくてもいいのだが。。)閲覧用のサイトに検索機能を追加してみた。タイトルのみで(疑似)フリーワード検索。データベースは使用せず、PHPの単純なパターンマッチングで引っ掛けてくる検索アルゴリズム。例えば、「ショーン」で検索すると、「ひつじのショーン」のみが表示される。 ところが、検索がキーワードのOR条件になっていたことが判明した。例えば、「女子のフィギュアスケート」を検索しようと、「女子 フィギュア」で検索すると、女子も男子も関係なく、フィギュアスケートに引っかかった録画が表示されてしまう。 アルゴリズムを改良せねば。。パターンマッチングを少し工夫して点数化してソートかな。

TV録画閲覧サイト試作

イメージ
というわけで、TV録画閲覧サイトを試作してみた。ほとんど初めて本格的に(?)PHPを触ったので、少々時間がかかってしまい、結局昨夜はほとんど徹夜だった。でも、一番時間がかかったのはスマホやタブレットに対応したサイトにするところと、スタイルシートの設定のところだったりするのだが。。。 当初はTiny Web Gallery をいじるつもりだったが、なかなか大掛かりなシステムになっていたので、結局少しずつ自分でスクラッチから作ることにした。まずはファイルリストを表示するところから初め、少しずつインクリメンタルに強化していった。 そして出来たのが、以下のページ。ひとまず、録画開始日時で降順にリスト表示するようにした。録画が、サムネイルとともに、リスト表示される。このリンクをクリックすると、HTML5のvideoタグで埋め込まれた動画が表示されるようになっている。動画表示ページもPHPになっていて、query stringsでファイルを渡すようになっている。(まあ、大したことないが。。)あれ、今見ると、タイトル表示が変(日付の情報が入っている。。)修正しないと。。。 今後は、曜日やフリーキーワードで検索できるようにしようと思う。あとは、外でもアクセスできるように、アクセスコントロールも追加したい。少しずつ改造していこう。

Raspberry Pi + dovecot (IMAP server)

Postfix で SMTP サーバーができたので、つづいて dovecot を使用して IMAP サーバーを設定してみた。 ネットの解説を頼りに設定したのだが、なかなか動かなかった。というより、IMAP へ接続できなかった。しばらく悩んだ末、 dovecot-imapd のインストールが必要であることが判明、これをインストールすると難なく動いた。 続いて、TV録画した動画を Web サイトから閲覧できるようにしようと思い、Tiny Web Gallery というフリーの PHP ベースの CMS を試してみている。これに少し手を入れれば、録画番組を楽に検索したりできそうな気がする。 このシステムのいいところは、データベースを必要としないところ。つまり、RasPi のような非力な環境で DB を動かす必要もなければ、別途 DB サーバーが必要となることもない。(最近の NAS は DB サーバーにもなったりするのだろうか。。。)ただし、データが多くなってくると、動作が重くなる可能性が高いと思われる。が、とりあえずは、これで十分。 Apache2 + PHP5 を User Dir で有効にするためには、 /etc/apache2/mods-enabled/php5.conf を修正する必要があった。デフォルトでは無効になっているので、これをコメントアウトする必要がある。 これでとりあえず、サンプルギャラリーが表示されるようにはなったが、途中で読み込み中のまま固まってしまっている。もう少し見てみないといけない。 ちなみに、最近 Apple TV 2 をほとんど使っていないので、 Jailbreak してこういう動画を自由に見られるように改造したほうがいいと考えている。というわけで、やってみたいこと(なおかつ、追加の経費がほとんどかからずできること)がまた増えた。

Postfixでリモートメール送信

RasPiで動作中の Postfix メールサーバ。これまではローカルの配信のみだったけれど、リモート配信を試してみたところ、なんとかうまく行く方法が見つかった。 参考にしたのは、 Postfix でメールリレーの設定 (SMTP クライアント + SMTP Auth) 。 /etc/postfix/main.cf に relayhost = [smtp.example.com] smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = と記載を加える。次に /etc/postfix/sasl_passwd を作成する。内容は以下。 smtp.example.com    username:password これをハッシュにかける。 % sudo postmap hash:/etc/postfix/sasl_passwd 最後に、postfixの設定をリロードする。 % sudo service postfix reload これで、sendmail コマンドなどでメールが送れるようになるのだが、その際、 "envelope sender address" をきちんと設定しないと SMTP 認証ではじかれる。私が使用したプロバイダー (hi-ho) の場合、username (=自分のe-mailアドレス)を -r オプションで "envelope sender address" に指定する必要があった。例えば以下のように。 % sendmail -r username alice@wonderland.net < mailbody 一昔前はダイレクトにメールを送ることができたものだが。。。スパム対策などのため、仕方が無い。

rsync のオプション忘れ

RasPi の設定をバックアップするために cron.daily に追加したバックアップスクリプトなのだが、肝心の rsync オプションを追加し忘れて、初回以来バックアップされていなかったことにようやく気がついた。"-a" オプションを追加して、とりあえず動作するようになったみたい。 TV録画エンコードのほうは、FFmpeg のエンコーダオプションをいろいろいじってみたら、かなりエンコード速度が変わることがわかった。" FFmpeg x264EncodingGuide " を参考に、いろいろと試してみたところ、以下の設定に変更。 -c:v libx264 -preset superfast -profile:v baseline -level 3.0 Core i5 750という古いCPUのマシンで frame rate 100fps を超える。h.264 の威力をほとんど生かしきれない設定。Baseline Profile なので B frame も使わない。まあ、これぐらいしないと、非力なマシンには辛い。

メールサーバーのセットアップ

昨夜は Raspberry Pi にメールサーバーをセットアップした。何が良いのかよくわからなかったが、実績もあり、機能が十分で比較的軽量に見えた Postfix + Dovecot を選択。 結局、インストールしただけで終了。設定とテストは週末にやろう。外部のSMTPサーバへの転送を実現するためには認証が必要。ここでつまづきそう。 あとは、USBの無線LANドングルを追加した。設定に少し手こずったが、動いている。有線とのダブル接続。 これでVPN接続を通して、同じマシンのサービスにアクセス可能になるはずだったが、どうもそうならないみたいだ。。。要調査 2TBのHDDを増設して、自動バックアップを開始した。ただし、タイムマシンのような機能は持たせていないので、過去の設定に戻ることはできない。。

VPNまた接続できず

週末接続に成功したVPNだが、今日はまたもとの状態に逆戻りしてしまった。 同じWiMAXで接続していても、アクセスポイントによって挙動が変わるらしい。フォーラムに現象を報告しておくべきか。 仕方ないので、SSHのポートフオーワディングでお茶を濁している。 ちなみに、SoftEther VPN は3/21にアップデートされたので、サーバのほうも更新しておいた。

Raspberry Pi で Web Cam

イメージ
Raspberry Pi で Web Cam を使ったストリーミングを実現するべく、作業開始。ちなみに、手元にあるカメラは "Logicool HD Pro Webcam C910" である。 ネットで検索すると、実に情報は沢山そろっている。どうやら video4linux2 というデバイスドライバを有効にし、mjpg-streamer などを使うみたいである。 参考にしたウェブサイトは以下 Howto : UVC対応Webカメラを使用してストリーミング配信をおこなう Raspberry Pi用赤外線カメラPi NoIRの映像をandroidで表示してみた How to install or upgrade UV4L on Raspbian (for the Raspberry Pi) まずは UV4L をインストールするところから開始し、問題無くインストールできたので、mjpg-streamer をダウンロードしてコンパイル。 ここでおもむろに C910 を Raspberry Pi の USB ポートに直接接続。サイトによっては「バスパワーだけでは足りない」と言っていたので、電源が落ちてしまうかと思ったが、接続だけでは問題なし。動作時でも、フレームサイズ 320x240、フレームレート 10 fps であれば、バスパワーで問題無く動作している。ただし、C910 の他には何もUSB接続はしていない。 カメラをUSB接続すると /dev/video0 が現れた。そして、コンパイルしたばかりの mjpg-streamer を起動すると、カメラの電源が入った。その状態で、RasPi のポート 8080 へウェブブラウザからアクセスしてみると、見事カメラからの映像が配信されていることが確認できた。 Mjpg-streamer の配信画面 あとは、これを自動的に起動するようにすれば、簡易 Web カメラの完成である。ポートを開ければ、外部からでも見ることができる(やりたくないけど)。VPN接続すれば、ポートを開けずとも見れる(それ用に USB WiFi子機を注文した)。 さらには、mjpg-streamer のソースを参考にすれば、自分で Web カメラの映像を自由に処理することも可能。例え...