Streaming dei dati dei sensori tramite WiFi con Raspberry Pi Pico W

Uno dei migliori utilizzi del Raspberry Pi Pico W riguarda la sua capacità di servire una pagina web.
Ciò significa che è possibile utilizzarlo per monitorare i dati dei sensori dal telefono, purché ci si trovi nel raggio d'azione della rete WiFi.
Questo progetto fornirà una semplice base su come monitorare i dati di accelerazione e creare un dado digitale, che si attiva quando si tocca il sensore ADXL343.
Video
Parti necessarie
- Lavagna per pane
- Fili di ponticello
Che cos'è l'ADXL343?
L'ADXL343 di Analog Devices è il seguito del suo predecessore, l'ADXL345.
Il sensore può misurare tre assi di misura e ha quattro impostazioni di sensibilità: +-2g, +-4g, +-8g o +-16g. La gamma più bassa offre una maggiore risoluzione per i movimenti lenti, mentre quella più alta è adatta per il tracciamento ad alta velocità.
L'ADXL343 dispone anche di una libreria CircuitPython che possiamo utilizzare in MicroPython, rendendo molto più facile iniziare.
Per realizzare questo progetto è necessario che i connettori siano saldati sull'ADXL343 e sulla Pico W.
Collegamento dell'ADXL343 al Pico W
Sono quattro i pin da collegare al Raspberry Pi.
Collegare il VIN ad un pin Uscita a 3,3 V sul Raspberry Pi Pico W;
Collegare il GND a un pin di massa del Pico W;
Collegare il SDA pin a GPIO0;
Collegare il SCL pin a GPIO1.
Flashing del firmware MicroPython per Raspberry Pi Pico W

Per prima cosa, è necessario flashare il firmware MicroPython sul Pico W, se non lo si è già fatto.
Quindi, tenere premuto il pulsante BOOTSEL e collegare il Pico al computer. Dovrebbe apparire una nuova unità. Copiare il file .UF2 scaricato su tale unità.
Configurare Thonny per Raspberry Pi Pico W
Aprire Thonny. Se non l'avete scaricato, prendetelo qui.
Impostare l'interprete su MicroPython (Raspberry Pi Pico) in basso a sinistra della finestra dell'IDE Thonny.
Copiare le librerie sul Pico W

Scaricate qui le librerie e i file dal nostro repo Github.
È possibile scaricare un file ZIP accedendo a questo link e facendo clic sul pulsante verde "Codice" e facendo clic su Scarica lo ZIP.
Una volta scaricato, decomprimetelo in un posto che ricorderete.
Quindi, nell'IDE Thonny, fare clic su Visualizza > File per vedere il proprio file system e quello di Pico W.
Navigare nei file decompressi ed entrare nella cartella MicroPython > II Pico W Sensor Server. Copiate tutto sul vostro Pico W facendo clic con il tasto destro del mouse su ogni elemento e facendo clic su "Upload to /".
Modifica del codice
Per far sì che il Raspberry Pi Pico si connetta alla rete WiFi, è necessario aprire il sito segreti.py e modificare il ssid e pwe il valore della password. Inserire l'SSID (nome) della rete nel primo e la password nel secondo. Salvare il file.
Il indice.html è la pagina web che verrà servita. La riga "<p>X AccX | Y AccY | Z AccZ</p>" e <p>Risultato DiceVal</p> saranno sostituiti con i dati del sensore durante l'esecuzione del progetto.
Collegare il Raspberry Pi Pico al WiFi
Il main.py è il luogo in cui avviene l'azione.
Queste linee lo collegano alla rete WiFi. Non dimenticate di cambiare la stringa in rp2.paese se il vostro Paese non è la Germania (DE).
# Set country to avoid possible errors
rp2.country('DE')
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)
# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)
# Other things to query
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))
# Load login data from different file for safety reasons
ssid = secrets['ssid']
pw = secrets['pw']
wlan.connect(ssid, pw)
Il LED a bordo lampeggerà tre volte se la connessione WiFi è avvenuta con successo, grazie a queste righe di codice. Verrà inoltre stampato un messaggio e l'indirizzo IP che può essere visualizzato in Thonny. Questo indirizzo IP è utile per accedere al server in seguito.
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(wlan.status()):
led.on()
time.sleep(0.2)
led.off()
time.sleep(0.2)
print('Connected')
status = wlan.ifconfig()
print('ip = ' + status[0])
In caso di errore, il LED lampeggia in base al valore del codice di errore.
Significato degli errori
- 0 = Collegamento interrotto
- 1 = Collegamento unito
- 2 = Collegamento NoIp
- 3 = Collegamento
- -1 = Link Fail
- -2 = Collegamento NoNet
- -3 = Link BadAuth
Collegare Pico W all'ADXL343
Questa riga inizializza un oggetto I2C:
# Initialize I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)
Quindi, queste due linee creano l'accelerometro e abilitano il rilevamento del tocco (per la lettura dei dadi).
# Create Accelerometer object
accelerometer = adafruit_adxl34x.ADXL343(i2c)
accelerometer.enable_tap_detection()
È ora di eseguire il codice
Per eseguire il codice, premete il pulsante Esegui in Thonny, che è il pulsante con l'icona di riproduzione in un pulsante verde sulla barra degli strumenti superiore.
Quindi, collegarsi all'indirizzo IP del Raspberry Pi Pico W. Se la shell di Thonny è aperta, è possibile visualizzarla. In alternativa, è possibile accedere al router e scoprire l'indirizzo IP di Pico W.
Il Pico W esegue un server HTTP con una connessione socket e si mette in ascolto delle connessioni, definite qui:
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
Quando ci si connette all'indirizzo IP di Pico W, viene attivato questo codice che aggiorna index.html con i dati più recenti ogni secondo.
cl, addr = s.accept()
print('Client connected from', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'\r\n':
break
response = get_html('index.html')
data = accelerometer.acceleration
tapped = accelerometer.events['tap']
response = response.replace('AccX', str(data[0]))
response = response.replace('AccY', str(data[1]))
response = response.replace('AccZ', str(data[2]))
if tapped:
dice_val = str(random.randint(1,6))
response = response.replace('DiceVal', dice_val)
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()

Come si può vedere, sostituisce AccX, AccY e AccZ con i dati del sensore.
Se il sensore viene toccato, viene stampato un numero intero casuale da 1 a 6 nella stringa "DiceVal" della pagina HTML.
Cosa c'è dopo?
Questa esercitazione rappresenta un modo semplice per trasmettere i dati dei sensori a una pagina web.
In realtà, questo è il codice che si può utilizzare anche per altri sensori.
La metodologia rimane la stessa. È necessario trovare le librerie corrette per i sensori, quindi modificare main.py e index.html in modo che possano ottenere i dati del sensore e inviare i valori corretti alla pagina web.
Ci sono molti altri progetti che si possono intraprendere, come ad esempio un progetto di sensore di temperatura e umidità con un DHT22 o un BME688, o un sensore di luminosità con un resistore di luce.
Sarebbe sicuramente bello utilizzare le funzionalità di HTML5 per vedere come viene fatto HTML5.
I dati potrebbero essere semplicemente trasmessi come stringa su una porta tramite TCP/UDP piuttosto che in un formato di pagina web, in modo da poter essere letti da un altro computer (per creare indicatori o altro)?
qualcosa come
192.168.1.24:9060
AccX, 7,923, AccY, 1,093, AccZ, -5,452
AccX, 6,423, AccY, 1,241, AccZ, -8,769
Mal angenommen man hätte einen Pico W, der in einer Dauerschleife läuft und Messwerte erfasst; wie können diese Messwerte von einem anderen Pico W über WLAN abgefragt werden?
In deinem Beispielcode es es so, das der Pico W etwas macht, wenn er über HTML angesprochen wird. Nel mio caso ho realizzato una cosa del genere, come una
"getvaluefromotherpico(192.178.2.44, variablename)" - si legge che il dispositivo può essere utilizzato in un'altra schermata e che le informazioni annesse alla rete WLAN possono essere modificate in un altro modo, ad esempio tramite un'interruzione.
Come si può fare?
Grazie e buon lavoro
Ingo
L'altro Pico può essere utilizzato in un'altra situazione, e le sue funzioni per le API REST del primo Pico possono essere modificate?
Capisco il problema, ma non è del tutto chiaro?
Se si tratta di un progetto commerciale, possiamo sempre offrire una consulenza tecnica attiva 🙂
come posso inviare questi dati a thinspeak?
guten Tag, ho un problema simile. Con curl o wget non funziona. Vorrei che i messaggi del Pico sul mio Raspi4 fossero visualizzati e più tardi grafisch darstellen e statistisch auswerten. ???