esp32-ch390-udp-sensor-gateway.ino

Olimex UEXT-CH390: SPI to Ethernet 10/100 Mbps Module for Microcontrollers · File : esp32-ch390-udp-sensor-gateway.ino · Language : C++ · Use case : Envoyer des données de capteurs via UDP sur le réseau Ethernet filaire CH390 depuis un ESP32.

Transmitting analog sensor data to a remote server via UDP using the CH390 Ethernet interface.

This code assumes the network layer (lwIP) is already active on the CH390 interface. The ESP32 reads a sensor on GPIO 34 and sends the value via UDP to IP 192.168.1.100. Ensure the target server's firewall allows port 5000.

esp32-ch390-udp-sensor-gateway.ino

#include "WiFi.h" // Nécessaire pour la structure IP même si pas de WiFi
#include "lwip/sockets.h"
#include "driver/gpio.h"

// Supposons que l'interface Ethernet est déjà initialisée et active
// (voir exemple précédent pour l'init CH390)

#define SENSOR_PIN GPIO_NUM_34
#define TARGET_IP "192.168.1.100"
#define TARGET_PORT 5000

void setup() {
    Serial.begin(115200);
    // Attente que l'IP soit attribuée (logique simplifiée)
    delay(5000); 
}

void loop() {
    // Lecture simulée d'un capteur (ex: température)
    float sensor_val = analogRead(SENSOR_PIN) * 0.1;
    char payload[64];
    sprintf(payload, "TEMP:%.2f", sensor_val);

    int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sock >= 0) {
        struct sockaddr_in dest_addr;
        dest_addr.sin_addr.s_addr = inet_addr(TARGET_IP);
        dest_addr.sin_family = AF_INET;
        dest_addr.sin_port = htons(TARGET_PORT);

        sendto(sock, payload, strlen(payload), 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
        close(sock);
        Serial.println("Data sent via CH390 Ethernet");
    }
    delay(1000);
}

← Back to the board