#ESP32 EN MODE AP
import machine
import network
import socket
import time
import dht
# Configuration de la ESP en AP Wi-Fi
ssid = "ESP32_AP_WIFI"
password = "ESP32TEST"
channel = 4 # Canal Wifi
txpower = 20 # Puissance d'émission en dBm (0 à 20, selon la réglementation locale)
authmode=network.AUTH_WPA_WPA2_PSK
max_clients = 2 #nombre maximum de client

#Configuration des paramètres de la couche 2 Standard (802.11n)
ap = network.WLAN(network.AP_IF)
ap.active(True)

ap.config(essid=ssid, password=password, authmode=authmode, max_clients=max_clients, channel = channel, txpower= txpower)

# Attendez que le point d'accee Wifi soit active
while ap.active() == False:
  pass
# Configuration de la couche 3 (Protocole IP)
ip_address = "192.168.10.1"  # Adresse IP statique souhaitée
subnet_mask = "255.255.255.0"  # Masque de sous-réseau
gateway = "192.168.10.1"  # Passerelle par défaut
dns_server = "8.8.8.8"  # Serveur DNS

#Activer la configuration au point d'accès Wifi (L3)
ap.ifconfig((ip_address, subnet_mask, gateway, dns_server))

# fonction d'affichage des paramètres :
def display_wifi_info():
    ap = network.WLAN(network.AP_IF)
    
    if ap.isconnected():
        print("Adresse IP : ", ap.ifconfig()[0])
        print("Adresse MAC : ", ":".join("{:02X}".format(b) for b in ap.config("mac")))
        print("SSID : ", ap.config("ssid"))
        print("Mode de chiffrement : ",   ap.config("authmode"))
        print("Canal Wi-Fi : ", ap.config("channel"))
        print("Puissance d'émission: {} dBm".format(ap.config("txpower")))
    else:
        print("Non connecté avec un Client Wifi")
        
# Configuration du socket UDP (Mode UDP) (L4)
ip_client = "192.168.10.2"  # Adresse IP du client
port = 12345  # Port de communication UDP
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    ap = network.WLAN(network.AP_IF)
    if ap.isconnected():
        data_to_send = ap.config("txpower") #tx power dbm de la ESP32
        try:
            sock.sendto(str(data_to_send).encode(), (ip_client, port))  # Envoie la puissance d'émission via UDP à l'ESP8266
            print("Données de capteur envoyées :", data_to_send)
            time.sleep(2)  # Lire les données du capteur toutes les 2 secondes
        except Exception as e:
            print("Erreur d'envoi :", e)
    else:
        time.sleep(5)