2015年11月27日金曜日

Raspberry PiをノートPC化するPi-Topで電子工作(LチカとI2C通信)してみた

はじめに

(注)こちらのページは、2015年に発売されたpi-topの旧バージョンについての記事です。2017年に発売された新バージョンについての記事はこちらになります。

前回のエントリ
にて、Pi-TopではRaspberry PiのGPIOが全てふさがれている、と述べました。そのままではRaspberry Piの特徴の一つである電子工作との親和性の高さが失われてしまいます。

ただし、内部の左側にあるHubという基板にはGPIOから引き出されたと思われるメスピンがあり、その仕様がわかれば電子工作ができると思われました。

その仕様はいずれ公式に発表されるだろうと考えて放置していましたが、どうにも公開される雰囲気がないので、テスターを用いて自分でピン配置を調べ、実際に簡単な電子工作を行なってみました。

下図は定番のLチカを行なっている様子です。


ピン配置

※注:ここから先の情報を試す場合、操作を誤るとPi-Topが破壊される恐れがありますので、全て自己責任でお願いします。

まず、下図のようにfront/back/upper/lowerを定義します。



そうしたとき、Pi-TopのHub基板のピン配置は以下のようになっていました。各GPIOとGNDはRaspberry Piと直結されています。

3.3V/5V/16Vのピンは、Pi-Topの電源やバッテリー側から供給されています。どれくらいの電流を流すことができるかわかりませんので、あまり負荷をかけないほうがよいでしょう。


Raspberry PiのGPIOのピン配置と注意深く比較すると、全てのピンが引き出されていることがわかります。重複しているGNDは一つのみ引き出されています。

注意点を以下に述べます。
  • SPIに関わるピンは既にPi-Topに使われています。具体的には、.pi-top/sys/hub-controller.pyというPythonスクリプト内で、HUBとの通信(スクリーンの明るさ制御、シャットダウンボタンの命令受信)に使われています。動作検証の際、SPI CE1 (GPIO 7)でLチカしてみたところ、Pi-Topが強制的に再起動され、冷や汗をかきました
  • 試していませんが、UART RXD/TXDのピンはシリアルコンソール用に使われているはずです
  • ID_SDとID_SCはRaspberry Piにもあるピンですが、使ったことはありません
  • I2Cのピンは、下図のように0x0bのアドレスを持つPi-Top Hub基板上のデバイスによってバッテリー状態の取得に使われています。具体的には、/usr/local/bin/batteryというシェルスクリプトがそれを実行します。ただし、I2Cは複数のデバイスを接続できるので、問題にはなりません


そのようなわけで、SPIとUARTのピンを使わなければ一般的な電子工作は行なえそうです。

Lチカ

まずは定番のLチカから試してみます。 冒頭のLチカの図を再掲します。上のピン配置でGPIO番号を持っているピンのうち、UART/SPI/I2Cに関わるピン以外の全てでLチカができることを確認しました。下図はGNDピンとGPIO 4を使っています。


用いた回路とプログラムは「Raspberry Piで学ぶ電子工作」の4章で紹介したものを流用しています。

まず、回路はこちら。

そしてプログラムがこちら。
import RPi.GPIO as GPIO
from time import sleep

LED = 4
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)

try:
    while True:
        GPIO.output(LED, GPIO.HIGH)
        sleep(0.5)
        GPIO.output(LED, GPIO.LOW)
        sleep(0.5)

except KeyboardInterrupt:
    pass

GPIO.cleanup()
これをled.pyという名前で保存した場合、ターミナルで下記のコマンドにより実行できます。
sudo python led.py

I2C通信によるLCDの利用

次に、I2C通信によりLCDに文字を表示してみました。下図のようになります。3.3V/GND/I2C SDA/I2C SCLの4ピンを使っています。


LCDをより大きく撮影した様子がこちら。


これは、「Raspberry Piで学ぶ電子工作」の7章で紹介したプログラムを以下のコマンドで実行した様子です。詳細は書籍をご参照ください。
sudo python 07-02-LCD.py 'Hello,  Pi-Top!'

おわりに

そのようなわけで、SPI通信以外のピンは通常のRaspberry Piと同様に利用できることがわかりました。

なお、本エントリを記述した後にRaspberry Piのピン配置を復活させるためのpi-topPROTOという商品が発売されたので、これを購入すると、実は本ページの内容は不要だったりします。下図は、pi-topPROTOとpi-topSPEAKERを接続した様子です。


では、このPi-Topは電子工作に向いているかというと、「ちょっと怖い」というのが正直なところです。

例えば、手がすべるなどしてジャンパーワイヤをPi-TopのHub基板に落としてしまうと、なんらかのショートがおこり基板を壊してしまうことがあり得ます。写真を見ていただくとわかりますが、いかにも何かを落としてしまいそうな位置に基板があるのです。

壊れたのがRaspberry Piならば交換できますが、Pi-TopのHub基板となると交換はちょっと厄介そうです。決して安いものではありませんので。

そういう意味では、Raspberry Pi公式タッチディスプレイの方が、壊しにくい位置に基板があるという点で電子工作向きかな、と思います。あるいは、Pi-Topに続き資金調達に成功したpi-topCEEDでも良いかもしれません。

こちらもどうぞ




「ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作」、「実例で学ぶRaspberry Pi電子工作」、「Raspberry Piではじめる機械学習」を執筆しました。

3 件のコメント:

  1. Pi-topを電子工作用に購入しようと検討しています。こちらの内容とても参考になりました、ありがとうございます。

    ただやっぱりPi側のHeaderはそのまま使いたいと考えているのですが、HeaderをHub基板と接続しない状態でも起動して画面が出るかご存知でしょうか?もちろんその場合液晶の輝度変更や電源ボタン、バッテリ残量など取れないことになると思いますが。。

    返信削除
    返信
    1. 画面は問題なく出ています。問題はむしろキーボードのクオリティが低いことでしょうか。

      削除
  2. 返信ありがとうございます。
    確認遅くなりました、すみません。キーボードが付いている事は大きなメリットと思っていたので、少し残念ですが試してみようと思います。

    返信削除