Nota
Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi, Arduino e ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto Esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a promozioni festive e concorsi a premi.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
8. Costruire una Web APP con @Anvil
In questo progetto, scriveremo un’applicazione per comunicare bidirezionalmente tra il Raspberry Pi Pico W e i server di Anvil. La temperatura e l’umidità trasmesse dal Pico W verranno visualizzate in tempo reale su Anvil. Inoltre, potrai inserire messaggi in Anvil da visualizzare sul display LCD1602 I2C del Pico W.

1. Componenti necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Kepler |
450+ |
Puoi anche acquistarli separatamente dai link qui sotto.
SN |
COMPONENTE |
QUANTITÀ |
LINK |
|---|---|---|---|
1 |
1 |
||
2 |
Cavo Micro USB |
1 |
|
3 |
1 |
||
4 |
Diverse |
||
5 |
1 |
||
6 |
1 |
||
7 |
1 |
||
8 |
Batteria 18650 |
1 |
|
9 |
Supporto Batteria |
1 |
2. Costruisci il Circuito
Avvertimento
Assicurati che il modulo caricabatterie Li-po sia collegato come mostrato nello schema. Altrimenti, un cortocircuito potrebbe danneggiare la batteria e il circuito.
3. Crea un’App su Anvil
Vai al Anvil website e clicca su Start building.
Accedi o registrati.
Crea una New Blank App.
Seleziona il Tema Material Design.
Ora sei nella pagina di modifica dell’app.
Dalla Toolbox, trascina uno strumento Label e posizionalo su Drop title here.
Puoi inserire il testo dell’etichetta nel campo text sotto il menu Properties.
Allo stesso modo, trascina una TextBox sulla destra.
Trascina un button all’estrema destra e puoi modificare il campo text. Questo pulsante verrà utilizzato per «inviare» un messaggio al Raspberry Pi Pico W.
Dopo aver fatto doppio clic sul pulsante SHOW, il modulo passerà dalla pagina Design alla pagina del Codice e evidenzierà il codice per il button. È necessario inserire il seguente codice, che serve per chiamare una funzione all’interno del server (in questo caso, Pico W).
anvil.server.call_s("show_message",self.text_box_1.text)
show_messageè la funzione che verrà definita quando Pico W sarà programmato.self.text_box_1.textè il messaggio che inserisci nella casella di testo, che verrà inviato come argomento ashow_message().
Torna alla pagina Design, trascina un’altra etichetta e posizionala sotto gli elementi precedenti. Questa etichetta mostrerà i dati del sensore DHT11 dal Pico W.
Nella Toolbox, clicca su More Components e trascina il Timer nel modulo.
Utilizzando le Properties, imposta il timer su un intervallo di 3 secondi. Questo tempo è utilizzato per aggiornare la schermata dei dati del sensore.
Fai doppio clic sullo strumento Timer per programmarlo. Utilizza la funzione
anvil.server.call_s()per chiamare la funzionepublish_data()dal server e ottenere il messaggio che deve essere visualizzato nell’app Anvil, assegnalo aself.label_2.texte il gioco è fatto.data=anvil.server.call_s("publish_data") self.label_2.text=data
A questo punto, la parte che deve essere programmata su Anvil è completata. Puoi vedere maggiori dettagli sull’utilizzo di Anvil su Anvil Docs.
4. Configura Pico W
Per semplificare la connessione del Raspberry Pi Pico W ai servizi Anvil, Anvil utilizza un’immagine firmware personalizzata. Il firmware del Pico W è scritto in MicroPython e appare come un’unità USB con due file (boot.py e main.py). Il Pico W deve essere flashato con il firmware personalizzato e connesso al nostro Wi-Fi prima di iniziare a scrivere il codice.
Scarica il firmware personalizzato per Raspberry Pi Pico W firmware from Anvil, si consiglia di scaricare la versione completa.
Tieni premuto il pulsante BOOTSEL sul Pico W, quindi collegalo al computer utilizzando un cavo micro USB. Rilascia BOOTSEL una volta che l’unità RPI-RP2 appare sul tuo computer.
Trascina e rilascia il file
.uf2che hai appena scaricato al suo interno e Pico W installerà il firmware a questo punto. Una volta completato, Pico W ricaricherà l’unità disco e vedrai i filemain.pyeboot.py.Nota
Prima di reinstallare il firmware, fai un backup di tutti i tuoi file importanti memorizzati su Pico W.
Seleziona «MicroPython(Raspberry Pi Pico).COMXX» come interprete nell’IDE Thonny. Dopo aver cliccato su View -> Files, vedrai l’unità locale e l’unità disco del Raspberry Pi Pico.
Fai doppio clic sullo script
boot.pye inserisci ilSSIDe laPASSWORDdel tuo WiFi.
5. Completa il Codice
Carica
dht.pyelcd1602.pydal percorsokepler-kit-main/libsnel Raspberry Pi Pico W.
Apri
main.pye sostituisci il codice originale con il seguente codice.import anvil.pico import uasyncio as a from machine import Pin,I2C from lcd1602 import LCD lcd = LCD() from dht import DHT11 sensor = DHT11(Pin(16, Pin.OUT, Pin.PULL_DOWN)) UPLINK_KEY = "<uplink_key_goes_here>" @anvil.pico.callable(is_async=True) async def show_message(text): print(f"show anvil's input message: {text}") lcd.clear() lcd.message(text) return @anvil.pico.callable(is_async=True) async def publish_data(): sensor.measure() return "Temperature: {}, Humidity: {}".format(sensor.temperature, sensor.humidity) # Connect the Anvil Uplink. In MicroPython, this call will block forever. anvil.pico.connect(UPLINK_KEY) # There's lots more you can do with Anvil on your Pico W. # # See https://anvil.works/pico for more information
Torna all’interfaccia Anvil e tocca l’opzione Uplink nelle impostazioni dell’App Browser.
Clicca su Enable the Anvil Server Uplink for this app per ottenere la chiave uplink.
Copiala e sostituisci
<uplink_key_goes_here>inmain.py, il che fa sì che il tuo Pico W possa connettersi all’app Anvil che hai creato.
6. Esegui il Progetto
Clicca sul pulsante Run current script o premi F5 per eseguirlo. Dopo la connessione riuscita, vedrai il prompt di successo della connessione nella Shell.
Esegui Anvil, ora potrai vedere la temperatura e l’umidità visualizzate dall’app Anvil. Se clicchi sul pulsante SHOW dopo aver inserito un messaggio nella casella di testo, l’LCD1602 I2C visualizzerà il messaggio che hai inserito.
Nota
Se il carattere che hai inserito non viene visualizzato su LCD1602 I2C, puoi girare il potenziometro sul retro del modulo per aumentare il contrasto.
7. Pubblica l’APP
Se vuoi condividere la tua app con altri, puoi generare un link di condivisione seguendo il metodo seguente.
Torna alla pagina Anvil e clicca sull’opzione publish app nelle impostazioni dell’App Browser.
Nella scheda Share via private link vedrai un elenco di link. Chiunque può accedere alla tua app tramite questo link.
Accedi al link e la tua app è pronta per essere utilizzata direttamente.
Puoi anche condividere la tua app tramite il link pubblico, inserisci il tuo nome di dominio personalizzato e clicca su Apply in basso per renderlo effettivo.
Come funziona?
Ecco il framework di base di main.py, che costituisce la base della comunicazione tra Pico W e l’APP Anvil.
import anvil.pico
import uasyncio as a
UPLINK_KEY = "<uplink_key_goes_here>"
# Connect the Anvil Uplink. In MicroPython, this call will block forever.
anvil.pico.connect(UPLINK_KEY)
# There's lots more you can do with Anvil on your Pico W.
#
# See https://anvil.works/pico for more information
Configura dht11 e lcd1602. I dettagli sull’uso di questi due componenti possono essere trovati in 6.2 Temperatura - Umidità e 3.4 Display a Cristalli Liquidi.
from machine import Pin,I2C
from lcd1602 import LCD
lcd = LCD()
from dht import DHT11
sensor = DHT11(Pin(16, Pin.OUT, Pin.PULL_DOWN))
Nel codice di Anvil, abbiamo chiamato due funzioni interne del server (Pico W).
La prima è show_message(), la cui funzione è far visualizzare all’LCD il messaggio digitato su Anvil.
Il decoratore @anvil.pico.callable(is_async=True) rende questa funzione chiamabile da Anvil.
@anvil.pico.callable(is_async=True)
async def show_message(text):
print(f"show anvil's input message: {text}")
lcd.clear()
lcd.message(text)
return
Successivamente c’è publish_data(), che ha la funzione di ottenere il valore di dht11 e restituire la temperatura e l’umidità ad Anvil.
Anche in questo caso, utilizza il decoratore @anvil.pico.callable(is_async=True) per renderlo chiamabile da Avil.
@anvil.pico.callable(is_async=True)
async def publish_data():
sensor.measure()
return "Temperature: {}, Humidity: {}".format(sensor.temperature, sensor.humidity)