Raspberry Piを有線LANでMacに直結してMac経由でapt-getできるようにするまでの手順

Pocket
LINEで送る

さっきの記事のMac版。OS Xです。画面数は減ります。こちらもMacで有線LANと無線LANが両方使える必要があります。

まず、「システム環境設定」->「共有」に行き、「インターネット共有」の文字を押して、下のように「共通する通信経路」をWi-Fi、相手のコンピュータでのポートを有線LANのものにします。

スクリーンショット 2016-09-06 14.51.38

その後、チェックボックスをクリックして共有をスタートします。

で、次にTerminalを立ち上げ、ifconfigで有線側のIPアドレスを調べます。下の例の場合は192.168.3.1です。

uedamb:~ ueda$ ifconfig
...
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=23<RXCSUM,TXCSUM,TSO4>
	ether aa:66:7f:f0:af:64 
	inet 192.168.3.1 netmask 0xffffff00 broadcast 192.168.3.255
...

で、192.168.3.2,3,4,…と調べていけばすぐにRaspberry Piにぶつかります。

uedamb:~ ueda$ ping 192.168.3.2
PING 192.168.3.2 (192.168.3.2): 56 data bytes
64 bytes from 192.168.3.2: icmp_seq=0 ttl=64 time=0.456 ms
64 bytes from 192.168.3.2: icmp_seq=1 ttl=64 time=0.376 ms
...

で、sshで接続し、外と通信できることを確認します。

uedamb:~ ueda$ ssh pi@192.168.3.2
Linux raspberrypi 4.1.10-v7+ #2 SMP PREEMPT Sat Oct 10 09:49:41 UTC 2015 armv7l
...
pi@raspberrypi ~ $ ping google.com
PING google.com (216.58.197.206) 56(84) bytes of data.
64 bytes from nrt13s48-in-f14.1e100.net (216.58.197.206): icmp_req=1 ttl=50 time=4.54 ms
64 bytes from nrt13s48-in-f14.1e100.net (216.58.197.206): icmp_req=2 ttl=50 time=5.28 ms
...

・・・端末って楽ですね。慣れれば。

Pocket
LINEで送る

Raspberry Piを有線LANでWindows8に直結してWindows8経由でapt-getできるようにするまでの手順

Pocket
LINEで送る

講義のために慣れぬWindowsを触り、イライラで血圧が1000くらいになりながら分かった手順をまとめます。Windows8以降ならおそらく手順は同じです。タイトルにあるように、下の写真のようにラズパイとノートPCを接続して、ラズパイからインターネットに出られるようにします。(この写真のノートPCはWindowsではありませんが。)

2016-09-06 14.01.24

Raspberry Pi側の準備

有線LANがDHCPで使えるようにします。つまりデフォルトの状態にしておきます。

Windows側の準備

Windowsマシンには無線LANと有線LANが必要です。上の写真のように有線側をラズパイに接続し、無線側でインターネットとやりとりします。

接続の共有設定

Internet Connection Sharing(ICS)という機能らしいので、分からないことがあったらこのキーワードで調べるとよいかと。

まず、下のようにお馴染みのネットワーク接続の一覧画面を出します。お馴染みと言っても、私はここにたどり着くまでにかなり時間を要しました。分からん。ここで一覧にブリッジ接続があったら次に進めないかもしれません。差し支えなければ削除します。

スクリーンショット 2016-09-06 11.30.53

次に、Wi-Fiの方を右クリックし、「プロパティ」を選択します。で、タブに「共有」があることを確認し、選択します。

スクリーンショット 2016-09-06 13.24.23

で、次のように「ネットワークのほかのユーザーに、このコンピューターのインターネット接続をとおしての接続を許可する」をチェックします。

スクリーンショット 2016-09-06 13.23.19

で、右にある「設定」ボタンを押します。すると次のようにいくつかチェックボックスが出てきますので、HTTPとHTTPSをチェックしておきます。チェックの際、何かボックスが出てきますが、OKを押しておきます。

スクリーンショット 2016-09-06 13.23.38

そして有線LAN同士でラズパイを接続し、ラズパイを再起動します。ちゃんとラズパイが立ち上がれば、Windows側のDHCPでIPアドレスが割り振られます。

IPアドレスの確認

で、次にIPアドレスを調べます。まず、Windowsの有線LANのIPをipconfigで調べます。
スクリーンショット 2016-09-06 14.33.17

192.168.137.1のようです。

で、次にラズパイのIPアドレスを調べますが、これがなぜかひねくれたIPアドレスになってしまい、192.168.137.2,3,…と調べても見つかりませんでした・・・。ということで192.168.137.0をスキャンして調べる必要がありました。私は「Advanced IP Scanner」を使いました。

このツールの画面にはIPアドレスの範囲を指定するテキストボックスがあるので、その中に範囲を指定してスキャンします。

スクリーンショット 2016-09-06 13.20.44

なんで44なんでしょう・・・。

ということで、TeraTermで次のように192.168.137.44に接続し、ラズパイにログインできました。

スクリーンショット 2016-09-06 14.31.10

スクリーンショット 2016-09-06 13.22.38

で、(ちゃんと/etc/resolv.confの設定が正しければ)apt-getできるようです。

スクリーンショット 2016-09-06 14.34.45

おしまい。

ってか、これだけのことを説明するためにこんなにスクリーンショットが必要なのはおかしい。

おかしい。

Pocket
LINEで送る

日経BP社「ラズパイ超入門」一行感想文

Pocket
LINEで送る

本日、平さんからいただいた本が届きました。↓です。

クッピーラムネ。じゃなかったラズパイ超入門。おねえさんが持っているラズパイ、若干デカい。
クッピーラムネ。じゃなかったラズパイ超入門。おねえさんが持っているラズパイ、若干デカい。ラズパイがデカいのであってパイが(以下略)

「IoT言うな!!」という、「シェル芸言うな!!」と反撃されそうな個人的な心情はさておき、面白かったので一行感想文を書きます。

一行(実際は3〜10行)感想文

ひと目でわかる!ラズパイって何?

イントロダクション。「これが5ドルラズパイ『Zero』だ」の見出しに、昔の特撮モノの雑誌の息吹をグッと感じました。

第1章 初めてのラズパイ

ラズパイの種類、工作の方法、使えるデバイスの説明、電源で気をつけること、チップの詳細が簡潔にまとまっていて、個人的には非常に助かります。ディスプレイの話もあったけど、慣れたらCUIで使いましょう。SORACOMの関係でSIMの話も。

第2章 基本操作を学ぶ

ラズパイの周辺機器やケーブルを揃えて、SDカードにNOOBSを入れて、インストールして、動かします。入門者が「あれ?ラズパイは安いけど、なんか細かく出費があるなあ・・・」と戸惑っているのが目に浮かびます。・・・というのはさておき、やはり丁寧にラズパイが動くまでの解説がなされています。これ、ムックじゃなくてちゃんと出版した方がいいんでないですかね?

うちの子にも読ませようと思ったのですが、漢字がネックになりそうです。子供向けにも何か企画があると面白いですね。

あと、もう禁句かもしれませんがGUIでなくてCUI使いましょう。あ、いいんです。初心者は無理しないで。

第3章 ラズビアンOSを使って見よう

ここはGUIで使えるソフトの話が先にありましたが、ここは個人的には使わないので斜め読みでした。Mathematicaについてちょっと触れてもらえるとみんな素数の計算し放題だったかなと思いました。後ろの方でサーバの話。カメラ画像の配信の「Motion」は今度試してみたいです。

ところで私も遠巻きながら関係者なので書きますが「使って見よう」は「使ってみよう」ではないですかっ??

第4章 電子工作はカンタンだった!

前半は普段電子工作しない人が趣味とか試作のために手を動かすなら一通りおさえておくと良い内容がコンパクトにまとまっています。あんまり電子工作しない学生の宿題に良い内容でそのまま使いたいくらいでした。自分も電子工作はほとんどしないので、助かります。個人的には「電子工作やってはいけない!」が危険シェル芸テイストで楽しかったです。後半は様々なセンサを使う実例、図の書き方やはんだ付けのやり方が掲載されており、これも助かります。

第5章 どこでもSIMを使おう

SORACOMのやっていることがよく分かりました。仕掛けている人たちの雰囲気を見ればなんとなく分かるのですが、他のクラウドサービスとの親和性が高そうという印象です。うまく使いこなして商売する人が出てこないかなあと期待してます。あと、うちの学科の人にもこういう仕掛けには興味を持ってもらいたいと思ったので来週の講義でちょっと話をしようかと思います。機械はネットにつながないと面白くありません。

Raspberry PiにSIMのスロットが付くと面白そうですが、教育用だから可能性は低いですかね・・・。Arduino互換機だとSIM標準搭載のものが出ているようですね。

宣伝

もう一冊、来週に↓が出ますが、これには私の記事が30ページ以上にわたって掲載されます。シェルスクリプトでロボットを動かしたあの記事のリミックス版です。つまり30ページ以上、シェル芸ロボット祭りです。悪ふざけで作った京急サウンドのレシピも収録されています。

そしてこのページのロボット(Raspberry Pi Mouse)を使います。

(購入してコードを試していただければうれしいなあ・・・)

寝る。

Pocket
LINEで送る

考えたくない人向けWiringPi2導入手順(Raspberry Pi2 Model B, 2015年11月6日現在)

Pocket
LINEで送る

少しずつ情報が古くて一発で行かなかったので。gpioコマンドを使いたくても、Pythonもろともインストールしてしまった方が手っ取り早いようです。

しかしこの情報も、そのうち古くなるのでしょう・・・

2015年11月6日現在です。

$ sudo apt-get install python-dev python-setuptools
$ git clone https://github.com/Gadgetoid/WiringPi2-Python.git
$ cd WiringPi2-Python/
$ sudo python setup.py install
$ cd WiringPi/
$ ./build 

GitHubにもおきました。

一応、連載の関係もあるので、しばらくは不具合の対応をいたします。

Pocket
LINEで送る

Raspberry Pi MouseをC++で動かすとどうなるか(けっこう楽だった)

Pocket
LINEで送る

誰か(たぶんNさん)に書けと言われたような気がするので・・・

日経Linuxで連載中の「Raspberry Piで始めるかんたんロボット製作」では、シェルスクリプトでロボットを動かしています。

まだ連載はモータを動かしたりブザーを鳴らしたりと要素の動作確認の段階ですが、8月発売の号(9月号)からロボットが走ります。こんなふうに・・・地味に・・・

シェルスクリプトで作るのは個人的な特性もありますが、ちゃんとした理由もあります。こんな感じです。

  • 行数が短くて説明しやすいこと
  • プロセスを複数使うことが簡単なこと
  • 良かれ悪かれ誰でもUNIX系のOSをイジる場合、シェルスクリプトを使わなければならないので変にシャレオツな言語を使うよりは無駄にならないこと

といったところです。

また、ロボットは私が無理言ってデバイスファイルで動かすことにしたので、字を読み書きするにはリダイレクトだけで済むようにしました。これもシェルスクリプトだと簡単です。普通の言語だとファイル開いたり閉じたり面倒です。

と言いつつC++

連載はそんな感じでシェルスクリプトでやってますが、限界もあります。

Raspberry Pi Mouseをちょっと本職に使ってみようということで、今度のICRAという学会(ロボット屋にとって一番重要な学会)の実験をやってみました。選んだのはシェルスクリプトでなくC++です。シェルスクリプトを使わない理由で一番大きいのは

  • ロボットの内部状態を表現できない

ことです。複雑なタスクをするロボットのプログラムを書くときは、ロボットが何を考えているかを変数で表現し、その値をコロコロ変えるという方法をとるのが一般的です。しかし、シェルスクリプトを使うとシェルの変数(機能が貧弱極まりない)に書くか、遅いファイル(Raspberry Piの場合はキャッシュがそんなに効かないしファイルはフラッシュメモリ上に書かないといけないので特に遅い)に書くかしないといけないのでちょっと苦しくなります。内部状態を保持してHTTPサーバのようにレスポンスしてくれるサーバのようなコマンドがあればシェルスクリプトから呼び出して使えて便利ですが、わざわざそんなもん作りたくありません。

こうなるとシェルスクリプトで書く旨味は全くないので、何か自分の知っている別の言語を使うことになります。内部状態を表現するということでオブジェクト指向言語を使うということになりますが、遅い言語だと実験がモッサリしたり、計算時間を論文に書く時にえらく損をするので、C++を選びました。

・・・と、いかにも熟慮したかのように書きましたが、ほぼノータイムでC++で、他はありません。こういうときにPython選んで「遅い遅い」言っている研究者が結構いるので、ちゃんと勉強しようよ思いつつ、人のことなので黙っております。

fstreamを使うとそんなに面倒でない

で、上で説明した「普通の言語を使うとファイルに書き込むのが面倒」ですが、C++にはfstreamという強力で素敵なサムシングがあります。例えば、以下は実験用のソース(まだまだ非公開。もちろん自分で書いた。)から、ステップモータにデバイスファイルを通じて周波数を指定するメソッドを抜粋したものです。

void Mouse::putMotorHz(int lvalue,int rvalue)
{
        ofstream r_motor("/dev/rtmotor_raw_r0");
        ofstream l_motor("/dev/rtmotor_raw_l0");
        r_motor << rvalue;
        l_motor << lvalue;
        r_motor.close();
        l_motor.close();
}

ファイル開けて値を書いて閉じるというのはやはりシェルでリダイレクトするより手間ですが、int型の数字をそのまま文字列に変換して「<<」でぶち込んでくれます。(上のメソッド、本当は値のチェックをしないといけないのですがね・・・)

今度は読み込みの例です。距離センサ(値をスペース区切りで4個出力)を読んでいます。これもデバイスファイル(/dev/rtlightsensor0)から読み出した値をintの配列sv(実は厳密にはvector<int>)に直接代入しています。

ifstream ifs("/dev/rtlightsensor0");
if(ifs.bad()){
        ifs.close();
        continue;
}

ifs >> sv[0] >> sv[1] >> sv[2] >> sv[3];
ifs.close();

比較実験はしませんが、FILE型を使うよりはかなり楽で、確か3,4倍くらいFILE型を使うより遅くて済むというくらいのトレードオフだったと記憶しています。また、ファイル処理以外はC言語と比べて最悪でも2倍くらいの減速で済みます。

あと、並列化が必要なら、新しいC++だとPOSIXスレッドがけっこう簡単に使えるので、それも変に凝った言語を使うより(慣れていれば)C++で十分だよなあと思います。たぶん、Raspberry Piのデフォルトのg++は古いので、ココ等を参考に新しいバージョンのgccをインストールして使いましょう。

もちろん、Pythonの例もGitHubに置いているように、特にシェルスクリプトにこだわる必要はなく、研究用の実験をしないならC++にこだわる必要もありません。むしろ言語を選べるように「デバイスファイルで字を読み書きする」という仕様にしましたので、みなさんもいろんな言語でロボットを動かしてみていただければと。個人的にはHaskell希望です。

ところでC++で動かしたロボットの動画はないのかというところですが、実験結果は論文が採択されるまで公表できません。また、どんな言語で動かしてもロボットの動きは一緒ですので、割愛ということで・・・

現場からは以上です。

Pocket
LINEで送る

KEIKYUサウンドがこだまする日経Linuxが明日発売なので連載のチラ見せ

Pocket
LINEで送る

日経Linuxがボチボチ発売です。わてくしの連載もなんとか掲載されております。この記事は宣伝です。ええ、宣伝ですとも。士族の商法じゃないんだから書いたら売らねばならんのです。

今回の部品はこちらから購入できます。在庫アリです。

夜露死苦お願い致しやす。

今月の内容

今月の「Raspberry Piで始めるかんたんロボット製作」(まだタイトルが覚えられない)は、ブザーとモータを動かす内容です。まーだまだロボットを動かすところまで行かないのと、部品代が今回からそこそこ大きくなるのが少し申し訳ないのですが、楽しんでいただければと。

今回の個人的な目玉は、ブザーandシェルスクリプトでKEIKYUです。何のことかわからん人はこれを聞いてください。PCの裏にロボットがいます。

記事にも堂々とKEIKYUと掲載する偉業を果たしました。

  

これでも神奈川県と鉄しか分からんと思いますが、要はブザーで演奏するというか、そういう内容です。ただ、それだと単なる趣味になるのでデバイスファイルに字を叩き込む方法についてつらつら書きました。甚だ簡略ながらPWM(pulse width modulation)もデバイスファイルを使ってやってます。

7月号は他にも役に立つ記事満載なので是非買ってちょんまげ頂きたく候。

昨日こんな有様だったので寝不足でテンション高い。

ちなみに先月が連載第一回だったのでチェックしてなかった方は是非前回からどうぞ。

早いけど寝る。あ、やっぱりもうちょっと起きてます。

Pocket
LINEで送る