Arduino Leonardo and duinotech Wifi Shield

hi all

i am having some trouble with these items described in the subject
the wifi shield is connected to the leonardo but the example i use says to me "Wifi Shield Not Present" and i dont see how its not present considering its right here connected

i forgot to say it also has a solid red light in the wifi shield not the leonardo

please help me i payed $63 for these boards and i cant get it to work and i researched the internet for answers and nothing!

Please post a link to where you bought the duinotech wifi shield from so we can be sure what hardware you're referring to.

Please post your full sketch. If possible you should always post code directly in the forum thread as text using code tags (</> button on the toolbar). This will make it easy for anyone to look at it, which will increase the likelihood of you getting help. If the sketch is longer than the forum will allow then it's ok to add it as an attachment.

When your code requires a library that's not included with the Arduino IDE please always post a link(using the chain link icon on the toolbar to make it clickable) to where you downloaded that library from or if you installed it using Library Manger(Sketch > Include Library > Manage Libraries) then say so and state the full name of the library.

the code i used was the WiFiWebServer example either used in the esp8266 pack or the preinstalled packs and i cant upload the pictures because the file size is too big and i bought the parts from jaycar electronics http://www.jaycar.com.au/

OfficialEnlightGames:
the code i used was the WiFiWebServer example either used in the esp8266 pack or the preinstalled packs

That's not helpful. I need the exact code you're using, not some vague ramblings.

OfficialEnlightGames:
i cant upload the pictures because the file size is too big

I didn't ask you for pictures. If you did want to post a picture then you should be competent enough to figure out how to resize them. You're trying to learn electronics and programming, this is complex stuff, either turn your brain on or give up now.

OfficialEnlightGames:
i bought the parts from jaycar electronics http://www.jaycar.com.au/

It would be much more helpful for you to post a link to the exact product page for the shield. Why should we have to go searching all over that site for the specific product you bought. It's you asking for help, not me. When you post links to the forum please use the chain links icon on the toolbar to make them clickable.

The Code Used...

/*
  WiFi Web Server

 A simple web server that shows the value of the analog input pins.
 using a WiFi shield.

 This example is written for a network using WPA encryption. For
 WEP or WPA, change the Wifi.begin() call accordingly.

 Circuit:
 * WiFi shield attached
 * Analog inputs attached to pins A0 through A5 (optional)

 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe

 */

#include <SPI.h>
#include <WiFi.h>


char ssid[] = "yourNetwork";      // your network SSID (name)
char pass[] = "secretPassword";   // your network password
int keyIndex = 0;                 // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }

  String fv = WiFi.firmwareVersion();
  if (fv != "1.1.0") {
    Serial.println("Please upgrade the firmware");
  }

  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  server.begin();
  // you're connected now, so print out the status:
  printWifiStatus();
}


void loop() {
  // listen for incoming clients
  WiFiClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);

    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}


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");
}

Arduino Leonardo: https://www.jaycar.com.au/duinotech-lite-leonardo/p/XC4430

Arduino WiFi Shield: https://www.jaycar.com.au/arduino-compatible-esp-13-wifi-shield/p/XC4614

Is this enough info?

Now we have the necessary information to help you. The problem is the WiFi library you're using is not compatible with that shield. It's only for use with the Arduino WiFi Shield:

The shield you're using is completely different. What you need to know about this shield is it is using the ESP8266 running the AT firmware. The ESP8266 is connected to the Arduino via pins 0 and 1, which on your Leonardo is Serial1. You will be communicating at 115200 baud.

For that shield I recommend the WiFiEsp library:

which offers a very similar API to the Arduino WiFi library so any code written for the Arduino WiFi shield can be adapted to use that library without too much work. Since your ESP8266 communicates at 115200, rather than 9600 baud you will need to change the line in any of the example sketches included with the library from:

 Serial1.begin(9600);

to:

 Serial1.begin(115200);

please tell me exactily in dot points what i have to do with the 0 and 1 pins and the firmware because i tried to flash the firmware but it doesnt seem to recognise it

You don't need to do anything with the 0 and 1 pins. You just plug the shield into your Leonardo and they will be connected.

What do you mean by "flash the firmware"? Are you talking about the firmware on the ESP8266 or uploading a sketch to the Leonardo?

so how do i include the librarys of that WifiEsp pack in arduino and import the code for the example sketch and soz im new to arduino its for school and the teacher is new too please help me i still havent got it working

  1. Attach the shield to your Leonardo by aligning the pins on the bottom of the shield with the female headers on the Leonardo and pressing it down as far as it will go.
  2. Turn the two switches in the blue plastic box on the shield to the on position.
  3. Connect the Leonardo to your computer using a USB cable.
  4. Select Tools > Board > Arduino AVR Boards > Arduino Leonardo from the Arduino IDE menus.
  5. Select the port of your Leonardo from the Tools > Port menu in the Arduino IDE.
  6. Download this file: https://github.com/bportaluri/WiFiEsp/archive/v2.2.1.zip
  7. Select Sketch > Include Library > Add .ZIP Library from the Arduino IDE menus.
  8. Select the downloaded file.
  9. Click the OK button.
  10. Select the example sketch you want to use from the File > Examples > WiFiEsp menu in the Arduino IDE.
    (I recommend WebServerLed)
  11. Change lines 20 and 21 to match the credentials of your Wi-Fi router.
  12. Change line 35 of the example sketch to:
    Serial1.begin(115200);
    
  13. At line 37 add:
    while(!Serial){}
    
  14. Select Tools > Serial Monitor from the Arduino IDE menus.
  15. Select "115200" from the baud rate menu at the bottom right corner of the Serial Monitor window.
  16. Close Serial monitor
  17. Select Sketch > Upload from the Arduino IDE menus.
  18. Wait for the upload to complete
  19. Select Tools > Serial Monitor from the Arduino IDE menus.
  20. After connecting to the network the IP address of your Arduino will be shown in the Serial Monitor. Copy and paste this IP address in to the URL bar on your browser and press Enter.
  21. A web page will load that allows you to control the LED on your Leonardo.
    This LED will be a little hard to see because it's covered by the duinotech WiFi shield but it's near the power jack on the Leonardo.

Note that the code I instructed you to add at line 37 will prevent the sketch from running until the Serial Monitor is opened. This was necessary in order for you to get the Serial Monitor open in time to see the IP address but if you later want to run the sketch without opening the Serial Monitor you should comment out that line.

thanks very much for the instructions but...
i got this instead

[WiFiEsp] >>> TIMEOUT >>>
[WiFiEsp] No tag found
WiFi shield not present

oh and on top of that is there a way to connect this ESP to a WPA2-Enterprise Network like a school network for e.g

and is it normal for that light on the top board just to be solid red and no blue light? because instantly i thought it was fried when i got it out of the box

the code used was the edited one you told me to edit

/*
 WiFiEsp example: WebServerLed
 
 A simple web server that lets you turn on and of an LED via a web page.
 This sketch will print the IP address of your ESP8266 module (once connected)
 to the Serial monitor. From there, you can open that address in a web browser
 to turn on and off the LED on pin 13.

 For more details see: http://yaab-arduino.blogspot.com/p/wifiesp.html
*/

#include "WiFiEsp.h"

// Emulate Serial1 on pins 6/7 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(6, 7); // RX, TX
#endif

char ssid[] = "Test";            // your network SSID (name)
char pass[] = "12345678";        // your network password
int status = WL_IDLE_STATUS;

int ledStatus = LOW;

WiFiEspServer server(80);

// use a ring buffer to increase speed and reduce memory allocation
RingBuffer buf(8);

void setup()
{
  Serial.begin(115200);   // initialize serial for debugging
  Serial1.begin(115200);    // initialize serial for ESP module
  WiFi.init(&Serial1);    // initialize ESP module

  while(!Serial){}    //wont run toll serial monitor is opened
  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }

  // attempt to connect to WiFi network
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  Serial.println("You're connected to the network");
  printWifiStatus();
  
  // start the web server on port 80
  server.begin();
}


void loop()
{
  WiFiEspClient client = server.available();  // listen for incoming clients

  if (client) {                               // if you get a client,
    Serial.println("New client");             // print a message out the serial port
    buf.init();                               // initialize the circular buffer
    while (client.connected()) {              // loop while the client's connected
      if (client.available()) {               // if there's bytes to read from the client,
        char c = client.read();               // read a byte, then
        buf.push(c);                          // push it to the ring buffer

        // printing the stream to the serial monitor will slow down
        // the receiving of data from the ESP filling the serial buffer
        //Serial.write(c);
        
        // you got two newline characters in a row
        // that's the end of the HTTP request, so send a response
        if (buf.endsWith("\r\n\r\n")) {
          sendHttpResponse(client);
          break;
        }

        // Check to see if the client request was "GET /H" or "GET /L":
        if (buf.endsWith("GET /H")) {
          Serial.println("Turn led ON");
          ledStatus = HIGH;
          digitalWrite(13, HIGH);
        }
        else if (buf.endsWith("GET /L")) {
          Serial.println("Turn led OFF");
          ledStatus = LOW;
          digitalWrite(13, LOW);
        }
      }
    }
    
    // close the connection
    client.stop();
    Serial.println("Client disconnected");
  }
}


void sendHttpResponse(WiFiEspClient client)
{
  // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
  // and a content-type so the client knows what's coming, then a blank line:
  client.println("HTTP/1.1 200 OK");
  client.println("Content-type:text/html");
  client.println();
  
  // the content of the HTTP response follows the header:
  client.print("The LED is ");
  client.print(ledStatus);
  client.println("
");
  client.println("
");
  
  client.println("Click <a href=\"/H\">here</a> turn the LED on
");
  client.println("Click <a href=\"/L\">here</a> turn the LED off
");
  
  // The HTTP response ends with another blank line:
  client.println();
}

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 where to go in the browser
  Serial.println();
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
  Serial.println();
}

I own two of these shields but I bought them from Aliexpress for $7 USD with free shipping (what an absolute ripoff Jaycar is for charging a >$30 markup!!!). They came with this weird DOIT firmware, which is not compatible with the WiFiEsp library or any other library or example code I know of. I replaced that firmware with the standard Espressif AT firmware and was immediately able to successfully use the shield with the WiFiEsp library. My understanding from other people posting here about buying that shield from Jaycar is that it came with the AT firmware instead of the DOIT firmware and there is some evidence to support this in the description on the product page ("Simple AT command interface with Arduino main board", Manual is an AT command reference) but it also says "Web configuration interface" which would indicate the DOIT firmware. The firmware download link on that page includes the AT firmware and the DOIT firmware. So it's quite possible you have the DOIT firmware on your shield, which would cause the error you're seeing when trying to use the WiFiEsp library. You can check by following the instructions for the DOIT firmware here:
https://fineshang.gitbooks.io/esp8266-based-serial-wifi-shield-for-arduino-user/content/chapter4.html

what... i never got a "DoitWiFi_Config" when i put together the first time and i tried flashing new firmware on it and it only made the RX light blink it didnt do anything and i tried that web page and i tried this on 4 other computers. when i press the "KEY" button for 3 seconds and i type "!@!" in the serial monitor it gave me a blue screen on 4 DIFFERENT COMPUTERS!?!?!?! serously i hate this thing but i want to pass my subject and i honestly have no idea what the hell is going on with this thing its like i got a stack of paper that was shredded and cant get a refund... im almost loosing it

OfficialEnlightGames:
i tried flashing new firmware on it and it only made the RX light blink it didnt do anything

Please give more details of what you did

this was when i didnt know about jaycars failed attempt to provide me with correct firmware

As I said, it's not clear to me which firmware your shield was shipped with from reading the product page. I certainly prefer the AT firmware and it was a bit of a pain figuring out how to install the AT firmware. You could contact Jaycar customer service and ask them which firmware the shield has but if you have changed that firmware then it's irrelevant at this point. I do think you should be able to expect a certain level of support from Jaycar since they have charged so much more than the going rate for this product, that money should buy you something extra and I wouldn't say their documentation justifies it since it's pretty much just a rehash of the official AT command reference.

I GOT IT... OH MY GOD I DONT KNOW HOW BUT I GOT IT... YES THANKS SO MUCH PERT

EDIT: it stopped working again shield not present
EDIT: sorry again i figured it out why it refused to work because the "initialize ESP" was set to 9600 instead of 115200 well thanks for the help PERT much appreciated

Hi there, after a couple of days of hair pulling, I found this thread and some other similar ones on the site. I created a login on arduino.cc specifically to thank pert for helping out with a shield that generates so much conflicting advice, blog posts and dummy spits.

I am now to the point where I can run the WebServerLed on the jaycar/duinotech ESP-13 shield and a rev 3 Uno. There will be celebrations tonight.

I would like to ask a couple of questions.

My shield came with firmware that reported the AI_something AP SSID by default. It responds OK to AT but I can t visit it's advertised 192.168.4.1 web interface. Connection to that page times out although host is pingable. Do I need this web interface (for example to slow the interface - see SoftwareSerial question below)? Should I refflash the firmware? I. Plan to use the AT command set but am not sure if there is a 'best' firmware image for driving with AT commands.

I have turned down the debug on WiFiEsp to none.

When I run SoftwareSerial at 115200 on Uno pins 6,7 communicating to shield D0, D1 (not stacked, dip switches set) and report debug info over HW/USB Serial to the monitor, I see some pretty wild ascii at times (eg, the reported ssid will have 8 out of 10 characters correct). Am I barking up the wrong tree to simultaneously attempt reliable Comms with unstacked shield and readable debug? Does sw serial run reliably at 115200? Short of using the shield's unavailable web interface, can I dial down the shield serial speed to something that might reduce errors?

Lastly, in my search for anything that works today, I upped the HardwareSerial Tx and Rx buffers to 256 bytes in the HardwareSerial.h header file. Nothing I've seen here suggests that to be necessary and it's a bit chunk of the Uno's ram. Should I roll that back?

Thanks again!

Matt

hi pert i just got a new arduino uno r3 which can be found here: https://www.jaycar.com.au/duinotech-classic-uno/p/XC4410

i retried the prosess with the serial and serial1 thing and set the both to 115200 and they dip switches are on but i noticed that when both RX and TX off i get this:

Sketch uses 14550 bytes (45%) of program storage space. Maximum is 32256 bytes.
Global variables use 1035 bytes (50%) of dynamic memory, leaving 1013 bytes for local variables. Maximum is 2048 bytes.
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x5b
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x57
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x69
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x46
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x69
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x45
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x73
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x70
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x5d
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x20
An error occurred while uploading the sketch

these arduino things are quite interesting but stressful when it comes to handling with code
by the way the code i used for the arduino was:

/*
 WiFiEsp example: WebServerAP

 A simple web server that shows the value of the analog input 
 pins via a web page using an ESP8266 module.
 This sketch will start an access point and print the IP address of your
 ESP8266 module to the Serial monitor. From there, you can open
 that address in a web browser to display the web page.
 The web page will be automatically refreshed each 20 seconds.

 For more details see: http://yaab-arduino.blogspot.com/p/wifiesp.html
*/

#include "WiFiEsp.h"

// Emulate Serial1 on pins 6/7 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(6, 7); // RX, TX
#endif

char ssid[] = "TwimEsp";         // your network SSID (name)
char pass[] = "12345678";        // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status
int reqCount = 0;                // number of requests received

WiFiEspServer server(80);

// use a ring buffer to increase speed and reduce memory allocation
RingBuffer buf(8);

void setup()
{
  Serial.begin(115200);   // initialize serial for debugging
  Serial1.begin(115200);    // initialize serial for ESP module
  WiFi.init(&Serial1);    // initialize ESP module

  while(!Serial){}
  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi Shield Not Detected On Your Arduino Uno");
    while (true); // don't continue
  }

  Serial.print("Attempting to start AP ");
  Serial.println(ssid);

  // uncomment these two lines if you want to set the IP address of the AP
  //IPAddress localIp(192, 168, 111, 111);
  //WiFi.configAP(localIp);
  
  // start access point
  status = WiFi.beginAP(ssid, 10, pass, ENC_TYPE_WPA2_PSK);

  Serial.println("Access point started");
  printWifiStatus();
  
  // start the web server on port 80
  server.begin();
  Serial.println("Server started");
}


void loop()
{
  WiFiEspClient client = server.available();  // listen for incoming clients

  if (client) {                               // if you get a client,
    Serial.println("New client");             // print a message out the serial port
    buf.init();                               // initialize the circular buffer
    while (client.connected()) {              // loop while the client's connected
      if (client.available()) {               // if there's bytes to read from the client,
        char c = client.read();               // read a byte, then
        buf.push(c);                          // push it to the ring buffer

        // you got two newline characters in a row
        // that's the end of the HTTP request, so send a response
        if (buf.endsWith("\r\n\r\n")) {
          sendHttpResponse(client);
          break;
        }
      }
    }
    
    // give the web browser time to receive the data
    delay(10);

    // close the connection
    client.stop();
    Serial.println("Client disconnected");
  }
}

void sendHttpResponse(WiFiEspClient client)
{
  client.print(
    "HTTP/1.1 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Connection: close\r\n"  // the connection will be closed after completion of the response
    "Refresh: 20\r\n"        // refresh the page automatically every 20 sec
    "\r\n");
  client.print("<!DOCTYPE HTML>\r\n");
  client.print("<html>\r\n");
  client.print("<h1>Hello World!</h1>\r\n");
  client.print("Requests received: ");
  client.print(++reqCount);
  client.print("
\r\n");
  client.print("Analog input A0: ");
  client.print(analogRead(0));
  client.print("
\r\n");
  client.print("</html>\r\n");
}

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

  // print where to go in the browser
  Serial.println();
  Serial.print("To see this page in action, connect to ");
  Serial.print(ssid);
  Serial.print(" and open a browser to http://");
  Serial.println(ip);
  Serial.println();
}

as you can see from this code the serial and serial1 are both set to 115200 but they dont work and i used the example before i changed the serial1 to 115200 and after but it seems to not like me and i have no idea why but its driving me insane.

please help me...

  • Josh

nannerbm:
I created a login on arduino.cc specifically to thank pert for helping out with a shield that generates so much conflicting advice, blog posts and dummy spits.

I'm glad if I'm able to be helpful.

nannerbm:
My shield came with firmware that reported the AI_something AP SSID by default. It responds OK to AT but I can t visit it's advertised 192.168.4.1 web interface. Connection to that page times out although host is pingable. Do I need this web interface (for example to slow the interface - see SoftwareSerial question below)? Should I refflash the firmware?

There are two different firmwares these shields come with: DOIT and AT. The shields I bought from Aliexpress about a year ago came with the DOIT firmware installed. Posts on this forum indicate that the shields purchased from Jaycar come with the AT firmware. Since you are able to sent AT commands to your shield that shows it has the AT firmware installed. The link I previously posted (Quick Start | ESP8266-Based Serial WiFi Shield for Arduino----User Manual), which mentions the web configuration of the shield by connecting to the AP and opening 192.168.4.1 is specifically for the DOIT firmware and thus doesn't apply to you as long as you are using the AT firmware. You can do any necessary configuration of your shield by using the appropriate AT commands or the WiFiEsp library.

nannerbm:
Should I refflash the firmware? I. Plan to use the AT command set but am not sure if there is a 'best' firmware image for driving with AT commands.

There are two different "flavors" of the AT firmware. AI-thinker and Espressif. Espressif is the manufacturer of the ESP8266, AI-Thinker is the manufacturer of the ESP8266 modules. I don't have a lot of knowledge on the differences between the two. I haven't found any official information on the AI-Thinker firmware. AI-Thinker's website is in Chinese and Google Translate doesn't work on it. Espressif provides fairly good documentation of their firmware. My understanding is the AI-Thinker has additional AT commands that allow you to control the GPIO pins of the ESP8266. I don't see that feature as being terribly useful because it's much easier to just use the pins on the Arduino. Other than that they should be interchangeable for the most part. I have used the WiFiEsp library with the AI-Thinker AT firmware that came on a different style of ESP8266 shield I bought about a year ago. I have also used it with a fairly recent version of the Espressif AT firmware I installed on my DOIT shield (AKA "duinotech"). The WiFiEsp library does specify a minimum AT firmware version. I'm not sure whether the two flavors follow a similar versioning scheme. My preference is to always use the latest Espressif firmware but if the one you have is working for you already it might be best to leave it as is for now to avoid any unnecessary complications. You can use an AT command to do an OTA firmware update. Espressif waits a while to make their latest firmware available via OTA updates to make sure it's stable so you may not get the new and shiny unless you do a manual update, which is significantly more complex. Jaycar does provide a download with AT and DOIT firmwares and the update tool and instructions. I haven't looked closely to see what exactly this is.

nannerbm:
When I run SoftwareSerial at 115200 on Uno pins 6,7 communicating to shield D0, D1 (not stacked, dip switches set) and report debug info over HW/USB Serial to the monitor, I see some pretty wild ascii at times (eg, the reported ssid will have 8 out of 10 characters correct). Am I barking up the wrong tree to simultaneously attempt reliable Comms with unstacked shield and readable debug?

That's a reasonable approach. It's nice to be able to get some debug output instead of working blind but there are some drawbacks. The SoftwareSerial library does use more memory and slows things down and you lose two pins.

nannerbm:
Does sw serial run reliably at 115200?

I haven't used SoftwareSerial but my understanding is it does not run reliably at 115200, which is the default baud rate of the shield.

nannerbm:
Short of using the shield's unavailable web interface, can I dial down the shield serial speed to something that might reduce errors?

Yes, there are AT commands that allow you to change the speed. I'm referring to the user manual linked from the Jaycar product page as that has the best chance of applying to the firmware their shield ships with:
https://www.jaycar.com.au/medias/sys_master/images/8936207220766/XC4614-manualMain.pdf
It says you use the AT+IPR command to change the baud rate. This is disturbing to me because recent versions of Espressif AT firmware use "AT+UART_CUR" or "AT+UART_DEF" for this, which indicates there are significant differences between the AI-Thinker firmware and the Espressif firmware.

nannerbm:
Lastly, in my search for anything that works today, I upped the HardwareSerial Tx and Rx buffers to 256 bytes in the HardwareSerial.h header file. Nothing I've seen here suggests that to be necessary and it's a bit chunk of the Uno's ram. Should I roll that back?

Since you're using SoftwareSerial I don't think that is necessary.