Liebe Community,
ich versuche einmal, den aktuellen Stand dieses Projektes softwareseitig vorzustellen, verbunden mit ein paar Fragen an euch.
Hardware:
Raspi 3B+
2x 1,8" TFT von az-delivery mit st7735-Controller
x400 v3.0 Audio HAT mit Amp, unter iqaudio-dacplus.dtbo
alternativ / zusätzlich 3,5" joy-TFT mit Touch (SPI)
Software:
- Systemische Einrichtung der Displays (2x 1,8" oder 2x1,8" + 3,5" oder 1x1,8" + 3,5")
- peppyalsa
- peppymeter
- phoniebox v2.3
Ziel:
A) Idealerweise zeigt die Phoniebox auf einem 3,5"-Display die Titelinfos + Cover, auf beiden 1,8"ern sollen die Audiokanäle R/L getrennt dargestellt werden.
B) Da das nicht klappt, s.u., soll nun auf einem 1,8"er ein Peppymeter und auf dem anderen die Titelinformationen angezeigt werden.
C) Eine Verbindung 3,5"+1,8" werde ich auch noch angehen, weil dann das Cover wieder dazu kann. Das scheint mir nur eine schwierigere GPIO-Schieberei zu werden.
Stand der Dinge (Dateien s.u.)
Hardware:
- eine dual-TFT1,8"-Konfiguration war unter Nutzung einer selbst modifizierten st7735r_dual.dtbo endlich erfolgreich. SPI is a bitch. Beide Displays zeigen sich als /dev/fb1 und /dev/fb2 und können jeweils die Konsole anzeigen (cmdline.txt mit "fbcon=map:10" oder "fbcon=map:20"). Beide devices zeigen sich in der proc mit den Hardware-Daten leider als WxH "128x160", also aufrecht stehend. Ich hänge hier in der Frage, wie ich das "hardwareseitig" um 90° gedreht bekomme.
- Zusätzlich läuft auch nach vielen Kopfschmerzen der audio-HAT, nachdem für alle drei Komponenten die GPIO-pins "sortiert" werden mussten.
- Das 3,5" TFT lief nach Einrichtung "allein" auch mit PeppyMeter und Phoniebox reibungslos, allerdings mit fürchterlichem Lag. So machte das keinen Sinn, das Ding läuft mit 16MHz, das scheint einfach zu langsam zu sein. Die 1,8"er sind auf 40MHz getaktet, da erwarte ich mehr. Das 3,5"er als Info-Screen für Titel und Cover ist noch tbd.
Software:
- Phoniebox erfordert in der non-dev-aktuellen Fassung noch Debian Buster mit Alsa. Die Einrichtung ist inkl. WLAN und Audio erfolgt; etwas unschön ist, dass unter Nutzung beider 1,8"-Displays das tool "raspi-config" den Audio-HAT nicht listet und ich manuell unter /usr/share/alsa/alsa.conf auf die hw1,0 umstellen musste. Evtl. ein verbleibender GPIO-Konflikt?
- peppyalsa gemäß WiKI problemlos eingerichtet; die asound.conf ist unter /etc abgelegt und ebenfalls manuell auf hw1,0 und card 1 gesetzt. Das Hilfstools "peppyalsa-client" funktioniert auf Anhieb. In Verbindung mit dem 3,5"er s.o. auch in der Einrichtung easy.
Achtung! Bei Debian bullseye ist der Standard-user "pi" abgeschaltet bzw. ein individueller user einzurichten. Phoniebox v2.x funktioniert as-it-is nur mit dem user "pi" problemlos, die Verzeichnisse sind "softcoded" in den Scripten.
- PeppyMeter: Läuft mit den 1,8"ern noch nicht. Beim 3,5" zu träge = untauglich.
Zu meiner Frage an wesentlich kompetentere Programmierer als ich es bin:
Peppymeter: Ich bekomme es partout nicht hin, eine Auflösung "128x160" dort einzurichten, geschweige denn, die Hardware um 90° zu drehen und in Peppymeter 160x128 anzusetzen, s.u. Peppy-Dateien und -fehlermeldungen.
- Es sind bgr, fgr und needle-Bilder auf 128x160 und 160x128 vorhanden und in ein Verzeichnis "mikro" als "blue128" bzw. "blue160" abgelegt.
- in der Datei configfileparser.py wurde folgendes ergänzt:
+ 126 "MIKRO = "mikro"
+ 129 "MIKRO_WIDTH = 128
+ 130 "MIKRO_HEIGHT = 160
+225-227:
elif meter_size == MIKRO:
self.meter.config[...]WIDTH
self.meter.config[...]HEIGHT
In der config.txt vom Peppymeter wurde "meter = blue128", "meter.size = mikro", screen.width = 128, screen.height = 160 eingetragen, unter sdl.env beide Frambuffer-devices fb1 und fb2 ausprobiert.
Die Größen 128 und 160 wurden in allen Dateien auch getauscht und auf die 160x128er Bilder verwiesen.
Gleiches Ergebnis bei 128x160 oder 160x128:
pi@toriabox:~/PeppyMeter $ sudo python3 peppymeter.py
pygame 1.9.4.post1
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "peppymeter.py", line 293, in <module>
pm.init_display()
File "peppymeter.py", line 165, in init_display
self.util.PYGAME_SCREEN = pygame.display.set_mode((screen_w, screen_h))
pygame.error: No video mode large enough for 128x160
Das sieht nicht wirklich nach einem Peppymeter-Fehler aus, sondern als ob meine Framebuffer-devices sich nicht richtig melden?
Wer kann helfen? Ich habe unten einige Infos/Dateien/Dateiauszüge angefügt, wenn etwas fehlt ergänze ich gerne.
vG
Daniel
Dateien:
/* * st7735r_dual.dts * * ST7735R based SPI LCD displays. Either * Adafruit 1.8" 160x128 und Okaya 1.44" 128x128 * * compile with: * sudo cpp -nostdinc -I include -I arch -undef -x assembler-with-cpp st7735r_dual.dts st7735r_dual.dts.pre * * sudo dtc -@ -I dts -Odtc -@ -I dts -O dtb -o /boot/overlays/st7735r_dual.dtbo st7735r_dual.dts.pre * */
/dts-v1/;
/plugin/;
#include </usr/src/linux-headers-5.10.103-v7+/include/dt-bindings/gpio/gpio.h>
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
adafruit_pins: adafruit_pins {
brcm,pins = <23 24>;
brcm,function = <1>; /* out */
};
adafruit1_pins: adafruit1_pins {
brcm,pins = <16 17>;
brcm,function = <1>; /* out */
};
backlight_pins: backlight_pins {
brcm,pins = <25>;
brcm,function = <1>; /* out */
};
};
};
fragment@2 {
target-path = "/";
__overlay__ {
af18_backlight: backlight {
compatible = "gpio-backlight";
gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&backlight_pins>;
};
};
};
fragment@3 {
target = <&spi0>;
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
af18: adafruit18@0 {
compatible = "jianda,jd-t18003-t01";
reg = <0>;
spi-max-frequency = <40000000>;
dc-gpios = <&gpio 23 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>;
rotate = <0>;
pinctrl-names = "default";
pinctrl-0 = <&adafruit_pins>;
backlight = <&af18_backlight>;
};
af19: adafruit18@1 {
compatible = "jianda,jd-t18003-t01";
reg = <1>;
spi-max-frequency = <40000000>;
dc-gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
rotate = <0>;
pinctrl-names = "default";
pinctrl-0 = <&adafruit1_pins>;
backlight = <&af18_backlight>;
};
};
};
__overrides__ {
128x128 = <&af18>, "compatible=okaya,rh128128t";
speed = <&af18>,"spi-max-frequency:0";
rotate = <&af18>,"rotate:0";
dc_pin = <&af18>,"dc-gpios:4", <&adafruit_pins>,"brcm,pins:4";
reset_pin = <&af18>,"reset-gpios:4",
<&adafruit_pins>,"brcm,pins:0";
led_pin = <&af18_backlight>,"gpios:4",
<&backlight_pins>,"brcm,pins:0";
};
};
Alles anzeigen
Display-Infos vom System
pi@toriabox:~ $ ls /sys/class/drm
card0 card0-SPI-1 card1 card1-SPI-2 version
pi@toriabox:~ $ cat /sys/class/drm/card1-SPI-2/modes
128x160
pi@toriabox:~ $ cat /sys/class/drm/card0-SPI-1/modes
128x160
pi@toriabox:~/PeppyMeter $ fbset -i -fb /dev/fb1
mode "128x160"
geometry 128 160 128 160 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/0
endmode
Frame buffer device information:
Name : st7735rdrmfb
Address : 0
Size : 40960
Type : PACKED PIXELS
Visual : TRUECOLOR
XPanStep : 1
YPanStep : 1
YWrapStep : 0
LineLength : 256
Accelerator : No
pi@toriabox:~/PeppyMeter $ fbset -i -fb /dev/fb2
mode "128x160"
geometry 128 160 128 160 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/0
endmode
Frame buffer device information:
Name : st7735rdrmfb
Address : 0
Size : 40960
Type : PACKED PIXELS
Visual : TRUECOLOR
XPanStep : 1
YPanStep : 1
YWrapStep : 0
LineLength : 256
Accelerator : No
/boot/config.txt
dtoverlay=iqaudio-dacplus
dtoverlay=st7735r_dual
max_framebuffers=4
dtparam=spi=on
dtparam=i2s=on
dtparam=audio=on
#dtoverlay=vc4-fkms-v3d
cmdline.txt
ergänzt um „fbcon=map:10,font:VGA8x8“
dmesg
[…]
[ 7.181794] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.186616] mc: Linux media interface: v0.10
[ 7.191524] bcm2835_vc_sm_cma_probe: Videocore shared memory driver
[ 7.191558] [vc_sm_connected_init]: start
[ 7.200791] [vc_sm_connected_init]: installed successfully
[ 7.273730] videodev: Linux video capture interface: v2.00
[ 7.301490] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.327734] bcm2835_audio bcm2835_audio: card created with 8 channels
[ 7.338864] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.340075] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.352666] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.359056] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.369016] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned.
[ 7.371824] spi-bcm2835 3f204000.spi: chipselect 1 already in use
[ 7.371871] spi_master spi0: spi_device register error /soc/spi@7e204000/spidev@1
[ 7.371902] spi_master spi0: Failed to create SPI device for /soc/spi@7e204000/spidev@1
[ 7.374146] bcm2835-codec bcm2835-codec: Device registered as /dev/video10
[ 7.374207] bcm2835-codec bcm2835-codec: Loaded V4L2 decode
[ 7.404078] bcm2835-codec bcm2835-codec: Device registered as /dev/video11
[ 7.404143] bcm2835-codec bcm2835-codec: Loaded V4L2 encode
[ 7.405373] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video13
[ 7.407561] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video14
[ 7.408196] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video15
[ 7.408956] bcm2835-codec bcm2835-codec: Device registered as /dev/video12
[ 7.409013] bcm2835-codec bcm2835-codec: Loaded V4L2 isp
[ 7.409709] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video16
[ 7.409744] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[ 7.409771] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[ 7.409792] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[ 7.409833] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[ 7.410249] bcm2835-isp bcm2835-isp: Loaded V4L2 bcm2835-isp
[ 7.412792] bcm2835-codec bcm2835-codec: Device registered as /dev/video18
[ 7.412848] bcm2835-codec bcm2835-codec: Loaded V4L2 image_fx
[ 7.868917] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 8.006816] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 8.145465] brcmfmac: F1 signature read @0x18000000=0x1541a9a6
[ 8.160324] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 8.162318] usbcore: registered new interface driver brcmfmac
[ 8.432074] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 8.432239] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 8.432332] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available [ 8.433444] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Oct 22 2019 01:59:28 version 7.45.98.94 (r723000 CY) FWID 01-3b33decd [ 8.995403] [drm] Initialized st7735r 1.0.0 20171128 for spi0.1 on minor 0
[ 11.196805] st7735r spi0.1: [drm] fb1: st7735rdrmfb frame buffer device
[ 11.242127] [drm] Initialized st7735r 1.0.0 20171128 for spi0.0 on minor 1
[ 11.245566] st7735r spi0.0: [drm] fb2: st7735rdrmfb frame buffer device
[ 12.129305] random: crng init done
[ 12.129337] random: 7 urandom warning(s) missed due to ratelimiting
[ 12.393208] 8021q: 802.1Q VLAN Support v1.8
[ 12.442105] uart-pl011 3f201000.serial: no DMA platform data
[ 12.695260] Adding 102396k swap on /var/swap. Priority:-2 extents:1 across:102396k SSFS
[ 12.765899] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
[ 13.217671] SMSC LAN8700 usb-001:003:01: attached PHY driver [SMSC LAN8700] (mii_bus:phy_addr=usb-001:003:01, irq=PO
LL)
[ 13.220716] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[ 13.231241] smsc95xx 1-1.1:1.0 eth0: Link is Down
[ 14.285428] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 15.276211] smsc95xx 1-1.1:1.0 eth0: Link is Up - 100Mbps/Full - flow control off
[ 15.276279] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 16.751214] Bluetooth: Core ver 2.22
[ 16.751350] NET: Registered protocol family 31
[ 16.751362] Bluetooth: HCI device and connection manager initialized
[ 16.751392] Bluetooth: HCI socket layer initialized
[ 16.751411] Bluetooth: L2CAP socket layer initialized
[ 16.751442] Bluetooth: SCO socket layer initialized
[ 16.764194] Bluetooth: HCI UART driver ver 2.3
[ 16.764217] Bluetooth: HCI UART protocol H4 registered
[ 16.764332] Bluetooth: HCI UART protocol Three-wire (H5) registered
[ 16.764603] Bluetooth: HCI UART protocol Broadcom registered
[ 17.062671] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 17.062684] Bluetooth: BNEP filters: protocol multicast
[ 17.062703] Bluetooth: BNEP socket layer initialized
[ 24.640803] pcm512x 1-004c: No SCLK, using BCLK: -2
[ 24.702917] pcm512x 1-004c: No SCLK, using BCLK: -2
[ 24.755825] pcm512x 1-004c: No SCLK, using BCLK: -2
[ 24.782997] pcm512x 1-004c: No SCLK, using BCLK: -2