簡易NAS比較 Raspberry Pi2 VS Aterm WG2200HP2017/01/05 01:13

USB接続のHDDを購入してラズパイにつないでNAS化しようと思ったが、
最近導入したAterm WG2200HPにも簡易NAS機能がある。
同じUSB接続のHDDを接続して、Raspberry Pi2+sambaとNAS機能の性能比較した。
Aterm WG2200HPのCPUは700Mのシングルコアなので、
900MhzクアッドコアのRaspberry Pi2の方に軍配があがると思われたが、
予想どおりの結果だった。

Aterm WG2200HP

Raspberry Pi2+samba

他の参考になる情報ソース
http://internet.watch.impress.co.jp/docs/column/shimizu/710985.html
WG2200HPの上位機種のWG2600HPと、Raspberry Pi3なら同じくいい勝負するかもしれない。
でもそこまで性能求めるならNAS専用機買うけどね。


Raspberry Pi2 OSインストール2015/07/01 00:39

Raspberry Pi 2を購入してOSをインストールしようとした時につまづいたのでメモ。

NOOBSのダウンロード、ダウンロードしたファイルを解凍してSDカードへコピー、ラズパイへSDカードセットして起動、インストールする対象の選択画面が出たのでRaspbianを選んで実行、、、
インストール完了までスムーズに進むかと思ったら、インストールが途中で止まる事象が起きた。
ダウンロード失敗かと思い再度ダウンロードしてトライしてもダメ、SDカードを上書きフォーマットした上で実施してもダメだった。

原因は不明だが、SDFormatterを使用してフォーマットする際にオプション「論理サイズ調整」をONにする事で事象が解消した。(下記) 初期状態でもファイル読み書きできたので、フォーマット作業をスキップしてそのままコピーしたのがまずかったらしい。基本に従わないとやっぱり駄目だ。

なお、microSDカードはSAMSUNGのClass10 UHS-I対応の16GBを使用していた。

python で Too many open files2015/05/26 23:34

Raspberry Pi上で、pythonにより、センサーのデータをシリアル経由で取得してログファイルに書き出すテストプログラムを作ったが、起動して1時間程度で、プロセスが停止してしまう。
Too many open files のメッセージを出して止まる。以下試行錯誤して対処したメモ。

■実施環境
  python 2.7
  OS : Raspbian
  基盤 : Raspberry Pi model B+


エラー個所はログ出力&画面表示機能を関数化した以下を呼び出す部分で発生した。
事例についてwebを探してみると、「closeしてないよ」という指摘が多いがcloseはしている。

# -------------------------------------
# ログ出力
# -------------------------------------
def logoutput(text):
  try:
    f = open("IoTGtwlog.txt","a")
    f.write(str(text) + "\n")
    print str(text)
  except Exception as e:
    print str(e)
  finally:
    f.close()

   
次に指摘されるケースはディスクリプタの上限数がなんちゃらという指摘。
Linuxでプロセスが開けるファイルの上限は決まっている。以下の方法で確認できる。
ulimit -n
1024
この上限を増やす設定を施す事で回避する方法が各地で紹介されている。
(ファイルディスクリプタの上限数を上げる対処方法)

しかし、今回openしているファイルは1つで、try命令の中のfinallyで
openしたファイルのcloseは指定していた。にもかかわらず
Too many open files のエラーが出た。
書き方が古いようなので、withを使った書き方に変更するが同じように開始20分でToo many open files のエラーが出た。close指定したけどcloseできてない?という事で、closeできるまで待つロジックを入れてみたが、同じ結果になる。

# -------------------------------------
# ログ出力
# -------------------------------------
def logoutput(text):
  with open("IoTGtwlog.txt","a") as f:
    f.write(str(text) + "\n")
    while (f.closed != True):
      f.close()
      time.sleep(0.1)
  print str(text)


お作法に習った記述をしたにもかかわらず、Too many open files のエラーが回避できない。
よくわからないので、ファイルに自力でログを記録するのではなく、pythonが持っているロギングツールを使う。以下に使い方かわかりやすく説明されたサイトがある。こちらを元に変更する。
http://symfoware.blog68.fc2.com/blog-entry-883.html

# -------------------------------------
# ログ出力
# -------------------------------------
import logging

def logoutput(text):
  logging.basicConfig(
    level=logging.DEBUG,      #デバッグモード
    filename='IoTGtwlog.txt', #ファイル名指定
    filemode='a',             #追記モード
    format="%(asctime)s %(levelname)s %(message)s"  #フォーマット指定
    )
  logging.debug(str(text))
  print str(text)


稼働テストをした結果、ログ出力ではエラーが出なくなった。
が、今度はシリアルポートが開けないためにToo many open files のエラーが発生した。

serial.serialutil.SerialException: could not open port /dev/ttyAMA0: [Errno 24] Too many open files: '/dev/ttyAMA0'

Raspberry Piでシリアル通信する時の処理は、ファイル操作のopen closeと同じで、論理パスに対してopen/closeするので、同じ問題が起きると推測される。シリアルは通信の都度、openしてread、writeしていたが、デバッグしてみると、どうやらclose命令出してもcloseしないので、最初にopenしたままcloseしないことにした。起動してからほぼ1日放置してみたが、Too many open files のメッセージは出なくなったので、この問題はとりあえず解決とした。


Raspberry Pi RDP接続 日本語keymap適用2015/04/11 02:09

Raspberry Pi にXRDPをインストールしてRDP接続するとキーボードがUSになる。
Shift + 2 キー入力の結果が「@ 」になる。
USキーを日本語キーボードにするための手順がWEBにある。
でもなぜか手順通りやったつもりなのに、うまくいかなかった事が解決したのでメモ。
シロウトがlinuxに手を出すと、想像もつかない所で引っかかる。

参照元
https://xrdp.vmeta.jp/%E3%82%AD%E3%83%BC%E9%85%8D%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
http://qiita.com/tsukaman/items/af79cde2a72d64c46261

作業ステップとハマり箇所
(1)RasbianにXRDPパッケージを導入
 →ここは間違えようがない
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install xrdp

(2)日本語キーマップファイルのコピー
 →root権限で実行する事(ハマる)
sudo su -
cd /etc/xrdp
sudo wget http://w.vmeta.jp/temp/km-0411.ini
chmod 644 km-0411.ini
sudo ln -s km-0411.ini km-e0200411.ini
sudo ln -s km-0411.ini km-e0010411.ini
sudo ln -s km-0411.ini km-e0210411.ini

(3) /etc/xrdp/startwm.sh ファイルをエディタで編集
 →ここも記載通り。以下を記載して後は#でコメントアウト。

export LANG=ja_JP.UTF-8

. /etc/X11/Xsession

(4) xrdpサービスの再起動
 →これも間違えようがない。
sudo /etc/init.d/xrdp restart


Raspberry Piにwebカメラを接続してOpenCVで表示する2015/04/08 00:07

Raspberry Piにwebカメラを接続してリアルタイムで画面表示させたい。それをスマホから見たい。

使用するカメラ:Logitech QuickCam Fusion

技術要素は3点
(1)Webカメラの画像をデスクトップに表示する
(2)表示した画像をリモートで見れるようにする
(3)スマホ側からRaspberryPiへリモート接続できるようにする



(1)Webカメラの画像をデスクトップに表示する
Raspberry Piにwebカメラを接続して、デスクトップに表示させるところまではOpenCVとサンプルプログラムを使用する。LinuxマシンへのOpenCVの導入と、Webカメラの画像を取得してデスクトップ上のウィンドウに表示するサンプルプログラムが以下に紹介されており、その通りの内容を順番に実行するだけでできる。

Installation of OpenCV for Ubuntu and Raspbian
Setting up OpenCV C++ for Ubuntu and Raspbian

作成するCPPソースファイル上で、画面表示サイズをパラメータ指定する。使用したカメラのスペック上は1.3MPIXELの撮影が可能だが、320×240に抑える。

作成したCPPファイルをビルドする。
$ g++ camera.cpp -o camera `pkg-config opencv --cflags --libs`

プログラムの実行
$ sudo ./camera

プログラムの終了
スペースを押すとキャプチャされる.
実行フォルダ内に「frame.png」という形式で保存される。

実行画面はこんな感じ。起動中は画面リフレッシュを繰り返すせいか、CPU使用率が振り切った状態のままになる。かなり高負荷だ。

(2)表示した画像をリモートで見れるようにする
これだけではRaspberry Piをカメラにしただけだが、ネットワーク越しにスマホからRaspberry Piのデスクトップ画面を見る事が出来るようにすれば、カメラ画像も見る事ができ、監視ツールとして使える。Raspberry Piに対してXRDPとよばれるリモートデスクトップ接続を可能にするサーバソフトをインストールすれば可能になる。基本的に
$ sudo apt-get install xrdp
でよい。詳しい説明はググると山ほど事例が出てくるので割愛。

※X11RDPと呼ばれるNewVersionが存在するが、残念ながらRaspberry Piでは使えませんよと書いてある。
http://scarygliders.net/2013/07/25/x11rdp-o-matic-version-3-now-released/

(3)スマホ側からRaspberryPiへリモート接続できるようにする
接続するクライアント側には、RDPクライアントをインストールし、Raspberry Piへの接続設定をする事で接続可能となる。iOS向けでフリーのRDPクライアントをいくつか試したが、以下が比較的ちゃんと動いた。設定の問題だけかもしれないが、Microsoft製のRDPクライアントではキーボードが正しく反応しなかった。

iRdesktop

さらにRaspberry PiにPPTPサーバを入れておけば、(セキュリティ上の懸念はあるが)外部からも接続できる。夢が広がる。もっと賢いやり方もあると思うが。。