Raspberry Pi Zero - PiZero

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Descrizione

Già da un pò di tempo è disponibile un nuovo modello di Raspberry Pi, non è facile procurarselo perhè c'è grande richiesta e spesso è possibile comprarne solo un esemplare per volta.

Rispetto agli altri modelli ha un costo veramente minimo, ovviamente per contenere i costi anche i componenti sono ridotti rispetto ai modelli standard, ma spesso non tutti necessari soprattutto quando puntiamo a ingombri e consumi ridotti.

Queste le caratteristiche:

  • 1GHz, Single-core CPU
  • 512MB RAM
  • Mini-HDMI port
  • Micro-USB OTG port
  • Micro-USB power
  • HAT-compatible 40-pin header
  • Composite video and reset headers
  • CSI camera connector (v1.3 only)

Micro-USB OTG

PiZero ha due porte USB entrambe micro USB per ridurne l'ingombro, una per l'alimentazione ed una per la connessione "dati".

La porta "dati" funziona in modalita USB On The Go (OTG) ovvero può funzionare sia nel ruolo di host (o master) che nel ruolo peripheral (o slave).

Se usiamo la scheda come minicomputer attaccata ad un video alla porta possiamo connettere mouse e tastiera o altre periferiche usb.

In modalità peripheral diventa essa stessa una periferica. Il tipo di device viene deciso via software impostando configurazioni su files.

Ho usato questa guida, che è stata aggiornata diverse volte man mano che venivano implementate nuove funzionalità, non tutte sono ancora ben documentate.

OTG Ethernet (g_ether)

Preparazione

Ho utilizzato la modalità OTG Ethernet per connettermi alla scheda dal pc e utilizzarla senza video, mouse e tastiera.

Ho lavorato offline quindi modificando i file sulla scheda microsd prima di montarla su PiZero:

Ho aggiunto la riga

dtoverlay=dwc2

in fondo al file

/boot/config.txt

Inoltre al file

/etc/modules

vanno aggiunte le righe

g_ether
dwc2

Avendo deciso di usare la modalità ethernet va configurata anche una scheda di rete chimata usb0, io ho scelto di assegnarle un ip statico aggiungendo al file /etc/network/interfaces le righe

allow-hotplug usb0
iface usb0 inet static
    address 192.168.10.2
    netmask 255.255.255.0
    gateway 192.168.10.1

Inoltre in vista di collegarmi ad internet ho aggiunto al file /etc/resolv.conf la riga

nameserver x.x.x.x

dove x.x.x.x è l'indirizzo del server dns preferito.

Dalle ultime versioni di raspbian è anche possibile abilitare ssh server creando un file vuoto di nome ssh nella cartella /boot della SD card.

Sul pc

Avviato PiZero connettiamo al pc la porta USB OTG e diamo il comando:

dmesg -T
[Tue Feb 28 17:21:24 2017] usb 2-1.5: new high-speed USB device number 8 using ehci-pci
[Tue Feb 28 17:21:24 2017] usb 2-1.5: New USB device found, idVendor=0525, idProduct=a4a2
[Tue Feb 28 17:21:24 2017] usb 2-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[Tue Feb 28 17:21:24 2017] usb 2-1.5: Product: RNDIS/Ethernet Gadget
[Tue Feb 28 17:21:24 2017] usb 2-1.5: Manufacturer: Linux 4.4.38+ with 20980000.usb
[Tue Feb 28 17:21:24 2017] cdc_subset: probe of 2-1.5:1.0 failed with error -22
[Tue Feb 28 17:21:24 2017] cdc_ether 2-1.5:1.0 usb0: register 'cdc_ether' at usb-0000:00:1d.0-1.5, CDC Ethernet Device, 06:d4:95:e8:86:d1
[Tue Feb 28 17:21:24 2017] cdc_ether 2-1.5:1.0 enp0s29u1u5: renamed from usb0

Il kernel ha visto un nuovo device cdc_ether lo ha chiamato usb0 e poi rimominato in questo caso enp0s29u1u5, ma il nome cambia ogni volta che si connette la periferica e creare script per automatizzare le fasi successive non è così semplice.

Ho creato un piccolo script per settare l'interfaccia di rete dando per scontato che venga sempre nominata col prefisso enp0s, non mi andava di andare a lavorare su udev.

#!/bin/bash
if [ $# -eq 0 ]	
then
 temp_iface=`ip a s | grep enp0s | awk '{print $2}'| sed 's/://g'`
if [  `wc -l <<< "$temp_iface"` -eq 1 ] 
then
 iface=$temp_iface
else
 echo "Multiple interfaces found please specify: $0 <dev>"	
 exit
fi
else
 iface=$1
fi 
ip link set dev $iface name usb0
ip addr add 192.168.10.1/24 dev usb0 
ip link set usb0 up
modprobe iptable_nat
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
ping -c 1 192.168.10.2