Visualizzazione post con etichetta Raspbian. Mostra tutti i post
Visualizzazione post con etichetta Raspbian. Mostra tutti i post

martedì 9 giugno 2020

Raspbian Headless



Per configurare una Raspbian per modalita' senza schermo e tastiera (headless) la prima cosa e' creare il file wpa_supplicant.conf nella partizione di boot della SdCard 

----------------------------------------
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=IT

network={
 ssid="nome_hotspot_wifi"
 psk="password_hotspot_wifi"
}
----------------------------------------

Non sono riuscito a configurare un Ip Statico in modalita' headless. Ho dovuto modificare il file /etc/dhcpcd.conf al primo boot dove ho ripreso l'ip dinamico dalle tabelle del router

# Example static IP configuration:
interface wlan0
static ip_address=192.168.1.240/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.1.254
static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1


per abilitare il server SSH e' sufficiente creare un file vuoto denominato ssh nella partizione di boot

lo username di default e' pi e la password raspberry 

non e' possibile disabilitare, nel caso si vogliano ridurre i consumi, l'output video  dal file config.txt. La cosa piu' semplice e' loggarsi in SSH e lanciare
/usr/bin/tvservice -o
ed inserire il comando in rc.local

altre configurazioni possono a questo punto essere effettuate con il comando raspi-config (per esempio per espandere il filesystem alla dimensione della SdCard)

giovedì 19 maggio 2016

LCD 3.2 " Waveshare su Raspberry

Ho provato uno schermo LCD da 3.2 pollici per Raspberry da montare direttamente sul connettore a 40 pin.



Se si prova ad usare una Raspbian pura il risultato e' il seguente.. nessuna immagine tranne lo schermo bianco



Il problema e' che lo schermo comunica con la Raspberry tramite SPI e su Raspbian di default non e' montato il modulo per gestire lo schermo. Su Waveshare sono presenti tutte le istruzioni passo passo per compilare il modulo e montarlo ma la soluzione piu' diretta e' scaricarsi una distribuzione Raspbian gia' modificata



Lo schermo ha una risoluzione di 320x240 ed una volta avviato X si vede che le finestre sono tutte piu' grandi di questa dimensioni. La  soluzione per spostare l'area di visualizzazione e' quella di cliccare sinistro tenendo premuto il tasto Alt. In questo modo si puo' trascinare la finestra


Riducendo poi il font di default di X e di XTerm si riesce "quasi" a lavorarci

Con la Raspbian gia' modificata e' gia' montato anche il modulo per il touchscreen per cui e' possibile utilizzare il Raspberry con il pennino (in dotazione) od anche con le dita.In alto e' disponibile una tastiera virtuale ma e' veramente difficile usarla

Sulla sinistra dello schermo sono presenti tre pulsanti che sono connessi ai pin GPIO 12,16 e 18

Per completezza il dispositivo dello schermo si trova su /dev/fb1

lunedì 22 febbraio 2016

Consolle seriale su Raspberry

La possibilita' di amministrare una Raspberry via porta seriale e' particolarmente utile nel caso di una Pi Zero, vista l'assenza di una scheda di rete preinstallata.

La Raspberry dispone di una porta seriale TTL (in /dev/ttyAMA0) sui pin GPIO 8 (TX) ed 10 (RX) a cui si puo' connettere un modulo FTDI (attenzione, deve essere a 3.3 V pena il rischio di bruciare la porta). Attenzione: deve essere connesso anche il GND, l'alimentazione non e' obbligatoria ed e' necessaria solo se la Raspberry non ha nessuna altra alimentazione



Normalmente su questa porta seriale (115200, 8N1) vengono dirottati i messaggi di boot del kernel ma in Raspbian, tramite raspi-config (Avanzato,opzione A8) e' possibile ottenere una shell collegandosi via seriale



Schermata di raspi-config
Dal PC, per connettersi alla Raspberry si utilizza il comando screen

screen /dev/ttyUSB0 115200


Ovviamente se e' impostata questa funzione la porta seriale non sara' disponibile per altri usi, come per esempio interfacciarsi con una Arduino. In questo caso dovranno essere disabilitati, oltre alla shell mediante raspi-config, anche i messaggi di boot modificando il file in /boot/cmdline.txt






venerdì 4 dicembre 2015

Pi Zero: ne vale la pena??

Grazie ad un amico che la ha acquistata il giorno di uscita, sono riuscito a mettere le mani su una Raspberry Pi Zero. Ma, a parte il prezzo di 5 dollari (la spedizione costa circa 6 volte di piu' che non l'oggetto) vale veramente la pena usare una Pi Zero al posto di una Raspberry B+ per esempio??


Il consumo del dispositivo e' decisamente inferiore ad un Raspberry B (110 mA contro circa il doppio della B...si e' bruciato il punto decimale del misuratore di corrente..si deve leggere 0.11 A)

Sul prezzo c'e' poco da dire, non esistono confronto se non con il futuro Chip (adesso in preordine).
Il problema che per usare una Pi Zero ci si deve munire di almeno un cavo microUsb-USB possibilmente OTG, un HUB Usb per attaccarci tastiera e mouse e un eventuale dongle Ethernet o Wifi (quindi forse e' meglio prendere un HUB alimentato), un non comunissimo cavo HDMI con un connettore standard ed uno in formato miniHDMI

In conclusione un sacco di cavi e cavetti sul tavolo che rendono inutili le dimensioni estremamente ridotte della Pi Zero (avessero messo almeno un Bluetooth ....). Puo' essere interessante come schedina da saldare in un progetto IOT (Internet of Things)... anche se per queste cose preferisco i microcontrollori al posto dei microprocessori ... ma come computer e' molto meglio la PI B+ (anche se molto piu' costosa)

Io nel frattempo ho fatto un preordine per CHIP..........




mercoledì 5 agosto 2015

Usbmount

Un amico mi ha chiesto un sistema (per un gioco) di creare un sistema di registrare il passaggio dei concorrenti da alcuni passaggi obbligati....ovviamente il sistema doveva essere al costo minimo possibile ed i dati di passaggio dovevano essere registrati su un dispositivo portato dal concorrente (non e' previsto che ci potesse essere un collegamento Internet nei punti di passaggio ed i punti di passaggio dovevano essere recuperati anche molte ore dopo il termine del gioco)



Scartata l'ipotesi Rfid, per il costo del singolo chip Rfid scrivibile intorno ai 3-4 euro ciascuno e per il costo del programmatore di chip, una possibile soluzione e' quella di usare una Raspberry e delle normali chiavette USB per registrare i dati del passaggio

In pratica il concorrente deve inserire la chiavetta nella Raspberry ed in automatico devono inseriti i dati e la chiavetta deve essere estrarre senza smontare esplicitamente il dispositivo

La soluzione e' stata quella di usare una Raspbian minimale (senza Xwindow) ed il pacchetto Usbmount che crea automaticamente i device /media/usb, /media/usb0/ (apt-get install usbmount)

Per intercettare l'evento di inserimento della chiavetta e poter scrivere i dati sulla stessa si puo' modificare lo script /etc/usbmount/mount.d/00_create_model_symlink aggiungendo al termine del file (prima dell'exit) qualcosa del tipo

echo "luca" > /media/usb0/file.txt

in generale il sistema funziona bene anche se non e' velocissimo perche' impiega circa 5 secondi per la scrittura

ho provato anche un altro sistema ovvero creare una regola /etc/udev/rules.d/100-miaregola.rules con questo contenuto

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", RUN+="/home/luca/usb.sh" 

nella home ho poi ho messo uno script che doveva scrivere il file sul dispositivo USB. Curiosamente, nonostante l'evento di inserimento della penna USB venisse correttamente intercettato (ho usato logger per scrivere in syslog e verificare) la scrittura del file, nonostante tutti i tentativi di svuotare le cache, avveniva solo alla disconnessione della penna USB e quindi sul disco fisso (cioe' in /media/sdb1 ma solo quando il device era stato smontato)

martedì 7 luglio 2015

Clonare SD card per Raspberry


Usando Raspberry puo' essere utile, una volta settato il sistema operativo, effettuare una copia in modo da poter eseguire con gli esperimenti sapendo di poter tornare in poco tempo ad una situazione stabile

Per fare cio' si parte da un sistema operativo configurato su una SD che si inserisce in altro computer (questa procedura non puo' essere eseguita sulla stessa Raspberry) con Linux

Guardando nei file di log si definisce su quale device e' stata montata la scheda SD (nel mio caso era /dev/sdb con le partizioni /dev/sdb1 di boot e /dev/sdb2 di sistema). Dopo di cio' si smontano le partizioni

umount /dev/sdb1
umount /dev/sdb2

e si inizia una copia raw mediante dd

dd if=/dev/sdb of=/home/luca/rasp.iso bs=4M

(la copia richiede una decina di minuti ma dipende molto dalla classe della SD)

a questo punto si inserisce la nuova scheda (che sia vuota, piena o formattata non ha interesse perche' si tratta di una copia raw) e si inverte il processo

dd if=/home/luca/rasp.iso of=/dev/sdb bs=4M

(per semplicita' ho usato due schedine dello stesso taglio, altrimenti in un secondo tempo avrei dovuto espandere il filesystem per usare tutto lo spazio disponibile)

la nuova schedina risulta avviabile e con tutte le configurazioni della precedente.
La procedura e' simile su OS X ma i device sono rinominati in modo differente (/dev/disk2s2 per esempio)

martedì 23 giugno 2015

Raspberry Kiosk (read only mode)

Per una installazione di un monitor informativo (una semplice pagina web che si autoaggiorna) ho pernsato di installare una Raspberry in modo da avere un sistema economico e con poco consumo di corrente


Cio' che non avevo previsto e' che il luogo dell'installazione e' particolarmente soggetto a mancanza di corrente e nel giro di dieci giorni dalla messa in esercizion il sistema e' crollato perche' il filesystem sulla SD Card si e' corrotto

Un sistema che e' provato e' quello suggerito da questo link ma mi sono subito insospettito perche' viene disinstallato il server X. Facendo le prove infatti il filesystem va effettivamente in modalita' di sola scrittura ma X ha necessita' di scrivere dentro la directory /home e quindi la strada proposta non e' perseguibile perche' X Windows non si avvia (rimane uno schermo nero con un cursore che lampeggia beffardo)

L'altra soluzione e' quella di rendere il sistema a sola lettura in generale e di creare invece un filesystem virtuale in memoria per quelle directory in cui e' necessario scrivere come proposto da questo link
Vale comunque la pena di seguire il consiglio di disinstallare i sistemi di log

apt-get remove --purge wolfram-engine triggerhappy cron anacron logrotate  dphys-swapfile 
in sintesi si modifica /etc/fstab per mettere in sola scrittura il filesystem della schedina

/dev/mmcblk0p2 / ext4 defaults,noatime,ro 0 1
(io per essere sicuro ho messo in sola lettura anche la partizione di boot) e si mette la directory /tmp in memoria

tmpfs /tmp tmpfs defaults,size=30M 0 0
a questo punto si installa unionfuse, il sistema per creare il filesystem in memoria (il valore di 30M e' puramente indicativo, si puo' andare tranquillamente fino a 200M)

apt-get install unionfs-fuse

si spostano le directory /var e /home che saranno quelle ad essere realizzate in memoria

mkdir /ro 
mv /var /ro 
mv /home /ro 
 mkdir /var /home

e si aggiorna /etc/fstab

unionfs-fuse#/tmp=rw:/ro/var=ro /var fuse cow,allow_other,nonempty 
unionfs-fuse#/tmp=rw:/ro/home=ro /home fuse cow,allow_other

al succesivo riavvio si potra' scrivere in /home e /var (ma le modifiche saranno in memoria e quindi perse al successivo riavvio) mentre nel resto del file system sara' impossibile accedere in scrittura a meno di non digitare

mount / -o remount,rw

Questo sistema e' ottimo e funziona ma ovviamente si va ad occupare parte della ram con un disco virtuale quindi i processi che gireranno non dovranno essere esosi di ram

Per far partire il sistema direttamente in X conviene riconfigurare
sudo raspi-confige poi scegliere il menu "Enable Boot to Desktop" > select "Desktop Log in .."

per vari motivi puo' essere conveniente installare un browser come Chromium (piu' pesante di quello preinstallato ma con meno problemi nella visualizzazione dei siti)

per mandare in esecuzione automatica Chromium quando parte X si edita il file 
nano /etc/xdg/lxsession/LXDE-pi/autostart

aggiungendo la linea
@chromium --kiosk --ignore-certificate-errors --disable-restore-session-state "http://www.domain.com"

giovedì 13 marzo 2014

TorrentBox con Raspberry

A seguito del precedente post, nell'utilizzo sono emersi un po' di problemi che hanno fatto ripensare all'utilizzo di Raspberry come Torrent Box




Il problema principale e' rappresentato dalle dimensioni del disco su cui salvare i dati. La soluzione piu' idonea e' quella di tenere i dati scaricati su una chiave (od un disco esterno) Usb mentre sulla SD Card rimane caricato il solo sistema operativo
L'altro problema e' come al solito l'utente (od utonto). L'amico per cui avevo preparato la Raspberry non vuole complicazione e vuole vedere i file dal suo portatile Windows (non si parla nemmeno di SFtp o simili) per cui e' necessario implementare un server Samba

Per il passo 1 si deve fare in modo che la chiave si monti sempre allo stesso modo.
Per fare cio' prima si trova l'UID della chiavetta con

ls -l /dev/disk/by-uuid/
e ci si segna il codice. Poi si crea la directory di mount

sudo mkdir /media/usb
sudo chmod 775 /media/usb

al termine si modifica il file /etc/fstab aggiungendo la riga (mettendo il giusto UID prima salvato)
UUID=1111-2222 /media/usb vfat rw,defaults 0 0
per permettere al demone di scrivere sulla chiave Usb (che e' formattata Fat e quindi con una gestione un po' casinosa dei permessi) la via piu' semplice e' modificare il file /etc/init.d/transmission-daemon cambiando

USER=root(altrimenti si genera un errore Error: Permission denied (/media/ dopo un po' che si e' avviato il torrent)

a questo punto si modifica il file /etc/transmission-daemon/settings.json e si modificano le due voci per puntare alla posizione della chiave Usb

"download-dir": "/media/usb/complete",
"incomplete-dir": "/media/usb/incomplete",


Per il passo 2 l'installazione del server Samba e' semplice
sudo apt-get install samba samba-common-bin
a questo punto c'e' da configurare il file /etc/samba/smb.conf

si cambia quindi
security=share

per semplicita' il disco Usb verra' visto con un accesso Guest su directory pubblica aggiungendo al termine del file
[Guest] 
 comment = Guest access 
  share path = /path/to/dir/to/share 
  browseable = yes 
  read only = yes 
  guest ok = yes
il fatto che i file siano a sola lettura da Windows non e' un problema perche' eventuali cancellazioni di torrent si effetturano direttamente dall'interfaccia di daemon-transmission

Al termine e' sufficiente collegarsi via browser all'indirizzo della Raspberry sulla porta 9091 per poter iniziare il download. Da Windows la condivisione sara' all'indirizzo //raspberry/Guest



lunedì 9 dicembre 2013

Torrent su Raspberry

Su richiesta di un amico ho provato a creare una torrent machine basata su Raspberry (ovviamente i concetti ed i comandi sono applicabili su qualsiasi Linux Box)


(il sistema e' nato per funzionare headless ovvero senza tastiera, mouse e monitor ma per le fasi di sviluppo ho usato un po' di aiuto)

Ci sono molti tutorial su Internet e questa cerca di essere il riassunto e la via piu' breve per mettere in funzione questa impostazione

Si parte da una installazione pulita di Raspbian (niente Noobs che ruba spazio per nulla sulla SD) su una schedina da almeno 8 Giga in modo da lasciare spazio ai dati (non e' infatti previsto l'utilizzo di un disco esterno)

Si installa quindi transmission-daemon
apt-get install transmission-daemon

si stoppa il servizio
/etc/init.d/transmission-deamon stop

e si edita il file /etc/transmission-deamon/settings.json
(sono evidenziate in giallo le modifiche. In pratica si cambia la username e la password del servizio, la directory dove sono salvati file viene spostata nella dir torrent della home dell'utente pi in modo da semplificare il recupero in sftp e si abilita le connessioni esterne da qualsiasi host)
----------------------------------
{
    "alt-speed-down": 50,
    "alt-speed-enabled": false,
    "alt-speed-time-begin": 540,
    "alt-speed-time-day": 127,
    "alt-speed-time-enabled": false,
    "alt-speed-time-end": 1020,
    "alt-speed-up": 50,
    "bind-address-ipv4": "0.0.0.0",
    "bind-address-ipv6": "::",
    "blocklist-enabled": false,
    "blocklist-url": "http://www.example.com/blocklist",
    "cache-size-mb": 4,
    "dht-enabled": true,
    "download-dir": "/home/pi/torrent",
    "download-limit": 100,
    "download-limit-enabled": 0,
    "download-queue-enabled": true,
    "download-queue-size": 5,
    "encryption": 1,
    "idle-seeding-limit": 30,
    "idle-seeding-limit-enabled": false,
    "incomplete-dir": "/home/pi/torrent",
    "incomplete-dir-enabled": false,
    "lpd-enabled": false,
    "max-peers-global": 200,
    "message-level": 2,
    "peer-congestion-algorithm": "",
    "peer-limit-global": 240,
    "peer-limit-per-torrent": 60,
    "peer-port": 51413,
    "peer-port-random-high": 65535,
    "peer-port-random-low": 49152,
    "peer-port-random-on-start": false,
    "peer-socket-tos": "default",
    "pex-enabled": true,
    "port-forwarding-enabled": false,
    "preallocation": 1,
    "prefetch-enabled": 1,
    "queue-stalled-enabled": true,
    "queue-stalled-minutes": 30,
    "ratio-limit": 2,
    "ratio-limit-enabled": false,
    "rename-partial-files": true,
    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "{efaed872245cfe54c92e668423872cf02458117bTl0EeuAR",
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "kappadocio",
    "rpc-whitelist": "*.*.*.*",
    "rpc-whitelist-enabled": true,
    "scrape-paused-torrents-enabled": true,
    "script-torrent-done-enabled": false,
    "script-torrent-done-filename": "",
    "seed-queue-enabled": false,
    "seed-queue-size": 10,
    "speed-limit-down": 100,
    "speed-limit-down-enabled": false,
    "speed-limit-up": 100,
    "speed-limit-up-enabled": false,
    "start-added-torrents": true,
    "trash-original-torrent-files": false,
    "umask": 18,
    "upload-limit": 100,
    "upload-limit-enabled": 0,
    "upload-slots-per-torrent": 14,
    "utp-enabled": true


}
----------------------------------

si riavvia il servizio
/etc/init.d/transmission-deamon start

a questo punto si sono due modi di interagire con il demone
1) via Browser
si puo' comandare lo scaricamento dei torrent indirizzando il browser all'indirizzo del server sulla porta 9091
per esempio
http://192.168.0.101:9091
si effettua il login e si effettua l'upload del file torrent o della url (per esempio del magnetic link)

Inserire un torrent

File in download
Mi ero scordato che la directory in uso al demone deve essere scrivibile al servizio, altrimenti si genera questo errore. Basta, da root, un chmod 777 /home/pi/torrent (non ci sono problemi di sicurezza sulla macchina)

Errore se la directory non e' abilitata in scrittura



1) via Cellulare
Ci sono applicazioni Android che permettono di comandare Transmission via cellulare. La piu' semplice e gratuita e' Remote Transmission, piuttosto banale nell'utilizzo

Login al server

Schermata di download
Impressioni di uso
Il sistema e' semplice e funzionale ma necessita comunque di un po' di amministrazione. Per errore ho tentato il download di un file enorme che ha saturato subito la SD Card. Risultato file system saturato e sistema che non si e' avviato al reboot (ho dovuto ricreare la torrent machine da zero)
L'interazione da telefono e' pessima ed al massimo l'applicazione Android puo' essere utile per monitorare come stanno andando le cose ma non per editare la lista dei download

ps. i file impiegati per il download sono stati cancellati subito dopo la creazione degli screenshot
pss : il case di plastica standard della Raspberry e' veramente orribile, si chiude con difficolta' e non permette il passaggio del flat cable delle GPIO

lunedì 28 ottobre 2013

Demone avahi su Raspberry/Raspbian

Oramai uso Raspberry praticamente sempre in modalita' headless ovvero senza tastiera e monitor attaccati ed interagisco via SSH o via Web. Il principale problema in questo modo, essendo la connessione WiFi regolata da un DHCP, e' di indovinare ogni volta quale indirizzo dinamico e' stato attribuito alla Raspberry (la modalita' normale e' guardare dentro al router come sono associati i vari dispositivi)

Una soluzione alternativa molto valida e stranamente non implementata di default ne' in Raspbian ne' in PiBang (mentre lo e' in  Debian standard) e' utilizzare il demone Avahi

Questo demone si installa mediante

apt-get install avahi-daemon

e permette di avere una sorta di DNS interno alla rete locale in cui i vari dispositivi che supportoano il protocollo di annunciarsi

Una volta installato ed avviato il demone non e' quindi necessario conoscere ogni volta l'indirizzo dinamico ma basta chiamare la macchina con il suo nome (che non cambia mai)


per esempio in una configurazione standard per cercare una Raspberry con montato  Raspbian si dovra' cercare
raspberry.local

mentre su PiBang
pibang.local

ovviamente i nomi identificativi devono essere univoci all'interno della LAN

venerdì 18 ottobre 2013

Controllo remoto di rele' mediante Raspberry

Recentemente un amico mi ha chiesto un metodo per poter gestire in remoto (dove per remoto si deve intendere accendere una caldaia negli USA stando in Italia) usando una Raspberry.

La cosa e' piuttosto semplice da fare con Php ma visto che la ruota e' gia' stata inventata, e funziona bene, ho preferito usare questo strada

Prima di tutto la parte collegamenti
La Raspberry, con montata una Raspbian, e' stata collegata al rele' alla porta GPIO #23 (porta S del rele') e i classici +5V e GND


Per la parte software ho impiegato WEBIOPI , uno script in Python che crea un piccolo webserver interfacciato con le GPIO

Prima prima cosa di sscaricare il file
wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz

e lo si scompatta
A questo punto da utente root si digita
./setup.sh
(attenzione, durante questa fase la Raspberry deve essere connessa ad internet perche' vengono scaricate eventuali librerie non gia' presenti nel sistema...l'operazione dura qualche minuto)

al termine si puo' digitare (sempre da root)
/etc/init.d/webiopi start

a questo punto collegandosi all'indirizzo della macchina sulla porta 8000 (od in localhost:8000) si accede ad una interfaccia di questo tipo

La username di default e' "webiopi" e la password "raspberry"

All'inizio tutte le porte sono di Input. Quindi si deve cliccare sulla casellina grigia accanto alla porta di interesse (nel mio caso #23) e porta in modalita' output (OUT). Fatto cio' cliccando sul numero della porta si interagisce con il rele' aprendo e chiudendo il contatto


Nel video si osserva il led luminoso del rele' che si accende quando si apre il contatto via web

Per rendere il sistema sempre avviato all'accensione del sistema si deve digitare


update-rc.d webiopi defaults

lunedì 2 settembre 2013

Mjpg-streamer su Raspberry/Raspbian

In questo post viene mostrato come usare MJpg-stream per creare uno stream video mediante Webcam e Raspberry. Le stesse informazioni si possono usare anche per un normale portatile con montato Debian

Sul web si trovano molti post che mostrano questa procedura ma spesso non funzionano piu' per vari motivi.
La prima cosa (piu' importante) e' prelevare l'ultima versione di mjpg-stream mediante Subversion da Sourceforge

svn checkout svn://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code

in seguito si digita

apt-get install libv4l-dev libjpeg8-dev imagemagick 
per soddisfare le dipendenze della compilazione
Andando nella sottodirectory mjpg-streamer-code si vedra' che esiste una sottodirectory  mjpg-streamer ed un mjpg-streamer-experimental ..io ho preferito quella non sperimentale

si inizia la compilazione con
make USE_LIBV4L2=true clean all

se ci sono problemi nell'includere V4L si lanci il seguente comando e si ripeta il make

cd /usr/include/linux sudo ln -s ../libv4l1-videodev.h videodev.h

siamo alla fine. Si digiti
export LD_LIBRARY_PATH=. 

a questo punto il file README indica di lanciare il programma con la seguente riga
./mjpg_streamer -o "output_http.so -w ./www"

ma io ho trovato piu' semplice lanciare il comando
./start.sh

lo streaming si dovrebbe avviare senza problemi (ovviamente se la webcam e' collegata) e per osservare il flusso dati ci si puo' collegare via web browser all'indirizzo

http://mioip:8080/?action=stream

Ho provato anche VLC per fare streaming via web ma Raspberry ha delle risorse troppo limitate per poter gestire un cosi' pesante carico di lavoro

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...