Es tracta de recuperar les dades del nostre canal i mostrar-les en una pantalla LCD.
Idea: Utilitzar 2 pantalles I2C, que tenen la mateixa adreça I2C.
Podem mostrar:
pantalla 1: temperatura i llum
pantalla 2: pressió i humitat
l'index UV el mostrarem amb una tira de leds Neopixel
vull utilitzar també una pantalla OLED per mostrar data i hora
LCD1 + OLED -> GPIO 21 (SDA), GPIO 22 (SCL). Pins I2C per defecte
LCD2 -> GPIO 19 (SDA), GPIO 18 (SCL). Nous pins I2C
Neopixel -> Pin 23
TBreak -> Pin 15
Recuperem les dades de Thingspeak
Comencem recuperant les dades del nostre canal i mostrant-les en la consola.
L'ESP32 pot recuperar les dades en format JSON (JavaScript Object Notation), un estàndard per codificar dades en text.
Podem accedir-hi a les dades JSON del nostre canal mitjançant la URL api.thingspeak.com/channels/IDdelcanal/feeds.json
Aquesta és la meva https://api.thingspeak.com/channels/1825502/feeds.json
Per recuperar només el darrer valor cal afegir ?results=1 a continuació de la URL. En el meu cas:
https://api.thingspeak.com/channels/1825502/feeds.json?results=1
Codi bàsic 👇
# --- llibreries
import urequests # per fer peticions http
import miwifi # llibreria pròpia per connectar a WiFi
from time import ticks_ms, ticks_diff # per gestionar el temps sense sleep
# --- Configuració Wi-Fi i ThingSpeak
ssid = 'xxx'
psw = 'yyy'
# adreça de recuperació de dades del canal:
url = 'https://api.thingspeak.com/channels/1825502/feeds.json?results=1'
miwifi.connecta_wifi(ssid, psw) # connecta a WiFi
def recupera():
global temp, pres, hum, lux, uv # per poder utilitzar els valors fora de la funció
# Fer consulta a ThingSpeak
consulta = urequests.get(url)
data = consulta.json()
consulta.close()
# recuperar les dades
temp = data["feeds"][0]["field1"]
pres = data["feeds"][0]["field2"]
hum= data["feeds"][0]["field3"]
lux= data["feeds"][0]["field4"]
uv = data["feeds"][0]["field5"]
def mostra_consola():
# mostra les dades recuperades en la consola
print("Temperatura:",temp)
print("Pressio:",pres)
print("Humitat:",hum)
print("Iluminacio:",lux)
print("UV:",uv)
print('....')
while True:
recupera()
mostra_consola()
sleep (10) # actualització cada 10 s
''' Visualitzador 1. Recupera les dades de Thingspeak '''
# --- Llibreries ---
import urequests # per fer peticions http
from time import sleep
import miwifi # llibreria pròpia per connectar a WiFi
# --- Configuració ---
ssid = 'vodafoneE3D9'
psw = 'JU7AJW8YFWMWLR'
#ssid = 'gencat_ENS_EDU_LAB'
#psw = 'R0b0t!c@'
url = 'https://api.thingspeak.com/channels/1825502/feeds.json?results=1' # adreça de recuperació de dades del canal
miwifi.connecta_wifi(ssid, psw) # connecta a WiFi
# --- Variables ---
# --- Funcions ---
def recupera():
#global temp, pres, hum, lux, uv # per poder utilitzar els valors fora de la funció
consulta = urequests.get(url) # Fer consulta a ThingSpeak
data = consulta.json()
consulta.close()
# recuperar les dades
temp = data["feeds"][0]["field1"]
pres = data["feeds"][0]["field2"]
hum= data["feeds"][0]["field3"]
lux= data["feeds"][0]["field4"]
uv = data["feeds"][0]["field5"]
print(temp, pres, hum, lux, uv) # mostra per la consola
# --- Execució ---
while True:
recupera()
sleep (10) # actualització cada 10 s
''' Visualitzador 1. Recupera les dades de Thingspeak '''
# --- Llibreries ---
import urequests # per fer peticions http/get
from time import sleep
import miwifi # llibreria pròpia per connectar a WiFi
# --- Configuració ---
# --- Variables ---
ssid = 'vodafoneE3D9'
psw = 'JU7AJW8YFWMWLR'
#ssid = 'gencat_ENS_EDU_LAB'
#psw = 'R0b0t!c@'
url = 'https://api.thingspeak.com/channels/1825502/feeds.json?results=1' # adreça de recuperació de dades del canal
miwifi.connecta_wifi(ssid, psw) # connecta a WiFi
# --- Funcions ---
def recupera():
#global temp, pres, hum, lux, uv # per poder utilitzar els valors fora de la funció
# Fer consulta a ThingSpeak
consulta = urequests.get(url)
data = consulta.json()
consulta.close()
# recuperar les dades
temp = data["feeds"][0]["field1"]
pres = data["feeds"][0]["field2"]
hum= data["feeds"][0]["field3"]
lux= data["feeds"][0]["field4"]
uv = data["feeds"][0]["field5"]
# mostra per la consola
print(temp, pres, hum, lux, uv)
# --- Execució ---
while True:
recupera()
sleep (10) # actualització cada 10 s
''' Visualitzador 2. Recupera les dades de Thingspeak
Afegit: eliminació de pauses sleep'''
# --- Llibreries ---
import urequests # per fer peticions HTPP
import miwifi # per connectar a WiFi
from time import ticks_ms, ticks_diff # per gestionar el temps sense sleep
# --- Variables ---
last_update = ticks_ms()
interval = 10000 # actualització cada 10 segons (10.000 ms). definitiu: 300.000 ms (5 minuts)
# Variables
ssid = 'vodafoneE3D9'
psw = 'JU7AJW8YFWMWLR'
#ssid = 'gencat_ENS_EDU_LAB'
#psw = 'R0b0t!c@'
url = 'https://api.thingspeak.com/channels/1825502/feeds.json?results=1' # adreça de recuperació de dades del canal
miwifi.connecta_wifi(ssid,psw)
def recupera():
global temp, pres, hum, lux, uv # per poder utilitzar els valors fora de la funció
# Fer consulta a ThingSpeak
consulta = urequests.get(url)
data = consulta.json()
consulta.close()
# recuperar les dades
temp = data["feeds"][0]["field1"]
pres = data["feeds"][0]["field2"]
hum = data["feeds"][0]["field3"]
lux = data["feeds"][0]["field4"]
uv = data["feeds"][0]["field5"]
# mostra per la consola
print(temp, pres, hum, lux, uv)
while True:
ara = ticks_ms()
if ticks_diff(ara, last_update) >= interval:
try: # l'estructura try / except fa que si hi ha errors el programa continui funcionant
recupera()
last_update = ara
except Exception as e:
print("Error:", e)