import time
import network
import urequests
from machine import Pin, ADC, I2C
import dht
import ssd1306
# Paramètres ThingSpeak
THING_SPEAK_API_KEY = "CR4LWERLVQIH0NW4"
THINGSPEAK_URL = "GET https://api.thingspeak.com/update?api_key=CR4LWERLVQIH0NW4&field1=0"
# Configuration du capteur DHT22
dht_sensor = dht.DHT22(Pin(15))
# Configuration de l'afficheur SSD1306
i2c = I2C(scl=Pin(22), sda=Pin(21)) # Changez les broches si nécessaire
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
oled.fill(0)
oled.show()
# Configuration du capteur de lumière LDR
ldr_pin = ADC(Pin(34)) # GPIO34 pour LDR
ldr_pin.atten(ADC.ATTN_11DB) # Plage de 0-3.3V
ldr_digital = Pin(35, Pin.IN)
# Paramètres de la puissance photovoltaïque
P_STC = 300 # Puissance nominale du panneau en W (à 1000W/m² et 25°C)
beta = -0.004 # Coefficient de température (-0.4%/°C)
T_STC = 25 # Température de référence en °C
G_STC = 1000 # Irradiation de référence en W/m²
def read_temperature():
try:
dht_sensor.measure()
return dht_sensor.temperature()
except Exception as e:
print("Erreur de lecture du capteur DHT22:", e)
return None
def read_irradiation():
raw_value = ldr_pin.read()
G = (raw_value / 4095) * G_STC # Conversion linéaire
return G
def calculate_power(T, G):
if T is None or G is None:
return 0 # Si les valeurs sont invalides, retourner 0
P_pv = P_STC * (1 + beta * (T - T_STC)) * (G / G_STC)
return max(P_pv, 0)
def send_to_thingspeak(power, temperature, irradiation):
payload = {
"api_key": THING_SPEAK_API_KEY,
"field1": power,
"field2": temperature,
"field3": irradiation
}
try:
response = urequests.post(THINGSPEAK_URL, json=payload)
print("Données envoyées à ThingSpeak :", response.text)
except Exception as e:
print("Erreur lors de l'envoi à ThingSpeak :", e)
def connect_to_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print("Activation du module Wi-Fi...")
wlan.connect(SSID, PASSWORD)
attempt = 0
while not wlan.isconnected():
attempt += 1
print(f"Tentative de connexion ({attempt})...")
sleep(1)
if attempt > 10: # Arrêter après 10 tentatives
print("Impossible de se connecter au Wi-Fi.")
return False
print("Connecté au Wi-Fi!")
print("Adresse IP:", wlan.ifconfig()[0])
return True
def send_to_thingspeak(motion_status):
url = f'https://api.thingspeak.com/update?api_key={THINGSPEAK_API_KEY}&field1={power}'
try:
response = urequests.get(url)
print("Réponse ThingSpeak:", response.text)
response.close()
except Exception as e:
print("Erreur lors de l'envoi à ThingSpeak:", e)
def main():
connect_wifi()
while True:
temperature = read_temperature() # Lire la température
irradiation = read_irradiation() # Lire l'irradiation
power = calculate_power(temperature, irradiation) # Calculer la puissance
# Affichage sur l'écran OLED
oled.fill(0)
if temperature is not None:
oled.text('Temp: {:.2f}C'.format(temperature), 0, 0)
else:
oled.text('Temp: Err', 0, 0)
oled.text('Irrad: {:.2f}W/m2'.format(irradiation), 0, 10)
oled.text('Puiss: {:.2f}W'.format(power), 0, 20)
oled.show()
# Afficher dans la console
print("Température (°C):", temperature)
print("Irradiation (W/m²):", irradiation)
print("Puissance (W):", power)
# Envoyer à ThingSpeak
send_to_thingspeak(power, temperature, irradiation)
time.sleep(60) # Attendre 60 secondes avant de lire à nouveau
main()