From 9ec55bb365e5ad2ac6718d4236ede298d8ce33df Mon Sep 17 00:00:00 2001 From: CARNEIRO--GILLET Alexandre <alexandre.carneiro-gillet@imt-atlantique.net> Date: Tue, 6 May 2025 08:14:26 +0200 Subject: [PATCH] =?UTF-8?q?int=C3=A9gration=2005/05?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GW-custom/LoRa_homemade/main.py | 138 ++++++++++++++++-- .../{recpt_to_senscom.py => old_main.py} | 51 ++----- GW-custom/LoRa_homemade/pymakr.conf | 3 +- 3 files changed, 138 insertions(+), 54 deletions(-) rename GW-custom/LoRa_homemade/{recpt_to_senscom.py => old_main.py} (66%) diff --git a/GW-custom/LoRa_homemade/main.py b/GW-custom/LoRa_homemade/main.py index 018a4eb..2981f0e 100644 --- a/GW-custom/LoRa_homemade/main.py +++ b/GW-custom/LoRa_homemade/main.py @@ -1,11 +1,39 @@ +import json import time +import network +import requests from machine import UART, Pin -uart = UART(2, baudrate=9600, tx=17, rx=16) -# Initialisation de la LED intégrée (souvent sur GPIO 2) -led = Pin(2, Pin.OUT) # GPIO 2 pour la LED bleue intégrée +def wifi_connect(): + # Configuration du réseau Wi-Fi + ssid = "Redmi Note 8 (2021)" + password = "lemotdepassecestca" + + # Initialisation de l'interface Wi-Fi + wlan = network.WLAN(network.STA_IF) + wlan.active(True) + + # Connexion au réseau Wi-Fi + if not wlan.isconnected(): + print("Connexion au réseau...") + wlan.connect(ssid, password) + + # Attente de la connexion + timeout = 10 # secondes + while not wlan.isconnected() and timeout > 0: + time.sleep(1) + timeout -= 1 + + # Vérifie si la connexion est établie + if wlan.isconnected(): + print("Connecté avec succès !") + print("Adresse IP :", wlan.ifconfig()[0]) + else: + print("Échec de la connexion.") + raise Exception("Impossible de se connecter au réseau Wi-Fi.") + def send_at_command(command): uart.write(("AT" + command + "\r\n").encode()) # Envoie la commande AT au module LoRa @@ -22,10 +50,11 @@ def blink_led(times, interval): time.sleep(interval) # Attendre un certain temps def configure_lora(frequency, sf, bw, TXPR, RXPR, TX_power): + send_at_command("") send_at_command("+MODE=TEST") # Configurer le module LoRa avec les paramètres donnés - # send_at_command(f"+TEST=RFCFG,{frequency},SF{sf},{bw},{TXPR},{RXPR},{TX_power}") + # send_at_command(f"AT+TEST=RFCFG,{frequency},SF{sf},{bw},{TXPR},{RXPR},{TX_power}") def receive_uart(): '''Polls the uart until all data is dequeued''' @@ -35,6 +64,93 @@ def receive_uart(): time.sleep(0.002) return rxData.decode('utf-8') +def send_to_sensor_community_sds011(value1, value2): + # Envoi des données pour le SDS011 + url = "https://api.sensor.community/v1/push-sensor-data/" + headers = { + "Content-Type": "application/json", + "X-Pin": "1", # 1 = SDS011 + "X-Sensor": "esp32-900881266" + } + data = { + "software_version": "0.1", + "sensordatavalues": [ + {"value_type": "P1", "value": str(value1)}, + {"value_type": "P2", "value": str(value2)} + ] + } + + response = requests.post(url, headers=headers, json=data, timeout=10) + + print(response.status_code) # 201 = created + print(response.text) + +def send_to_sensor_community_sht30(temp, humid): + # Envoi des données pour le SHT30 + url = "https://api.sensor.community/v1/push-sensor-data/" + headers = { + "Content-Type": "application/json", + "X-Pin": "7", # 7 = SHT30 + "X-Sensor": "esp32-900881266" + } + data = { + "software_version": "0.1", + "sensordatavalues": [ + {"value_type": "temperature", "value": str(temp)}, + {"value_type": "humidity", "value": str(humid)} + ] + } + + response = requests.post(url, headers=headers, json=data, timeout=10) + + print(response.status_code) # 201 = created + print(response.text) + + +def send_to_sensor_community(data): + pm25 = float(int(data[:4], 16)) / 100 + pm10 = float(int(data[4:8], 16)) / 100 + temperature = float(int(data[8:12], 16)) / 100 + humidity = float(int(data[12:], 16)) / 100 + print(f"PM2.5: {pm25} µg/m³, PM10: {pm10} µg/m³, Temp: {temperature} °C, Humidity: {humidity} %") + send_to_sensor_community_sds011(pm25, pm10) # Envoi des données SDS011 + send_to_sensor_community_sht30(temperature, humidity) # Envoi des données SHT30 + +def try_receive(): + if uart.any(): # Si des données sont disponibles sur le port série + message = receive_uart() # Lire le message reçu + print(f"Message reçu : {message}") + data = message.split("\"")[1] + print(f"Data : {data}\n") + send_to_sensor_community(data) + # Clignotement de la LED une fois pour indiquer la réception + blink_led(1, 0.2) # Clignoter la LED une fois + + +wifi_connect() # Connexion au Wi-Fi + +wlan = network.WLAN(network.STA_IF) +print(wlan.ifconfig()) + + +import urequests + +try: + r = urequests.post("http://httpbin.org/post", json={"test": 123}) + print("Réponse HTTP:", r.status_code) + print(r.text) + r.close() +except Exception as e: + print("Erreur:", e) + + + + + +uart = UART(2, baudrate=9600, tx=17, rx=16) + +# Initialisation de la LED intégrée (souvent sur GPIO 2) +led = Pin(2, Pin.OUT) # GPIO 2 pour la LED bleue intégrée # Initialisation du module LoRa blink_led(3, 0.5) # Clignoter la LED 3 fois au démarrage print("\n\nInitialisation du module LoRa-E5...\n") @@ -42,15 +158,11 @@ configure_lora(868000000, 12, 125, 12, 15, 14) # Configurer le module LoRa avec send_at_command("+TEST=RXLRPKT") # Commencer la réception des paquets LoRa led.value(1) # Rallumer la LED après l'initialisation -print("Module LoRa-E5 initialisé. En attente de messages...\n") +print("Module LoRa-E5 initialisé. En attente de messages...") while True: - if uart.any(): # Si des données sont disponibles sur le port série - message = receive_uart() # Lire le message reçu - print(f"Message reçu : {message}") - data = message.split("\"")[1] - print(f"Data : {data}\n") + try_receive() # Essayer de recevoir un message + time.sleep(0.1) # Attendre un peu avant de vérifier à nouveau + + - # Clignotement de la LED une fois pour indiquer la réception - blink_led(1, 0.2) # Clignoter la LED une fois - time.sleep(0.01) diff --git a/GW-custom/LoRa_homemade/recpt_to_senscom.py b/GW-custom/LoRa_homemade/old_main.py similarity index 66% rename from GW-custom/LoRa_homemade/recpt_to_senscom.py rename to GW-custom/LoRa_homemade/old_main.py index 10d8a0e..018a4eb 100644 --- a/GW-custom/LoRa_homemade/recpt_to_senscom.py +++ b/GW-custom/LoRa_homemade/old_main.py @@ -1,7 +1,6 @@ import time + from machine import UART, Pin -import json -import requests uart = UART(2, baudrate=9600, tx=17, rx=16) @@ -26,7 +25,7 @@ def configure_lora(frequency, sf, bw, TXPR, RXPR, TX_power): send_at_command("") send_at_command("+MODE=TEST") # Configurer le module LoRa avec les paramètres donnés - # send_at_command(f"AT+TEST=RFCFG,{frequency},SF{sf},{bw},{TXPR},{RXPR},{TX_power}") + # send_at_command(f"+TEST=RFCFG,{frequency},SF{sf},{bw},{TXPR},{RXPR},{TX_power}") def receive_uart(): '''Polls the uart until all data is dequeued''' @@ -36,38 +35,6 @@ def receive_uart(): time.sleep(0.002) return rxData.decode('utf-8') - -def send_to_sensor_community(value1, value2): - # Envoi des données sur sensor community - url = "https://api.sensor.community/v1/push-sensor-data/" - headers = { - "Content-Type": "application/json", - "X-Pin": "1", # 1 = SDS011 - "X-Sensor": "esp32-900881266" - } - data = { - "software_version": "0.1", - "sensordatavalues": [ - {"value_type": "P1", "value": str(value1)}, - {"value_type": "P2", "value": str(value2)} - ] - } - - response = requests.post(url, headers=headers, data, timeout=10) - - print(response.status_code) # 201 = created - print(response.text) - -def try_receive(): - if uart.any(): # Si des données sont disponibles sur le port série - message = receive_uart() # Lire le message reçu - print(f"Message reçu : {message}") - data = message.split("\"")[1] - print(f"Data : {data}\n") - - # Clignotement de la LED une fois pour indiquer la réception - blink_led(1, 0.2) # Clignoter la LED une fois - # Initialisation du module LoRa blink_led(3, 0.5) # Clignoter la LED 3 fois au démarrage print("\n\nInitialisation du module LoRa-E5...\n") @@ -75,11 +42,15 @@ configure_lora(868000000, 12, 125, 12, 15, 14) # Configurer le module LoRa avec send_at_command("+TEST=RXLRPKT") # Commencer la réception des paquets LoRa led.value(1) # Rallumer la LED après l'initialisation -print("Module LoRa-E5 initialisé. En attente de messages...") +print("Module LoRa-E5 initialisé. En attente de messages...\n") while True: - try_receive() # Essayer de recevoir un message - time.sleep(0.1) # Attendre un peu avant de vérifier à nouveau - - + if uart.any(): # Si des données sont disponibles sur le port série + message = receive_uart() # Lire le message reçu + print(f"Message reçu : {message}") + data = message.split("\"")[1] + print(f"Data : {data}\n") + # Clignotement de la LED une fois pour indiquer la réception + blink_led(1, 0.2) # Clignoter la LED une fois + time.sleep(0.01) diff --git a/GW-custom/LoRa_homemade/pymakr.conf b/GW-custom/LoRa_homemade/pymakr.conf index 08e4710..b0479d7 100644 --- a/GW-custom/LoRa_homemade/pymakr.conf +++ b/GW-custom/LoRa_homemade/pymakr.conf @@ -17,7 +17,8 @@ "venv", ".python-version", ".micropy/", - "micropy.json" + "micropy.json", + "old_main.py" ], "fast_upload": false } \ No newline at end of file -- GitLab