Sto lavorando ad un progetto basato su Raspberry Pi e controllato da un device esterno (portatile, smarphone…) e quindi ero alla ricerca del sistema più universale possibile per collegare Raspberry e device. Grazie ad un piccolo adattatore usb->wifi è possibile trasformare la Raspberry in un access point al quale, via wireless, il nostro device può collegarsi: in questo articolo vi spiegherò come fare.
Modulo wifi
La Raspberry non ha una scheda di rete wifi, è quindi necessario acquistare un adattatore usb->wifi.
Ho scelto il modello Edimax EW-7811Un, di dimensioni contenute e molto economico (si trova ad esempio su Amazon a meno di 10 euro):
Grazie alle sue dimensioni contenute, l’adattatore sporge poco una volta inserito in una delle due porte USB della Raspberry:
Ho installato su Raspberry l’ultima versione della distribuzione Raspbian e l’adattatore viene riconosciuto automaticamente (come si vede lanciando il comando dmesg):
Viene anche creata una nuova interfaccia di rete, chiamata wlan0:
Configurazione rete
Il nuovo access point che configureremo pubblicherà una rete wifi con questi parametri:
- SSID: Pi_AP
- protezione: WPA2-PSK
- password: PiPasswd
- indrizzi IP: DHCP (range 192.168.10.11-20, mask 255.255.255.0)
Per prima cosa dobbiamo quindi assegnare un indirizzo IP statico (ho scelto 192.168.10.1) alla interfaccia wlan0, editando il file /etc/network/interfaces:
Ricarichiamo la configurazione dell’interfaccia di rete con i seguenti comandi:
sudo ifdown wlan0 sudo ifup wlan0 |
DHCP e DNS
Ho deciso di utilizzare dnsmasq come demone per i servizi di DHCP e DNS.
Per prima cosa aggiorniamo la nostra distribuzione con:
sudo apt-get update sudo apt-get upgrade |
quindi installiamo dnsmasq con:
sudo apt-get install dnsmasq |
Modifichiamo ora il file di configurazione /etc/dnsmasq.conf aggiungendo le seguenti righe di configurazione:
interface=wlan0 dhcp-range=192.168.10.11,192.168.10.20,,255.255.255.0,24h |
La prima indica a dnsmasq di mettersi in ascolto solo sulla interfaccia wifi, mentre la seconda indica il range degli indirizzi IP da distribuire e il lease time (24h).
Riavviamo dnsmasq con:
sudo /etc/init.d/dnsmasq restart |
Access Point
Per attivare le funzionalità di access point, dobbiamo installare hostapd:
sudo apt-get install hostapd |
Creiamo quindi il file di configurazione (/etc/hostapd/hostapd.conf) e inseriamo:
interface=wlan0 driver=rtl871xdrv ssid=Pi_AP hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=PiPasswd wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP |
Modifichiamo il file /etc/default/hostapd indicando il nuovo file di configurazione creato:
Purtroppo la versione ufficiale di hostapd non supporta l’adattatore wifi scelto. Per questo è necessario compilare la versione fornita da Realtek (produttore del chipset).
Scaricare dal sito ufficiale la versione Linux del driver (scorrere la pagina fino a trovare il chipset RTL8188CUS):
Copiare il file scaricato in /tmp. Lanciare i seguenti comandi (eventualmente sostituire il nome del file con quello scaricato se diverso) per effettuare l’unzip dei pacchetti:
sudo unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/ cd wpa_supplicant_hostapd/ sudo tar -xvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812 cd hostapd |
Lanciare ora la compilazione con i seguenti comandi e attendere il completamento:
sudo make sudo make install |
Infine copiare il nuovo binario sovrascrivendo quello esistente:
sudo mv hostapd /usr/sbin/hostapd sudo chown root.root /usr/sbin/hostapd sudo chmod 755 /usr/sbin/hostapd |
Possiamo provare la configurazione lanciando in console il demone hostapd:
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf |
Se tutto funziona correttamente, la nuova rete wifi sarà visibile e sarà possibile collegarsi:
Infine possiamo configurare Raspbian in modo che esegua hostapd all’avvio del sistema:
sudo update-rc.d hostapd enable |
Ciao Luca,
interessante.. se posso chiederti, cosa farai di preciso con il Pi?
Ciao! Sto lavorando (quasi terminato) ad un display gestito da Raspberry e configurabile via wifi sfruttando appunto la modalità AP descritta in questo articolo…
Ciao, ho un raspberry che ho configurato con hostapd, bridge tra lan e wifi usb RTL8188CUS.
Sembra funzionare senza usare dnsmasq.
Quello che mi succede però è che mi ritrovo con la rete wifi del router e quella del raspberry con ssid diversi.
A volte il cellulare rimane connesso a quella del raspberry anche se il segnale è decisamente più basso rispetto a quello del router.
Ho letto che dovrei metter lo stesso SSID e channel diverso alle due reti wifi per ottenere il passaggio del cellulare android da una all’altra senza nessun problema.
Il fatto è che alla rete wifi del router ho impostato il mac address filter e la wifi è senza protezione mentre per il raspberry ho impostato la password nel file hostapd.
Come posso fare?
ciao, volevo sapere se hai utilizzato anche il cavo ethernet per fare il tuo progetto. ti perchè io voglio fare un access point col rasp…solo che la gente mi dice che devo utilizzare due chiavette wifi, perchè ho un router portatile senza ethernet. mi dai dei consigli? grazie
Ciao Luca, spiegami meglio cosa vuoi ottenere… sicuramente puoi fare un access point con Raspberry utilizzando il wifi + la scheda ethernet ma se poi questo cavo ethernet non hai modo di collegarlo al tuo router ADSL che te ne fai?
ciao, volevo chiederti perchè il mio access point non funzia…
praticamente io vedo l’ap col telefono però quando mi collego mi va in loop continuo e non accede. non capisco più niente aiutami per favore.
Ciao, volevo chiederti se e possibile in questo modo accedere al raspberry anche senza connessione internet……
Cercherò di farmi capire meglio che posso.
E possibile connettersi via wireless da cell. al raspberry per pilotare le GPIO senza router/internet. ad esempio allesterno?
ciao! certo, se lo configuri come access point ti puoi collegare alla rete wifi che lui pubblica e sfruttare tale collegamento per accedere al Raspberry.