Raspberry Pi OS (Legacy, 64-bit) Lite
Bookworm
code:bash
$ pinout
Description : Raspberry Pi 4B rev 1.2
Revision : c03112
SoC : BCM2711
RAM : 4GB
Storage : MicroSD
USB ports : 4 (of which 2 USB3)
Ethernet ports : 1 (1000Mbps max. speed)
Wi-fi : True
Bluetooth : True
Camera ports (CSI) : 1
Display ports (DSI): 1
,--------------------------------.
| oooooooooooooooooooo J8 +======
| 1ooooooooooooooooooo J14 | Net
| Wi 12 +======
| Fi Pi Model 4B V1.2 oo |
| |D ,---. +---+ +====
| |S |SoC| |RAM| |USB3
| |I ---' +---+ +==== | |0 C| | | oo1 J2 S| +==== | I| |A| |USB2 | pwr |hd| |hd| 0| |u| +==== -| |---|m0|---|m1|----|x|-------'
J8:
3V3 (1) (2) 5V
GPIO2 (3) (4) 5V
GPIO3 (5) (6) GND
GPIO4 (7) (8) GPIO14
GND (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
GND (25) (26) GPIO7
GPIO0 (27) (28) GPIO1
GPIO5 (29) (30) GND
GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
GND (39) (40) GPIO21
J2:
GLOBAL ENABLE (1)
GND (2)
RUN (3)
J14:
TR01 TAP (1) (2) TR00 TAP
TR03 TAP (3) (4) TR02 TAP
For further information, please refer to https://pinout.xyz/
$ sudo apt update
$ sudo apt full-upgrade
Node.js
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
$ source ~/.bashrc
$ nvm ls-remote
$ nvm install 22
$ nvm use 22
GPIO の操作
pinctrl
pin 40 を読み取りに設定
$ pinctrl -e set 40 ip pd
pin 40 の値を読み取り
$ pinctrl get 40
code:bash
$ cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 512-569, parent: platform/fe200000.gpio, pinctrl-bcm2711:
gpio-512 (ID_SDA )
gpio-513 (ID_SCL )
gpio-514 (GPIO2 )
gpio-515 (GPIO3 )
gpio-516 (GPIO4 )
gpio-517 (GPIO5 )
gpio-518 (GPIO6 )
gpio-519 (GPIO7 )
gpio-520 (GPIO8 )
gpio-521 (GPIO9 )
gpio-522 (GPIO10 )
gpio-523 (GPIO11 )
gpio-524 (GPIO12 )
gpio-525 (GPIO13 )
gpio-526 (GPIO14 )
gpio-527 (GPIO15 )
gpio-528 (GPIO16 )
gpio-529 (GPIO17 )
gpio-530 (GPIO18 )
gpio-531 (GPIO19 )
gpio-532 (GPIO20 )
gpio-533 (GPIO21 )
gpio-534 (GPIO22 )
gpio-535 (GPIO23 )
gpio-536 (GPIO24 )
gpio-537 (GPIO25 )
gpio-538 (GPIO26 )
gpio-539 (GPIO27 )
gpio-540 (RGMII_MDIO )
gpio-541 (RGMIO_MDC )
gpio-542 (CTS0 )
gpio-543 (RTS0 )
gpio-544 (TXD0 )
gpio-545 (RXD0 )
gpio-546 (SD1_CLK )
gpio-547 (SD1_CMD )
gpio-548 (SD1_DATA0 )
gpio-549 (SD1_DATA1 )
gpio-550 (SD1_DATA2 )
gpio-551 (SD1_DATA3 )
gpio-552 (PWM0_MISO )
gpio-553 (PWM1_MOSI )
gpio-554 (STATUS_LED_G_CLK |ACT ) out lo
gpio-555 (SPIFLASH_CE_N )
gpio-556 (SDA0 )
gpio-557 (SCL0 )
gpio-558 (RGMII_RXCLK )
gpio-559 (RGMII_RXCTL )
gpio-560 (RGMII_RXD0 )
gpio-561 (RGMII_RXD1 )
gpio-562 (RGMII_RXD2 )
gpio-563 (RGMII_RXD3 )
gpio-564 (RGMII_TXCLK )
gpio-565 (RGMII_TXCTL )
gpio-566 (RGMII_TXD0 )
gpio-567 (RGMII_TXD1 )
gpio-568 (RGMII_TXD2 )
gpio-569 (RGMII_TXD3 )
gpiochip1: GPIOs 570-577, parent: platform/soc:firmware:gpio, raspberrypi-exp-gpio, can sleep:
gpio-570 (BT_ON |shutdown ) out hi
gpio-571 (WL_ON )
gpio-572 (PWR_LED_OFF |PWR ) out lo ACTIVE LOW
gpio-573 (GLOBAL_RESET )
gpio-574 (VDD_SD_IO_SEL |vdd-sd-io ) out hi
gpio-575 (CAM_GPIO |regulator-cam1 ) out lo
gpio-576 (SD_PWR_ON |regulator-sd-vcc ) out hi
gpio-577 (SD_OC_N )
code:js
const Gpio = require('onoff').Gpio;
const button = new Gpio(21, 'in', 'both');
button.watch((err, value) => {
if (err) {
throw err;
}
console.log(value);
});
onoff の node.js ライブラリを使用したら次のようなエラー
code:bash
node:fs:2425
return binding.writeFileUtf8(
^
Error: EINVAL: invalid argument, write
at Object.writeFileSync (node:fs:2425:20)
at exportGpio (/home/pi/kuro-js/node_modules/onoff/onoff.js:18:8)
at new Gpio (/home/pi/kuro-js/node_modules/onoff/onoff.js:172:36)
at Object.
at Module._compile (node:internal/modules/cjs/loader:1706:14)
at Object..js (node:internal/modules/cjs/loader:1839:10)
at Module.load (node:internal/modules/cjs/loader:1441:32)
at Function._load (node:internal/modules/cjs/loader:1263:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:237:24) {
errno: -22,
code: 'EINVAL',
syscall: 'write'
}
Node.js v22.20.0
"onoff": "^6.0.3",
調査してみた結果、GPIO に対応する番号の取得方法がライブラリ側で古くなっている??
https://stackoverflow.com/questions/78173749/use-raspberry-pi-4-gpio-with-node-js/78184108#78184108
以下のコマンドで、GPIO 21 に対応するのが、 gpio-533 ということがわかるので、
$ cat /sys/kernel/debug/gpio
初期化時にコードを以下のように変更する
const button = new Gpio(21, 'in', 'both');
const button = new Gpio(533, 'in', 'both');
ここでも言及されている
https://akkiesoft.hatenablog.jp/entry/20240412/1712893089
$ echo 533 > /sys/class/gpio/unexport
$ echo 532 > /sys/class/gpio/unexport
$ echo 538 > /sys/class/gpio/unexport
録音デバイスのリスト
arecord -l
スピーカーデバイスのリスト
aplay -l
USB オーディオデバイスの優先順位を高くする
$ cat /proc/asound/modules
$ sudo nano /etc/modprobe.d/alsa-base.conf
code:conf
options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
$ cat /proc/asound/modules
$ sudo reboot
$ arecord -r 16000 -f S16_LE test.wav
$ aplay test.wav