midohajiフォト

2012-08-12

RaspberryPiでコンパイルとかせずにWifiドングルを使う(US-GWMicroNとか、ralinkの)

15:08

 どうも、こんにちは

 もう少し頻繁に書こう、そう思ったりしなかったり。

 

 さて先日、RaspberryPiが届いたのですが、

 USBx2と、HDMI、100MbpsのLANしかインターフェースがありません。

 自宅サーバならぬ外で使うサーバ的に触ってみたかったので、彼にはどうしても装備してほしかったものがあります。

 無線LAN

 家にあるのは、PlanexのUS-GW MicroNというものですが、こいつを装備してみたいと思います。

 ralink製のチップっぽいです。2870っぽい。

 とりあえずRaspberryPiに挿してみると、なんととりあえず認識はされてます。

 この調子で、Ubuntuで使う為にやった設定と同じ事をしてみようかと。

 大量にsudo叩くのもあれなんで、まずsudo suしておきます。ほんとはこういうのはよろしくないのかな。

 まず、aptで、firmware-ralinkと、wireless-toolsを入れます

apt-get upate
apt-get instal firmware-ralink wireless-tools

 多分、最新が入ってるぜ、と言われますが、まぁ一応確認。

 そんなら、今モジュールは読み込まれてるのかな、と、lsmod叩きますが入ってないです。

 なので、起動時に読み込まれるように、/etc/modules に、追記します。

#vi /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
rt2800usb

 こんな感じで、最終行を追加します。

 今度は

 /etc/modprobe.d/gw-usmicron.conf とかなんかファイルを作って、

 中身を以下のようにします。

install rt2800usb /sbin/modprobe --ignore-install rt2800usb; /bin/echo "2019 ed14" > /sys/bus/usb/drivers/rt2800usb/new_id

 echoでやってもらっても、viで編集してもらっても良いです。2019 ed14はお持ちのドングルに合わせてください(lsusbの結果です)

 出来たらまずリブート

 その後、再度立ち上がったら、またsudo suしてrootになってから、

modprobe rt2800usb

 これで、おそらくもう使えます。

 lsmodの結果は以下のようになってると思います。

Module                  Size  Used by
aes_generic            36429  1 
arc4                    1319  2 
rt2800usb              12510  0 
rt2800lib              49181  1 rt2800usb
crc_ccitt               1541  1 rt2800lib
rt2x00usb              12077  1 rt2800usb
rt2x00lib              43890  3 rt2x00usb,rt2800lib,rt2800usb
mac80211              253889  3 rt2x00lib,rt2x00usb,rt2800lib
cfg80211              180459  2 mac80211,rt2x00lib
snd_bcm2835            21485  0 
snd_pcm                82208  1 snd_bcm2835
snd_seq                59808  0 
snd_timer              21905  2 snd_seq,snd_pcm
snd_seq_device          6920  1 snd_seq
snd                    57668  5 snd_seq_device,snd_timer,snd_seq,snd_pcm,snd_bcm2835
snd_page_alloc          5383  1 snd_pcm
evdev                   8922  2

 ※使えなかったら、再度リブートしてみてください。

 ifconfig叩いてみましょう。

 :
 :
wlan0     Link encap:イーサネット  ハードウェアアドレス 00:xx:xx:xx:xx:xx 
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000 
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)

 なんて感じで出来てると思います。

 

 後は、僕はコマンドラインから無線LANの設定をするのが面倒なんで、wicdで設定しちゃいます。

apt-get install wicd

 でインストールしたあと、Xを起動。

 メニューで言うと、インターネットの下に「Wicd Network Manager」があります。

 コレを起動すると、Windowsでよく見るような、ネットワーク接続のマネージャ的なのが出てくると思います。

 あとは、これで設定しちゃえば、普通に使えます。

2012-06-21

Da VinciをやっぱりArduinoとして使ってしまって気付いた事。

23:26

 昨日、結局FLIPを使わずDa VinciArduino Leonardo互換ボードにしてしまいましたが、何故そうするのか考えてみました。


 わざわざArduinoに批判的な人の言う「不自由な環境」にしてしまったわけですから。


 考えているとだんだん、逆に、何故それほどまでに自分がArduinoを使うのか、と言う問題に頭がシフトしました。

 1.(半)完成品である事。もしくは、完成品のクローンであること。

  つまり、8MHzであろうが16MHzであろうが、クリスタルであろうがセラロックであろうが、知りたい物はいざとなれば「動く物を手に入れられる」。それも、必要十分かつ共通の回路を。

  たとえばPICやATTinyの作例なんかをみると、それにしか使えない物だったり、回路図に余計な物がついていたりします。

こっから、自分が使いたい物へ持って行くのもホネだし、逆に、自分が作った部分とボードの部分の切り分けが難しい。

  ここで、最初からメインボードをUNO互換、とか、mini互換、とか、Leonardo互換にしておけば、本物のUNOやらなんやらを繋いで、モジュール単体の試験が出来るわけです。

  逆に、モジュールUNOに繋ぐと動くのに、モジュールを自作Arduino互換ボードに繋ぐと動かない、なんてのは、自分が作ったボードの方が悪いって事です。

 2.Arduinoっていう「枠」があること。

 自由さが至高だと思ってる人は結構居ます。

 たとえば「書こうと思えばアセンブラでも書けるし、Cでも書ける。ライブラリってのはたとえば○○するには、△△と××ってのがあって、どっちを使ってもいいよ、好みです」

 これは凄い事かもしれない。実際、プログラマーって人種はそういうのを使いたがる。

 でもこれは職業プログラマをやっていて、大きく作る側と使う側で認識が異なる事を理解した。

 以下自分が気にしている事。

 1.同じ事が2種類以上のやり方で出来る場合は、どちらを何故推奨するかかならず明記する。

  ※どっちでもいいですよ、ってのは、全く答えにはなっていない。

  どっちでもいいからやりたいんであって、使う方にだって実はどうでもいい。そんな自由は実は要らない。逆に「これでしか出来ません」だったら、ブツブツ文句は言われるかもしれないけど、何も悩まず使ってくれる。

 2.出来れば、やり方と機能は1:1に結びついているべき。違う事をしたのに同じ事が起こる、同じ事をしたのに違う事が起こる。これは「たとえマニュアルに書いているとしても」やってはいけない作り。

  押したら交互に機能がトグルする、ってボタンなら押しこみ式のトグルボタンにして色が変わるとかで充分じゃない、とか思うかもしれないけど、実は2つの、「片方を押せば片方が出てくるラジオボタン」とか、左右に動かすスライドスイッチを用意するべき。だって3つ以上になると困るし。あと、PCだと、トグルなのに押したらキャプションが変わるとか意味不明。「分かりにくい」とキレられても仕方ない。

  人によってはボタンを連打する人も居る。

 3.人に教えてもらう時に、ちゃんと教えてもらった通りにやれば、その通りの結果が出る事。

  ※「適宜、環境に従って読み替えてください」はマニュアルとして確実に間違っている。それが知りたくて聞いたのに、自分で読み替えろとはどういう事だ。

   「xxxx(ウィンドウズで動かす場合は適宜読み替えてください)」とかよく見るけど、どうしてもの例外ケース以外、ちゃんとマニュアルを別個に書けと言いたくなる。

 4.枠を超える事が出来る仕組みも、枠で決める。

  あとは勝手にしてください。ってのは、とてもよろしくない。

  「勝手に拡張して○○ってのを作ってみたんだけど、どうも動かないんだ」こんな質問に答えられるわけがない。

  こんな感じで、これを拡張してくださいね、ってスタブを提供できれば、より良い。

  そしたら「えーっと、まず、一旦コード全部削って、スタブで固定値返すと動きます?」とか、「作った物単体では動きます?これ、単体を一通りテストするモジュールですのでお貸しします」なんてやりとりが出来る。

 この辺に対して、Arduinoはとてもうまい感じでやってます。

 使うのはIDE言語Arduino言語

 C++に毛が生えたような言語

 これでいいのです。

 これの上で作っていれば他の環境に持って行っても、下回りが旨く隠蔽してくれてそれなりに動くと言うのがポイントです。

 PORTB |~ _BV(1) よりも、よっぽど素直。

 あと、(4)も大事です。自分は普段シールドを「要らない」と言いまくってるが、実はあれは凄い物なのです。

 もちろんクローンから使う時も、Arduinoでのピンアサインさえわかれば簡単に繋げますしね。

 ピンアサインに関してもいろんなMCUでいろんな名前で呼ばれてる物に対して、「Digital 0〜14」「Analog A0〜A5」と名前がついてる事すら便利な物だと思います。

 こう考えたときに、よく出来てるなとも思うし、デメリットを考えてもArduinoが便利だなぁ、と思う感じ。

 ましてやDa Vinci。次に人に勧めるときは、多分これを薦めると思う。だってほんとに安いし。

 PICの充分なスペックMCUを二つ三つ買う値段で、USB直結のこれが買えちゃって、統一したAPIがあって、人に聞けて。

 Leonardoになって多少難しくなっちゃったけど、結局Arduinoを勧めると思う。結局WinAVRで組むことになろうが。

2012-06-19

レオナルド互換基板[Da Vinci]にArduino-ISPでUNOでブートローダを書き込む。

22:21

 ほぼ同じテキストが、サイトの方にもあります。


 先日、日本橋共立で1200円程度で発見。

 HIDでのキーボード関係を触りたかったので、思わず購入してしまいました。


 が。


 ブートローダArduinoじゃなくて、FLIPというやつでした。

 まぁ、どっちも同じ値段なんですけどね。でも見た感じFLIPとやらの方しかなかった。


 ブートローダ書き込んじゃえばいいや、と思って共立ライタ繋いでも、芳しくない。


 なんと、共立ライタがATmega32U4に対応していない!!


 これは困った。どうやって書き込もう。

 FTDIモジュールは、あくまでシリアルとして使いたい。

 それに成功例ばっかだし。


 と言う事で、敢えてArduino ISPを使ってみました。



・使った物

 Arduino UNO(R2)

 110Ωの抵抗。

 Da Vinci



・手順

 1.Arduino UNOが素の状態の時に、先にexamplesのArduinoISPを書き込んでおいてください。

 2.StrawberryLinuxのページから、da-vinci-32u.zipダウンロードしてきます。

  ブートローダのhexとか、ドライバとか、boards.txtが入ってます。

 3.Arduino IDEのboards.txtに、ボード定義を足す。

  StrawberryLinuxのページに修正済みboards.txtがあるので、それを使ってもいいです。

 4.ダウンロードしてきたda-vinci-32u.zip内の、「da-vinci-32u-master.hex」を、

 「davinci.hex」とリネームして

 「arduino-1.0.1\hardware\arduino\bootloaders\caterina」に放り込みます。

 なぜboards.txtの方と名前が違うのかはよく分からないです。

 5.つなぎます。

 Arduino UNOと、Da VinciISPコネクタは、

 Da Vinciを上から見たときのピン配置が

  -------
 |1|2|
  -------
 |3|4|
  -------
 |5|6|
  -------

 なんで、それぞれをArduinoにこの場所に繋いで下さい。

  -------
 |12|5V|
  -------
 |13|11|
  -------
 |10|GN|
  -------

 って感じに。

1:MISO

2:VCC

3:SCLK

4:MOSI

5:RESET

6:GND

 って事です。

 6.Arduinoの5Vと、RESETを110Ω〜160Ωで直結。

  これをしておかないと、ターゲットをリセットするときにUNOまでリセットがかかってしまいます。

  僕は手持ちが無かったので、330Ωを並列に二つ繋ぎました。

 7.Arduino IDEのTargetを[ツール]-[マイコンボード]から「Da Vinci 32U」に設定。

 8.同じく、[ツール]-[書込装置]から、Arduino as ISP

 9.[ツール]-[ブートローダを書き込む]で、ブートローダを書き込みます。

10.表示が「ブートローダの書き込みが完了しました」になれば完了。

  あとは、Da Vinci 32U with Arduino Bootloaderとして使えます。

  Da VinciArduino UNOの結線を外して、Da VinciBlinkを転送し、正常に転送が出来る事、光る事を確認してOKです。

2012-05-19

Arduinoとかのwebサイト始めました

01:37

どうも、お久しぶりです。

本当にお久しぶりです。

最近いろいろありましたが、何より5月。

実は5月生まれなんです。

そんなこんながあって、嫁の弟さんに、誕生日プレゼントとしてATmega328やらArduinoのパーツ一式とか、USB-シリアルモジュールなんかを頂きました。

喜び勇んで作って、ブログにエントリを書こうと思ったのですが、ブログって古い記事は流れちゃうんだよなぁ、と思い、

新しくWebサイトとして、ちゃんと書いてみました。

http://midohaji.ryokuondokei.com/

になります。

バイトで作った量産君というテンプレートエンジンを記憶の底から呼び起こして、最小スペッククローン作って作り上げました。

このへんも、おそらく記事にします。

結局はArduinoクローンの制作に一番力入ってますが、お暇でしたら是非。