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

Raspberry Pi Pico W collegato a un ADXL343

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.

È possibile scaricarlo qui.

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()
main.py sostituisce i valori con la lettura corrente quando ci si collega al server di Pico W.

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.

2 commenti

  1. Ken Anderson in Luglio 15, 2022 il 7:24 am

    Sarebbe sicuramente bello utilizzare le funzionalità di HTML5 per vedere come viene fatto HTML5.

  2. Terry Young in Settembre 24, 2022 il 6:47 pm

    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

Lascia un commento