Raspberry Pi GPIO Zero v1.4を試してみる

Raspbian Stretchなかなかリリースされないですね。基本のRaspbian Stretchは利用可能のようですのでXの変更等もありPi独自の実装などに時間がかかっているものと思います。

いずれ正式なリリースがあると思います。

そんなことでRASPBERRY PI BLOGを見ていたらこんな記事(UPDATES TO GPIO ZERO, THE PHYSICAL COMPUTING API)が目につきました。
Raspbian jessieをインストールしている環境でupdateしていればすぐに利用できるので少し試してみました。

# apt update && sudo apt upgrade

といってもPythonは理解していないのでこの中のコマンドラインツール(pinout)だけですが(^^;o)

確認はターミナルから$ pinout を実行するだけです。

GPIO No.と物理ピンの関係だけなら非常に見やすいですね。

但し、残念ながらgpio readallのようにピンの状態までは表示してくれません。(開発が進めば将来的にサポートされるかもしれません)

$ pinout -r xx
を実行すると初期のPi1やPi1B,A,A+,B+が表示できます。
Raspberry Pi Compute Moduleとよくわからないものもあります。

Pi Zero(W)で試してみる

jessie-lite環境の場合は別途インストールする必要があります。

Wiring Piのインストール

# apt install libi2c-dev git-core

ユーザーのホームディレクトリで実行

& git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

GPIO ZEROのインストール
インストールはPython 3ベースとしました。

# apt install python3-gpiozero

gpioコマンド、pinoutもOKですね。

REMOTE GPIO CONTROLなんか面白そうです。使いこなせるかどうかは別ですが!

Raspberry PiとAndroidでMTP接続

Raspberry PiとAndroid端末をUSBケーブルで結ぶことでMTP接続も利用できます。

Android端末とデータ転送するには簡単で転送速度も早いので利用価値があると思います。

但し、前回のUSBテザリングと同時には使用はできません。

参考 MTP – ArchWiki

環境
Raspberry pi 3 jessie ディスクトップ
Android端末 EP171AC android7.0 Nougat

EP171ACのUSBデバッグを有効にする

設定 — 端末情報 — ビルド番号を7回タップして開発者向けオプションを有効

開発者向けオプション — USBデバッグをON

Piと接続すると通知欄にNが表示されます。

USB接続の用途 ○ファイルを転送する

Raspberry pi 3の設定

mtp-toolsのインストール(libmtpなども依存関係でインストールされます)

# apt install mtp-tools

lsusbを実行します。EP171ACは以下のように認識しています。

$ lsusb
Bus 001 Device 008: ID 0e8d:201d MediaTek Inc.

/etc/udev/rules.d/69-libmtp.rulesを新たに作成
lsusbの結果からidVendorとidProductを記入

/etc/udev/rules.d/69-libmtp.rules
# EP171AC
ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="666", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"


EP171ACを再接続するとファイルマネージャーにEP171ACが現れます。

出ない時はPiを再起動してみるといいと思います。


EP171ACをクリックするとオートマウントします。

USBケーブルを抜き挿しすると違うアイコンで同じ内容が表示されますが気にしない!

ここでUSBテザリングをONにするとファイルマネージャーからEP171ACは見えなくなります。(接続が切れる)USBテザリングをOFFにするとまたMTP接続(EP171AC)は自動で復活します。

Pi Zero(W) コマンドラインでMTP接続

X環境の無いjessie-liteのZero(W)でMTP接続をしてみます。
Zero(W)はPi3からssh接続しているものとします。

Zero(W)の設定
mtp-tools jmtpfsのインストール

# apt install mtp-tools jmtpfs

マウントポイントの作成
マウントはユーザーで実行するのでユーザーのホームディレクトリに作成します。

$ mkdir ~/mtp

.mtpz-dataの取得
マウントすると
Unable to open ~/.mtpz-data for reading, MTPZ disabled.
こんなメッセージが出ます。GitHubに公開されているので頂きます。

$ wget https://gist.github.com/jemc/0149c1bb28413c3d8cf9/archive/ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
unzip ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
mv 0149c1bb28413c3d8cf9-ba49166cbf8f80c8a50e0ecf79660d3cf2efabde/.mtpz-data ~/
rm ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
rmdir 0149c1bb28413c3d8cf9-ba49166cbf8f80c8a50e0ecf79660d3cf2efabde

マウントしてみる

$ jmtpfs ~/mtp
Device 0 (VID=0e8d and PID=201d) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team
Android device detected, assigning default bug flags

未知のデバイスだよとメッセージが出ますがマウントは成功しています。
Archの解説にもありますがリンク先の最新のSupported devices listを見るとサポートはされているようです。udevルールを適用しても改善はしませんでした。
Raspbianのlibmtpのバージョンが古いのかまたはもう少し設定が必要なのかもしれません。

アンマウント

$ fusermount -u ~/mtp


トップディレクトリの日付やdfの値がおかしいですが内部の日付は正常です。

ファイルの転送も問題無いようです。

やはりこちらもUSBテザリングをONにすると接続は切れてしまいます。
再接続するには一旦アンマウントしてから再度マウントする必要があります。

Xの無い環境でUSBテザリングからターミナルを介してアクセスしている場合、ファイルの受け渡しは直接できないのでSDカードを介するかまたはほかの方法を取ることになりそうです。

Raspberry PiとAndroidでUSBテザリング

USBケーブル1本あればRaspberry PiとAndroid端末を接続することにより簡単にテザリングをすることができます。
Raspberry Piを触ってみたいが固定のネット環境がないという場合でもテザリング契約のあるAndroid端末さえあればPiで遊ぶことができます。(但しインストール済のSDカードは必要ですが)

環境

raspberry pi 3 ディスクトップ raspbian jessie

$ uname -a
Linux pi3 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

Android端末 EP171AC Android 7.0
大手キャリアのテザリングは基本有料のようですね。当サイトではDMMのSIMを使っているので特に制限はありません。
データプランは1GBですが普段はDMMのアプリで低速にしているので月初はいつも2GBになっています。当サイトの感覚では大きな画像のないホームページやメールでは特に問題ないと感じています。


それではディスクトップのPi3とスマホをUSBケーブルで接続してみましょう。
設定 — もっと見る — テザリングとポータブルアクセスポイント
USBテザリングをON
通知欄にUSBマークが現れます。

Pi3からifconfigを実行してみます。

$ ifconfig
-----snip------
usb0      Link encap:イーサネット  ハードウェアアドレス e6:b7:52:e8:56:06 
          inetアドレス:192.168.42.122 ブロードキャスト:192.168.42.255  マスク:255.255.255.0
-----snip------

usb0が生えていますね。
以前はPi側にも設定が必要のようでしたが現バージョンでは特に設定の必要は無いようです。
Pi3はまだWi-Fiが有効になっているので一旦解除します。(root)

# ifconfig wlan0 down


Wi-Fiアイコンから有線アイコンに変わりました。

スマホもWi-FiをOFFにしておきます。

ブラウザから確認くん、スマホからアクセスしていますね。

Piのアドレスは192.168.42.XXになっています。テザリングを入り切りするごとにXXは変わります。
これはandroid端末から払いだされているものと思います。

android端末のアドレスを調べてみました。
nmapのインストール

# apt install nmap

$ nmap -sP 192.168.42.0/24

Starting Nmap 6.47 ( http://nmap.org ) at 2017-08-04 19:06 JST
Nmap scan report for 192.168.42.28
Host is up (0.00078s latency).
Nmap scan report for 192.168.42.129
Host is up (0.0013s latency).
Nmap done: 256 IP addresses (2 hosts up) scanned in 3.24 seconds

android端末のアドレスは192.168.42.129ですね。 これは端末を再起動しても変わりませんでした。

Pi3のWi-Fiを戻すには# ifconfig wlan0 up でWi-Fiは有効になるのですが環境によっては再起動する必要があります。

Pi Zeroで実験

ディスプレー、キーボードの無い環境でUSBテザリングを実行、操作可能かテストしてみました。
Zeroにはraspbian jessie-liteをインストールしています。
Wi-Fiドングルを挿し込みます。
テザリングはPi3同様可能としても操作はandroid端末からするしかありません。

Pi Zeroに固定アドレスを設定する。
/etc/dhcpcd.confに追記
アドレスは192.168.42.XX/24をゲートウェイにはandroid端末のアドレスを設定

interface wlan0
static ip_address=192.168.42.1/24
static routers=192.168.42.129
static domain_name_servers=192.168.42.129

android端末にはターミナルソフトをインストールします。
アプリはTerminusをインストール、HostにZeroを登録します。

android端末のWi-FiはOFFにします。
USBテザリングをON
Terminusから接続
うまく接続出来ました。

コマンドラインからグローバルIPを確認するには
$ curl ifconfig.io を実行すると良いようです。
スマホのグローバルIPが返ってきました。

dhcpcd.confに設定しておけば普段ネットに接続していない環境でもWi-Fiドングルを挿し込みUSBテザリングから接続できるのでメンテナンス等に応用できると思います。

また今回はjessie-liteをインストールしていますがjessieをインストールしてアプリ(VNCなど)からXにもアクセスできそうです。(スマホからなので実用性は厳しいと思いますが)

USBテザリングは接続先のPiとandroid端末の1対1の関係になりますがPi ZeroにさらにWi-Fiドングルを追加、hostapdをインストール、設定すればローカルのアクセスポイントや臨時のルーターとして応用できると思います。(当サイトとしては面倒なのでやめときますが)


Zero-Wに2017-07-05-raspbian-jessie-liteをインストールしました。
PI Zero-Wの内蔵Wi-Fiでも全く同じ設定で試してみましたが同様に接続できますね。

但しTerminusからの接続は新たにZero-WのHostを登録する必要があります。

Raspberry Pi Zero (W) USB-HUB+RTC(DS1302)

市販の小型USBハブもありますがPi Zeroにとっては煩雑になりやすく使い勝手が悪いですね。

今回は前回の拡張基板と市販のUSBハブを利用してPi ZERO(W)の専用USB-HUBを作成してみました。
(作成といっても市販のハブをそのまま利用、加工するだけですが)

セリアの100均ハブ仕様

手持ちの100均ハブで作成してみました。

USB端子を4個並べたのですが右側2個がくっついてしまいました。通常のUSBケーブルは問題なく挿せるのですが少し幅のあるドングルやカードリーダーは干渉してしまいます。


リセット端子も活かしたのでGPIO37,39はジャンパー線などで接続しています。

Yahooストア¥170ハブ仕様

こちらはYahooストア(dasyn)で購入したハブ(送料¥120)です。

こっちはUSBカードリーダーを直接取り付けてみました。
中華製激安品(¥90)ですが取り敢えず問題なく認識、動作しています。


マイクロSDカードリーダーはこんな構造になっています。
取り付けは両面テープで固定、端子部はカットして直接ハンダ付けしています。


ハブ基板は外した端子のグランド側などを利用してピンを立て前後2箇所、ハンダ付けで止めています。
基板も少しカットしています。


さて肝心のハブです。こんなシールが貼ってありますがテストしてみるとハブとして4ポートとも機能していました。
チップはFE1.1Sという中華チップが載っています。

最大のネックは既存のUSB端子を取り外すことですが鉛フリーはんだは簡単に吸い取って端子を外すというわけにはいきません。
ここは大胆に(無理やり)かつ繊細に(ぶっ壊さないように)作業をします。
ここでは逆にハンダを盛ってやって熱を通り易くします。


当サイトで使用した道具です。ハンダゴテは60Wを使用しました。
万力にしっかり固定してハンダゴテで熱を加え左右少しづつドライバーでこじって引き抜いていきます。縦型のUSBは殻だけ同様に外せば端子のみ基板に残ってあとから外せます。
なお当サイトとしては万一破壊に至っても責任は持てません。(自己責任でね


なんとか破壊は免れました。
電源ラインは基板側で共通にできるのでどこか1箇所接続、あとは信号ラインを結線します。
クリスタルはRTCを組んだのでIC側に付け替えています。


カードリーダーを挿しても余裕ができました。

RTC(DS1302)の組み込み

スペースが少しあったのでDS1302を押し込んでみました。が、ここでまたハマってしまいました。

仮組みの段階ではRTCの動作を確認してからハブやら取り回しをして組み上げているのですが最後に動かしてみると動作しません。ICを入れ替えてもやはりダメですね。回路としては単純なので電圧や導通を確認しても間違いは無さそうです。現象もいろいろで最低IC内部の時計が動いていればrtc-piを実行するたびに秒数の変化があるのですがそれも動くものと動かないものがあります。
結局RTCの電源にパスコンを挿入、ハブ側のアースライン(GPIO39)とRTCのアースライン(GPIO9)に分けて正常に動く石が出てきました。それでもやはり動かない石や時刻の書き込みができない石があります。
ここで正常に動いた石は以降時刻補正や時も正常に刻んでいます。
あくまで推測の域を出ませんがこの石はノイズに弱い(Piのノイズが大きい?)のではないかと思っています。

DS1302に関しては先にモジュールとして組んだものを含めると3個は現在も正常に動いているので初期の目標は達成したということでこれでヨシということにします。PiにとってDS1302は鬼門かもしれません。
またRTCも別基板として組んでおけば必要な時に取り付けることも可能と思います。


簡単な実験や確認はこんな感じで。

USB回りもかなりスッキリしました。

Pi Zero (W) 拡張基板の作成

Pi Zero(W)はGPIO端子にピンが建っておらず自分で取り付けるようになっています。

そこでオス(ピンヘッダ)にするかメス(ピンソケット)にするかは少々迷うところです。

ブレッドボードの使用を想定するとメスが使いやすいと思います。

従来のPiの資産を利用するとなるとオスのほうがいいかなと思います。

どちらにも対応できるよう多少手間と部品が必要になりますが拡張ボードを作成してみました。

部品はコストを最小限に抑えるため汎用の40pinシングルのピンヘッダ、ソケットを基板は7cmx5cmの両面基板を使用します。

当サイトでは従来のPiに合わせてオス(ピンヘッダ)を取り付けています。

Pi Zero(W)はアルミ板ベースに取り付けてみました。
取り付け穴は2.6mmボルトを使用するようになっていますが3.2mmのドリルで揉んで3mmボルトで固定しています。


部品は多少納期がかかりますがAmazonで40pinピンヘッダ、ソケットSET10pcs(¥170)基板10pcs(¥360)程度で購入できます。

まずは真ん中のソケットから取り付けます。


ハンダ付けしたら隣のランドとハンダブリッジをします。

30W位のコテで少し冷やしながら手早くハンダをもります。
うまく載らない時は一旦冷ましてからトライしましょう。


反対側のさらに隣にピンヘッダ(またはソケット)を取り付けます。

間にあるハンダブリッジの部分は以降極力使用しないことにします。
万一ブリッジが離れてしまうと修正が困難になります。


こちらも同様にハンダブリッジをします。
ここは先に比べるとブリッジが載りやすくなっていると思います。(但しやはり手早くね)
これで表裏つながりました。何かハンダで接続する際はこちら側を使用します。


Zeroに取り付けてみました。
奥側のピンを使用する時はジャンパー線で接続することにします。
この基板自体は自作の回路か何かに使用します。特にGPIOを使用しなくてもPiと合体して使う目的でであれば何でもいいと思います。
さらにもう1枚今回の例では表裏メスメスで基板を作成すればGPIOはオスからメスに変換されることになります。
縦方向には増やすことができるので目的別に基板を作成することも可能と思います。

作り方、使い方はアイデア次第といったところでしょうか。

次回、この基板を使ってUSB-HUBを作成してみます。

Top