2022年5月24日火曜日

bullseyeで初期設定後画面が真っ黒になって困った

あれ、画面が真っ黒に 

Raspberry Pi OSとして最近はbullseyeを主に使っています。
今まではIoT用途が多かったのでヘッドレスでのセットアップがばかりでしたが久々にディスプレイ+キーボード+マウスの構成でインストールをしたところ初期設定後の再起動で画面が真っ黒になって困ってしまいました。

どうやら言語設定を日本語にすると画面が真っ黒になってしまうようです。

最新のImagerでは色々と初期設定が可能ですが何もしないで今まで通りのインストールを行うと英語の初期設定画面は問題なく表示されるのですが、ロケールなどを日本語環境用に設定した後のリブート後に画面が真っ黒になってしまいます。

OSは問題なく起動されているのでsshでログインすることは可能です。

インストール環境

Raspberry Pi 4B 8MB
MicroSDカード:GIGASTONE 32MB
Raspberry OS:2022-04-04-raspios-bullseye-arm64.img
ディスプレイ:I-O DATA EX-LD2071TB
キーボード、マウス:自宅にあったもの

boot.txtの修正で問題解決

他のディスプレイに接続すると問題なく画面が表示されるディスプレイもあります。
どうやらディスプレイとの相性のようです。

昔もディスプレイとの相性があってconfig.txtをいじったことを思い出しました。

と言うことで今回はSDカードを取り出してWindowsで/boot/config.txtの以下の部分を修正して問題なく画面が表示されるようになりました。
値についてはそれぞれの環境によって違いますが参考としてはこちらと各自のディスプレイの取説を見て下さい。

ちなみにI-O DATA EX-LD2071TBは1920×1080のプログレッシブモードでHDMI接続なので1080pの60Hzの設定(hdmi_mode=5)を使用しました。

framebuffer_width=1920
framebuffer_height=1080

hdmi_group=1
hdmi_mode=5


2022年5月3日火曜日

bullseyeでGrove Base Hat for Raspberry Piが動かない!

 Raspberry Pi OS bullseyeがリリース

2021年10月30日にbullseyeがリリースされましたが、その後Busterも引き続きサポートされていく事がアナウンスされました。本家のNewは2021年12月2日に出されましたが、2021年12月10日にはZD Net Japanが日本語の記事をアップしています。

これに伴ってGrove Base Hat for Raspberry Piの一部センサー等についてbullseyeでは提供されるライブラリで動かなくなったものが出てきた様です。

いずれライブラリもアップデートされるでしょうが今回仕事でGrove Base Hat for Raspberry Pi(以下Hat)を使う必要があったのであえてLegacyを使わずにbullseyeにチャレンジしてみました。

Online one-click installationは使えません

まずはseeed studioのHatのページを見てみるとbullseye以上の場合は「Online one-click installation」が使えないと記載されています。これはbullseyeからPython2が標準インストールされてなくなったのが原因です。但し「Step by step installation」の手順でPython3でインストールすればbullseyeでもHatの利用は可能です。

ほとんどのセンサー類は問題なく動く様です。

では何が問題なのかと言う事ですが、色々と調べてみるとHatライブラリでupmmraaを使っていると問題になるようです。
bullseyeにはupmとmraaはインストールされていないので手動でインストールしようとしてもパッケージが見つからないのでインストール出来ませんでした。
seeed studioのGithubでもupmとmraaについては既にメンテナンスされていない様なのでGroveモジュールでupmとmraaを使用している物は使えないとなっています。

Node-REDで動かしてみる

取り敢えずはbullseyeの環境でインストールしてNode-REDでこちらの温度センサーを使ってみると以下の様なエラ〜メッセージが表示されます。

Error: Command failed: python -u /home/pi/.node-red/node_modules/node-red-contrib-grove-base-hat/grove-temperature-sensor/grove-temperature-sensor.py 2 1651393678682
Traceback (most recent call last):
  File "/home/pi/.node-red/node_modules/node-red-contrib-grove-base-hat/grove-temperature-sensor/grove-temperature-sensor.py", line 26, in <module>
    from grove.factory import Factory
  File "/usr/local/lib/python3.9/dist-packages/grove/factory/__init__.py", line 2, in <module>
    from .factory import *
  File "/usr/local/lib/python3.9/dist-packages/grove/factory/factory.py", line 38, in <module>
    from grove.temperature import *
  File "/usr/local/lib/python3.9/dist-packages/grove/temperature/__init__.py", line 2, in <module>
    from .mcp9808 import TemperMCP9808
  File "/usr/local/lib/python3.9/dist-packages/grove/temperature/mcp9808.py", line 38, in <module>
    from upm.pyupm_mcp9808 import MCP9808
ModuleNotFoundError: No module named 'upm'
    at ChildProcess.exithandler (child_process.js:383:12)
    at ChildProcess.emit (events.js:400:28)
    at maybeClose (internal/child_process.js:1058:16)
    at Socket.<anonymous> (internal/child_process.js:443:11)
    at Socket.emit (events.js:400:28)
    at Pipe.<anonymous> (net.js:686:12) {
  killed: false,
  code: 1,
  signal: null,
  cmd: 'python -u /home/pi/.node-red/node_modules/node-red-contrib-grove-base-hat/grove-temperature-sensor/grove-temperature-sensor.py 2 1651393678682'
}

この温度センサーではNTC Thermistorを使っているのでMCP9808は使っていないのですがエラーになっています。「grove/temperature/__init__.py」が有無を言わさずに「mcp9808.py」をimportしている様です。

そこでupmとmraaを使用しているモジュールを調べてみると

$ sudo grep -rl upm /usr/local/lib/python3.9/dist-packages/grove
/usr/local/lib/python3.9/dist-packages/grove/display/jhd1802.py
/usr/local/lib/python3.9/dist-packages/grove/display/__init__.py
/usr/local/lib/python3.9/dist-packages/grove/display/sh1107g.py
/usr/local/lib/python3.9/dist-packages/grove/display/__pycache__/jhd1802.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/display/__pycache__/__init__.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/display/__pycache__/sh1107g.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/temperature/mcp9808.py
/usr/local/lib/python3.9/dist-packages/grove/temperature/__pycache__/mcp9808.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/grove_optical_rotary_encoder.py
$
$sudo grep -rl mraa /usr/local/lib/python3.9/dist-packages/grove
/usr/local/lib/python3.9/dist-packages/grove/display/sh1107g.py
/usr/local/lib/python3.9/dist-packages/grove/display/jhd1802.py
/usr/local/lib/python3.9/dist-packages/grove/display/__pycache__/sh1107g.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/display/__pycache__/jhd1802.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/gpio/gpio_mraa.py
/usr/local/lib/python3.9/dist-packages/grove/gpio/__init__.py
/usr/local/lib/python3.9/dist-packages/grove/gpio/__pycache__/gpio_mraa.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/gpio/__pycache__/__init__.cpython-39.pyc
/usr/local/lib/python3.9/dist-packages/grove/grove_optical_rotary_encoder.py

それぞれのソースにあたってみると、

  • displayでは__init__.pyで直接upmからimportしています。
  • temperatureでは__init__.pyで直接upmをimportしていませんが、__init__.pyでmcp9808.pyをimportしているので間接的にimportされます。
  • grove_optical_rotary_encoderについては光ロータリーエンコーダを使用しなければ問題ありません。
  • gpioについてはRPi.GPIOがインストールされていない場合にgpio_mraaを使用するようになっていますがbullseyeではRPi.GPIOがインストールされているのでmraaは使用されません。

以上からdisplayとtemperatureについて対応してあげれば使用できるようになりそうです。

Groveにパッチを当てる

以下の修正をする事でNode-REDで問題なく温度の測定をする事ができるようになりました。

$ sudo vi /usr/local/lib/python3.9/dist-packages/grove/temperature/__init__.py

from .temper import Temper,TemperTypedNTC
### from .mcp9808 import TemperMCP9808

### __all__ = ["Temper", "TemperTypedNTC", "TemperMCP9808"]
__all__ = ["Temper", "TemperTypedNTC"]

$ sudo vi /usr/local/lib/python3.9/dist-packages/grove/display/__init__.py

### from upm.pyupm_lcd import SSD1306, SSD1308, SSD1327
### from .jhd1802 import JHD1802
### from .sh1107g import SH1107G_SSD1327

### __all__ = ["JHD1802", "SH1107G_SSD1327"]
__all__ = []

尚、コメントにしたGroveモジュールについて使用する場合は自分で対応する必要があります。

2022年5月2日月曜日

Raspberry Pi Imager update to v1.7

 知らないうちにRaspberry Pi Imagerが便利になっていた


セミナーでハンズオンを行う機会が多いのですが、その場合ヘッドレスインストールする事がほとんどでした。
この時に今まではssh、Wi-Fiの設定については/bootにファイルを設置することで可能でしたがhostnameを変更することは出来ませんでした。この為、複数のRaspberry Piが「raspberrypi」と言うhostnameでインストールされることになりせっかくZeroconfでssh接続しようと思っても同じhostnameが乱立することになり初期設定手順が煩雑になっていました。

Raspberry Pi Imagerなんてイメージが書き込めればいいと思っていたのでアップデートすることもなくほったらかしになっていたのですがいつの間にか便利機能が追加されていた様です。

今回v1.7になることで日本語対応してくれた様ですが、v1.6の時に便利機能が追加されていた様です。2021年3月19日のNewsにちゃんと紹介されていました(><)

この時はまだCtrl-Shift-Xと裏技的な取り扱いでしたが今回v1.7ではわかり易くなっていましたので日本語化されたその画面を紹介したいと思います。基本的な設定内容はv1.6と変更はありませんので詳細は上記のNewsを見てください。とは言っても画面を見れば判る事ばかりですが。

Raspberry Pi Imager v1.7


起動直後の画面が日本語になっています。
まだこの時点では設定ボタンは表示されていません。


此処でインストールするOSを選択すると


設定ボタンが表示されます。
これをクリックするとこんな画面が表示されてhostnameも設定できる様になっています(@_@)


これなら複数台のRaspberry Piがあって一斉にインストールしてもssh接続で困る事は無くなったのでセミナーがよりスムーズに進みそうです。
また、この設定はインストールのデフォルト設定とする事も可能なので自宅で何回もイメージの書き換えを行う時も楽になりそうです。

※1:bullseyeからユーザpiが自動設定されなくなったのでユーザ名/パスワードの設定を忘れるとbullseyeのヘッドレスインストールではMicroSDへの書き込み後初めての起動で立ち上がらなくなるのでご注意ください。

※2:bullseyeからuserconf.txtを/bootに用意する事で初期ユーザの作成が行われます。

Edisonが故障した一件

 最近またEdisonで遊んでいます。 教育用のデバイスとしてよく出来ているなと思っている Edison ですが、現在3台を所有しています。 最近このうちの1台が調子が悪くなってしましました。具体的にはBeep用のデバイスが壊れたようです。購入時にチェックをしたつもりですが今回久...