Raspberry Pi, le basi: Robot e Smartphone, con BlueDot. #10


Informatica / venerdì, Maggio 1st, 2020

Decima puntata della rubrica “Raspberry Pi, le basi“. I tutorial sul web impazzano per farti lampeggiare un led, io sinceramente non li ho mai trovati utili, se voglio informazioni meglio un interfaccia web o un alert per chat non trovi? Quindi anche se non è base, oggi Bonus! Controlliamo un robot tramite smartphone grazie Blue Dot e le Gpio Zero, molto più emozionante non credi?

Nelle puntate precedenti

RaspberryPi, le basi: Cos’è e cosa non è. #1
RaspberryPi, le basi: Sistemi operativi ed installazione. #2
RaspberryPi, le basi: post installazione. #3
RaspberryPi, le basi: i software. #4
RaspberryPi, le basi: Comandi e file utili #5
RaspberryPi, le basi: accesso remoto al Desktop. #6
RaspberryPi, le basi: sicurezza informatica contro gli hacker. #7
RaspberryPi, le basi: le porte GPIO. #8
RaspberryPi, le basi: pulsanti e led. #9

Cos’è BlueDot ?

Le GpioZero già le conosci perché ne abbiamo parlato negli articoli precedenti, quindi passiamo al fantastico software Blue Dot.

Blue Dot ti consente di controllare i tuoi progetti Raspberry Pi in modalità wireless: è un telecomando Bluetooth con una gran varietà di utlizzi, ma estremamente facile da usare.

La documentazione ufficiale è ben dettagliata, in grado di colmare ogni nostra lacuna, vi invito a dargli un occhiata.

In sostanza, installiamo le librerie BlueDot sul nostro RasperryPi, poi l’app nel nostro smartphone ed infine eseguiamo il “pair” tra i due.

Toccando col dito il puntone blu sull’app, invieremo dei valori al RaspberryPi, che in base ai nostri desideri, si occuperà di gestirli. Si potrebbero comandare luci, luminosità, robot, formattare i server della NSA…

Collegamenti elettrici

I collegamenti dei motori del vostro robot, ovviamente cambiano in base alle vostre preferenze, c’è che usa singoli motori, chi un HAT dedicato, mentre per i motori a curvatura sto ancora aspettando l’implementazione.

Diamo un occhiata allo schema proposto da Ben Nuttal, il quale usa due motori ed un driver sn754410 (L293D-compatible) e può sopportare tensioni comprese tra 4.5V a 36V motori (1A).

Vi invito a dare una letta al datasheet del SN754410 prima di usarlo.

Schema ideato da Ben Nuttall

Installare BlueDot

Partendo dal presupposto che abbiate seguito le guide precedenti ed abbiate già un RaspberryPi con GpioZero configurata, proseguiamo con l’installazione dell’app BlueDot da Google Play con già oltre 10’000 download, un ringraziamento va al suo creatore Martin O’Hanlon.

Torniamo al nostro RaspberryPi e prepariamoci all’installazione della libreria python tramite:

sudo apt install python3-dbus
sudo pip3 install bluedot

Facile facile.

Pair Bluetooth

La connessione bluetooth segue sempre la solita procedura, abilitare la possibiltà di vedere il dispositivo, selezionare il dispositivo e in alcuni casi mettere il PIN.

La gestione del bluetooth, nel mio caso, con un RaspberryPi 3B e Raspbian Full Buster installato è gestibile tramite il software bluetoothctl.

Se usi il desktop grafico semplicemente fai l’associazione tramite il pulsante bluetooh, e selezionado Make Discoverable, cosi da poterlo trovare con lo smartphone.

Se siamo collegati con ssh, eseguiamo

sudo bluetoothctl

Entreremo in una console dedicata, scrivendo help avremo tutto i comandi disponbili,eseguiamo i seguenti comandi per continuare.

  1. show: visualizza le informazioni del RaspberryPi.
  2. system-alias [nome] : imposteremo l’alias da visualizzare durante la ricerca.
  3. discoverable on : permette di visualizzarlo nella ricerca
  4. pairable on : concede l’associazione
  5. agent on : attiva l’agent
  6. default-agent : imposta l’agent

Dal menù Android eseguiamo l’associazione con il nostro RaspberryPi, come potete vedere, comparirà l’alias impostato prima, nel mio caso RPI3_Enrico_Sartori, basterà cliccare e attendere la connessione, nella shell vedremo eventuali log.

Aprendo l’app BlueDot avremmo la lista di dispositivi collegabili, basterà selezionare il RaspberryPi.

Testare BlueDot

Ora che è tutto connesso, andate a guardare gli esempi già pronti proposti sul sito BlueDot.

Ricordati che l’app BlueDot non eseguirà il pair se non sarà attivo uno script che attende la connessione, creiamo un test rapido con un file test.py

from bluedot import BlueDot
bd = BlueDot()
bd.wait_for_press()
print("Grande! BlueDot Attivo")

Avviandolo con python3 test.py e aprendo l’app BlueDot potremmo premere il pulsantone blu e vederne il risultato nella shell.

Muoviamo il robot

Ora basta perdere tempo, muoviamo questo robot!

Per farlo possiamo usare la classe composita di GpioZero, chiamata  “robot” . Abbastanza esplicativa direi, in pratica gli assegni i pin dove hai collegato il motore destro e sinistro.

Vediamo lo script proposto dal sito GpioZero.

from gpiozero import Robot
from bluedot import BlueDot
from signal import pause

def pos_to_values(x, y):
    left = y if x > 0 else y + x
    right = y if x < 0 else y - x
    return (clamped(left), clamped(right))

def clamped(v):
    return max(-1, min(1, v))

def drive():
    while True:
        if bd.is_pressed:
            x, y = bd.position.x, bd.position.y
            yield pos_to_values(x, y)
        else:
            yield (0, 0)

robot = Robot(left=(4, 14), right=(17, 18))
bd = BlueDot()

robot.source = drive()

pause()

Con poche semplici righe, avremo un robot comandabile tramite smaprthone, niente male!

Attenzione: ovviamente non basta fare copia/incolla, capisci come funziona ogni riga e adatta i numeri pin GPIO al tuo progetto. Leggete la documentazione sulla classe robot.

Definendo left e right, tra le parentesi troverai i pin per andare avanti e indietro (fili blu dello schema).

Conclusione

Lo so, lo so, un robot è un po’ troppo da trattare in ” Raspberrypi, le basi ” , ma vedilo come un obbiettivo!

Servono obbiettivi nella vita, studia, sperimenta e soprattutto divertiti .

Sei triste perché non ho messo il solito tutorial trito e ritrito su led lampeggiante? Beccati questo!

from gpiozero import LED

bd = BlueDot()
led = LED(17)

while True:
    bd.wait_for_press()
    led.on()
    bd.wait_for_release()
    led.off()

Almeno ci puoi giocare con lo smartphone.

ps. prova a collegare un relé al posto del led, almeno potrai accendere e spegnere il ventilatore da soffitto, spaventando tua moglie con una storia di fantasmi.

Se vuoi degli avvisi, lascia stare i led e creati un bot telegram, almeno lo smartphone ce l’hai sempre con te.

Alla prossima!