Chat freely about anything...

User avatar
By John Milner
#55288 Hi

I have successfully configured my ESP8266 D1 (from Hobby Electronics) as a Wireless Access Point. I can send UDP Packets both ways (from my iPhone as Client) and to the ESP8266 D1 as server. Next step is sending the received data out as MIDI via an Arduino MIDI Shield. My question is this:-

How do I configure the digital pins on the board to drive 2 x LEDs to denote send and receive? And without disabling WiFi or Tx/Rx capability.

Everything I've tries gives me a board reset in Serial Monitor...

Any help would be much appreciated!
User avatar
By John Milner
#55299 That's exactly what I mean...

Ignore the led code, it doesn't work for me...

Code: Select all#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

#  define MIDI_EN 17
int ledReceive = 5;
int ledSend = 8;
unsigned int UDPPort = 9000;      // local port to listen on


char packetBuffer[255]; //buffer to hold incoming packet
char  ReplyBuffer[] = "Hell Yes!!";       // a string to send back
WiFiUDP Udp;
void setup() {
  //pinMode(ledReceive, OUTPUT);
  //pinMode(ledSend, OUTPUT);
  pinMode(MIDI_EN, OUTPUT);
  digitalWrite(MIDI_EN, HIGH);
  WiFi.mode(WIFI_AP);
  Serial.begin(115200);

  WiFi.softAP("UB-753");
  Udp.begin(UDPPort);
  Serial.println();
  Serial.println("Started Access Point - Local ip: 192.168.4.1");
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  digitalWrite(ledReceive, HIGH);
  delay(700);
  digitalWrite(ledReceive, LOW);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(100);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(1400);
  //number of flashes below = Rev Number...
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  delay(700);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  delay(700);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  delay(700);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  //End of Rev Number flashes...
  //number of flashes below = Rev Number after decimal
  delay(500);
  digitalWrite(ledReceive, HIGH);
  delay(700);
  digitalWrite(ledReceive, LOW);
  delay(700);
  digitalWrite(ledReceive, HIGH);
  delay(700);
  digitalWrite(ledReceive, LOW);
}

void loop() {
  String received_command = "";
  // 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());
    Serial.println("Local ip: 192.168.4.1");

    // read the packet into packetBufffer
    int len = Udp.read(packetBuffer, 255);
    //if (len > 0) {
     // packetBuffer[len] = 0;
   // }
    Serial.println("Contents:");
    for (int i=1;i<=len;i++)
    {
      Serial.print(packetBuffer[i-1],HEX);
      received_command = received_command + char(packetBuffer[i - 1]);
      if (i % 32 == 0)
      {
        Serial.println();
      }
      else Serial.print(' ');
    } // end for
    Serial.println();
   
     
    // send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), 9001);
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }

}


As soon as I try to add any Digital Pins, I get a reset message...

Any help would be much appreciated!

John M
User avatar
By John Milner
#55318 That's exactly what I meant... LEDs to show when packets are sent and received.
Here is what I have so far (see code below). The led stuff is commented out (mainly) because as soon as I include it, the LEDs don't do what they should, and the board resets...
Code: Select all#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

#  define MIDI_EN 17
int ledReceive = 5;
int ledSend = 8;
unsigned int UDPPort = 9000;      // local port to listen on


char packetBuffer[255]; //buffer to hold incoming packet
char  ReplyBuffer[] = "Hell Yes!!";       // a string to send back
WiFiUDP Udp;
void setup() {
  //pinMode(ledReceive, OUTPUT);
  //pinMode(ledSend, OUTPUT);
  pinMode(MIDI_EN, OUTPUT);
  digitalWrite(MIDI_EN, HIGH);
  WiFi.mode(WIFI_AP);
  Serial.begin(115200);

  WiFi.softAP("UB-753");
  Udp.begin(UDPPort);
  Serial.println();
  Serial.println("Started Access Point - Local ip: 192.168.4.1");
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  digitalWrite(ledReceive, HIGH);
  delay(700);
  digitalWrite(ledReceive, LOW);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(50);
  digitalWrite(ledSend, HIGH);
  delay(50);
  digitalWrite(ledSend, LOW);
  delay(100);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(50);
  digitalWrite(ledReceive, HIGH);
  delay(50);
  digitalWrite(ledReceive, LOW);
  delay(1400);
  //number of flashes below = Rev Number...
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  delay(700);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  delay(700);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  delay(700);
  digitalWrite(ledSend, HIGH);
  delay(700);
  digitalWrite(ledSend, LOW);
  //End of Rev Number flashes...
  //number of flashes below = Rev Number after decimal
  delay(500);
  digitalWrite(ledReceive, HIGH);
  delay(700);
  digitalWrite(ledReceive, LOW);
  delay(700);
  digitalWrite(ledReceive, HIGH);
  delay(700);
  digitalWrite(ledReceive, LOW);
}

void loop() {
  String received_command = "";
  // 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());
    Serial.println("Local ip: 192.168.4.1");

    // read the packet into packetBufffer
    int len = Udp.read(packetBuffer, 255);
    //if (len > 0) {
     // packetBuffer[len] = 0;
   // }
    Serial.println("Contents:");
    for (int i=1;i<=len;i++)
    {
      Serial.print(packetBuffer[i-1],HEX);
      received_command = received_command + char(packetBuffer[i - 1]);
      if (i % 32 == 0)
      {
        Serial.println();
      }
      else Serial.print(' ');
    } // end for
    Serial.println();
   
     
    // send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), 9001);
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }

}


I suspect it's something fundamental, connected with the pins being dual purpose - any help would be much appreciated!

Below is screenshot of serial window showing reset message:-
Image

And here is a screenshot of successful receipt of UDP packets:-
Image