Chat freely about anything...

User avatar
By sal_murd
#77564 I know the ESP supports 4 clients when configured as access point. I am only able to display messages received from 1 remote client. When I try to connect and send the udp packets from the 2nd remote device, the first device's messages no longer appear and the 2nd device takes over. My code on the ESP is as below:
Code: Select all#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
#include <TimeLib.h>

//These are the avariables you can change for your project. For example, change the SSID (network ID), change the ports on both machines.
//The most useful one is the LOOP_DELAY which changes how quicly it refreshes. set to 100ms be default.
char ssid[] = "ESPAP";      //  your network SSID (name)
char password[] = "mPass@54321";  //Set the AP's password
unsigned int localPort = 2390;        // local port to listen on
#define LOOP_DELAY    10             //how fast we check for new data
#define ARRAYSIZE     255             //size of message array (255bytes)
#define BAUD_RATE     115200          //serial comunication speed
//global variables
IPAddress remoteIp;
int remoteUDPPort;
char packetBuffer[ARRAYSIZE]; //buffer to hold incoming packet
int arraySize = ARRAYSIZE;
char inData[ARRAYSIZE]; // Allocate some space for the string
char inChar; // Where to store the character read
byte aindex = 0; // Index into array; where to store the character
boolean dataToSend = false;
WiFiUDP Udp;
void setup()
{
  Serial.begin(BAUD_RATE);
  /* You can remove the password parameter if you want the AP to be open. */
  WiFi.softAP(ssid, password);    //Start AP
  // IPAddress myIP = WiFi.softAPIP(); if ever in doubt on this devices IP address you can get it here. Should be 192.168.4.1
  Udp.begin(localPort);
  WiFi.setSleepMode(WIFI_NONE_SLEEP);
}
void loop() {
 while(Serial.available() > 0) //check for something to read from serial port
  {
      if(aindex < (arraySize-1)) // One less than the size of the array
      {
          inChar = Serial.read();   // Read a character
          inData[aindex] = inChar;  // Store it
          aindex++;                 // Increment where to write next
          inData[aindex] = '\0';    // Null terminate the string
      }
      dataToSend = true;
       }
  //check for incoming data via UDP
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    remoteIp = Udp.remoteIP();
    remoteUDPPort = Udp.remotePort();
    int len = Udp.read(packetBuffer, 255);  //read in the packet
    if (len > 0)
    {
      packetBuffer[len] = 0;
    }
     Serial.println(packetBuffer);
  }
  // send UDP Data - this sends data to the last device it receives data from. For a one to one link this is fine. If there are multiple clients then this may need to be adjusted to store and send to all clients.
  if(dataToSend)
  {
    if(Udp.beginPacket(remoteIp, remoteUDPPort))
    {
      Udp.write(inData);
      Udp.endPacket();
      //Serial.println(inData); //Uncomment this line for a local echo of the data sent
      }
    else
    {
      Serial.println("No connection");
    }
    dataToSend = false; //set the flag to false, ie only send when you need to.
    for (aindex=0; aindex < arraySize; aindex++)  //wipe the array
    {
       inData[aindex] = '\0'; // Null terminate the string
    }
    aindex = 0; //reset the index
     }
   
}

Please suggest how to get and display the messages from both clients simultaneously. Thanks