Raspberry Pi Pico with Piper Make on FreeBSD
https://gyazo.com/97c8da2c4f9aa9a1eda1577a6d4e8031
Rapberry Pi Pico
https://gyazo.com/03fb6564fdd9e1f1e00e83b347b45864
安いマイコンボード
Raspberry Pi財団が設計したARM Cortex M0+ベース
Raspberry Pi(UK)設計のRP2040マイコン搭載
デュアルコア ARM Cortex M0+プロセッサ、最大動作周波数 133 MHz
SRAM:264KB、フラッシュメモリ:2MB
端面スルーホールを備えているため直接キャリアボードへのはんだづけが可能
USB 1.1 ホスト/デバイス両対応
低消費電力スリープモードおよびドーマントモードが利用可能
USBを介しマスストレージを使ったドラッグアンドドロップによるプログラムの書き込みが可能
26 x 多機能GPIOピン
2 x SPI、2 x I2C、2 x UART、3 x 12 bit ADC、16 x PWMチャンネル
正確なクロックとタイマーを搭載
温度センサ搭載
高速な浮動小数点ライブラリを搭載
8 x プログラマブルI/O(PIO)
面白そうなRP2040搭載ボード
GroveからモータードライバからLEDからスイッチから全部入り
https://gyazo.com/953ef810544213b22d73766007c38731
写真はスイッチサイエンスから
有線LANあり(W5100S): Arduinoで実績多し
https://d2air1d4eqhwg2.cloudfront.net/images/7556/500x500/7546fb24-245a-4907-8a49-32908daec2b8.jpg
とにかく小さい
https://gyazo.com/95ccb521a52ee21b433d790597a038cd
RPI2040開発環境
Python
C/C++
Piper Make
Raspberry Pi Pico (RP2040)用のブロックプログラミング環境
USB HIDを使って、キーボードやマウスのイベントを生成可能
Actions
https://gyazo.com/7da866ff90b8e991861dcb8465ac1b39
Sensors
https://gyazo.com/456e38aae1ae9a0394b5f432a0d1f542
Raspberry Pi Picoの準備
Piper Makeが利用できるようにするために、ファームウエアのインストールが必要
BOOTSELボタンを押しながら、PCに接続
/mnt/などにディスクをマウント
この時、以下の設定で用いるWebブラウザを実行するユーザの権限でマウントしておく(例ではUID=1001と仮定)。
code:shell
sudo mount -u 1001 -t msdos /dev/da0s1 /mnt/
途中でいくつかWindowが現れるが、基本的には以下のWindow以外はNEXTを押すだけ
https://gyazo.com/0ecbe2be43038f5acca8e853cc28d7ef
ファイルダイアログが表示されるウインドウでは、Picoをマウントした場所を指定(今回は、/mnt/)。
https://gyazo.com/b2691bec0b4089e7989ca5f45b0bb847
しばらくするとファームウエアの書き換えが終了し、自動的にPiper Make用のCircuitPythonが起動
でも、要は、ファームウエアpiper_circuitpython.uf2をda0s1に書き込めばOK
コードの実行の仕方
手順
/dev/da0s1をマウントする。
code:shell
# sudo mount -t msdos /dev/da0s1 /mnt/
マウントした/mnt/に、以下のようなcode.pyなどの名前でコードを書く。
code:shell
# vi code.py
コードのファイルを保存すると、ただちに実行される。
例:Lチカcode.pyを入れる
code:code.py
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.1)
led.value = False
time.sleep(0.1)
code.py (推奨)
code.txt
main.py
main.txt
ブロックプログラミングでコードを書く
ブロックプログラミングしたい場合、
本来は'CONNECT'ボタンを押すと、シリアルデバイスの一覧が表示
Web serialを利用: FreeBSD Chromium portsにはWeb serialの実装は無さそう
ブロックでコードを書く
画面右下のPythonボタンを押す
表示されたコードをcopy.pyなどにカット&ペースト
https://gyazo.com/6445846e95a2d4abe175464c6203decc
FreeBSDでのdmesg
通常時
code:dmesg
ugen0.4: <Raspberry Pi Pico> at usbus0
umodem0 numa-domain 0 on uhub3
umodem0: <CircuitPython CDC control> on usbus0
umodem0: data interface 1, has no CM over data, has no break
umass0 numa-domain 0 on uhub3
umass0: <CircuitPython Mass Storage> on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x0000
umass0:2:0: Attached to scbus2
uhid0 numa-domain 0 on uhub3
uhid0: <CircuitPython HID> on usbus0
da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
da0: <Raspberr Pico 1.0> Removable Direct Access SCSI-2 device
da0: Serial Number E66058388343B530
da0: 1.000MB/s transfers
da0: 1MB (2049 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
uaudio0 numa-domain 0 on uhub3
uaudio0: <CircuitPython Audio> on usbus0
uaudio0: No playback.
uaudio0: No recording.
uaudio0: MIDI sequencer.
uaudio0: No HID volume keys found.
ファームウエア更新モード時(BOOTSELを押しながら起動)
code:dmesg
ugen0.4: <Raspberry Pi RP2 Boot> at usbus0
umass0 numa-domain 0 on uhub3
umass0: <Raspberry Pi RP2 Boot, class 0/0, rev 1.10/1.00, addr 10> on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x0100
umass0:2:0: Attached to scbus2
da0 at umass-sim0 bus 0 scbus2 target 0 lun 0
da0: <RPI RP2 2> Removable Direct Access SCSI-2 device
da0: Serial Number E0C912952D54
da0: 1.000MB/s transfers
da0: 128MB (262144 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
FreeBSDのusbhid(4)の導入
13.0Rから導入された新USB HIDドライバー usbhid(4)を導入すれば、キーボードとマウスを別々に認識可能
準備
以下の様に設定を行なうと、USBデバイスを抜き差しした場合にも期待どおりの動作になる
code:/boot/loader.conf
usbhid_load="YES"
hw.usb.usbhid.enable=1
以下の設定は、リリースノートに書いてある設定ですが、この場合USBデバイスを抜き差しした時に期待どおりに動作しないことがある
新しいUSB HIDを使うように/boot/loader.confに指定
code:/boot/loader.conf
hw.usb.usbhid.enable=1
kld_listにusbhidを追加
code:/etc/rc.conf
kld_list="usbhid"
dmesg(usbhidに関する部分のみ抜粋)
code:shell
ugen0.4: <Raspberry Pi Pico> at usbus0
(snip)
usbhid0 numa-domain 0 on uhub3
usbhid0: <CircuitPython HID> on usbus0
hidbus0: <HID bus> numa-domain 0 on usbhid0
hkbd0: <Raspberry Pi Pico Keyboard> numa-domain 0 on hidbus0
(snip)
kbd2 at hkbd0
hms0: <Raspberry Pi Pico Mouse> numa-domain 0 on hidbus0
hms0: 5 buttons and XYW coordinates ID=2 hcons0: <Raspberry Pi Pico Consumer Control> numa-domain 0 on hidbus0
(snip)
Serial(umodem0)
シリアル経由で、CircuitPythonのコンソールとして利用可能
シリアルとして認識
code:shell
ls -l /dev/cua*
crw-rw---- 1 uucp dialer 0xdc Jan 25 10:11 /dev/cuaU0
crw-rw---- 1 uucp dialer 0xdd Jan 25 10:11 /dev/cuaU0.init
crw-rw---- 1 uucp dialer 0xde Jan 25 10:11 /dev/cuaU0.lock
crw-rw---- 1 uucp dialer 0x3d Jan 25 07:57 /dev/cuau0
crw-rw---- 1 uucp dialer 0x3e Jan 25 07:57 /dev/cuau0.init
crw-rw---- 1 uucp dialer 0x3f Jan 25 07:57 /dev/cuau0.lock
シリアルに115200bpsで接続すると、Pythonのコンソールが表示
code:prompt.py
sudo cu -l /dev/cuaU0 -s 115200
Connected
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
Press any key to enter the REPL. Use CTRL-D to reload.
Adafruit CircuitPython 7.0.0-110-g714f14a66-dirty on 2021-12-13; Raspberry Pi Pico with rp2040
>>
HDD(da0)
普通にmsdosfsとして認識
code:shell
sudo mount -t msdos /dev/da0s1 /mnt/
ls -aFRl /mnt/
total 27
drwxr-xr-x 1 root wheel 16384 Jan 1 1980 ./
drwxr-xr-x 23 root wheel 29 Jan 25 15:11 ../
-rwxr-xr-x 1 root wheel 0 Jan 1 2020 .Trashes*
drwxr-xr-x 1 root wheel 512 Jan 1 2020 .fseventsd/
-rwxr-xr-x 1 root wheel 0 Jan 1 2020 .metadata_never_index*
drwxr-xr-x 1 root wheel 512 Jan 25 07:22 System Volume Information/
-rwxr-xr-x 1 root wheel 124 Jan 1 2020 boot_out.txt*
-rwxr-xr-x 1 root wheel 22 Jan 1 2020 code.py*
drwxr-xr-x 1 root wheel 512 Jan 1 2020 lib/
/mnt/.fseventsd:
total 17
drwxr-xr-x 1 root wheel 512 Jan 1 2020 ./
drwxr-xr-x 1 root wheel 16384 Jan 1 1980 ../
-rwxr-xr-x 1 root wheel 0 Jan 1 2020 no_log*
/mnt/System Volume Information:
total 18
drwxr-xr-x 1 root wheel 512 Jan 25 07:22 ./
drwxr-xr-x 1 root wheel 16384 Jan 1 1980 ../
-rwxr-xr-x 1 root wheel 76 Jan 25 07:22 IndexerVolumeGuid*
-rwxr-xr-x 1 root wheel 12 Jan 25 07:22 WPSettings.dat*
/mnt/lib:
total 17
drwxr-xr-x 1 root wheel 512 Jan 1 2020 ./
drwxr-xr-x 1 root wheel 16384 Jan 1 1980 ../
disk容量は1M
code:shell
% df -k
/dev/disk6s1 1004 5 999 1% 512 0 100% /Volumes/CIRCUITPY
% diskutil list
/dev/disk6 (external, physical):
#: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *1.0 MB disk6
1: DOS_FAT_12 CIRCUITPY 1.0 MB disk6s1
USB HID(uhid0)
usbhid(4)を使うことでhkbdとhmsとして利用可能
Piper Makeのキーボードやマウスの機能が動作する。
NG:sound(uaudio0)
そもそも、MIDIの機能以外なんもなさそう。
code:sound
uaudio0: <CircuitPython Audio> on usbus0
uaudio0: No playback.
uaudio0: No recording.
uaudio0: MIDI sequencer.
uaudio0: No HID volume keys found.
code:shell
cat /dev/sndstat
No devices installed.
No devices installed from userspace.
おわりに
とりあえず、Raspberry Pi Picoを
ブロックプログラミングで
FreeBSDから
(無理やり)使うことができた
今後、
ChromiumのWeb serial実装
せんとあかんかなぁ?
作業済: USB HID(usbhid(4))として動かしたい