Raspberry Pi 3にAndroidから接続する

Raspberry Pi 3はWiFiを標準で搭載しているのでモバイルルータとAndroid端末があれば、どこでも結線なしでAndroidから接続することができます。(もちろん、Raspberry Pi 3には電源供給してやらなければなりませんが・・・)

アクセスには適当なSSHクライアントとキーボードアプリ(標準のキーボードだとさすがにストレス溜まります)を使えば、簡単です。自分はConnectBotとHackers Keyboardを使っています。

ただし、AndroidはmDNS/Avahi/Bonjourに対応していないのでIPアドレスを直打ちしなければなりません。できればRaspberry Pi 3側はDHCPのままにしたいところ。

そこで、mDNS/Avahi/Bonjourでサービスを探してくれるアプリも必要になります。自分はBonjour Browserというのを使っています。

手順を纏めると、こんな感じです。(Raspberry Pi 3側のWiFi設定はできている前提です)

  1. モバイルルータ、Raspberry Pi 3の電源を投入。
  2. Android側でBonjuor BrowserでRaspberry Pi 3のIPアドレスを調べる
  3. ConnectBotでRaspberry Pi 3にSSHログインする
  4. キーボードをHackers Keyboardに切り替える

これでいつでもどこでもCUIベースの作業ができますw

GUIベースもxrdp(Raspberry Pi側)とaFreeRDP(Android側)で一応接続できているけど、使い勝手はイマイチっぽい感じです。もっとよい組み合わせがあれば知りたいところ。

Raspberry Pi 3をセットアップ

しばらく前に買ったけど動かしてなかったRaspberry Pi 3をセットアップしてみました。

1.ハマったポイント

Raspbianを使ってみたのだけど、32GBのMicroSDだと起動途中にパニックを起こす。2枚のMicroSDで同じ結果。結局、8GBのMicroSDだと問題なさそう。

 

2.設定した箇所

 

1)初期設定

起動すると自動的にグラフィカルログインした状態になるので、コンソールを開いて

$ sudo raspi-config

でコンフィギュレーション設定する。Expand FilesystemでファイルシステムをMicroSDカードいっぱいまで拡大、Change User Passwordでパスワード設定、Internationalization Optionsでロケールの設定、タイムゾーンの設定、WiFiの国設定を実施して終了する。再起動すると、ファイルシステム拡大が実行される。

デスクトップ環境のMenu→Preference→Raspberry Pi ConfigurationのLocalizetionで日本語キーボードを設定。

パスワードの設定が終われば、リモートログインできる。ネットワークにつないであれば、mDNSとsshデーモンが動いているので、リモートから

$ ssh pi@raspberrypi.local

とやると、sshでログインできる。(パスワード変更していない場合、初期パスワードはraspberry)

2)画面サイズ

画面サイズがVGAくらいのサイズをFullHDに拡大表示しかされなかったので、HDMIを強制的に表示させることにする。/boot/config.txtを修正。

hdmi_group=1
hdmi_mode=16

さらに、オーバースキャン表示を想定しているため、画面周囲が黒枠になって実質的なデスクトップが狭い。液晶モニタでは関係ないので、オーバースキャン対応を禁止する。同じファイルのdisable_overscanのコメントを外す。

disable_overscan=1

これでFullHDにピクセルバイピクセルで等倍表示されるようになった。

3)日本語化

$ sudo apt-get install fonts-vlgothic ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

で日本語フォントをインストール。インストール後、デスクトップ環境のMenu→Preference→Raspberry Pi ConfigurationのLocalizetionでLocaleをLanguageをja、CountryをJP、Character SetをUTF-8に設定。OKを押していくと再起動を要求されるので再起動すると日本語になっている。

次の項のアップデート後、

$ sudo apt-get install ibus-anthy

として日本語入力をインストールする。再起動後、右上の「US」を左クリックして「日本語 – Anthy」にすると日本語入力ができる。

4)その他

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

でアップデートをかけておくと基本的には完了。

$ sudo install synaptic

でsynapticパッケージマネージャをインストールして、Synapticから好きなソフトをインストールすればOK。
WebブラウザはFirefoxベースのiceweaselとその日本語言語パックのiceweasel-l10n-jaをインストールしました。

ブラウザとしては十分に動きます。Youtubeも720pのビデオも一応再生できるようになりました。さすがにコマ落ちが激しいのと、16bitカラーになっているのか、グラデーション部分にマッハバンドが出ますが。

Raspberry Pi 3が秋月・千石に登場

すでに皆さんご存知のRaspberry Pi 3。無線(WiFi、BT)が載った関係で日本での発売が遅れていたようですが、秋月と千石に登場しました。

Screenshot from 2016-03-27 11:44:50

価格はどちらも税込み6200円。$35だと今のレートだと¥4,000くらい。秋月のRaspberry Pi 2の販売価格は¥5,600。Raspberry Pi 2より高いのは初物だからなのか、TELECの認証費用が割掛けされてるからなんでしょうかね。秋月の方はすでに在庫切れですが、千石の方は在庫切れではないようなのでポチッと注文してみました。いつ来るかな〜?

Raspberry Pi 2よりも倍速いって書いてあったような気がするので、ブラウザが中心ならPC代替として結構使えるようになるかもしれませんね。

秋月の新しいGPSモジュールを試してみました

秋月の新しいGPSモジュール(単品ではなくキットの方)を試してみました。

このキットはこのUSBシリアル変換基板と接続して使うことを初めから想定しているのか端子配置が合わせられています。・・・が、Androidでも使ってみたいと思っているので、今回はあえてPL-2303を使用したUSBシリアル変換モジュールと接続するケーブルを作成しました。

まずは、aitendoのモジュールと同じ構成で中華Androidに接続、「You Are Here GPS」を起動するとしばらくして測位ができて座標が表示されました。GPSモジュール側でもLEDが1秒周期で明るく点滅するようになりました。さらに、中華AndroidのGoogle Mapsでも現在位置としては取得できたのですが、継続的にトラッキングしてはくれません(理由不明)。

そこで、今度はLinuxMint13環境で動かしてみました。

まずはwineとwine-geckoをインストールして、秋月のWebサイトに上がっているMiniGPS(GPSチップの製造元、MediaTekのソフトのようです)を動かしてみました。

$ cd ~/.wine/dosdevices
$ ln -s /dev/ttyUSB0 com1

としてからMiniGPSをwineで実行します。実行したらCOM1を選択して9600bpsに設定。測位が完了すると無事にGPS衛星の掴み具合を表示してくれました。(なお、後述のgpsdをインストール後はCOMポートに接続できなくなりますので要注意)

次にgpsdをsynapticでインストールしました。・・・が、これだけでは動いているんだかよくわかりません。せっかくGPSなのですから、マップ上に自分の場所を表示させてみたいものです。ググってみると、Vikingというのが定番みたいなので、Synapticでインストールしてみました。

使い方がちょっとわからなかったのですが、ウインドウの左側がレイヤーになっているようなので、

  1. 左側の下の方の「+」ボタンを押して、「New Map Layer」でOpenStreetMap(MapQuest)を追加します。以下のダイアログが開くので、
    Screenshot-Layer-Properties-1「Autodownload maps」にチェックを入れてOKを押します。
  2. 次に、「New GPS Layer」でGPSを追加します。ダイアログで「GPSRealtime Tracking mode」を選択して、以下のように設定します。
    Screenshot-Layer Properties

この状態だと現在位置はニューヨークのマンハッタンになっているのですが、追加したGPSを右クリックして「Start Realtime Tracking」を選択してしばらくすると、地図上に軌跡が描かれるようになりました。

Screenshot-Untitled-Viking-1

キャプチャ画面でもわかる通り、道路に沿って綺麗に軌跡を描いてくれます。

ちなみにこのVikingですが、aitendoで購入したモジュールでも同じように動作しました。
Linuxで動かすぶんにはPL-2303系のモジュールである必要はないと思うので、FT234Xのモジュールに変更して動かしてみようかと思います。

64bit環境にMPLAB-Xをインストールする

故あって、Ubuntu17.1 MATE 64bit環境に16bitPICをターゲットとしてMPLAB-Xをインストールしました。

ダウンロードしたMPLAB-Xのtarファイルを展開すると、シェルアーカイブがでてくるので、これをスーパーユーザー権限で実行しても、

~$ sudo ./MPLABX-v3.20-linux-installer.sh
64 Bit, check libraries
Check for 32 Bit libraries
These 32 bit libraries were not found and are needed for MPLAB X to run:
libexpat.so
libX11.so
libXext.so

となって、32bitライブラリをインストールするよう要求されます。・・・が、ここで表示されているものを素直にapt-getでインストールしようとしてもダメなのです。

じゃあ、どうしたらいいのかについては、こちらに記載があります。

~$ sudo apt-get install libc6:i386 libx11-6:i386 libxext6:i386 libstdc++6:i386 libexpat1:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  gcc-4.8-base:i386 gcc-4.9-base:i386 libgcc1:i386 libxau6:i386 libxcb1:i386
  libxdmcp6:i386
提案パッケージ:
  glibc-doc:i386 locales:i386
以下のパッケージが新たにインストールされます:
  gcc-4.8-base:i386 gcc-4.9-base:i386 libc6:i386 libexpat1:i386 libgcc1:i386
  libstdc++6:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxdmcp6:i386
  libxext6:i386
アップグレード: 0 個、新規インストール: 11 個、削除: 0 個、保留: 12 個。
5,061 kB のアーカイブを取得する必要があります。
この操作後に追加で 13.7 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
(以下略)

ということで、パッケージ名の後ろに「:i386」をつける必要があったようです。わかってしまえばなんと言うことはないのですが、わからないと困りますよねぇ・・・。

ここをパスできれば、あとは再びシェルアーカイブを実行するとインストール完了です。併せて、XC16もダウンロードしたシェルアーカイブを実行してやると途中でライセンスファイル生成のためにNICのMACアドレスの確認ダイアログが出ますが、そのまま次へ進めてしまえばインストール完了です。

スマートフォン用タッチペン

とあるアプリケーションが指では操作しにくく困っていた時に、知り合いからタッチペンを借りたらなかなか良かったので購入してみようと思いました。

・・・が、電気屋さんで売っているタッチペンは1,500円〜4,000円くらいもするのでおいそれと手が出ません。そこでまず100円ショップのタッチペンを何本か購入して比較してみることにしました。

比較対象は以下の4点。

ダイソータッチペン4種

いずれもダイソーで売っているものです。左から順に、

  • 「タッチペンボールペン付」
    細めのベールペンの後ろ側がタッチペンになっているものです。パッと見のデザインはなかなかいい感じ。ボールペンは黒一色でボール径1ミリ。
  • 「導電繊維使用タッチペン&2色ボールペン」
    1つ目より一回り大きい外観に2色ボールペンが入っています。1つ目同様に後ろ側がタッチペンになっていて、ここに導電繊維を使っているので「なめらかなペン滑り」というのが売りのようです。ペン本体もパール調の塗装が施されていてなかなかです。
  • 「タッチ&ボールペン」
    これは先端部分がタッチペンになっているのですが、穴が開いていて、ノック式のボールペンがそこから出てきます。これだけはダイソーの完全なプライベートブランド商品ではなくプラチナ万年筆株式会社の社名がパッケージに入っています。
  • 「スマートフォンストラップタッチペン」
    イヤホンジャックに挿して持ち運べるタイプのタッチペンです。見るからにチャちいです。

タッチペンとしてのファーストインプレッションは、「導電繊維使用タッチペン&2色ボールペン」はタッチすると2点に認識されるケースがあるのか、かなりの頻度でズームしてしまいます。他の3点はタッチペンとしては基本的には使えそうです。もっとも、2台で試してみるとペン同士の差よりも2台での違いのほうが大きいかも?と感じます。もう少し使い込んでみて、感想を追加しようかと思います。また、外で手袋をした状態だとどうかというのも試してみたいと思います。

<追伸>

結局、使いやすさでは三番目の「タッチ&ボールペン」が一番かと思います。通常のボールペンと同じ持ち方でタッチできるのが意外にいい感じです。他のものは後端がタッチペンになっているので、結構違和感があります。さすがプラチナ万年筆株式会社の社名がパッケージに入っているだけのことはあるという感じでしょうか。

GPS動かず・・・

室内だったため測位できなかったと思われたGPSモジュールを外に連れだしてみました。

IMG_3106s

こんな感じで車のダッシュボード上に置いてみたのですが、結局測位できず・・・。アンテナが悪いのか、モジュールが悪いのかわかりませんが、ダメでした・・・。

<追伸>

よくみると、GPSのアンテナの裏側がシールドされています。パッシブアンテナでもシールドが要るもんなんだろうか?ひょっとして、アクティブアンテナなんじゃなかろうか?
・・・・ということで、3.3Vを47uHのマイクロインダクタを通してアンテナの芯線に供給してみました。結果、多少表示が変わりましたが、測位には至らず。外は寒いので手早くやってしまったので、もう少し放置すると変わるのかもしれません。

<さらに追伸2/21>

あらためて、車のダッシュボード上でしばらく放置していたら測位できました。インダクタの効果かどうかはわかりませんが・・・。

中華タブレット用GPSを作ってみました

以前購入した中華Androidタブレットがあるのですがが、(WiFiタブレット全般に)GPSが付いていません。そこで、外付けのGPSユニットを作ってみました。

IMG_3104s

外付けGPSについて調べてみると、PL2303をUSB-UARTコンバータとして使用しているUSB接続GPS機器をAndroidで使うための「You Are Here GPS」というソフトがあることがわかりました。そこから察するにNMEA-0193フォーマットでUARTにデータを吐くGPSモジュールをPL-2303に接続すれば良さそうです。ただ、You Are Here GPSを動かしてみたところ、シリアルの速度は4800bpsか9600bpsしか選べません。ここはGPSモジュール選定の際の要注意事項です。

実際の回路はGPSはaitendoでGM-242iというモジュールとGPSHMX-039というパッシブアンテナ、USB-TTL2303-5PというUSB-UART変換モジュールを購入して、小さな基板上に5VからGPSの電源の3.3Vを生成する三端子レギュレータとバックアップ用のコイン形リチウム電池を載せました。

まずは、LinuxMintをインストールしたPCに接続してGM-242iのデフォルトの通信速度である38400bps、ビット長8、パリティなし、ストップビット1ビットで接続します。ソフトはmoserialを使用しました。

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 
$GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 $GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 $GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 
$GPGSV,1,1,00*79 $GPGLL,,,,,,V,N*64 
$GPRMC,,V,,,,,,,,,,N*53 
$GPVTG,,,,,,,,,N*30 
$GPGGA,,,,,,0,00,99.99,,,,,,*48 
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

こんな感じのGPSメッセージが流れているのが確認できますので、以下のコマンドをASCIIで送信して速度を9600bpsに変更します。

$PUBX,41,1,0007,0003,9600,0*10

変更したら、moserial側も一旦切断して速度を9600bpsに変更して再接続します。引き続きHEXで以下のUBXコマンドを送って、コイン形リチウム電池でバックアップされるBBRAM領域に設定を保存します。

B56206090D0000000000FFFF0000000000001731BF

B5 62 06 09でCFG-CFGコマンド(コンフィギュレーションのクリア、保存、読み出し)を指定します。続く「0D 00」がリトルエンディアンなので0x000Dで長さ13を示しています。続く「00 00 00 00」=0x00000000でクリアするものはなし、「FF FF 00 00」=0x0000FFFFですべて保存、「00 00 00 00」=0x00000000でロードするものはなし、次の17で保存できるデバイスすべてを指定しています。

参考まで、UBXコマンドのチェックサムを付加・算出するPythonスクリプトを置いておきます。

#!/usr/bin/env python
# coding: utf-8

#              CLS  ID   LENGTH    clearMask           saveMask            loadMask            deviceMask
CMDSAVE     = [0x06,0x09,0x0D,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x17]

cmd = CMDSAVE
CK_A = 0
CK_B = 0
STR = "B562"	# HEADER
for x in cmd:
	CK_A = CK_A + x
	CK_B = CK_B + CK_A
	STR = STR + format(x,'02X')
STR = STR + format(CK_A & 0xff,'02X') + format(CK_B & 0xff,'02X')
print STR

これで電源をOFFしても電源投入時点から9600bpsで動作します。この状態で中華タブレットに接続し、 You Are Here GPSを動作させます。設定で通信速度を9600bpsにセットして「connect」を押すとNMEA-0193メッセージが1秒周期で表示されます。
カタログスペックでは衛星捕捉-142dBm、トラッキング-159dBmの感度があることになっていますが、残念ながら鉄筋コンクリートの室内では測位できないようです(スマートフォンでは何とか衛星捕捉から可能なようなのですが・・・)。近いうちに外で測位させてみたいと思います。

Raspbianにmoserialをインストール

なんだかんだで忙しくて、気づけば11月末から更新してないですね。

それはそうと、忘れないようにメモです。

Linux環境でシリアル通信をするものに対するテスト・デバッグではmoserialが便利だと思っているのですが、ポータブルな環境で扱おうと思ってRaspberry Pi2で動かすべく、Raspbianにインストールしてみました。

RaspbianのSynapticで検索してもmoserialは出てこないので、ソースからコンパイルするしかなさそうです。

まず、環境整備として、Synapticで

  • gnome-common
  • libglib2.0-dev
  • yelp-tools
  • libgtk-3-dev
  • valac

(とその依存ファイル)をインストールします。順に、

  • gnome-autogen.shがない
  • glib-gettext >= 2.2.0が要る
  • yelp.m4がない
  • ‘gtk+-3.0’パッケージがない
  • valacコマンドがない

の対策になります。パッケージをインストールしたら、

$ git clone git://git.gnome.org/moserial
$ cd moserial
$ ./autogen.sh --prefix=/usr
$ make
$ sudo make install
$ moserial

でgitでソースコードを引っ張ってきて、コンパイル、インストール、実行になります。(実際には引っかかりながら必要なパッケージをインストールしていったのですが)

Raspbian環境ではUARTはUSBに接続したいわゆるUSBシリアルしかでてこないようです。(ハードウェアピンにはなかったっけ?)

もしmoserialをインストールする方がいて、その参考になれば、ということで残しておきます。

Raspberry Pi Zeroが登場

すでにいろんなところで記事になっていますが、新しいRaspberry Piが登場しました。その名も「Raspberry Pi Zero」。

Raspberry Pi Model Aを1GHzにクロックアップして小型化したようなものです。CPUはBCM2835なのでRaspberry Piと同じです。メモリは512MBでやはりRaspberry Pi(の後期型)と同じ。つまりRaspberry Piのエコシステムはそのままです。

rsz_img_4054-500x349

価格はなんと5ドル。今の為替だと600円くらいですね。ネットワークがついてないとはいえ、フルシステムのLinuxが動くワンボードマイコンが5ドルで手に入る時代になってしまいました。すごいものです。