import _thread from machine import Pin from shared import get_lora, get_uart, deviceTypes, config import time # --- Configuration Matérielle --- vext = Pin(19, Pin.OUT) vext.value(0) time.sleep_ms(100) # --- Lecture de l'ID unique de l'ESP --- try: with open("device_id.txt", "r") as f: DEVICE_ID = f.read().strip() except Exception: DEVICE_ID = "ESP32_Inconnu" # --- Initialisation LoRa --- lora = get_lora() lora.configure(freq=868.1, sf=7) print(f"ESP32 initialisé avec l'ID : '{DEVICE_ID}' (Type : {deviceTypes.DEVICE_TYPES['MICROWAVE']})") def heartbeat_loop(): while True: print(f"\nESP32 : Envoi du Heartbeat...") # Envoi périodique ping_payload = { "id": DEVICE_ID, "type": deviceTypes.DEVICE_TYPES["MICROWAVE"] } lora.send(ping_payload) # Le receive_packet est maintenant protégé par le lock dans lora_device # Si le main thread utilise la radio, ce thread attendra son tour paquet = lora.receive_packet(timeout_ms=2000) if paquet and not paquet["raw"]: donnees = paquet["data"] # Vérification si le paquet reçu est bien la réponse attendue de l'orchestrateur if donnees.get("type") == deviceTypes.DEVICE_TYPES["ORCHESTRATOR"]: print(f"ESP32 : Réponse reçue de l'orchestrateur '{donnees.get('id')}' ! [Statut: ALIVE]") else: print(f"ESP32 : Paquet reçu d'un type inattendu : {donnees.get('type')}") else: print("ESP32 : Pas de réponse de l'orchestrateur (Le RPI est-il éteint ?)") time.sleep(config.HEARTBEAT_INTERVAL) # UART uart_device = get_uart(uart_id=1, tx_pin=46, rx_pin=45) # Lancer la boucle de heartbeat dans un thread séparé _thread.start_new_thread(heartbeat_loop, ()) # --- MAIN APPLICATION THREAD --- print("[Main] Main execution path active.") while True: # 1. Listen for incoming UART serial packets from the WROOM board while uart_device.any(): command = uart_device.read() print(f"[Main] Received command from WiFi Board: {command}") # uart_device.send(f"Hello from esp-32 lora ID {DEVICE_ID}") # 2. Send local metrics over the wire to the WiFi board every few seconds # uart_device.send("Data Pack: LoRa Link RSSI -72dBm") time.sleep_ms(200)