Skip to content

Instantly share code, notes, and snippets.

@satakagi
Last active November 24, 2023 13:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save satakagi/dd34c29b0192540080681e2443258282 to your computer and use it in GitHub Desktop.
Save satakagi/dd34c29b0192540080681e2443258282 to your computer and use it in GitHub Desktop.
Raspberry Pi Zeroをブラウザから操作

Raspberry Pi Zeroをブラウザから操作

動機

Raspberry Piは、キーボード・マウス・ディスプレイを用意しないとなかなか使うのが難しいところがあります。お手軽とはちょっと言い難いかもしれません。 また、消費電力的にもPC寄りで、例えばソーラーパネル+バッテリーで駆動させるような用途を手軽に実現するのは難しいです。

  • WiFiやイーサネット経由でホストPCからアクセス可能にできますが、いろいろとハマるポイントが多く一筋縄にはいきません。 特に初期設定段階。
  • Raspberry Pi Picoが出ましたが、OS(Linux)も動いていないですし、これはRaspberry Piというより新種のマイコンボードといって良いでしょうか。
  • 一方、Raspberry Pi Zero (W)にはUSB OTGがあり、これを活用することでイーサネット・WiFi周りの面倒を回避し、PCにUSBで直結して利用することができそうです。
    • OTGには2モードあります。(OTG Ether, OTG Serial) ( 2021/08/24 add: Mass storageなどもあるそうです)
    • OTG Etherモード (参照その2)は、ネットワーク設定がいろいろ必要で、ちょっと上記の面倒の回避策としては弱いですね。
    • OTG Serial(コマンドライン TTY接続)はネットワーク設定を気にせず使えるので回避策として使えそうです。
  • Zeroはパフォーマンスがそれほど高くないですが、低消費電力で、コンソール・コマンドラインベースの利用であれば快適でもあります。
  • Zero Wであれば、ホストPCなしで単体でIPネットワーク(WiFi)に接続・動作もできます。
  • ただ、(コマンドラインベース)TTY接続には専用のターミナルエミュレータソフトが必要です。Web中心なCHIRIMEN的にはブラウザからアクセスしたいですね。
  • ちなみに、Raspberry Pi 4のUSB Cポートは同じ手順でUSB OTGが使えるようです

⇒ ZeroWをOTG Serialで、ブラウザからWeb Serialで接続してみる。

ためしてみる

  • SDにOSイメージ(Raspberry Pi OS lite)を書き込んだ後、このページに従って、3つファイルを編集して、OTG Serialでターミナル接続できるようにしたOSイメージを作る(以下はOSイメージのSDを別のraspberry pi OSマシンにマウントしてその手順を行った例。rootfs内のシンボリックリンクを張る作業ができればどこでもできると思われる(Windowsではext4のマウントが難しいので厳しい?))
    • (/media/pi)/boot/config.txt 末尾にdtoverlay=dwc2追加
    • (/media/pi)/boot/cmdline.txtの、 rootwait と quietの間にmodules-load=dwc2,g_serial追加
    • (/media/pi/rootfs)/etc/systemd/system/getty.target.wantsにcdして、sudo ln -s /lib/systemd/system/getty@.service getty@ttyGS0.service
      • 2022/05 update この記事によると、このシンボリックリンク設定は不要になったかも?(もしそうであればWindowsなどでSDイメージをマウントしただけで設定ができそうです)(要確認)
  • PCにUSBでつなぐ。電源もUSBから給電され起動する。 USBポートはOTGポートを使います(電源ポートではない方です。基板の真ん中側)
    • 最初の起動には1分ぐらいかかるようです
  • https://googlechromelabs.github.io/serial-terminal/ でつないでみる
    • Portを選んで、 Baud rateはデフォルト(115200), Data bits(8), Parity(None), Stop bits(1)もデフォルト
    • Note: default user : pi , password : raspberry , 設定コマンドはsudo raspi-config
    • ポートセレクタのダイアログでは、Gadget Serialという名前がついている。
    • つながった^^ これは結構お手軽
    • CHIRIMEN/RPiZero用として、いろいろ機能を入れたターミナルエミュレータを開発中。
    • https://chirimen.org/PiZeroWebSerialConsole/PiZeroWebSerialConsole.html

USB OTG mass storageも併せて使えるようにする

  • g_acm_msを使うことでSerial + Mass Storageが同時に使える (g_multiでさらにetherも使えるようだが未検証)

  • 参考情報:https://stackoverflow.com/questions/63540052/raspberry-pi-zero-as-read-write-mass-storage と、 https://qiita.com/mt08/items/838a2a0e42d4dbc9fba7

    • 上のstackoverflowの最後の記事のJeremyさんの記事が参考になるが、typoがいくつかある。また共有ストレージの大きさがそんなに大きいものが要らないということでqiitaの記事も参考にする。
  • 一旦上の章の設定で起動しシリアルアクセスできるようにした後、安全のためWiFiとsshの設定をしてPiZeroへのコマンドプロンプトアクセスを複数確保しておく。

  • 以下を設定・確認する

    • /boot/config.txt 末尾にdtoverlay=dwc2があることを確認
    • /boot/cmdline.txtの、 rootwaitの後 と quietの間をmodules-load=dwc2,g_acm_msに設定変更 (g_serial -> g_acm_ms)
    • /etc/systemd/system/getty.target.wantsにcd 以下のシンボリックリンクがあることを確認
      • sudo ln -s /lib/systemd/system/getty@.service getty@ttyGS0.service
    • echo "blacklist g_acm_ms" | sudo tee -a "/etc/modprobe.d/blacklist-g_acm_ms.conf"
      • g_acm_msのmodprobeを遅延実行させる設定?
    • /etc/rc.local の末尾のexit 0の前に以下を追加(sudo vi /etc/rc.local)
      • /sbin/modprobe g_acm_ms file=/piusb.bin removable=y ro=0 stall=0
  • 共有ファイル(/piusb.bin)を作成

    • sudo dd if=/dev/zero of=/piusb.bin bs=512 count=2880 1.4MB FDサイズのイメージ・・
    • sudo mkdosfs /piusb.bin
    • /etc/fstab に以下を追加 (sudo vi /etc/fstab)
      • /piusb.bin /mnt/msd vfat loop,ro,auto      0 0
    • sudo mkdir /mnt/msd
  • PiZeroリブートすると

    • Windows10のデバイスマネージャでは、ポートにUSBシリアルデバイス、フロッピーディスクドライブにLinux File-Stor Gadget USB Deviceが現れるようになる。
    • WebSerialコンソールをつないでみる
  • Note:

この後やってみたいこと

⇒ これらを実装したCHIRIMEN Liteがリリースされました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment