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.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
4. Meteo in tempo reale da @OpenWeatherMap
Questo progetto prevede la creazione di un orologio intelligente che mostra il meteo della tua città insieme all’ora sul display LCD.
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 |
Batteria 18650 |
1 |
|
8 |
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. Ottieni le chiavi API di OpenWeather
OpenWeather è un servizio online, di proprietà di OpenWeather Ltd, che fornisce dati meteorologici globali tramite API, inclusi dati meteorologici attuali, previsioni, nowcast e dati meteorologici storici per qualsiasi località geografica.
Visita OpenWeather per accedere/creare un account.
Accedi alla pagina delle API dalla barra di navigazione.
Trova Dati Meteo Attuali e clicca su Iscriviti.
Sotto Collezione di dati meteo attuali e previsioni, iscriviti al servizio appropriato. Nel nostro progetto, la versione gratuita è sufficiente.
Copia la chiave dalla pagina delle Chiavi API.
Copiala nello script
secrets.pyin Raspberry Pi Pico W.
Nota
Se non hai gli script
do_connect.pyesecrets.pynel tuo Pico W, fai riferimento a 1. Accesso alla Rete per crearli.secrets = { 'ssid': 'SSID', 'password': 'PASSWORD', 'webhooks_key':'WEBHOOKS_API_KEY', 'openweather_api_key':'OPENWEATHERMAP_API_KEY' }
4. Esegui lo script
Apri il file
4_weather.pynel percorsokepler-kit-main/iot, clicca sul pulsante Esegui script corrente o premi F5 per eseguirlo.
Dopo l’esecuzione dello script, vedrai l’ora e le informazioni meteo della tua località sul display I2C LCD1602.
Nota
Quando il codice è in esecuzione, se lo schermo è vuoto, puoi ruotare il potenziometro sul retro del modulo per aumentare il contrasto.
Se desideri che questo script si avvii automaticamente, puoi salvarlo nel Raspberry Pi Pico W come
main.py.
Come funziona?
Il Raspberry Pi Pico W deve essere connesso a Internet, come descritto in 1. Accesso alla Rete. Per questo progetto, utilizza questa funzione.
from do_connect import *
do_connect()
Dopo la connessione a Internet, queste poche righe di codice aiuteranno a sincronizzare il tuo Pico W con l’orario medio di Greenwich.
import ntptime
while True:
try:
ntptime.settime()
print('Time Set Successfully')
break
except OSError:
print('Time Setting...')
continue
Inizializza il tuo LCD, fai riferimento a 3.4 Display a Cristalli Liquidi per i dettagli sull’uso.
from lcd1602 import LCD
lcd=LCD()
lcd.clear()
string = 'Loading...'
lcd.message(string)
Dobbiamo selezionare l’unità per alcuni dati meteorologici (ad esempio temperatura, velocità del vento) prima di ottenere i dati meteorologici. In questo caso, l’unità è metric.
# Open Weather
TEMPERATURE_UNITS = {
"standard": "K",
"metric": "°C",
"imperial": "°F",
}
SPEED_UNITS = {
"standard": "m/s",
"metric": "m/s",
"imperial": "mph",
}
units = "metric"
Successivamente, questa funzione ottiene i dati meteorologici da openweathermap.org.
Invieremo un messaggio URL con la tua città, chiavi API e un’unità impostata.
Come risultato, riceverai un file JSON con i dati meteorologici.
def get_weather(city, api_key, units='metric', lang='en'):
'''
Get weather data from openweathermap.org
city: City name, state code and country code divided by comma, Please, refer to ISO 3166 for the state codes or country codes. https://www.iso.org/obp/ui/#search
api_key: Your unique API key (you can always find it on your openweather account page under the "API key" tab https://home.openweathermap.org/api_keys)
unit: Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default. More: https://openweathermap.org/current#data
lang: You can use this parameter to get the output in your language. More: https://openweathermap.org/current#multi
'''
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units={units}&lang={lang}"
print(url)
res = urequests.post(url)
return res.json()
Se stampi questo set di dati grezzi, potrai vedere informazioni simili a quelle mostrate di seguito.
esempio di dati meteo:
{
'timezone': 28800,
'sys': {
'type': 2,
'sunrise': 1659650200,
'country': 'CN',
'id': 2031340,
'sunset': 1659697371
},
'base': 'stations',
'main': {
'pressure': 1008,
'feels_like': 304.73,
'temp_max': 301.01,
'temp': 300.4,
'temp_min': 299.38,
'humidity': 91,
'sea_level': 1008,
'grnd_level': 1006
},
'visibility': 10000,
'id': 1795565,
'clouds': {
'all': 96
},
'coord': {
'lon': 114.0683,
'lat': 22.5455
},
'name': 'Shenzhen',
'cod': 200,
'weather':[{
'id': 804,
'icon': '04d',
'main': 'Clouds',
'description': 'overcast clouds'
}],
'dt': 1659663579,
'wind': {
'gust': 7.06,
'speed': 3.69,
'deg': 146
}
}
Abbiamo usato la funzione print_weather(weather_data) per convertire questi dati grezzi in un formato di dati di facile lettura e stamparli.
Ma questa funzione non è chiamata, e puoi decommentare questa riga in while True secondo necessità.
# stampa su shell
print_weather(weather_data)
Nel ciclo while True, la funzione get_weather() viene chiamata per recuperare le informazioni su meteo, temperatura e umidità necessarie per questo progetto.
weather_data = get_weather('shenzhen', secrets['openweather_api_key'], units=units)
weather=weather_data["weather"][0]["main"]
t=weather_data["main"]["temp"]
rh=weather_data["main"]["humidity"]
Ottieni l’ora locale. Qui viene chiamata la funzione time.localtime() per restituire un set di tuple (anno, mese, giorno, ora, minuto, secondo, giorno della settimana, giorno dell’anno). Abbiamo estratto ora e minuti.
Nota che abbiamo già sincronizzato il Pico W con l’orario medio di Greenwich, quindi dobbiamo aggiungere il fuso orario della tua località.
# get time (+24 allows for western hemisphere)
# if negative, add 24
# hours = time.localtime()[3] + int(weather_data["timezone"] / 3600) + 24 #only for west hemisphere
hours=time.localtime()[3]+int(weather_data["timezone"] / 3600)
mins=time.localtime()[4]
Infine, le informazioni meteo e l’ora vengono visualizzate nel LCD1602.
lcd.clear()
time.sleep_ms(200)
string = f'{hours:02d}:{mins:02d} {weather}\n'
lcd.message(string)
string = f'{t}{TEMPERATURE_UNITS[units]} {rh}%rh'
lcd.message(string)
Il tuo LCD1602 diventerà un orologio che si aggiorna ogni 30 secondi quando il ciclo principale viene eseguito ogni 30 secondi.