Afficher en temps réél la vidéo d'une raspicam sur un petit écran TFT 1.8 pouces

Le but de l'opération: afficher en temps réél les images captées d'une caméra de raspberry pi zéro sur un petit écran SPI 1.8 pouces. Cela paraît trivial, mais pour avoir une bonne performance, il faut jouer du framebuffer. Or, une mise à jour du noyeau ne permet plus d'utiliser modprobe et par conséquent d'utiliser ce projet https://github.com/asukiaaa/raspi_tft_display_camera.

Le raspberry est un pi zero WH, avec un Raspi os à jour (janvier 2021). La raspicam est le modèle miniature (“spycam”) et l'écran un modèle générique chinois 1.8 pouces, basé sur le chip ST7735.

L'écran est branché ainsi: GND → GND
VCC → 3.3V
SCL → 23 (GPIO 11)
SDA → 19 (GPIO 10)
RES → 18 (GPIO 24)
DC → 16 (GPIO 23)
CS → 24 (GPIO 8)
BL → 17 (3V3)

Il faudra installer un certain nombre de paquets:

  • Gstreamer et fbdevsink: sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-bad (il en manque mais ils seront installés à l'étape suivante).
  • rpicamsrc: git clone https://github.com/thaytan/gst-rpicamsrc puis suivre les instructions d'installation (dépendances et compilation)

Il sera ensuite nécessaire de créer un device-tree spécifique pour notre écran. C'est très compliqué mais le dernier post de ce thread a fonctionné: https://www.raspberrypi.org/forums/viewtopic.php?f=107&t=281204&sid=ef1d6f13009f63ae83f56adbabc4ed22&start=25#p1761183

Je cite:

dans /boot/cmdline.txt, ajouter:

fbcon=map:10 fbcon=rotate:1 à la fin de la ligne

puis, ajouter dans /boot/overlay/ un fichier fluidicworks18.dts. Y coller cette description:

/*
 * Device Tree overlay for Adafruit/Waveshare 1.8" TFT LCD with ST7735 chip 160x128
 *
 * compile:
 * dtc -@ -I dts -Odtc -@ -I dts -O dtb -o /boot/overlays/adafruit18.dtbo adafruit18.dts
 */
/dts-v1/;
/plugin/;
/ {
	compatible = "brcm,bcm2835";
	fragment@0 {
		target = <&spidev0>;
		__overlay__ {
			status = "disabled";
		};
	};
	fragment@1 {
		target = <&spi0>;
		__overlay__ {
			/* needed to avoid dtc warning */
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";
			st7735: st7735@0 {
				compatible = "fbtft,adafruit18";
				reg = <0>;
				pinctrl-names = "default";
				spi-max-frequency = <40000000>;
				rotate = <0>;
				buswidth = <8>;
				fps = <25>;
				height = <160>;
				width = <128>;
				reset-gpios = <&gpio 25 1>;
				dc-gpios = <&gpio 24 0>;
				led-gpios = <&gpio 18 0>;
				debug = <0>;
			};
		};
	};
	__overrides__ {
		green     = <&st7735>,"compatible=fbtft,adafruit18_green";
		height    = <&st7735>,"height:0";
		width     = <&st7735>,"width:0";
		speed     = <&st7735>,"spi-max-frequency:0";
		rotate    = <&st7735>,"rotate:0";
		fps       = <&st7735>,"fps:0";
		bgr       = <&st7735>,"bgr?";
		debug     = <&st7735>,"debug:0";
		dc_pin    = <&st7735>,"dc-gpios:4";
		reset_pin = <&st7735>,"reset-gpios:4";
		led_pin   = <&st7735>,"led-gpios:4";
	};
};     

Il faut compiler ce device tree avec

sudo dtc -@ -I dts -O dtb -o /boot/overlays/fluidicworks18.dtbo fluidicworks18.dts   

Il faut enfin ajouter cette ligne à /boot/config.txt:

dtoverlay=fluidicworks18,green,dc_pin=23,reset_pin=24,led_pin=17,debug=3  

Et enfin:

gst-launch-1.0 -v rpicamsrc ! video/x-raw,width=128,height=160, framerate=30/1 ! videoconvert ! fbdevsink device=/dev/fb1     
  • howto/raspberry-pi/raspicam_et_st7735.txt
  • Dernière modification: 2021/02/03 17:31
  • de guillaume