あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

電子ペーパーのInky pHAT(V1)を破壊してみる

Raspberry Pi Advent Calendar 2021の17日目です。ネタって意外と枯渇しないんだね。

adventar.org

social.mikutter.hachune.net

気づいてはいけないこともある……。

Inky pHATをリプレースした

自宅で常設のInky pHATがだいぶ劣化してきたので、V2バージョンに交換しました。並べてみるとだいぶ見栄えが違いますね。

f:id:Akkiesoft:20211216120712j:plain

去年の記事の時点と比較してみても、縞模様がだいぶ増えたように見えます。

f:id:Akkiesoft:20211216120746j:plain

そもそもInky pHAT V1には、電子ペーパー自体の問題等によって、劣化スピードが早かったという問題がありました。調査や原因究明を経て、比較的早いうちに違うメーカーの電子ペーパーの採用と基板の改良が施したV2がリリースされたという経緯があります。V1を購入したユーザーにはV2への交換サポート(実際にはV2が追加でもらえるかたち)が提供されており、今回交換したV2のInky pHATもその時にもらったものです。V1は縞模様が増えて使い物にならなくなったら交換しようと思っていたのですが、案外3年ももって今日に至った次第です。

blog.pimoroni.com

破壊してみよう

さて、交換後のV1も、ただ捨てるだけではもったいないなあと思い、電子ペーパーをはがしてみることにしました。できれば非破壊で剥がしたかったのですが、粘着テープが強力すぎて、軽く温める程度でははがせず、結局破壊する感じになってしまいました。かなしみ。電子ペーパーはガラスが使われているため、素手でやるには危険ですし、破片が飛び散るため、ゴム手袋をつけてビニール袋の中で作業をしました。手袋を見るとわかりますが、赤いインクが付着しています。液体っぽい感じなんですね。

f:id:Akkiesoft:20211216121721j:plain

剥がれたものを見てみると、インクが載っているシート、表面のフィルム的なものとフレキケーブル、ガラス、といったように複数のレイヤーに分かれているようです。

f:id:Akkiesoft:20211216121819j:plain

ガラスの方を見ると、銀色で細かい点の模様が入ったレイヤーも確認できました。

f:id:Akkiesoft:20211216121955j:plain

TDKの解説を見るに、たぶん電気泳動方式で、銀色の細かい点の模様はインクを制御する電極なのかもしれません。オイルと顔料とあるので、手袋の汚れはそれなのでしょう。おもしろい。

www.tdk.com

さて、細かい点の模様の下にうっすらQRコードが見えていることに途中で気づいたのですが、電子ペーパーをすべてはがし終わったところ、基板上にプリントされたものと言うことがわかりました。しかも、読み取るとPimoroniの製品ページに飛びました。ここまでバキバキにはがさないと見られないのでどういう意味があるのかやや謎ですが、こういう隠し要素が見つけられるのはたのしいですね。

f:id:Akkiesoft:20211216123218p:plain

基板はどうしよう

そんなQRコード入りなボードですが、インダクターが弱いらしいこともあって、代わりのパネルを買っても多分すぐ線入りになってしまうことを考えると持っていてもしょうがない節はあります。が、ボードの裏面はイカちゃんが入ってたりしてかわいいので、なんか捨てにくいですね……。

f:id:Akkiesoft:20211216123721j:plain

と思っていたら、前に買ったペラペラの電子ペーパーが互換ありで一応使えたので、これでいいかも(そして前に使ってたWaveShareのe-Paper HATの方を捨てる?)。ライブラリがArchivedになっててサポートなしですが、まあ使い方もサポート外なので、これで行きましょうかね。

f:id:Akkiesoft:20211216134910j:plain

Pico水温センサーのアレをブレッドボードからそれっぽくまとめる

Raspberry Pi Advent Calendar 2021 16日目です。

adventar.org

試作が終わったらブレッドボードから退場いただく

これの続き。

akkiesoft.hatenablog.jp

前回はまあなんとなくいい感じに動いてZabbixに送るところまでできました。

f:id:Akkiesoft:20211209110623j:plain

1日分データが取れるとこんな感じで変化が見られて良いですね。いやこれ、親メダカの水温もちゃんとログ取っておこうかな……。

f:id:Akkiesoft:20211216095245p:plain

ブレッドボードのまま運用しても良いと言えば良いですが、あくまで試作のためのボードですし、なによりオス-オスのピンヘッダーケーブルが枯渇してしまったので、継続して使うならユニバーサル基板かなんかに移動したほうが良いですね。

やっていき

Tiny2040がW5500モジュールよりも一回り小さいので、モジュールの足の間に収められそうではあるのですが、高さ調節のためにTiny2040のピンヘッダー付け替えはやりたくないので、ユニバーサル基板を挟むような形で表裏にそれぞれ配置する方法にしてみました。こ、こうかね?

f:id:Akkiesoft:20211216100514j:plain

ピンソケットは最近マイブームのロープロファイルで実装。エナメル線で配線して板は完成です。

f:id:Akkiesoft:20211216100659j:plain

コンパクトに収まってるようで収まってないような気がしますが、ケーブルが出る向きは揃えてあります。センサーのケーブルもLANポートと板の間を通せば引き出せますね。

f:id:Akkiesoft:20211216100707j:plain

さて、W5500モジュールとOLEDのピンヘッダーは付け替えてもいいというか、どちらも出荷時に結構曲がって付けられていて見栄えが良くなかったので、取り外してロープロファイルピンヘッダーに置き換えました。置き換え後はLANモジュールの高さが抑えられたことで全体の高さが減りました。こうなるとTiny2040もやりたい気持ちになりますが、家の中では唯一普通のピンがついているTiny2040で、これを変えると使い回しが難しくなるのでやめておきます。。

f:id:Akkiesoft:20211216100936j:plain

完成

というわけで、一旦はこんな感じで完成です。飽きるまでは水温計として運用しようと思っています。

f:id:Akkiesoft:20211216101359j:plain

WIZnetさまが見てる

そういえば、12/3の記事を貼ったらTwitterでLANモジュールのチップ製造元であるWIZnetのアカウントにRTされていたのは見ていたのですが、昨日突然メールで「WIZnetとPicoの組み合わせで作品コンテストに出しませんか」みたいなメールマガジンぽいのが来ておしっこちびるかと思いました。メール登録もしてないのに急によこすな感があります。Githubあたりでメールアドレスを拾ったんでしょうかね。まあいいんだけども……。ちなみに、応募するとWIZnetのEthernet HATかRP2040付きボードがもらえる上、入賞すると1500ドル〜5000ドル(!?)のギフト券がもらえるのだとか。ここまで書いてURLは貼らないんですけども(回し者ではないので)。

あと、12/3の動作確認に毛が生えたような記事が機械翻訳にかけられてWIZnetのブログに転載されていて、それもワロタ。まあいいんだけども……wコンテストもまあこっから辿れるっぽいですね。

maker.wiznet.io

コミックマーケット99 こくだランドのおしながき

Raspberry Pi Advent Calendar 15日目です。12日目〜14日目にご参加くださった方々、本当にありがとうございました!あしゅりーおじさんの餌やりシステムは私も作りたい……。

adventar.org

コミケの告知

ネタ薄めっぽい感もありますが、コミケの告知です。コミックマーケット99 2日目(12/31)の東5ホール "テ"-23a「こくだランド」にて出店します。

f:id:Akkiesoft:20211215100521j:plain

新刊はコピー誌「あっきぃのラズピッピいじり Petit-3」です。価格は100円ですが、単品購入不可とさせてください。既刊もしくはグッズいずれか1つと合わせて購入ください。電子版は後日発行予定です。内容については、ブログでも人気だった節電ネタとCM4の記事をアップデートor加筆修正したものを収録しています。頒布予定数は18部です。表紙用の紙が20枚だったので。表紙の印刷だけは終わったー。

f:id:Akkiesoft:20211215104751j:plain

自作キーボード基板「TinyPicoKey」もネタ的に頒布します。ロープロファイルのピンヘッダ(TinyPicoKey用)・ピンソケット(Tiny2040用)が付属するほうは300円、基板単品は200円です。こちらも10枚程度と少数なのでお早めに。

f:id:Akkiesoft:20211215104720j:plain

エアコミケでほぼ全く売れなかったEjectのうすい本も持ち込みます。コピー誌はこれと合わせ買いしてもらえるとかなり嬉しいです。ラズピッピいじり4・5も歓迎。まとめ本のEJECTOは重いのでごく少数を持ち込み予定です。麦子アクキーは100円プライスダウンの500円に改定です。

支払い方法に交通ICを導入します

しばらく休眠状態だったSquareアカウントを叩き起こして審査を通すことに成功したので、クレジットカード・交通IC各種・iDの支払いが可能になりました(JCBカードは審査中)。現金についてももちろん対応いたします。100円硬貨払いの人はコイン投入機を使って遊べます。

購入はタッチパネルを使ってえらぶ方式をやってみようとしていますが、当日はわたしが面倒になっている可能性もあります(やらねば……)。

akkiesoft.hatenablog.jp

気をつけてきてね

新型コロナウイルス新株の状況がまだ読みにくいところですが、開催中止にならない限りは一応参加予定です。体調などに気をつけておこしください。

Raspberry Pi 4 EEPROMの今年のアップデートを振り返る

11日目です。明日からはついに私以外の方が書いてくれるので、数日はコミケの作業とかラズピッピの裏方仕事に集中できそうです。

adventar.org

Raspberry Pi 4 EEPROMとは

Raspberry Pi 4 EEPROMは、PCでいうBIOS的なもので、起動に関するハードウェア制御のプログラムと、起動に関する設定がここに収められています。Pi 4以外のモデルではbootcode.binがその役割を担っています。

www.raspberrypi.com

Pi 4 EEPROMは、Raspberry Pi OSを使用していれば、OSのアップデート時に最新のPi 4 EEPROMイメージが収録されたパッケージがインストールされて、次回起動時に適用されるようになっているため、普段の使い方では意識する必要はありません。ちなみに、USB3.0ハブであるVL805チップのファームウェアもここでついでに管理されています。

Pi 4リリース以降、Pi 4 EEPROMのアップデートによって、発熱の改善や、PXEブートやUSB MSDブートの昨日追加、OS起動前に診断画面が表示されるようになるなどの改善がされてきました。

3つのリリース形態

Pi 4 EEPROMはBeta、Stable、Criticalの3つにリリース形態が分かれており、Betaは最新の機能をすぐにでも試したい物好き向け、StableはCriticalリリースは待てないけど新しい機能を使いたい人向け、Criticalは工場で生産時に書き込まれる超安定版で、先述のOSアップデート後の起動時に自動適用されるのもデフォルトではこのCriticalリリースです。

最新のCriticalリリースは2021-04-29版で、一つ前のリリースから1ヶ月しかたっていませんが、Pi400のEthernetの安定化のための改善が含まれています。

自動適用されるリリースを変更するには、raspi-configコマンドで「Advanced Options」→「Bootloader Version」を選択して、 Latest(== Stable)もしくはDefault(== Critical)を選択します。Betaがないのは……そういうことです。設定ファイルを手で書き換えれば適用できますが、Betaは自動適用にせず、必要に応じて手動で適用したほうが無難です。

EEPROMのリリースノート

EEPROMはGitHubで公開されており、リリースノートもここで確認できます。わたしは自宅サーバーでRSS化するスクリプトを置いていて、RSSリーダーで更新を追っています。

github.com

2021年のアップデートを見ていく

では、ベータやStableレベルで今年のアップデートを追ってみます。

2021-01-16版(BetaとStableの同時リリース)では、Pi 4のRev1.1で起きていたらしいSDの電圧設定のミスが修正されています。このように、Pi 4でもリビジョン単位での修正が入ることがあります。なお、Rev1.1は技適マークが入る前のリビジョンなので、待てずに海外から買ってしまった人たちしか持っていないはずです。同様に、2021-03-18版(Beta)ではRev1.1〜1.3で再起動に失敗することがある問題が修正されています。

2021-03-04版(Beta)ではNVMeブート機能が追加されました。これはPi 4ではなくCompute Module 4向けの対応です。 Compute Module 4ではVL805が搭載されない代わりにPCIeが自由に使えるため、NVMeブートを有効にした上でNVMe SSDを搭載すれば、爆速ストレージ環境を構築できるようになりました。この機能は最新のCriticalリリースには含まれていませんが、2021-07-07版でStableに昇格しています。WaveShareのIOボードを使うとPi 4サイズでNVMe SSDが使えて最強です。2230サイズのSSDヤフオクとかで適当に入手できます。

akkiesoft.hatenablog.jp

2021-06-11版(Beta)では、USB MSDブート時のディレイオプションが追加されています。USBブートはSSDUSBメモリに限らず、HDDブートも可能なので、例えばスピンアップしている間にタイム・アウトしてしまうなどの場合には、ディレイオプションを使って少し待つなどの対策が取れるようになりました。

2021-09-23版(Beta)は、ファイルシステム周りの改善に着手したようで、パフォーマンス改善によって起動時間の短縮したとのことです。2021-10-04版(Beta)ではGPT FAT16パーティションのサポートも追加されています。これはあまり意識することはないような気もしますが。。また、ここでもMSDブートのSCSIコマンドタイムアウト値が調整されています。

2021-10-27版(Beta)でセキュアブート対応が追加されています。産業の顧客向けに用意されたベータ機能とのことで、普通のユーザーは特に気にする必要はないようですが、必要な方はウォッチの価値はあるかもしれません。ベータを有効にするための詳細な情報はusbbootリポジトリに解説があるようです。

github.com

2021-11-22版(Beta)ではSabrent Rocket Nano というNVMe SSDの相性問題への対応が入ったようです。日本でもふつうに買えるブランドのSSDのようなので、もし持っていてうまく動かんかったという方がいればこれで治るようです後述の最新のStableにももう含まれています。

最後に、最新のStableリリースである2021-11-29版です。Beta扱いのセキュアブートを含め、9月からの変更がひととおり含まれているので、気になる機能があった場合はこのバージョンを適用して試すと良いでしょう。

自分のPi4 EEPROMイメージのバージョンを知るには

Raspberry Pi OS上からrpi-eeprom-updateをオプション無しで実行すると、現在のバージョンが確認できます。

pi@usbpi32:~$ rpi-eeprom-update
BOOTLOADER: up to date
   CURRENT: 2021年  7月  6日 火曜日 10:44:53 UTC (1625568293)
    LATEST: 2021年  7月  6日 火曜日 10:44:53 UTC (1625568293)
   RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
            Use raspi-config to change the release.

  VL805_FW: Using bootloader EEPROM
     VL805: version unknown. Try sudo rpi-eeprom-update
   CURRENT: 
    LATEST: 

あるいは、MicroSDカードはUSB MSDを接続せずにHDMIだけつないだ状態で起動すると、診断画面が表示されて、そこでバージョンを確認することもできます。診断画面が出ない人はかなり古いので、アップデートして診断画面を見られるようにしておくと良いでしょう。

UbuntuとかFedoraとか、とにかくRaspberry Pi OS使ってないひとは、おそらくEEPROM更新がサードパーティディストリビューションに入っていない可能性がある(逆にわたしがRaspberry Pi OSしか触ってないのでわかってないです。詳しい人がいればぜひ。)ので、たまに最新のRaspberry Pi OSを用意して起動してあげると良いかもしれません。

なんかいろいろ変わってるでしょ

Pi 4 EEPROMが導入されたことにより、ハードウェア近辺やブート周りの変更が柔軟に対応できるようになったようで、リリースから2年たっても新機能やサポートが追加され続けています。いろいろなデバイスからのブート対応が落ち着いたので出揃ったのかなと思っていたら、パーティションファイルシステムの改善や産業向けのセキュアブートまで入り始めたので、活発だなあという印象があります。

リリースノートに変更があって面白い変更があった時には今回のブログみたいなひとくちメモをMastodonに投稿しているので、よかったらそちらも見てみてください。あー、ハッシュタグでもつければよかったなと今更思うなど……。他の言及も多々ありますがざっくりは↓のログからたどれます。

notestock.osa-p.net

Raspberry Pi Picoで1-Wireの温度センサーを使いつつZabbixに送りつける

10日目です。今年のAdvent CalendarはPicoとCircuitPythonを擦りすぎな気がしていてアレ。

adventar.org

水温センサーもPicoとCircuitPythonで動かしてみる

先日Pimoroniから着弾したDS18B20の水温計型センサーは、なんとなく室内で飼育中の稚魚バケツで使いたいなあと思っているところですが、いつもどおりRaspberry Piでやるのもなんなので、これもPicoでやってみます。

DS18B20組み立て

DS18B20は水温計のかたちでも、4.7KΩの抵抗が必要です。そもそも、ケーブルの先端がワイヤーぶった切り状態なので、ピンヘッダなりピンソケットの取り付けも必要なので案外手間です。が、まあ見てなさい。こうじゃ!

f:id:Akkiesoft:20211209005614j:plain

ちくしょう!だいなしにしやがった!お前はいつもそうだ。お前はいつもうろ覚えでぶっつけ本番で作って失敗する。

f:id:Akkiesoft:20211209005640p:plain

誰もお前を愛さない。

f:id:Akkiesoft:20211209005724p:plain

正しい配線はこちらです。

f:id:Akkiesoft:20211209005745j:plain

あっ、こないだの有線LANを流用したろw

温度センサーだけつないで取得して終わるのは面白くないので、ネットワークと絡めたいです。先日遊んだW5500有線LANモジュールを片付けずに残してあったので、これにセンサーを付け足して、Zabbixにでも送りつけられるようにしてみましょう。

akkiesoft.hatenablog.jp

センサーを空いているGP6に配線しました。

f:id:Akkiesoft:20211209010052j:plain

いや、もっとだ……。適当なOLEDモジュールもぶっ刺して、IPアドレスと温度も見られるようにしよう。などと欲張った結果、ジャンパーケーブルが不足したので一本だけメチャクチャな配線ができてしまいましたが、まあいいでしょう。I2CのSDAとSCLをそれぞれGP4とGP5に配線しました。これでTiny2040のデジタル入出力GPIOは全部使い切りました。いいぞ。

f:id:Akkiesoft:20211209010318j:plain

というわけで、コード的にはこんな内容のものを作りました。

  • ネットワーク接続
  • 1-Wire初期化
  • OLEDディスプレイ初期化
  • IPアドレス表示
  • 無限ループで
    • 毎秒温度を取得
    • Zabbixサーバーのアドレス変数にIPアドレスがあったら、60秒に1回温度のデータをZabbixに送りつける
    • 温度をOLEDに表示

出来上がったコードはこちらです。先日のTOTP表示機もそうでしたが、ディスプレイ周りがコードの量をふくらませてしまう感じがあります。

github.com

Zabbixにデータを送りつけるコードは、以前PicoWirelessPackで送ったときのものが流用できると思っていたのですが、残念ながらあちらはMicroPythonかつPicoWirelessPackのライブラリでネットワーク通信をしていたので、socketライブラリを使って一部書き直しをしました。結果的には書き直したあとのが短くできました。どちらにせよ、MicroPythonとCircuitPythonの両方でZabbixにデータを送るやつができたのでヨシということで。

akkiesoft.hatenablog.jp

Zabbix側の設定

Zabbix側では、適当なホスト(スクリプトで「pico-w5500」と指定したのでそうする)を作り、作ったホストにZabbixトラッパータイプのアイテムを「ds18b20.temp」という名前で作っておきます。

f:id:Akkiesoft:20211209012158j:plain

あとはスクリプトを実行して、データが送られてくることを確認できればOKです。

f:id:Akkiesoft:20211209012317j:plain

まとめ

水温センサーのおかげで、前回作ったけど特に何もやらなかったW5500有線LANモジュールがそれっぽいことをする役立ちそうな物体に変身しました。たぶん。

CircuitPythonはAdafruitがかなり作り込んでくれているおかげで、何でもできるし何でもすでに用意されているので、サクサクやりたいことができてしまう。プログラミングと言うよりパズルっぽいレベル。本当にありがたいですね。

さて、実際に水温計を稚魚バケツに放り込んだ様子はこちらです。日中は20度あるっぽいですね。べランドにいる親の水槽と比べるとぬくぬくしてやがるな……(?)

f:id:Akkiesoft:20211209110623j:plain