planetary days,

不惑とか嘘だよ。惑う惑う。ふらふらと。

フリスクPC(その4) 遊べるように設定しよう

2018年12月30日 | ..._〆(゜▽゜ )
4回連載の最終回、いよいよ遊べる状態まで。

〇 Waveshare HAT用の設定
 使い方の想定として、ブート後にLCDに単体で使うアプリが表示され、ボタン入力で操作できればいいが、HDMIに繋げてキーボードなどをつないで使うこともできる事を考えた。
 フレームバッファをサブディスプレイに複製する(解像度も調整する)、fbcpというツールがあるので、それを使ってみる。

1. まず、Waveshare 1.3" IPS LCDに画面を出せるようにする。
 参考:公式ブログ
    sudomodの1.44" 128x128 pi zero hatのスレッド
 ① /etc/modules に SPIドライバと、フレームバッファドライバを追加。おまけでJOYPAD部分のドライバも書いておく。
$sudo nano /etc/modules
spi-bcm2835

flexfb
fbtft_device


 ② /etc/modprobe.d/fbtft.conf の作成
$sudo nano /etc/modprobe.d/fbtft.conf

#/etc/modprobe.d/fbtft.conf

# waveshare 1.3 LCD ST7789v
options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 custom=1 height=240 width=240 rotate=180 speed=40000000 fps=60 bgr=1
options flexfb setaddrwin=0 width=240 height=240 init=-1,0x11,-2,120,-1,0x36,0x70,-1,0x3A,0x05,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x1A,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x0B,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0x21,-1,0xE0,0x00,0x19,0x1E,0x0A,0x09,0x15,0x3D,0x44,0x51,0x12,0x03,0x00,0x3F,0x3F,-1,0xE1,0x00,0x18,0x1E,0x0A,0x09,0x25,0x3F,0x43,0x52,0x33,0x03,0x00,0x3F,0x3F,-1,0x29,-3
Ctrl+O、Ctrl+Xで出力して終了。このinitの後の16進数コマンドが重要なので、間違えないこと。
リブートして、/dev/fb1が生えているか確認する。

 ③ 動作確認 (やらなくても良い)
 とりあえずちゃんと動いているか確認したいので、何かデータを書き込み。
$ sudo cat /dev/fb1 > test.fb
$ vi -b test.fb
:%!xxd
→ 16進編集モードに入るのだが、しばらく待たされる
→ 適当にフォーマットが崩れないように16進数を入れる。連続してそこそこ変えないと画面上で目立たない。
:%!xxd -r
→ 16進編集から抜ける。戻るのはそんなに待たない
:wq
→ 書いた結果を保存して終了
$ sudo cat test.fb > /dev/fb1
画面上にゴミが表示されたら動作OK。

2. デスクトップをLCDへ同期表示
① fbコピーをインストール
$ sudo apt-get install cmake git
$ cd ~
$ git clone https://github.com/tasanakorn/rpi-fbcp
$ cd rpi-fbcp
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo install fbcp /usr/local/bin/fbcp


② 設定ファイルの変更
$ sudo nano /etc/rc.local
→ 最後の"exit 0" の前の行に "fbcp &" を追記

fbcp &
exit 0
Ctrl+O、Ctrl+X で終了。

LCD表示が(比較的)綺麗になるよう以下の設定にする。
# HDMI接続が主な場合は、以下のconfig.txt変更をしないでもいい。が、それならLCD Hat付ける意味ないよなあ・・・
$ sudo nano /boot/config.txt
→ 以下の行を修正・追記
hdmi_force_hotplug=1
hdmi_cvt 720 720 60 1 0 0 0
hdmi_group=2
hdmi_mode=87
hdmi_cvtのパラメータで720x720にしているのは、アスペクト比を1:1にするため。こうしないと、ただでさえ狭い240x240の画面に横圧縮な画面が表示されてとても見にくくなる。
ちなみに、縦240とか300だと、うちのディスプレイでは表示できなかった。

書いてる時に見つけたこちらのサイトでは、WaveshareのHATに合わせているらしいfbcp-ili9341というのを使っているので、こちらを使った方がいいかも知れない。

3.ボタン入力の設定
 GPIOボタン入力をRetroPieで利用するため、AdafruitのPiGRRR用ドライバを使う。これは、GPIO入力を適当なキーボード入力に変換してくれる。
$ cd ~
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/retrogame.sh
→ うまくRPiから拾えない時は、母艦で保存して渡すなど。
$ sudo bash ./retrogame.sh
→ 3 のPiGRRL Zeroを選択。GPIO番号は後で修正するので大丈夫。
→ 適宜ダウンロードしてインストールしてくれる。流石Adafruit。
→ 最後にrebootするかと聞かれるのでYでリブート。

再起動後、キー定義ファイルを修正。追加キー(GPIO12)をつけてないならESCの行は不要。
$ sudo mv /boot/retrogame.cfg /boot/retrogame.cfg.PiGRRRZero
$ sudo nano /boot/retrogame.cfg
# Uses Broadcom pin numbers for GPIO.

LEFT 5 # Joypad left
RIGHT 26 # Joypad right
DOWN 19 # Joypad down
UP 6 # Joypad up
Z 16 # 'A' button; key 3
X 20 # 'B' button; key 2
ESC 12 # Exit ROM; additional button
LEFTCTRL 13 # 'Select' button; Joypad Press
ENTER 21 # 'Start' button; Key 1
Ctrl+O、Ctrl+Xで書いて終了。
この定義は変更してもリブート不要らしい。使いやすいように修正するといい。
ただ、困ったことにGPIO#12の追加キーが変な動作になっている。具体的には、一度押すとしばらく入力がリピートされる。加工の問題か、ソフト設定の問題か、切り分けが付かない。別のキーを押すと解消するので、実害は少ないが、課題表には載せておこう。

Emulation Stationのキーバインドも変更しておく。EmulationStationは一旦killしておくといいかも。
$ sudo mv ~/.emulationstation/es_input.cfg ~/.emulationstation/es_input.cfg.orig
$ sudo nano ~/.emulationstation/es_input.cfg

<inputList>
<inputAction type="onfinish">
<command>/opt/retropie/supplementary/emulationstation/scripts/inputconfiguration.sh</command>
</inputAction>
<inputConfig type="keyboard" deviceName="Keyboard" deviceGUID="-1">
<input name="start" type="key" id="13" value="1"/>
<input name="down" type="key" id="1073741905" value="1"/>
<input name="right" type="key" id="1073741903" value="1"/>
<input name="select" type="key" id="1073742048" value="1"/>
<input name="left" type="key" id="1073741904" value="1"/>
<input name="up" type="key" id="1073741906" value="1"/>
<input name="a" type="key" id="122" value="1"/>
<input name="b" type="key" id="120" value="1"/>
<input name="x" type="key" id="1073742054" value="1"/>
<input name="y" type="key" id="49" value="1"/>
</inputConfig>
</inputList>
Ctrl+O、Ctrl+Xで書いて終了。

4.Bluetooth Audioの設定
 音声はHDMI出力で出せるのだが、単体で音を出したいのでBluetoothで出力。
 参考:雑木林ブログ
 ① pulse audioのインストール
$ apt-get install pulseaudio pulseaudio-module-bluetooth
$ sudo nano /etc/systemd/system/pulseaudio.service
[Unit]
Description=Pulse Audio

[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm

[Install]
WantedBy=multi-user.target
Ctrl+O、Ctrl+Xで書いて終了。
 ② Bluetoothのプロファイル作成
$ sudo vi /etc/dbus-1/system.d/pulseaudio-bluetooth.conf
<busconfig>

<policy user="pulse">
<allow send_destination="org.bluez"/>
</policy>

</busconfig>
:wq で出力して終了。
 ③ モジュール読み込み設定
$ sudo vi /etc/pulse/system.pa
### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif
:wq で出力して終了。
 ④ Pulse Audioのサービスを起動
 一度リブートしてから、サービスを登録する。
$sudo systemctl start pulseaudio.service

$sudo systemctl status pulseaudio.service
$sudo systemctl enable pulseaudio.service
enableしとかないと自動起動しないっぽい。
 ⑤ デバイスの接続登録
$ sudo blootoothctl
[bluetooth]# agent on
[bluetooth]# default_agent
[bluetooth]# scan on
 → つなげたいBTデバイスのID(MACアドレス風の6バイトデータ)を確認
[bluetooth]# pair **:**:**:**:**:**
[bluetooth]# trust **:**:**:**:**:**
[bluetooth]# connect **:**:**:**:**:**
[bluetooth]# quit

 ⑥ アカウント設定
$ sudo usermod -a -G pulse-access,audio root
$ sudo usermod -a -G pulse-access,audio pi
ユーザ名piだけじゃなく、rootもaudioグループ等に入れておく。
グループに入れていないと、permission deniedになってしまう。

--
これで、大体の設定はおしまい。

キーが圧倒的に少ないので、NES,Gameboy/Color,PCEngine(2ボタン仕様),GameGearあたりが妥当。
ただし、NESは横256を240に縮小することもあって、ドラクエを表示すると微妙に文字が読めない(よく目を凝らすと読める)。GBCは160x144なので、ときメモポケットは十分読める。
そんな微妙なサイズ。

とりあえず、普通に画面に表示すれば勝手にLCDにも表示されるし、retrogameモジュールでボタン+方向入力が普通の文字入力にマップされるので、RetroPieじゃなく普通のアプリケーションを作ってポケット端末化することも問題ない感じ。

しかし、バッテリー内蔵じゃないので、モバイルバッテリーなど外付け電源が必要なのは、少し不便か。
色々と改善ポイントを残しつつ、今年はここまで。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

フリスクPC(その3) OSをインストールしよう

2018年12月29日 | ..._〆(゜▽゜ )
今回は、通常のRaspberry Pi zeroの設定回りなので、有識者には不要かと思われる。
が、自分用メモなのでお構いなしにメモる。メモれー。うなづきマーチ。

○ ソフトウェアの準備(基礎編)
 OSインストールの準備というと、昔はISOからbootableでCD焼くとか手順を調べて色々悩んだものだけれど、RPiへのOSインストールは簡単でいい。
 配布サイトで適切なOSイメージファイル(ダウンロードページで Raspberry Pi 0/1 を選ぼう)を拾ったら、圧縮したままEtcherに渡すとmicroSDに展開しながら焼き込んでくれるので、後はRPiに挿して起動するだけで、OSの起動まで行ける。行けるのだが、これだとちょっと不便なので、いくつかおまじないをする。

・SSHの有効化
 RetroPieの最新版はRaspbian Stretchベースなので、デフォルトではsshdが停止しているらしい。設定変更するのにディスプレイを切り替えるのは面倒なので、ssh接続できるようにする。
 microSDの焼きこみ後、microSDの /boot パーティションは、FATのドライブとしてPCからアクセスできるので、microSDの直下にエディタ(メモ帳)で"ssh"という名前の空ファイルを作成します。拡張子は無し。もし、"ssh.txt"になってしまっていたら、"ssh"にリネームする。

・USB経由でログインできるようにする
 RPi zeroは、PCとUSB経由でIP接続することができる。USBテザリングで使われるRNDIS(Remote Network Driver Interface)、いわゆるUSB-ethernetという接続仕様が使えるので、RPi側、PC側のドライバを仕込む。
1. config.txtの修正
 "ssh"ファイルを置いたフォルダに、"config.txt"というファイルがあるので、ここにUSBコントローラのドライバ設定を追記。
・・・
dtoverlay=dwc2
・・・

2.コマンドラインの追記
OS起動時のパラメータを追記するので、同じく/boot下の"cmdline.txt"を編集。rootwait の直後にモジュール名が列挙されているので、以下の太字部分を追記する。
・・・rootwait modules-load=dwc2,g-ether quiet ・・・


 dwc2の次のカンマ以降が「USB Gadjet」の機能本体の名前で、今回はssh接続のための似非USB-Etherアダプタなのでg-etherにしているが、Mass Storageとか他の機能も持たせられるらしい。

3.Windows側にUSB/RNDISドライバを入れる
 MacとかLinuxが母艦の人は、それぞれ調べてください。
 とりあえず、PCとRPi zeroのUSBポート(真ん中寄り)を普通のUSBケーブルでつないで、USBドライバをインストールします。
 Windows10の場合: Acer USB/RNDIS Gadjet ドライバをインストールする。
 Windows7/8の場合: RPi zeroをPCからUSB接続して、デバイスドライバのインストールダイアログから ネットワークアダプタ>Microfsoft Corp>Remote NDIS Compatible… を選んでインストール

4.RNDISで接続できるようになったら、ホスト側IPアドレスを設定する
 母艦経由でインターネット接続もできるようにするなら、母艦のインターネット側ネットワークアダプタのプロパティ>共有タブ で、RNDISアダプタをプルダウンで選んでNW接続を共有。(自動的にPCが192.168.137.1になる)
 共有しない場合も、接続アドレスが変ると鬱陶しいのでRNDISアダプタの固定IPアドレスを192.168.137.1/24に設定。

5.zeroにつなぐ(1回目)
 RPi zeroに挿したUSBを抜いて、電源リセット。再接続すると、ホスト側からIPアドレスを払い出すので通信できるようになる。コマンドプロンプトで、それっぽいIPアドレスを探す。
 端的に言えば、arpでそれっぽいアドレスが無いか確認して、telnetで試してみる。
c:\> arp -a -N 192.168.137.1

インターフェイス: 192.168.137.1 --- 0x8
インターネット アドレス 物理アドレス 種類
192.168.137.★ **-**-**-**-**-** 動的
192.168.137.255 ff-ff-ff-ff-ff-ff 静的
224.0.0.2 **-**-**-**-**-** 静的
・・・

 そりゃ他に繋がってないので見つかりますな。192.168.137.255はブロードキャストアドレスなので、それ以外で137にある192.168.137.★がRPi。とはいえ、DHCPの動作順で複数見えたりすることもあるので注意。

 事前準備をやってあれば、sshでつながるはずなので、teratermなどで、上記の192.168.137.★につなぐ。
 アカウント名は pi 、初期パスワードは raspberry です。

6.zero側のIPアドレスを固定設定
 USB etherドライバでの接続設定をします。sshでつなぐ毎にIPアドレスを確認するのは面倒なので、固定IPアドレス(192.168.137.81)にします。DNSはgoogleの公開DNSを使用。
 $ sudo nano /etc/dhcpcd.conf で、以下の設定を追記します。
interface usb0
static ip_address=192.168.137.81/24
static routers=192.168.137.1
static domain_name_servers=8.8.8.8 8.8.4.4

 Ctrl+O Ctrl+Xで保存して終了。

 ネットにつなぐので、パスワードも変更します。
 $ sudo raspi-config で設定メニューを起動。
 最初は、8 Updateでツール自体を最新化。その後、再度起動して以下を設定。

 1 Change User Password で、ユーザ piのパスワードを変更。
 2 Network Options > N1 Hostname で、このRPiのホスト名を何か設定しておく。Windowsファイル共有なんかでもこの名前が使われる。
 4 Localisation Options > I2 Change Timezomne で、時刻を Asia > Tokyo に合わせる。
 4 Localisation Options > I4 Change Wi-Fi Country で、WiFiのリージョンをJPにしておく。
 5 Interface Options > P4 SPI、 P5 I2C をそれぞれenableにしておく。
  P2 SSHは、やらなくてもよさげ。
 7 Advanced Options > A1 Expand Filesystem は、自動でやってるような気がするんだけれども、dfとってみてSDCardの容量よりパーティションが明らかに小さいようなら、色々ファイルを入れる前にやってみてもいいかも。


 ここまで実施したら、$ sudo reboot。

7.WiFiの設定
 外部につなぐのに、PCなしでも行けるようにWiFiを設定します。
 本音は、USB ether経由の設定だと、セキュリティを見られる環境だとなんかやらかしそうなので。
 なお、わざわざ手動でやらなくても、上記6.のraspi-configでWiFi設定もできるような気もする。
 たとえば、SSIDが"lain"、パスフレーズが"PresentDayPresentTime"に設定してあるWiFiアクセスポイントに接続する場合は以下のようにパラメータを設定して暗号化パスフレーズを作成。
$ wpa_passphrase lain PresentDayPresentTime
network={
ssid="lain"
#psk="PresentDayPresentTime"
psk=6dad3850d260d3dd40cc8fd735110bd9b6bbc950cb831b5ac983327092d30c99
}

 この結果をwpa_supplicant.confに追記する。

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
ssid="lain"
#psk="PresentDayPresentTime"
psk=6dad3850d260d3dd40cc8fd735110bd9b6bbc950cb831b5ac983327092d30c99
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
}

Ctrl+O Ctrl+X で書いて終了。
 何も設定しなければ、再起動後にwpa_supplicantが上がって自動接続してくれる、はず。
 つながらない場合は、$ sudo ipconfig wlan0 off → $ sudo ipconfig wlan0 on でWiFiインタフェースを再起動し、wpa_supplicantを強制的に叩いてみるなど。

 WiFiを固定IPアドレスにする場合は、dhcpcd.confにSSID毎の設定を追加(Raspbian Stretchの場合)。
$ sudo nano /etc/dhcpcd.conf
 <既存の内容は消さないで、最後に追記>

interface wlan0
ssid lain
static ipaddress=192.168.7.7/24
static routers=192.168.7.1
static domain_name_servers=192.168.7.1 8.8.8.8


 WiFiは繋がってるのにDHCPでアドレスが払い出されていない場合は、
$ sudo dhclient wlan0 として、強制DHCPリクエストを。

一般的な設定が終わったところで、次回はWaveshare 1.3" IPS LCD Hat特有の設定とか。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

フリスクPC(その2) ケースを削ろう

2018年12月28日 | ..._〆(゜▽゜ )
前回記事では、電気工作部分に焦点を当てたが、ケース加工もやっぱり物理。

 簡単に結果だけ書いているが、ハンドドリルといいつつタップドリル(T字型のハンドルにチャックがついてて、タップ・ドリル刃を取り付ける感じ)でぐりぐり穴をあけてはニッパとやすりで穴を広げる作業でなので、
- ドリルで穴をあけた勢いで指の先にも穴を開けかける。とても痛い。
- やすりで削る勢いで、やすりの先端の尖ったところで指を突く。それなりに痛い。
- 大きな開口部はカッターで削ったりしたのだが、勢いで以下略。
作業する時は、焦らず気を付けてやろうね!

・ケース加工
 そんなわけで、フリスクケースに穴をあけて、削る。
 フリスクケースの底面にハンドドリルで4隅をあけて、カッターで気持ち小さく切り抜き、100均で買ったヤスリでいい大きさまで削る。ジョイスティックとプッシュキーの部分も、現物取りで開ける部分を決めて切り取って削る。4隅にLCD HATを固定するネジ穴を2.6φ・・・の手持ちがないので3φのハンドドリルで穴あけ。GPIOコネクタの反対側はスペーサを挟むようにしたのだが、RPiの動作LEDの光がナイロンスペーサを介して見えるので、1箇所はネジを止めないことにした。
# 初号機では、最初に入手した1.4型 128x128 LCDの方に合わせて画面の穴を抜いてしまった(1.3インチのLCDを当てると隙間がある)のでかなり見た目が悪いのだが、そこは御容赦いただきたい。

 短辺側面は、microSDの差し替み口、と追加スイッチ穴を開ける。microSD用開口部はスリット状にすると格好いいのだが、microSDのはみ出しが1mmも無くて抜くのが大変なのでちょっと大きめにする。
# ついでに両側面にスイッチをつけようとしたのだが、microSDを押さえつけてしまうので断念。

 長辺側面には、RPiの電源用と外部IF用の2つのmicroUSBとminiHDMIコネクタの穴を開ける。上蓋側(LCDが上面とすると下面なのだが)がスライドして被さるので、干渉しないようにそっちも削る。ニッパで切ると容易に大きくヒビが入るので、ドリル穴を数mm間隔で開けてからつなぐようにニッパで切り、ヤスリがけで直線にしていく。不器用なので直線にならなかったけど。断じて性根がひねくれてるからまっすぐにならない、とかではないはずだ。

 上蓋は、RPi裏面のGPIOヘッダの半田付け部分が干渉するのでGPIOヘッダの位置だけ穴あけ。結果的に蓋を力任せに嵌めるのはぎりぎり無理だったので、そこまで頑張る必要は無かったかもしれないが、仕方あるまい。ちなみに、フリスクのラベルで「120% BOOST」と書かれている部分が丁度切り取る範囲になる。RPi財団も狙ってそういう基盤レイアウトにしたんじゃないかというぐらいに。

・基盤の固定
 ネジ止めの向きも、GPIOヘッダ側はLCDのみネジ止め、HDMI側はLCDもRPiも固定する方針で穴あけをしたのだが、どっち向きにネジを止めたものかと組み付けてみて色々試行錯誤した。
 全部をガチガチにネジ止めするとゴツくなるし、スイッチ押すことを考えるとグラつかず、邪魔にならずにとめたいし・・・
 結局、LCDは底面に外からネジ止め、RPi本体は蓋側に六角スペーサのネジ部を出して外側からナット止めにした。GPIOヘッダを挿すと上下が結合するので、スペーサのネジ穴に底面からネジ止めして固定するようにしてみた。これも改善の余地はあるのだが、薄いフリスクケースで皿ぐりとかやってられないのでとりあえずこのまま。

・ボタンまわり
 ボタン周辺が、特にジョイスティックが軸むき出しってのがいけてない。同じパーツを販売してるショップで対応するノブとかツマミとかキャップとかが売られていないかと探してみたのだけれど、見つからず。これは、そのうち「おゆまる」とかで作ってみるしかないのかなあ。上手く作れる自信がない・・・



 長々書いたのをまとめると、総じてケース周りは妥協が多いので、ボタンカバーとかスティックも込みで、3Dプリントでなんとかなんないかなあと妄想するが、データを作る才もないので「もう少し頑張りましょう」かなあ。簡単な組み立て図は右の通り。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

フリスクPC 画面付き (その1) 工作をしよう

2018年12月27日 | ..._〆(゜▽゜ )
最近弄り回してたFriskサイズPCが、一応の動作を見たのでメモ。

発端は、Raspberry Pi Zero(以下RPi zero)サイズで1.44型LCD(128x128ピクセル)と5方向マルチファンクションキー(早い話が押込み付きのジョイスティック)、タクトSW3つがついたHAT(RPiのGPIOヘッダに挿す拡張基盤)を入手したこと。
RPi zero系が新型フリスクにぴったり納まるので、この組合せなら画面と入力とWiFiが揃ったポケットPCが作れるなと。
そんなわけで、後日メンテする時のために、作成手順をまとめておくことにする。

出来栄えは・・・見ての通り、行き当たりばったりに目分量&実物当てで採寸してる上に、直線が出てないのでとてもショボい。
が、ほぼフリスクケースサイズで電源だけで動作するPCという目標が達成したので、良しとしたい。


○ 用意したもの
・Raspberry Pi Zero WH (ヘッダ無しは店頭で見当たらない・・・)
 同一サイズでBananaPi A2 zeroというのもあるが、無線LANの外付けアンテナ端子などがあり、単体でWiFi/Bluetoothが飛ばないと困るので今後の研究課題で。あと裏面実装があるので、今回のようにフリスクケースに無理矢理入れるのは厳しいか。
Waveshare 1.3インチ 240×240 IPS LCDディスプレイHAT for RaspberryPi SKU#14972 1680円@千石電商 1.44型を入手した後で、解像度が高いこちらを発見したので変更。
・基盤取付用小型タクトスイッチ 20円@秋月電子通商 など
・薄めのユニバーサル基盤と細めの線材:上の小型タクトスイッチの配線兼固定スペーサ用
フリスク(120% Booster版) 味(パッケージ色)はお好みで。
・2.6φ5mmナベネジ、ナイロン製六角スペーサ(5mm)、ナイロンナット
 スペーサは適切な長さに切って調節するので、適度に柔らかい素材がよろしい。
・microSDカード(16GBか32GBぐらいが幸せ)
・OSイメージ (今回はRetroPieを利用)
・音声出力用Bluetoothイヤホン(多分、プロファイルはA2DPだと思う)

○ハード編
とりあえず、最初に考えたのはRPi zeroWとWaveshareのLCD HATをFriskケースに納めてみよう! だったのだけれど、組んでみたらいくつか課題が。

・Friskケースに厚みが納まらない
 ヘッダの足が長くて、組み合わせた厚さがフリスクケースの内寸よりも明らかに数mmはみ出ている。
 LCD側は薄型の表面実装40pinコネクタなので、RPi zeroWHのGPIOヘッダを薄型用の短いヘッダに付け替えればいいのではないかと考えた。
 吸い取り線で半田を取ろうと考えたのだけれど、家にある半田ごてでは熱容量が足らないのか、そもそも温度が低いのか、WHについてるヘッダの半田が溶けない。悲しいほど溶けない。吸い取るどころではなく、断念。
 WHじゃない、ヘッダ無しのRPi zeroWだと、薄型ソケット用の5mm高ヘッダをつけるだけでいいんだけど。

 次善の策として、物理で勝負。ヘッダの先端3mmぐらいのところに定規をあてて、細書きのマジックでマークをつける。そしてニッパで一本づつ切り詰めた。何となく後々変な挙動を生んだのはこれが原因かも知れないが、気にしない。
 ヘッダとソケットの間に隙間がほとんど無くなったのを確認したら、GPIOと反対側のネジ穴に六角スペーサを挟んで基盤同士が並行になるように、スペーサの長さを調節する。調節すると言うと聞こえがいいが、ニッパで無理矢理ちょん切って、潰れちゃったのを横からラジオペンチで押さえて形を整え、やすりで端面の直角を出しつつ高さを調節する。

 しかも、そこまでしたけど結局きちんと蓋が閉まらない。
 結果として、強く厚さ方向に力を掛けないでくださいという事になったので、機会があったら3Dプリンタなどでちょうどいいサイズのケースを作ってみる、という次版課題に。

・押しボタン入力が5つしかない
 A,B,Start,Selectの4ボタンでいいかというと、エミュレータのシステム的なキャンセル動作などで、もう1つボタンが欲しい。欲を言えば、人差し指で押す、いわゆるショルダーボタンも欲しいが、加工が無理な気もするので1つでいいことに。

 基盤取り付け用の細いタクトスイッチを、細く切った基盤に取り付けてフリスクケースの側面に出すことにした。RPiとLCDの間のスキマに入るので、ユニバーサル基盤で1列、5.08mm幅で長さは適宜。プルダウン抵抗もつけるので、普通の1kΩの金属皮膜抵抗の長さ+2穴分ぐらいはあるといい。
 配線は普通のプルダウン付きSWの回路なのだが、狭いところに空中配線なので余分なはんだを乗せないこと。とりあえず、SWの片側に抵抗の足とGPIOにつなぐ線、SWの反対側に3.3Vにつなぐ線、抵抗の反対側にGNDにつなぐ線を半田づけして、ケースの隙間に収まる事を確認する。

 このスイッチはLCDカードが使用するものと重複しないGPIOということで、GPIO12(GPIOヘッダ32番ピン)に接続。具体的には、RPi WHの裏側のヘッダピンの半田付け部分に無理矢理半田付けする形で、上記GPIOの他に3.3Vは17番ピン、GNDは34番ピンに合計3箇所を接続。本当はコネクタを挟むとか、そういった感じにした方がメンテナンス性もいいんだろうけど、使い捨てで。


 GPIO自体は余っているので、もし専用ケースを作成するならショルダーSWを是非追加したい。これも次版改善項目に追加。

・電源スイッチをつけたい
 が、諸般の事情というか、上のタクトスイッチの出来栄えがちょっとションボリだったのでやる気が枯渇。次版対応。

-- 長くなってしまうので、その2に続く --
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする