Example sketches for the new Arduino IDE for ESP8266

Moderator: igrr

User avatar
By Chris Carter
#24222 Hey guys,

I've got some code running that will open a network and scan so that I can log in to the ESP8266 directly and tell it my SSID and password. I'm wondering if anyone has something that can find the ESP8266 on the network? I'm thinking something along the lines of sending a ping on a specific port to every device on the network and having the ESP listen on that port and reply with a magic packet or something?

Does anyone have an example of this, or can point me in the right direction to set something like this up? I don't even know how to get the ESP8266 to listen on a specific port.
User avatar
By kolban
#24232 One possible way would be to have your ESPs listen on a specific UDP port and then the device which wants to find them could execute a UDP broadcast on that port. The ESPs should receive and it and respond.

I don't have any samples for you but if you can make an attempt after studying the docs and coding in C, the community will try and assist in the debugging if needed.
User avatar
By Chris Carter
#24270 Alright I have it responding to broadcast UDP packets :) There was some misunderstanding by me of where to send the broadcast packet to, but it's working now.

I'll have to now write up a little java applet or something that can send these out, find the reply, check it's magic packet and launch the web-browser to connect. Code here is very slightly modified from the Arduino example here: https://www.arduino.cc/en/Tutorial/WiFi ... eUDPString

Code: Select all#include <Time.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <NeoPixelBus.h>
#include <EEPROM.h>
#include <ntp.h>
#include <Ticker.h>

int status = WL_IDLE_STATUS;
char ssid[] = "SSID"; //  your network SSID (name)
char pass[] = "pass";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)

unsigned int localPort = 2390;      // local port to listen on

char packetBuffer[255]; //buffer to hold incoming packet
char  ReplyBuffer[] = "acknowledged";       // a string to send back

WiFiUDP Udp;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(115200);


  Serial.println("I'm awake");
  // attempt to connect to Wifi network:
  WiFi.begin(ssid, pass);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected to wifi");
  printWifiStatus();

  Serial.println("\nStarting connection to server...");
  // if you get a connection, report back via serial:
  Udp.begin(localPort);
}

void loop() {

  // if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    IPAddress remoteIp = Udp.remoteIP();
    Serial.print(remoteIp);
    Serial.print(", port ");
    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) {
      packetBuffer[len] = 0;
    }
    Serial.println("Contents:");
    Serial.println(packetBuffer);

    // send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");

}