人気ブログランキング |

<   2014年 06月 ( 4 )   > この月の画像一覧

Raspberry PiをRegzaのLAN-HDDとして使ってみる

東芝の液晶テレビ"regza"(我が家はZ1シリーズ)は、LinuxのsambaをLAN-HDDとして番組をそれに録画することができます。
実際私は玄箱をLAN-HDDとして使っていて、普段はregza直結のUSB-HDDに撮っていますが、保存版?やあんなのやこんなのは、サーバの置いてある部屋のLAN-HDDに保存用として録画したりムーブしたり、便利に使っています。この用途にRaspberry Piも使えないかテストしました。


Raspberry Piの設定

Raspberry Piには既にsambaはインストール済みなので、玄箱の設定を参考にして、smb.confに設定を追加します。以前の玄箱への設定を参照して書き換えます。そしてsambaサーバをrestartします。

service samba restart

これでRaspberry Pi側の設定は一旦終了、これで使えるはずです。



次はregza側の設定です。
リモコンの設定ボタンのレグザリンクメニューから、LAN-HDDの設定を説明書に従い行います。

d0222779_01682.jpg


smbdが動いていれば、regzaで自動的に拾ってくれます。それを登録すればOK。



不具合発生

一通りregzaの設定をした後、一応LAN-HDDの接続テストを行います。

d0222779_034754.jpg

NG!のメッセージがでました。
d0222779_044575.jpg



一応玄箱とは同じ設定、玄箱のsambaのバージョンは3.5.6でRaspberry Piは3.6.6でRaspberry Piの方が新しいです。この違いが明暗を分けている?

その他、玄箱とRaspberry Piの違いはというと、日本語環境?(玄箱は古いのでEUCのまま)、それとも転送速度?


ということで転送速度を確認してみました。

↓これはRaspberry Piの転送速度
d0222779_065222.jpg


↓これは同じファイルを玄箱で転送した場合の転送速度
d0222779_08172.jpg



結果、Raspberry Piが別段遅いと言うことは無いようです。逆に古い玄箱よりちょっと早い。この程度の差しかないなら、LANの速度が決定的な違いではないということが判ります。



気になったのはテストがすぐNG!が返ってくることです。このレスポンスだとRaspberry Piが応答していないと思われます。

一応logのレベルを上げて、/var/log/sambaの下のログを確認したところ、log.regzaのlogファイルが出来ているものの、サイズはゼロです。だいたいこういう場合はアカウントに問題があるので、もう一度smbpasswdを作り直しました。

smbpasswd -a nobody

smbpasswdはsambaの標準には無いかもしれないので、一応以下でインストールされます。

apt-get install samba-common-bin


実は動く

色々試しているにもかかわらず、NG!は消えません。
1時間くらい格闘していましたが、ダメもとで録画してみると、あっさり動作する。

なぜ??

※16GのSDカードにとりあえず録画エリア作りましたが、1時間番組を撮ることができました。撮った番組をRaspberry Piから玄箱へムーブしましたが、問題なくできました。

念のため、玄箱のテストも実施しましたが、いままで一度も失敗したことがない玄箱も、たまにしかOKが出ません。なんか厳しくなったんですかね??
logが残っていないのは???なのですが、とりあえず使えているので良しとするか(基本いい加減です)

d0222779_0124224.jpg

LAN-HDDの仕様なのか、早見はできないのですが、一応玄箱と同程度には使えることが判りました。
by tkn384 | 2014-06-25 00:16 | Raspberry Pi

Raspberry Piコンソールをトラ技ARMライタで作る

ぼちぼち弄っているRaspberry Piですが、sshで接続して使っているとよく切断してしまいす。

Windowsからteraterm proで接続したままだと、時には10分程度でteraterm proが切断してしまいます。たまたま調子の良い時は数時間つなぎっぱなしでも落ちないのですが、不安定です。そして、落ちた事に気が付いて再起動しようとすると、”拒否されました”となり、再接続できません。つまりサーバが応答していない状態です。その状態も、しばらく(不定期ですが概ね数分~数十分)経つと何故か接続できるようになります。

ssh特有の最初はタイムアウトかと思ったけど、時間が不定期だし、同じTeratermProで接続している玄箱は何日放って置いても切断されないところをみると、サーバ側だと考えます。sshが良くないのかと思って、apt-get install telnetdでtelnetをインストールして確認してみたけど、症状はsshと同じ。telnetでもsshでも症状が起きるタイミングは同じでした。(sshがダメならtelnetもダメ)


この状態が良くわからなくて、ネットの中でウワサされているRaspberry Piの”電源が弱い”という問題であれば、ハングアップしていたりするんでしょうが、この状態に陥った場合でも、コンソールでログインすれば普通に使えますし、他からpingを打ってみると到達します。ただsambaはアクセスできなくなっていて、Windowsからは”見つかりません”になります。各サービスのlogを見てもそれらしいエラーはありません。pingは通るのでハードウェア全体が落ちているわけではなさそうです。つまりソフトウェアとしてサービスがサイレントで落ちているか、一時的にネットワークのハードウェア部分だけ不調に陥るんじゃないかと。監視する環境を整える必要が出てきました。


コンソール作成の計画
telnetやsshが落ちる原因を調べるため、監視する環境を整える必要があります。不安定なイーサネット経由で監視していては埒があかないので、落ちないコンソールが必須です。残念ながら我が家の事情で、Raspberry Piを置いている部屋には、PCは有るものの、HDMI端子付きのテレビはありません。HDMIテレビのあるリビングや寝室にはごちゃごちゃした機械は置きたくないので、サーバの有る部屋にて、PCを活用してコンソール接続出来ないか考えました(普通の考えですが)。


コンソールケーブルを作成する為の段取りを考えると、
Raspberry PiのGPIOコネクタにはシリアルコンソールの端子がでていて、前人の記事でも多く展開されていて参考になります。ただ、私はわざわざ安いサーバを買ったのに、金をかけてUSB-シリアルの変換ケーブルを買うほど欲しいワケではないので、なるべくそのへんのモノで安く簡単に済ませたいと考えました。

そこで思い出しました! そういえば、トランジスタ技術2014年3月号(トラ技)についていたおまけトラ技ARMライタはUSB-UART変換機能もあるので使えるな!と。

このトラ技のおまけの”トラ技ARMライタ”とは、ARMのマイコン付きの半完成品で、コネクタとスイッチを取り付ければ即使える代物で、これがおまけとは大判振る舞いです。なんか1,000円くらいはしそうなくらいだけど、いつものトラ技の本自体の値段+100円で手に入るわけです。私は別に使う予定は無かったけど、「100円プラスでこれが付いてくるなら買っておくか」ということで、持っていました。
このおまけの機能のうち、USB-UART変換機能のみを使います。


トラ技ARMライタの作成~設定
トラ技の本誌の通り、タクトスイッチとUSBコネクタ、入出力用のピンを半田付けします。結構細かいので、かなり先っちょの細い半田コテが必要かも。私は30Wのでやったけど、先がランドより大きかったので結構厳しかったかな。ヤスリがあれば尖らせるって手もあるかもしれないけど、できれば細いものを準備するのか良いかも。ちょっと細かい半田付けの技術が必要です。

d0222779_23225158.jpg

次に、トラ技ARMライタの設定をします。ISPのスイッチを押したままUSBを挿すと、WindowsのエクスプローラからUSBメモリのようにライタの中のファイルが見えます。
トラ技本誌の通り、元々のファイルを削除し(勝手に復活するので思い切って削除)、LPC11U35_USBCDC.binをコピー&ペーストします。これでトラ技ARMライタ側のファームウェアの準備は終わりです。

更に次に、このトラ技ARMライタをwindowsで使用するための、windows側のドライバをインストールします。しかしこれがまたちょっと問題あり(後述)

私はトランジスタ技術2014年2月号のcd-romからドライバを取ったのですが、いくら場所を指定しても”ドライバ見つかりません”となってしまう。こんな所で躓くのもおかしいと思い、ググって見たら‥‥、有りました。.infファイルにミスがあったそうで、トランジスタ技術のhpにお詫びと対処済みのドライバがアップされていました。


ドライバを読み込ませた後TeratermProを起動し、シリアルポートをトラ技ARMライタの接続されているCOMポート(デバイスマネージャーのポートで確認)を設定し、スピードを115200bpsに設定します。念のためトラ技ARMライタのresetボタンを押しておきましょう。(USBの抜き差し相当の動作)



Raspberry Pi側の設定
次にRaspberry Piとトラ技ARMライタの接続を行います。UARTの接続は、送り(T)と受け(R)の2本と、GNDだけ接続すればokなので、接続自体は簡単です。

   














トラ技ARMライタ Raspberry Pi
CN1-1(GND) 6pin(GND)
CN1-9(Tx) 10pin(Rx)
CN1-10(Rx) 8pin(Tx)

d0222779_23422166.jpg


Raspberry Pi自体の設定は特に必要がありません。もともとUARTの物理ポートはコンソール情報を流すように設定されています。ここまで接続がうまくいけば、コンソールの情報が流れるはずです。


トラブルあり
ただ、私は最初はうまく表示されませんでした。接続しても何もteraterm proで反応が無く、何かが壊れているのか設定がおかしいのか‥‥。telnetでログインするとコンソールのttyAMA0のgettyが反応していないことから、コンソールとして認識していないことは解る。接続も3本しかないので間違いようがない‥‥。

最初からトラ技ARMライタの設定をやり直したところ、Windowsのドライバがうまくインストールされなかった事が判明。どうも一応完了してエラーが無い状態に見えても、正常に働いていないということでした。
私の場合、潔くドライバを削除してからまたイチから入れ直したところ、正常に動くようになり、やっと無事にteraterm proの画面にコンソールのメッセージが流れるようになりました。

Raspberry Piにイーサネットを接続せずに、TeratermProにはコンソール画面
d0222779_23401258.jpg

ttyもttyAMA0で接続(トラ技ARMライタのUART経由で接続)
d0222779_23405030.jpg


これでしばらく2つのTeratermProの画面を見比べて、落ちる原因を監視していきます。
by tkn384 | 2014-06-18 23:53 | Raspberry Pi

新しいオモチャ ”Raspberry Pi”入手

秋葉原の定番コース、千石通商にふらりと行った際、ちょっと気になっていたRaspberry Pi(TypeB)が並んでいたので、ケースと一緒に購入しました。

Raspberry Piはワンボードの中に、CPU、メモリはもちろん、イーサネットアダプタ、ディスプレイアダプタ、オーディオ、USBアダプタも含み、ストレージとしてSDカードを使い、すべてがこれワンボードで完結するマイコンです。しかもそれがdebianベースのlinuxでも動くとなれば、先入観もなく使えそうです。
d0222779_0192027.jpg


今までの玄箱だと、やはり3.5インチのハードディスクがメインの構造となっているため、どうしても消費電力が気になります。あと、今となっては玄箱のスペックも少々物足りない気まします。

何はともあれ、新しモノ好きの私としては黙ってはいられなく、並んでいるのを見た瞬間、衝動買いしてしまったというわけです。


期待していることは、


  • 省電力サーバ
  • PIOが出ているので上手く利用したい

というところです。
今のところはまだひよっ子サーバなのですが、使っている玄箱の用途にどれだけ近づけるのか、もしくは追い越せるのかが知りたい。それに向かって日々調整をやっているところです。



具体的にやってみたいこと


今後Raspberry Piに育てたい機能は、今の玄箱でいつも使っている便利な機能。具体的には、


  1. PCのファイルサーバ(samba)
  2. MediaWizのサーバ(wizd)
  3. regzaのサーバ
  4. ftpサーバ
  5. webサーバ
  6. DLNAサーバ(mediatomb)
  7. VPNサーバ

とりあえずネットdeレックサーバはもういいかな‥‥。とりあえず今玄箱で使っている機能と同じことをさせて比較したい。また、PIOも内蔵しているので、外部接続回路を作って行きたいなど、目標にやっていきたいな、と。(先日、玄箱にもPIOとしてUSB-IO2.0を買ったばかりですが)



構築開始

とりあえず、機能を片っ端から入れてみます。

動かすまでは、全く苦労はありません。その手の話は既にたくさんの前人が更改しているので割愛します。

最初だけはHDMIケーブルをつないでコンソールで設定します。日本語化も前人の通りに実施すれば問題ないです。別にfontを入れる必要も無いですね。jfbtermを起動すれば問題なく使えました。localeとtimezoneだけは最初に済ませます。
そしてサーバとして仕様するには固定IPアドレスを設定しておきます。
/etc/nwtwork/interfacesを修正すれば簡単に変更できます。


auto lo

iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.xxx ←固定アドレス
netmask 255.255.255.0
gateway 192.168.0.xxx ←環境に合わせて

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp





sambaサーバの作成

SDカードだけだと、さすがに容量的にサーバとして役に立ちません。何をやらせるにも、サーバとしてならば外付けHDDは必須です。普通に使うだけならば、非常に簡単に機能を追加できます。

apt-get install samba


これで、/etc/samba/smb.confの設定を行えば、windowsなどとファイル交換できる状態になります。





試しに、3.5インチのHDDの250GBのHDDを空けてUSB-ATAの変換ケーブルで接続しました。このHDDは最初はNTFSでフォーマットされていたため、リードオンリーで見えます。サーバとして使うためにとりあえずext2のディスクを作ります。

fdisk /dev/sda   (sdXは/var/log/syslogで確認)
mkfs /dev/sda1  (ext3のフォーマット)
終わったらmount /dev/sda1 /extでマウント。

これでファイルサーバとしては使えるようになったはずです。

とりあえず、ここまでにして、今後続けていきたいと思っています。

by tkn384 | 2014-06-18 00:29 | Raspberry Pi

USB-IO2.0を使う

先日たまたま本屋で見て買ってきた”トランジスタ技術2013年2月号”の付録に触発されて、また電子工作したい熱に駆られ、ちょっと秋葉ブラをした際に、秋月電子でUSB-IO2.0というusbとPIOのキットを購入しました。
d0222779_2253565.jpg


このキットについて帰宅してデータを調べていたら、元はmorphy企画というグループが企画製作していたUSBIOという機器と互換機をkm2NetがUSB-IOとして製造し、そのUSB-IOもマイコンの製造中止により、USB-IO2.0となった、とのこと。

参考→http://km2net.com/shop/index.shtml


しかし、歴史がある反面、今現在入手できる情報が意外に少なく、後で後悔することに。
もう買ったのを後悔しても時既に遅し、なんとか無駄にならないようにがんばるしか有りません。一応動くところまできたので、備忘録として書いておきます。




  1. 動作テスト
    キットに付属のCDROMをPCに入れ、内容を確認。visualBASICのサンプルプログラムが付属していて、windows95SP2以上くらいならば、説明書にあるとおり専用のドライバ無しで標準のままつかえるんじゃないでしょうか。ただ、そればwindowsの場合です。


    組み込みに使うならば、巨大ソフトのwindowsなんて使いたくないという兄も多いと思います。私もその一人。windowsで扱うのは簡単だけど、応用が利かないから、ね。

    そこで、linuxです。私としては玄箱で使いたい。我が家では、初代玄箱をサーバとして使っており、これにPIOを接続すれば、外部からon/offやらインプットならのインタフェースとして、色々夢が広がりそうです。

    平日は仕事で夜遅くまで家に帰れば無い生活をしている私としては、外から家の家電の操作ができるのは便利でもあり、機械好きとして興味があります。
    その点、我が家の玄箱は外出先からsshでのログインやvpnでの接続も準備完了しているので、環境としてはそろっています。あとはこのusb-io2.0のハードを玄箱で動かすだけ。
    でも、なかなか一筋縄ではいきませんでした。




  2. 方法の検討

    RS-232Cの時代にはc(++ではない!)で色々ドライバを試行錯誤で創っていたものですが、usbというヤツはオブジェクト指向でガチガチのシロモノなもんで、様々な.dllやら.oが絡まっていて、にわかに「よし、やろう!」と思っても、スキルがないとくじけてしまいます。実際そうでした。
    幸い、先人達が残してくれた足跡が多数ありましたので、それをググって確認してみました。しかし、記事があまりにも古く、URLのlinkがことごとく消えて無くなってしまっています。これには正直困った。


    断片的な情報から、以下のように大きく二つの方法があることがわかりました。



    • USB-IO2.0のドライバをkernelに喰わせてしまう方法

      kernel自体がUSB-IO2.0をPCハードの一部として認識させ、kernel内にUSB-IO2.0のリソースを確保する。
      メリットは、もう何のアプリも無く、直接ポートをたたけばUSB-IO2.0が反応すると言うことでしょう。デメリットは、やはりkernelに細工するので敷居が多少高いことでしょうか。


      私もポートの値を変更するだけで書き込みできるこの方法を実施したいと思ったのですが、かなり以前の問題で填りました。このUSB-IO2.0が世の中に出た頃(2004年頃?)はkernel2.4系が最新だったようで、先人達足跡もkernel2.4が中心で、今のkernel2.6系のドライバも一応開発はされたようなのですが、今やURLはlink切れで配布先が閉鎖されてしまっていてドライバが入手できず、自分ではドライバを作成する技量もないので断念せざるを得ませんでした。




    • USB-IO2.0をアプリ経由で操作する方法

      USB-IO2.0のアプリを立ち上げて操作します。USB-IO2.0と情報をやりとりするために、アプリからusbのライブラリを操作することで情報をやりとりします。アプリ次第で使い勝手は左右され多少使い勝手が落ちるとは思いますが、幸い、先人達の足跡がソースで残されていたため、こちらはkernelのバージョンに依存することなく利用できそうです。


      この方法でUSB-IO2.0を使用することとします。



     
  3. 玄箱での準備
     
    まずはusb関連のモジュールをインストール。

    apt-get install libusb
    apt-get install libusb-dev
    apt-get install usbutils


    ここでusbの状態をチェック。


    lsusb

    (なにも表示されず‥‥)



    我が家の玄箱では普通にusb-hddを接続しmountして使っているので、usbのhotplugとしての設定はできているモノと思いこんでいました。しかし、USB-IO2.0を接続しても、usb-hddを接続しても、lsusbを実行してもなにも表示されずにプロンプトが返ってくるだけです。
    気持ちが悪いので調べたところ、lsusbは/proc/bus/usbの状態を読んでいるとのこと。確認すると、/proc/busの下にusbが存在していませんでした。


    私の場合は次の方法で表示するようになりました。
    /etc/fstabに以下を追記


    none /proc/bus/usb usbfs defaults 0 0


    再スタートさせると、lsusbの結果が表示されるようになりました。

    <なにも接続しない場合>

    miz-testbox:/mnt/share# lsusb
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


    <USB-IO2.0を接続した場合>

    Bus 003 Device 004: ID 1352:0121
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub



    ベンダーidの1352と、デバイスidの0121が表示されるようになりました。これでアプリの方でデバイスの認識ができるようになりました。


  4. 動作確認
    玄箱のlinux上で認識した状態で、確認プログラムを動かします。

    http://km2net.com/usb-fsio/sample.shtml

    から、サンプルプログラムlinux_usbiofamily.zipをダウンロードします。


    コンパイルする前に、一応ソースを確認しましょう。
    私の場合、秋月バージョンなのでヘッダファイルのどこかのベンダコードとデバイス番号を変更しました(どこだったかは失念)


    コンパイルします。


    gcc -lusb -o io_test io_test.c

    問題なくコンパイルでき、USB-IO2.0のアシにテスターで測ると、期待通りの電圧が出力されていることがわかりました。



  5. 動作確認2

    テスターで測っても面白くないし面倒なので、目で見えるようにしました。
    とりあえず、セブンセグメントLEDを光らせる事にして、ソースをちょっと追加させて貰いました。(引数をGPIOに出力するだけ)



     /*----------------------------*/
     /* USB-IO Family TEST */
     /*----------------------------*/

      #include
      #include
      #include
      #include "usbiofamily.h"

      int main(int argc, char **argv)
      {
      int ret;
      int dat;
      int hikisuu;
     
      struct usb_bus *bus;
      struct usb_device *dev;
      usb_dev_handle *udev;
     
      unsigned char sendData[64];
      unsigned char recvData[64];
     
      if(argc<2){printf("hikisuu wo ireru!\n");exit(-1);}
      hikisuu=strtol(argv[1],NULL,0);
      printf("hikisuu=%d\n",hikisuu);
     
     
      /*-------------*/
      /* Device Open */
      /*-------------*/
      bus=io_init();
      dev=io_find(bus,dev);
      if( dev==NULL ){
      puts("io_find NG");
      exit(1);
      }
     
      udev=io_open (dev);
      if( udev==NULL ){
      puts("io_open NG");
      exit(2);
      }
     
      /*------------------------*/
      /* Port 1,2 in_out */
      /*------------------------*/
      memset(sendData, 0, sizeof(sendData));
      sendData[0] = 0x20; //in out
      sendData[1] = 0x01; //port1
      sendData[2] = hikisuu; //out
      sendData[3] = 0x02; //port2
      sendData[4] = 0x07; //out 0x07
      io_send_recv(udev,sendData,recvData);
      printf("in:P1(%x),P2(%x) out:P1(%x),P2(%x)\n"
      ,recvData[1],recvData[2], sendData[2],sendData[4]);
     
      /*------------------------*/
      /* channel 1, 2 Analog input */
      /*------------------------*/
      memset(sendData, 0, sizeof(sendData));
      sendData[0] = 0x2A; //Analog input
      sendData[1] = 0x01; //channel 1
      sendData[4] = 0x02; //channel 2
      io_send_recv(udev,sendData,recvData);

      /*---------------------*/
      /* Device Close & Exit */
      /*---------------------*/
      io_close(udev);
     
      exit(0);
     }
     



    回路は、参考のdipスイッチの部分をそのままGPIO0~3に接続すればok。
    下4ビットをセブンセグメントに接続し、数字が変わることを確認します。


    d0222779_2192091.jpg





    <参考>
    http://www.narimatsu.net/nari_page/musbio.html
    http://www.rlc.gr.jp/prototype/led/seg7led/drive/drive.htm
    by tkn384 | 2014-06-08 02:32 | 玄箱


今の好きなことは、暇な時いじる玄箱とか家電とか


by tkn384

プロフィールを見る
画像一覧
更新通知を受け取る

カテゴリ

全体
家電
玄箱
電子工作
Raspberry Pi
未分類

以前の記事

2014年 09月
2014年 08月
2014年 07月
2014年 06月
2014年 03月
2013年 08月
2012年 05月
2011年 05月
2011年 04月
2011年 03月
2011年 02月

フォロー中のブログ

メモ帳

最新のトラックバック

ライフログ

検索

タグ

その他のジャンル

ブログパーツ

最新の記事

玄箱サーバ死亡
at 2014-09-23 16:39
初代玄箱USB増設
at 2014-08-31 14:05
RaspberryPiのバッ..
at 2014-07-21 23:31
Windows7とWindo..
at 2014-07-20 12:16
Windows7のPCを買い..
at 2014-07-06 01:48

外部リンク

ファン

記事ランキング

ブログジャンル

ネット・IT技術

画像一覧