Raspberry Pi 2がやってきた

先週の月曜日(2月2日)深夜に速攻で「ぽちっ」としてしまったRaspberry Pi 2が届きました。

上の2つが今回届いたRaspberry Pi 2、中段左が秋月で買ったRaspberry Pi model B+、中段右がRaspberry Pi Camera、左下かつて数ヶ月待ちで届いたRaspberry Pi Model B 512MBの残り1つです。

IMG_0354s

しかし、秋月価格のRaspberry Pi Model B+よりもRS価格のRaspberry Pi 2 Model Bの方が安い(ただし2個購入時)ってのがなんとも。

IMG_0355s

IMG_0359s

PIC16F1459ちょっぴり欲しいかも

昨日の記事で久しぶりにPIC18F14K50でシリアルエミュレータを作ってみた記事をアップしましたが、その中で「PIC16F1459」というチップが出てきます。

このチップをちょっとググってみたら、

  • 価格は安いようだ
  • X’talなしでUSBデバイスが作れる
  • 残念ながら国内で気楽には手に入らなさそう

ということがわかりました。

でも、外付け部品をほとんどつけることなくUSBシリアルが実現できるというのはなかなか魅力的かもしれません。

参考:からくり工房「ききょうや」さんのページ

PIC18F14K50でUSB-CDCを作成

久しぶりに秋月PIC18F14K50ボードをターゲットとしてUSBシリアルエミュレータを作成する必要がでてきたので、環境構築しました。

1.OSのインストール

今回はUbuntu14.04 LTS 日本語Remix 32bit版を使いました。
例によってUSBデバイスにインストールしました。

2.MPLAB-Xのインストール

ダウンロードしてzipファイルを展開します。
実行属性をつけた後、sudo suでrootになって、ファイルを実行すればインストールできます。。

3.Cコンパイラのインストール

CコンパイラはXC8を使います。インストール方法はMPLAB-Xと概ね同じです。
前回はC18コンパイラを使ったのですが、すでにダウンロードできなくなっています。(後述の通り、XC8でもUSBシリアルエミュレータが動くようになっています)

4.Microchip Libraries for Applicationsのインストール

CDCを使いたいのでライブラリを使います。2013年12月20日版以降のものはMPLAB-X IDE向けのもののみ対応とのことです。

やっぱりrootじゃないとインストールできないのですが、インストールは

/root/microchip

の下にされてしまいます。そのままだと一般ユーザーだとアクセスできませんので、

$ sudo su
# cp -rp microchip ~ユーザー名/.

として自分のホームディレクトリの下にコピーしておきます。

5.MPLAB-Xでビルド

  1. MPLAB-Xを起動して、「File」→「Open Project」で『/home/ユーザー名/microchip/mla/v2014_07_22/apps/usb/device/cdc_serial_emulator/firmware/MPLAB.X』を指定してプロジェクトを開きます。
  2. この状態だとターゲットデバイスがPIC16F1459になっているので、設定を変更します。
    Projectツリーを右クリックして「Set Configuration」で「LPCUSBDK_18F14K50」を選択します。
  3. ビルドします。
    「Run」→「Clean and Build Project」でビルドします。

6.シリアルの速度を変更する

シリアルの初期化はプロジェクトツリーの下の「Source Files」の下の「bsp/low_pin_count_usb_development_kit/usart.c」で行っていて、その56行目付近を変更することでシリアルの速度を変更できます。

今回は9600bpsに設定するので、

SPBRG = 225;
SPBRGH = 4;

に変更します。

あとがき

できればブートローダを書き込んでから、その上でCDC Serial Emulatorをインストールしたかったのですが、どうもソースを見るとXC8では対応している感じがしなかったのでブートローダなしとしました。

Raspberry Piをプリントサーバーに・・・ならなかった(泣)

Athlon5350マシンにつないでいるブラザーHL-2240Dですが、プリンタを使う度にAthlon5350マシンを起動するのは面倒です。

そこで、OpenVPNを動かしているRaspberry PiのUSBポートで動かせないか試してみました。

1.とにかくつないでみる

つないで dmesg を見てみたらとりあえず認識してくれました。

[2146148.627562] usb 1-1.3: new high-speed USB device number 4 using dwc_otg
[2146148.728736] usb 1-1.3: New USB device found, idVendor=04f9, idProduct=0040
[2146148.728772] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2146148.728787] usb 1-1.3: Product: HL-2240D series
[2146148.728801] usb 1-1.3: Manufacturer: Brother
[2146148.728817] usb 1-1.3: SerialNumber: M3Jxxxxxx
[2146148.797077] usblp 1-1.3:1.0: usblp0: USB Bidirectional printer dev 4 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0040
[2146148.800057] usbcore: registered new interface driver usblp

2.CUPSをインストールする

Raspberry Pi にリモートログインしてCUPSをインストールします。

$ sudo apt-get install cups

どかどかとたくさん入るかと思ったらエラーが。メッセージに従って、

$ sudo apt-get update
$ sudo apt-get upgrade

ってやってみたら、Raspberry Pi 2関連と思わるアップデートがたくさん入りました。

それはさておき、アップデート後に気を取り直してCUPSをインストールします。

$ sudo apt-get install cups

3.CUPSの設定

完了したら、ローカル側からRaspberryPiの画面をリモートデスクトップで開いて設定を行います。

$ rdesktop 192.168.xxx.xxx

ブラウザ(Netsurf)を開いてアドレスに「localhost:631」と入力します。

Cups-1

上の方の「Administration」を開きます。

cups-2

右下の

  • Share printer connected to this host
  • Allow printing from the Internet
  • Allow remote administration
  • Allow users to cancel any job

にチェックをつけて、下の「Change Setting」を押します。
(どうせルータで自宅外からのパケットは叩き落とされるので「Allow printing from the Internet」も許可しちゃいます)

cups-3

その後、リモートログインしたシェルでCUPSを再起動します。

$ sudo service cups restart

・・・が、設定が反映されません・・・。(泣)

仕方がないので、設定ファイルを直接編集します。

$ sudo vi /etc/cups/cupsd.conf

途中の、

# Only listen for connections from the local machine.
Listen localhost:631
Listen /var/run/cups/cups.sock

の真ん中の「localhost:631」を「631」だけにします。

さらに、もう少し下の方にある<Location>と<Location /admin>の部分を以下のように修正します。

# Restrict access to the server...
<Location />
Order allow,deny
Allow @LOCAL
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow @LOCAL
</Location>

その後、CUPSを再起動します。

$ sudo service cups restart

これでローカルマシンから「IPアドレス:631」で管理画面にアクセスできます。

同様にプリンタの共有とインターネットからの印刷の許可、ジョブキャンセルの許可を設定します。

cups-4

うーん、やっぱり設定できません。

どうも、ユーザーがlpadminグループに入っていないといけないようなので、

$ sudo adduser pi lpadmin
Adding user `pi' to group `lpadmin' ...
Adding user pi to group lpadmin
Done.
$

とします。

これでブラウザから設定が変更できるようになりました。

4.プリンタの追加

Web管理画面から「プリンタの追加」を押します。

CUPS-10

 

ローカルプリンタのBrother HL-2240Dを選択して、「続ける」を押します。

CUPS-11

適当に場所を記入し、共有にチェックを入れて続けます。

CUPS-12

ドライバは存在しないのでとりあえずHL2140のPCL5eドライバを選択しておきます。

CUPS-13

デフォルトオプションを適当に設定しておきます。

CUPS-14

設定ができました。

この状態でPC上のUbuntuでプリンタを開くと、RaspberryPi上のプリンタが見えるようになっていました。

・・・・がしかし、テスト印刷を1枚試してみたところ明らかに汚いです。

さらに2枚目以降のテスト印刷はエラーが出るばかりで印刷すらできません・・・。

ブラザーのLinux用プリンタドライバのインストールも試してみましたが、途中で微妙なエラーがでていることと、テスト印刷してもジョブを抱えたままで出力されませんでした。

・・・・結局、諦めて元のAthlon5350マシンに接続を戻しました(泣)

公式ページのRaspberry Pi 2ベンチマーク

Raspberry Pi 2のベンチマークが公式ページにもありました。

このページにはブラウザの読み込み速度を比較する動画が貼られていました。

Webの読み込み時間の比較、ブラウザのJavaScriptの応答時間の比較、動画再生時の負荷の比較を行っています。下がRasPi、上がRaspi2です。

かなりの速度差があるのがわかると思います。簡易デスクトップとしてはそこそこな感じになりそうですね。

Raspberry Pi 2はあんまり速くない?

※追伸:公式ページにもベンチマークがありました

1.RSオンラインは在庫切れ

RSオンラインを見ていたら、次回入庫日が2/20→2/27・・と延びていき、現在は「一時的な在庫切れ」と表示されています。やっぱりみんな欲しがるんですね。
まあ、メモリ1GBに増量、クワッドコアとなれば当然といえば当然かもしれません。

2.ベンチマーク結果ではあんまり速くなってない

Hack a Dayにベンチマーク比較の記事が載ってました。
RasPi B+はRaspberry Pi model B+(700MHz)、RasPi 2はRaspberry Pi 2 model B(1000MHz)で、シングルコア動作での比較です。

  • 倍精度Linpack
    RasPi B+が40.64Mflops、RasPi 2 が92.88Mflopsで2倍強
  • ドライストン2.1
    RasPi B+が843.19MIPS、RasPi 2 が1186.70MIPSで周波数なりの変化
  • OpenGL
    概ね変わらない。GPUが変わらないので当然といえば当然かも。
  • Pythonで1000000までの素数探し
    RasPi B+が51分、RasPi 2 が21分で約2.5倍。メモリが効くんですかね?

シングルコア動作での比較なのでベンチマーク上ではクロック周波数なりの差しか現れないようです。

もっとも、マルチコア化したおかげか、ゲーム機のエミュレータではRasPiではファミコン、スーパーファミコン、メガドライブや初期のゲームコンソールしかまともに動かせなかったのが、RasPi2ではNintendo64やPSXなどのゲームも容易に動かせるになっているようです。

記事では「RasPiは教育ツールとしては興味深かったが使い物になるコンピュータではなかった。RasPi2は小さく安価で持ち運べるデスクトップシステムになった。」と書いてあります。一方で、「RasPi(Raspi2も含む)は膨大なエコシステムがあるので、今日利用できるベストな小型のLinux環境。だけど、もっとパワフルさが必要なら本物のラップトップかデスクトップにするべきだ。」と括っています。(※自分の勝手な意訳です。しかも部分的だし。)

※追伸です。実機を触ってみるとデスクトップの速度は天地の差があります。

Raspberry Pi 2が登場!

なんと、RaspberryPiに後継のRaspberryPi2が登場しました。(http://www.raspberrypi.org/のトップページも同じページに差し替わってます)

raspi2

(画像は公式ページからの借り物です)

モデルB+と比較するとRaspberryPi2はこんな変化のようです。

  • CPUはArm11-700MHZからクワッドコアのCortex-A7 900MHzへ
  • メモリは512MBから1GBへ

ハードウェアはCPUコアとメモリ以外には大きな変更はなく、完全コンパチを保つようです。CPU性能は6倍なんだそうな。

・・・が、大きな驚きが一つ。なんと、

MicrosoftがRaspberryPi2版のWindows10を無償で提供

されることになるんだそうです。

その他、

  • 価格は据え置き$35
    (日本円だとだいぶ上がっちゃいましたが・・・)
  • 従来のRaspberry Pi Model BやModel B+は継続販売
    お値段は変わらず$35。まあ、教育用とかで数揃えてるところへの配慮でしょう。故障した分だけ購入したいという要求があるでしょうから。
  • 従来のRaspberry Pi Model Aも継続販売。2015年末まではRaspberry Pi 2版のModel Aの計画はなし

といったところで、もう販売されているようです。

ちなみにSoCの名前はBCM2835からBCM2836へ。まあ、なんというか、多分Raspberry Pi 2専用のSoCなのでしょう。数百万個でるならそれもありかと。コンパチビリティはRaspberry Piのエコシステムを使い続ける上で必要でしょうし、性能強化版の専用SoCを起こすにしても変更箇所は少ないほうがいいですから。

Raspberry Pi 2版のWindows10のアナウンスは「Windows 10 for Raspberry Pi 2」にあります。「Windows Developper Program for IoT」というサイトからリンクが張られています。

つい最近、開けてないModel Bがあるにも関わらず、Model B+を買ったばっかりなのに・・・なんということでしょう。

でも多分買っちゃうと思います。きっとRaspiで動かしているOpenVPNも速くなってくれると思うので。

Dockerを味見してみた(追伸)の追伸

Dockerを非rootで操作するには/etc/default/docker.io の DOCKER_OPTS の設定を・・・なんて昨日の記事では書いてしまったが、そんな面倒なことをしなくてもできるらしい。

単純にユーザーが docker グループの権限を持っていればいいだけなのだそうだ。

つまり、

$ sudo addgroup ユーザー名 docker

とした後、ログインしなおせばよい。

Dockerを味見してみた(追伸)

Dockerの味見の際に「rootで操作するもののようだ」と記載しましたが、一般ユーザーで触る方法がわかりました。

ホストがUbuntuの場合には、/etc/default/docker.io の DOCKER_OPTS の設定を

DOCKER_OPTS="-H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --dns 8.8.8.8 --dns 8.8.4.4"

となるように修正し、

$ sudo service docker.io restart
docker.io stop/waiting
docker.io start/running, process 13197
$

として Docker を再起動、

$ export DOCKER_HOST=tcp://127.0.0.1:4243

として環境変数を設定、

$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.13.0-44-generic
WARNING: No swap limit support
$

で一般ユーザーでもアクセスできるようになりました。

Dockerを味見してみた

ネット散策していたら最近の仮想化技術(コンテナ技術?)で Docker というのが流行っているらしいことがわかりました。比較的簡単に試せるみたいなので、さくらのナリッジのこちらの記事を参考にちょっと試してみます。

1.環境構築

母艦環境は普段使っている Ubuntu14.04 LTS 64bit です。
(Dockerは64bit環境のみサポートのようです)

Synapticで「docker」で検索すると「docker.io」というのがでてきます。説明を見ると「Linux container runtime」ということなので、これがDocker環境のようです。
こいつにチェックマークをつけてインストールします。

インストールが終わったら、コンソールで

$ docker

とすると、説明が出てきました。

2.Hello Worldを試してみる

まず、ちょっと試してみます。

$ docker run ubuntu /bin/echo hello world
2015/01/28 00:49:03 Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

となってエラーになってしまいました。

こちらをみるとどうやら基本は root で弄るもののようです。でも、一般ユーザーでも触る方法があるようなのですが、今回はrootで動かしてみます。

$ sudo docker run ubuntu /bin/echo hello world
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
b39b81afc8ca: Pulling image (latest) from ubuntu, endpoint: https://registry-1.db39b81afc8ca: Download complete 
511136ea3c5a: Download complete 
53f858aaaf03: Download complete 
837339b91538: Download complete 
615c102e2290: Download complete 
hello world
$

待つこと30秒位でしょうか。イメージをダウンロードした後、表示されました。
2回目はすでにイメージがローカルにあるので、一瞬で表示されました。

3.WordPressを動かしてみる

追っかけるだけになってますが、同様にWordPressを動かしてみます。

$ sudo docker build -rm -t tomono/wordpress git://github.com/jbfink/docker-wordpress.git
Warning: '-rm' is deprecated, it will be replaced by '--rm' soon. See usage.
Sending build context to Docker daemon 112.1 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:latest
 ---> b39b81afc8ca
(途中省略)
Step 19 : CMD ["/bin/bash", "/start.sh"]
 ---> Running in 9ed82742d36f
 ---> 0dfcba1fda89
Removing intermediate container 9ed82742d36f
Successfully built 0dfcba1fda89
$

・・・として、イメージが生成されるようです。

で、実行。

$ sudo docker run --name wordpress -d -p 8080:80 -p 2022:22 tomono/wordpress
4d13e5e74ddb45787f9c0e11120d6e88ad9844895a1779a9fe33c8c191104dca
$

ブラウザで 127.0.0.1:8080 にアクセスするとWordPressが動いているのが確認できました。

$ sudo docker stop wordpress
wordpress
$ sudo docker start wordpress
wordpress
$

で停止、スタートも確認できました。

4.不要になったコンテナの削除

最後に不要になったコンテナを

$ sudo docker rm `sudo docker ps -a -q`
4d13e5e74ddb
8e8f4a436e47
29378160a9e8
$

として削除しました。イメージの方は、

$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> eba3c3f6eca6 About an hour ago 458.2 MB
ubuntu latest b39b81afc8ca 10 days ago 188.3 MB
$ sudo docker rmi eba3
Deleted: eba3c3f6eca6595bcb2822b4c532ce47fb99d2ecd6db169c9dffe4beebca644e
(途中略)
Deleted: caa76d7258ec6b0f5d1f1c0e6a7827612fcb0c995cd8654d60d90dd8ff606562
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest b39b81afc8ca 10 days ago 188.3 MB
$ sudo docker rmi b39b
Untagged: ubuntu:latest
Deleted: b39b81afc8cae27d6fc7ea89584bad5e0ba792127597d02425eaee9f3aaaa462
(途中略)
Deleted: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
$ sudo docker images 
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

として削除しました。

まだまださくらのナリッジのこちらの記事にはたくさん説明があります。どんなことができるのか解りやすくて助かります。