2015年12月18日金曜日

SHARPのIGZO液晶用のスタンドをタミヤの楽しい工作キットで作り、Raspberry Piで使ってみた

はじめに

秋月電子通商を始めとする様々なショップでSHARPのIGZO液晶の取り扱いが開始されました(2018年4月時点ではどの店でも売り切れですが、本ページ末尾で類似商品を紹介します)。
実は2015年8月のMaker Faire Tokyoで参考出展されていたようなのですが、私は今回初めて知りましたので、早速購入して試してみました。

あまり深く考えずに購入したのですが、なかなか骨のある商品でした。

タミヤの楽しい工作シリーズでスタンドを作成して表示している様子がこちら。


組み立てから電源投入まで

組み立ては詳細な説明書がついてくるので、流れ自体は難しくありません。

ただし、フレキシブルケーブルを基板に取り付けるの作業がかなり繊細なので、慎重に行なう必要があります。また、このフレキシブルケーブルは非常に断線しやすい(後述)ので、注意する必要があります。

Raspberry Piで用いる場合、/boot/config.txtにLCDの解像度に関する設定を追加する必要があります。/boot/config.txtの冒頭に、下記を追加します。KSYさんのページを参考にしました。
# SHARP 7" Settings: (KSY)
hdmi_pixel_freq_limit=200000000
hdmi_timings=1200 0 164 8 32 1920 0 12 2 6 0 0 0 60 0 163430000 0
hdmi_drive=2
disable_overscan=1
max_framebuffer_width=1200
max_framebuffer_height=1920

# Landscape (display_rotate=1 for upside down)
display_rotate=3
framebuffer_width=1920
framebuffer_height=1200
# Test
hdmi_group=2
hdmi_mode=87
hdmi_force_hotplug=1
なお、上記の秋月電子通商の商品ページで公開されているconfig.txtでは、2016-02-03以降のRaspbianで横向き表示ができないので注意しましょう。上記の設定の「hdmi_mode=87」が必要なようです。こちらの解説によると、カスタムモードを作るための設定のようですね。
また、上記設定にある「display_rotate=3」は、HDMI端子やUSB端子がディプレイの上側にある場合の設定です。これらの端子をディスプレイの下側に配置したい場合、「display_rotate=1」としてください。

なお、2015年12月頃のRaspbianでは「NOOBSでインストールしたRaspbian」で映像が表示されず、イメージ書き込みである必要がある」ようでしたが、2016年5月現在、上記の設定を用いればNOOBSでインストールしたRaspbianでも表示可能でした。


2015年12月当時、NOOBSでは画面が映らないと気づくまでの数日間、「組み立て時に破損してしまったのではないか?」と思い、二個目の液晶を購入してしまいましたが、その心配は不要でした(少なくともこの時点では)。


スタンドの作成

このままでは液晶を机にベタ置きで使う羽目になるので、スタンドを作成する必要があります。

既に、フォトフレームを流用する方法を紹介されている方や、きれいなスタンドを自作している方がいらっしゃるのですが、私はタミヤの楽しい工作シリーズのキットが手元で余っているので、これを使うことにしました。

それが冒頭の写真です。


どのようなパーツを使っているのかを解説すると、まず、前面側は下図のようになっており、

  • ユニバーサルプレートL
  • ユニバーサルアームセットのアームを2本
  • ユニバーサルアームセットのパイプ材(小)をスペーサーとして6個(ニッパなどで多少細らせる必要がある)
  • 3mmのビスとナットを6組

が使われています。


背面側は下図のようになっており、
  • ユニバーサルアームセットのL型アーム2個
  • ユニバーサルアームを長さ10でカットしたものを2つ
  • 3mmプッシュリベットを1つ(オレンジ色の部分)
  • 3mmのビスとナットを適宜
が使われています。

ユニバーサルプレートの穴と基板の穴の間隔が合わないため、ユニバーサルプレートへの固定は一箇所だけプッシュリベットを取りつけ、さらにタミヤのマスキングテープを貼って仮止めしています(これについては後述)。


ひとまずはこれで使えるようになりました。このIGZO液晶(1920x1200)(左)と公式タッチパネル(800x480)(右)を比較したのが下図です。

IGZO液晶の方が解像度が高いのですが、プログラムを書くなどのように文字を読み書きするためには、フォントを大きくするなどの設定が必須でしょう。


オチ

そのようなわけで、IGZO液晶をRaspberry Piで使えるようになってめでたい、で締めようと思っていました。

しかし、ブログにまとめるにあたって、基板とユニバーサルプレートをマスキングテープで仮止めたままではカッコ悪いかなあと思い、うまい固定方法を考えることにしました。

そのためにいろいろと試行錯誤している際、ビリッ、という異音がし、フレキシブルケーブルが下図のように断線してしまいました。


上述のようにIGZO液晶を2個購入していたので、2個目を使って復活させることはできましたが、断線に気づいたときはかなり落ち込みました。

そんなわけで、私のIGZO液晶の基板はマスキングテープでユニバーサルプレートに仮止めされたままです。

使いやすかったら常用しようかな、と考えていたのですが、また壊すと落ち込みそうなので、棚にしまっておくことにしました。

オチ2

そんなわけで棚で眠っていたIGZO液晶なのですが、emerge+さんの「IGZOパネルエンクロージャ」というアクリルケースを購入してうまれかわりました。これ、すごく良いですよ。お勧めです。


オチ3

そんなわけで、emerge+さんのエンクロージャで満足度の上がったIGZO液晶ですが、IGZO液晶の1920x1200という解像度では、文字が小さすぎて読むことが難しく、実用には難があるというのが正直なところでした。

2018年4月時点で最新のRaspbianを用いると、GUIの設定アプリケーションに「Pixel Doubling」という、解像度を半分にするための設定が追加されています。Retinaディスプレイのように高解像度のディスプレイを用いるための設定のようです。
これを有効にすると、下図のようにIGZO液晶が960x600という実用的な(文字が読める)解像度で使えるようになります。

なお、2022年7月現在、Raspberry Pi OS Bullseye には、この Pixel Doubling の設定はないようです。代わりに、デスクトップ上で右クリックし、「デスクトップの設定」→「デフォルト」タブ→「大きな画面向け」の設定、を行うと似た効果を得ることができます。

オチ4

「オチ2」と「オチ3」でemerge+さんのIGZOパネルエンクロージャをお勧めしましたが、IGZO液晶同様、こちらも2018年4月の時点では入手不可能ですね。

代替として、下記の組み合わせをお勧めしておきます。
こちらは、本ページで紹介したIGZO液晶よりも一回り小さいのですが、emerge+さんのエンクロージャが美しいので満足度が高いです。


なお、上記の写真で用いている短いHDMIケーブルはこちらです。

また、電源は下記の組み合わせのもの用いており、これによりACアダプターが一個で済むので良い感じです。
こちらの液晶の場合、config.txtの末尾に追加する設定は下記のようになります。
# SHARP 5.5" Settings
hdmi_pixel_freq_limit=400000000
hdmi_timings=1080 0 60 10 35 1920 0 4 4 2 0 0 0 50 0 114352500 0
hdmi_drive=2
disable_overscan=1
max_framebuffer_width=1080
max_framebuffer_height=1920

# Landscape
display_rotate=1
framebuffer_width=1920
framebuffer_height=1080

hdmi_group=2
hdmi_mode=87
dmi_force_hotplug=1
なお、2022年7月現在、Raspberry Pi OS Bullseye では上の設定では画面が縦向きになります。設定中の「# Landscape」の項目が機能していない、ということでしょう。その場合、画面左上のメニューから「設定」→「Screen Configuration」→「Configure」→「Screens」→「HDMI-1」→「向き」を「right」または「left」に設定すると画面が横向きになるでしょう。



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

2015年11月30日月曜日

Raspberry PiをノートPC化するPi-Topにユーザーpiでログインしてみた

はじめに

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

「Raspberry PiをノートPC化するPi-Topが届いた」にて、Pi-Topに触って見ましたが、Pi-Top OSと呼ばれるOSを用いており、ログイン時にPi-Topサイトのアカウントでログインしなければならないことが不満でした。その主な理由は下記の通りです。
  • ログインした後は普通のユーザーpiなので、Pi-Topアカウントでログインする必然性がないこと(CEED universeというものと連携させたいのでしょうが)
  • ログイン時にインターネットに接続していなければならないこと
  • ログイン時に相手側サーバーがダウンしていたらログインできないこと
  • インターネット接続にProxy接続は許されないこと
そのようなわけで、通常のRaspbianのようにユーザーpiでログインできるようにしてみます。さらに、このPi-Top OSを通常のRaspbianに近い外観で使用できるようにもしてみましょう。

グラフィカルログイン方式、およびコンソールにログインしてstartxコマンドでXを起動する方式の両方でできました。


手順

LXterminalを起動し、.xinitrcを無効にします。
$ mv .xinitrc .xinitrc.bak
さらに、X起動時に自動でdashboardというアプリケーションが起動してしまうのを以下で抑制します。
$ mv .config/lxsession/LXDE-pi/autostart .config/lxsession/LXDE-pi/autostart.bak
最後に、下記のコマンドでスプラッシュスクリーンを無効にしましょう。後で解説しますが、これは45秒間の動画を流しているだけです。
$ sudo mv /etc/rcS.d/S01nasplashscreen /etc/rcS.d/K01nasplashscreen
あとは再起動すれば、ユーザーpiのデスクトップで起動すると思います。

バッテリー残量表示のアイコンがありませんが、以下のコマンドで残量が表示できるのでそれほど問題にはならないかなと思います。
$ battery
コンソールログインが良いという方は次の作業も行なってください。なお、このページの末尾にはこのPi-Top OSを普通のRaspbian風に用いる方法も記していますので、必要に応じて最後までご覧ください。

コンソールログインしたい場合

コンソールにログインしたいという方は、下記に従います。

まず、ユーザーpiのパスワードを念のため確認しておきましょう。 Pi-Top OSにログインし、LXTerminalを起動して、
$ su - pi
というコマンドによりユーザーpiにログインしてみてください。パスワードは「raspberry」ではなく「pi-top」であると思います。そのことを確認できたら次に進みましょう。

再びLXTerminalを起動して下記のコマンドを実行します。
sudo raspi-config
そこで「3 Enable Boot To Desktop/Scrach」→「Console Text console, requiring login (default)」を選択して再起動しましょう。これでコンソールへログインする形式になります。

このとき、ユーザーのIDとパスワードは先ほど確かめた通り、
  • ID: pi
  • パスワード: pi-top
です。

ログイン完了時に
Cannot open display "default display"
というエラーがでますが、これは気にしないことにします。多分.bash_profile内に書かれたコマンドのせいだと思うのですが、これを消すと別のエラーが出るためです。 あとは必要に応じてstartxコマンドでXを起動してください。

何をしたのか?

上の設定で何をしたのかですが、基本的には「ユーザーpiのログイン時にdashboardというアプリケーションが起動されるのを抑制した」だけです。

dashboardを通常通り起動すると、「ユーザーpiのデスクトップが起動→dashboardというアプリケーション(Pi-Top OSのログイン画面)が起動」という流れが見えてしまうので、Pi-Top OSでは45秒間の動画(/home/pi/.pi-top/media/splash.mp4)を流してそれを隠している、というわけです。しかし、45秒間待たされるというのはユーザーにとってはメリットは何もないわけで、ちょっとお粗末だなと思います。

通常のRaspbianのように使ってみる

以下、このPi-Top OSを通常のRaspbian風にする設定を列挙します。

LXTerminalが最大化されて起動されるのを防ぐ

.config/openbox/lxde-pi-rc.xmlをleafpadなどのテキストエディタで開き、下記の部分を見つけます。
  <application name="lxterminal">
    <maximized>yes</maximized>
  </application>
この「yes」の部分を「no」に変更してからXを再起動すると、LXTerminalが最大化された状態で開くのを抑制することができます。なお、leafpadも最大化されてい開くかもしれませんが、こちらは、一度小さくしてから終了するとそのサイズが保存されます。

パネルの位置を上に

パネル上で右クリックして「パネルの設定」を開き、「ジオメトリ」→「位置」→「端」→「上」

タスクバーのアイコンに文字を出す

タスクバー上で右クリックして「タスクバー(ウインドウのリスト)Settings」→「アイコンのみ」のチェックを外す

メニューボタンのアイコンをRaspbianのものに

メニューボタン上で右クリックして「メニューSettings」→「アイコン」を/usr/share/raspberrypi-artwork/raspitr.pngに

壁紙をRaspbianのものに

壁紙上で右クリックして「デスクトップの設定」→「外観」で「壁紙のモード」を「原寸大のまま中央に配置する」に、「壁紙」を/usr/share/raspberrypi-artwork/raspberry-pi-logo-small.pngに、「背景色」を赤214、緑211、青222に。

以上で、Pi-Top OSが通常のRaspbianにこの程度近づきました。


こちらもどうぞ




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

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ではじめる機械学習」を執筆しました。