Conflit liaison série et UDP ?

Bonjour !

Dans mon programme, j'utilise le protocole UDP pour envoyer des données via ethernet, et j'utilise aussi la liaison série pour m'envoyer des check et m'assurer du fonctionnement de mon programme. Problème, lorsque cette ligne est présenteudp.begin(port); rien ne s'affiche sur le terminal. Or, quand je la commente, la liaison série fonctionne très bien. Savez-vous si un conflit peut apparaître (je sais pas, de port peut-être ?) entre la liaison série et l'UDP ?

Merci d'avance !

bonjour,
tu aurais pu mettre udp.begin(coincoin) ca aurait donné le même effet pour nous :slight_smile:

il faut le code complet pour voir.
lien pour le matériel, lib, etc...

Bien sûr, le voici :

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>

  /*
    Capteur de température avec un LM335 + envoi via UDP

    */
    byte mac[] = {0x90, 0xA2, 0xDA, 0x10, 0xCD, 0x88}; // adresse MAC du shield ethernet
    const IPAddress ip(192, 168, 1, 177); // adresse IP donnée par défaut
    const byte eth_serv[] = {149, 202, 52, 142}; // adresse IP du serveur distant hébergeant InfluxDB
    const int port = 8888; // port de communication avec InfluxDB
    EthernetUDP udp; // Déclaration de l'instance Ethernet UDP

    int capteurPin = 0;    // Port analogique pour lire la température
    int valcan = 0;
    float temp = 0;

    
    void setup()   {
      // start the Ethernet and UDP:
      Ethernet.begin(mac, ip); // Liaison Ethernet avec ma machine
      udp.begin(port);
      
      Serial.begin(9600);
    }



    

    // Boucle principale
    void loop()
    { 
         
    String line, temperature;

    valcan = analogRead(capteurPin);// On lit la valeur du CAN sur le bon port:

    temp = valcan *(5.0/1023); // On récupère la tension en V
    temp = temp/0.01; // On la divise par 10mV car 10mV/°K, on trouve la T° en K
    
    temp = temp - 273,15; // Je convertis en °C

    temperature = String(temp, 2); // Transformation en chaîne de caractère
    
    line = String("temperature,Emplacement=batterie value=" + temperature); // concaténation en ligne de protocole
    Serial.println(temp);
    
    /* send the packet*/
    Serial.println("Sending UDP packet...");
    udp.beginPacket(eth_serv, port);
    udp.print(line); 

    udp.endPacket();Serial.println("UDP packet sent");
   


    // On attend une seconde:
    delay(100);
    }

Bonjour,

Dans EthernetUdp.h il existe une définition de la taille max du paquet à envoyer:

#define UDP_TX_PACKET_MAX_SIZE 24

Ce qui veut dire que "line = String("temperature,Emplacement=batterie value=" + temperature); " est trop long.

Tu doit, ou bien diminuer ton 'line', ou augmenter 'UDP_TX_PACKET_MAX_SIZE' si tu as assez de mémoire dispo.

Salut,

Ah, je ne savais pas qu'il y avait une restriction au niveau du nombre de caractères. Du coup, j'ai d'abord inséré #define UDP_TX_PACKET_MAX_SIZE 48 pour augmenter cette taille, mais ça n'a rien changé. Ensuite, j'ai diminué cette chaîne de caractère (moins de 24), mais là encore j'ai le même problème :frowning:

EDIT : pour communiquer par UDP soyons d'accord, deux ports sont nécéssaires. Celui sur ma machine et celui de la machine distante, je me trompe ? Sur la machine distante j'ai configuré le port 8888 pour l'UDP. Sur ma machine locale, je n'ai rien fait et dans mon programme j'initialise ma liaison UDP avec le port local 8888. Or si je regarde sur Wikipédia, ce port est destiné à TCP. L'erreur peut-être venir de là ?