Hello friends, I hope you all are doing great. Today, I am going to share the ESP8266 WiFi Shield Library for Proteus. It brings the popular ESP8266 ESP-12E UART WiFi Shield to Proteus: the black shield that plugs on an Arduino UNO and gives it Wi-Fi through AT commands. Your UNO sketch sends AT+CWJAP, AT+CIPSERVER or AT+CIPSTART over its serial port, and the shield joins a router, serves web pages, uploads to the cloud and talks UDP with other boards, right inside the simulation.

Updates

ESP8266 WiFi Shield Library for Proteus

Latest version: V1.0 (October 2026, this tutorial)

Other ESP8266 modules: ESP-01 · ESP-01S · ESP-07 · ESP-01 Adapter · NodeMCU

ESP32 boards: ESP32 DevKit V1 · ESP32-DevKitC V4 · ESP32-S3 DevKitC-1 · ESP32-C3 SuperMini · TTGO T-Display

Helping Tools

  • Laptop WiFi Monitor: a laptop on the Wi-Fi of your design: a browser, a TCP / UDP terminal and ping
  • Mobile WiFi Monitor: a smartphone that opens the pages of your Wi-Fi module and sends it commands
  • Serial Monitor Advance: a serial terminal window for the UART of your board

This is the sixth library of our Wi-Fi series and the first shield of it, after five ESP32 boards. The shield runs the same AT firmware model as our ESP-01 Library for Proteus, so everything you know from the ESP-01 works here too - but on a real shield board with its DIP switches, the ESP RST button and four status LEDs. As always, the demos end with a project that links this module with the previous one: our TTGO T-Display.

NOTICE: real ESP8266 shields differ between makers: the number of switches, which switch does what, the LEDs and the buttons. Ours follows the common 4-switch version with PWR, DFU, AP and STA LEDs. Check the silkscreen of your board before you copy a switch setting. Your feedback is the fuel that keeps us going, so please tell us what you think in the comments below or in the ESP8266 WiFi Shield board of our forum. And if our free libraries help you, you can buy us a coffee. So, let's get started with the ESP8266 WiFi Shield Library for Proteus:

Figure: The ESP8266 WiFi Shield Library for Proteus: the shield (U1) and our Arduino UNO V4.0 running the web server demo - the shield's STA LED shows it is on Wi-Fi, the UNO's LED was switched on from a phone.

What is the ESP8266 ESP-12E UART WiFi Shield?

The ESP8266 ESP-12E UART WiFi Shield is an Arduino UNO shield built around an ESP-12E module - the ESP8266 Wi-Fi chip with its flash, crystal and PCB antenna under a metal can. The shield adds a 3.3 V regulator for the module, a level shifter between its 3.3 V serial lines and the UNO's 5 V pins, a 4-way DIP switch that decides where the module's serial port goes, a reset button for the ESP-12E and a few LEDs. It ships with the Espressif AT firmware, so the UNO does not need any Wi-Fi library: it simply writes text commands to the serial port and reads the answers.

The real shield and the shield in Proteus
Real ESP-12E UART WiFi ShieldThis library in Proteus
Wi-Fi chipESP8266 in an ESP-12E module, AT firmwareour AT firmware 1.7.4 model at the UART
Connection to the UNOD0 / D1 through DIP switches 1 and 2the same: the pins D0 and D1, switches 1 and 2
Debug portTX / RX through switch 3the DEBUG header, switch 3
Flash modeDFU (GPIO0 low), switch 4 or a buttonswitch 4, the DFU LED, FLASH MODE after a reset
LEDspower and status LEDs (they vary)PWR, DFU, AP, STA, the module's blue LED
Wi-Fi802.11 b/g/n, station and soft APa virtual router, DHCP, TCP, UDP, a phone, an internet host
Sizethe UNO's outlinethe UNO's outline, next to our UNO V4.0

The DIP Switches

The four switches are the heart of this shield. The ESP-12E has one serial port, and the switches route it:

The switches of our shield (the default setting is 1100: 1 and 2 on)
SwitchONOFF
1the ESP-12E's TX reaches the UNO's D0 (RX)D0 is free for the UNO
2the UNO's D1 (TX) reaches the ESP-12E's RXD1 is free
3the ESP-12E's UART goes to the DEBUG headerthe DEBUG header is not connected
4 (DFU)GPIO0 low: flash mode at the next reset, the DFU LED onnormal start: the AT firmware runs

Why would you ever switch 1 and 2 off? Because D0 / D1 are also the UNO's USB serial port. On the bench you turn them off to upload a new sketch, and on again to run it. And while the shield owns D0 / D1, the serial monitor cannot be used for your own messages - the shield would read them as commands. That is what switch 3 is for: with 1 and 2 off and 3 on, you can wire the DEBUG header to two other pins and keep D0 / D1 for the monitor. Our second demo does exactly that.

AT Commands in One Minute

Every command starts with AT and ends with a carriage return and a line feed; the shield answers with lines and a final OK or ERROR. A web server takes five commands: ATE0 (no echo), AT+CWMODE=1 (station), AT+CWJAP="ssid","password" (join), AT+CIPMUX=1 (several connections) and AT+CIPSERVER=1,80. A request then arrives as +IPD,0,length:GET / HTTP/1.1, and the sketch answers with AT+CIPSEND=0,length, waits for the > prompt and sends the page.

Features of the ESP8266 WiFi Shield Library for Proteus

  • The ESP-12E UART WiFi Shield at the UNO's size: the stacking headers with the UNO's labels, the ESP-12E module with its metal can and meander antenna, the DIP switch, ESP RST and the LEDs.
  • Working DIP switches: click them on the board or in the panel - D0 / D1, the DEBUG header and DFU act at once.
  • Working LEDs: PWR, DFU, AP (soft AP mode) and STA (blinks while joining, on with an IP address); the module's blue LED flashes at boot.
  • A live antenna: orange while the shield sends, green while it receives.
  • The AT firmware 1.7.4 of our ESP-01 model: Wi-Fi join and scan, TCP and UDP, the server, +IPD, CIPSEND, UART_CUR, SNTP, PING and more.
  • Wi-Fi in Proteus: a virtual router with DHCP, a phone that opens your web page, an internet host for ThingSpeak-style uploads, and TCP / UDP to every TEP Wi-Fi part in the design.
  • Our pop-up panel: the phone, the shield's cards with the switches, a Test page with four measuring tools, Settings and Help.
  • Three demo projects with our Arduino UNO V4.0: a web server on D0 / D1, a cloud logger on the DEBUG header, and a UDP temperature node with the TTGO T-Display.
  • A compact package: about 2.61 MB, without the C++ source code of the models.

The ESP8266 WiFi Shield Part in Proteus

Figure: The part as the library draws it: the UNO shield outline, D0 and D1 on the digital header, 5V and GND on the power header, the DEBUG TX / RX top left; the DIP switch, ESP RST, the LEDs, the PANEL pad and the ESP-12E.

Search WIFI SHIELD in Pick Devices; the device is ESP-12E WIFI SHIELD in TEPESP12ESHIELD.LIB. A shield cannot sit on top of the UNO in Proteus, so the part has the same outline and headers but stands next to the UNO, and only the pins the shield really uses are Proteus pins: D0 and D1, 5V and GND, and the TX / RX of the DEBUG header. The other header holes are drawn only. Click the PANEL pad or the ESP-12E module to open the panel.

Figure: The shield placed in a design, before Run: switches 1 and 2 on (up), 3 and 4 off, every LED off.

Every State of the Shield

We ran the web server demo and paused the simulation for each picture. At Run the shield powers up and the ESP-12E boots:

Figure: Booting: the red PWR LED on and the ESP-12E's own blue LED (next to the antenna) flashing, as the real module does at boot.
Figure: Joining: the UNO sent AT+CWJAP - the blue STA LED blinks and the antenna is orange (the shield is sending).
Figure: On Wi-Fi: the STA LED stays on, the antenna is back to gold.

While data flows, the antenna shows its direction:

Figure: Receiving: the antenna turns green - here the internet host's answer to an upload.
Figure: Sending: orange - an upload going out.
Figure: OUT OF RANGE on the panel's phone: the shield lost the router, the STA LED is off. The AT firmware joins again by itself when the signal is back.

The Switches and ESP RST at Work

Click a switch on the board (or in the panel's Switches row) and it flips at once. ESP RST is held while you hold the mouse button:

Figure: ESP RST held: the ESP-12E in reset - only PWR is lit. After the release it boots again and forgets its server; the demo's sketch notices within 30 s and sets it up again.
Figure: Switch 4 (DFU) on, then a reset: the orange DFU LED is on and the ESP-12E starts in its flash (download) mode - the AT firmware does not run.
Figure: All four switches off: the shield stays on Wi-Fi, but the UNO can no longer reach it.

Two more states come from our second demo, where switch 3 is on and the sketch passes AT commands from the serial monitor:

Figure: Switch 3 on, 1 and 2 off: the ESP-12E's UART on the DEBUG header (wired to the UNO's D8 / D9), on Wi-Fi.
Figure: After AT+CWMODE=3 (station + soft AP) typed in the monitor: the green AP LED lights.

Download ESP8266 WiFi Shield Library for Proteus

Click the button below to download ESP8266-WiFi-Shield-Library-for-Proteus-v1.0.zip (about 2.61 MB, without the C++ source code of the models):

ESP8266 WiFi Shield Library for Proteus V1.0
  • README.txt: the device, installation, the three demos, the pins, the properties, troubleshooting and the limits.
  • Proteus Library Files: TEPESP12ESHIELD.LIB (the shield), ArduinoV4TEP.LIB (our Arduino boards V4.0 - the UNO of the demos) and TEPTDISPLAY.LIB (our TTGO T-Display, for the third demo).
  • Proteus Model Files: TEPNET.DLL (the shield and the Wi-Fi network) and TEPARDUINO.DLL (the Arduino boards).
  • Proteus Simulation: the three demo projects, their HEX files and copies of the DLLs.
  • Arduino Code: the four demo sketches and our TEP Boards for Proteus add-on, needed only to rebuild the T-Display's sketch. AltSoftSerial and the Adafruit libraries are not included - install them from the Library Manager.

No Proteus yet? Read How to Download and Install Proteus 7 and 8. New to libraries? Follow How to Install a New Library in Proteus.

How to Install ESP8266 WiFi Shield Library for Proteus

  1. Close Proteus and extract the whole zip file, for example to your Desktop.
  2. Copy the three files from Proteus Library Files into the LIBRARY folder of Proteus (usually C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY).
  3. Copy TEPNET.DLL and TEPARDUINO.DLL from Proteus Model Files into the MODELS folder - replace older copies (the new TEPNET.DLL still runs all our ESP32 boards and the ESP-01).
  4. Delete TEPESP12ESHIELD.IDX, ArduinoV4TEP.IDX and TEPTDISPLAY.IDX from the LIBRARY folder if they are there.
  5. Start Proteus, press P and search for WIFI SHIELD.

The UNO sketches need nothing special: select Arduino Uno in the Arduino IDE (plus AltSoftSerial for the second demo), write your sketch and use Sketch > Export Compiled Binary; then double-click the UNO in Proteus and set its Program File to the HEX (see How to get the HEX file from Arduino).

Demo 1: A Web Server on D0 / D1

Figure: The web server demo: our UNO V4.0 (ARD1) and the shield (U1) joined by the labels ESP_TX (D0) and ESP_RX (D1), the shield's 5V to VCC, a 10k pot RV1 on A0.

Open ESP-12E-WiFi-Shield-Web-Server.pdsprj. It is wired the way the real shield is stacked: the shield's D0 to the UNO's D0 and D1 to D1, switches 1 and 2 on. The UNO is our Arduino UNO Library for Proteus V4.0, with its built-in serial monitor set to 115200 baud. The sketch, Shield_Web_Server.ino, talks to the shield on the UNO's hardware serial port at the AT firmware's factory speed:

  Serial.begin(115200);                // D0 / D1: the shield's AT firmware speed

Every command goes through one small function: print the command, wait for an expected line, then for OK:

bool command(const char* at, unsigned long ms = 2000, const char* want = NULL, char* out = NULL, byte size = 0) {
  Serial.print(at);
  Serial.print(F("\r\n"));
  if (want && !waitFor(want, ms, out, size)) return false;
  return waitFor("OK", ms);
}

At start-up the sketch waits until the shield answers AT - the UNO's LED blinks fast meanwhile, so a wrong switch setting is easy to see - and then sets it up as a station with a web server on port 80:

void setupShield(bool afterRestart) {
  command("ATE0");                     // no echo
  command("AT+CWMODE=1");              // station (joins a router)
  bool joined = command("AT+CWJAP?", 2000, "+CWJAP:");
  for (byte i = 0; i < 4 && !joined && afterRestart; ++i) {   // after a restart its auto-connect re-joins the saved network
    delay(500);
    joined = command("AT+CWJAP?", 1000, "+CWJAP:");
  }
  if (!joined) {
    char join[64];
    snprintf_P(join, sizeof(join), PSTR("AT+CWJAP=\"%s\",\"%s\""), WIFI_SSID, WIFI_PASS);
    command(join, 20000);
  }
  command("AT+CIPMUX=1");              // several connections - needed for the server
  command("AT+CIPSERVER=1,80");
}

Press Run. The UNO's monitor shows what the UNO sends to the shield, because the monitor listens on D1 - every AT command of the set-up, in order:

Figure: The UNO's monitor at 115200 baud: the seven commands that found the shield, joined TEP-WiFi and started the server.
AT
ATE0
AT+CWMODE=1
AT+CWJAP?
AT+CWJAP="TEP-WiFi","12345678"
AT+CIPMUX=1
AT+CIPSERVER=1,80

Now open the shield's panel, tap OPEN ESP PAGE on its phone, then LED ON:

Figure: The phone with the UNO's page from 192.168.1.101: LED (D13) is OFF, the links LED ON, LED OFF and READ, Pot on A0: 2.00 V (410), the uptime and the page number.
Figure: After LED ON: the page says LED (D13) is ON - the UNO's green L LED is lit (see the first picture of this article).

Each request reaches the sketch as +IPD data; it switches the LED and answers with AT+CIPSEND, the page and AT+CIPCLOSE:

    if (!strcmp(path, "/led/on")) digitalWrite(LED_PIN, HIGH);
    if (!strcmp(path, "/led/off")) digitalWrite(LED_PIN, LOW);
  Serial.print(F("AT+CIPSEND="));
  Serial.print(link);
  Serial.print(',');
  Serial.print(strlen(page));
  Serial.print(F("\r\n"));
  bool sent = waitFor(">", 2000);
  if (sent) { Serial.print(page); sent = waitFor("SEND OK", 5000); }
Figure: The monitor during the two requests: AT+CIPSEND=0,333, the HTTP header and the page (LED is OFF), then AT+CIPSEND=0,332 and the page with LED is ON.
AT+CIPSERVER=1,80
AT+CIPSEND=0,333
HTTP/1.1 200 OK
Content-Type: text/html
Connection: close

Notice one thing: you cannot type commands in the UNO's monitor in this demo. The shield drives D0, the UNO's receive line, so it is the only one the UNO hears - exactly as on the real stacked shield. For the monitor, use the DEBUG header (demo 2).

The Shield's Panel

The panel opens at Run, in the look of our TEP Serial Monitor Advance for Proteus. The Wi-Fi page holds the phone and three cards; the first card, ESP-12E SHIELD, ends with the Switches row: D0, D1, DEBUG and DFU (lit = on) and ESP RST. They work exactly like the parts on the board.

Figure: The Wi-Fi page after the set-up: the firmware AT 1.7.4.0, station mode, 115200 bps, the server on port 80; the switches D0 and D1 on; connected to TEP-WiFi in 2.18 s.
Figure: After DFU and ESP RST: FLASH MODE - DFU SWITCH ON on the phone, the Power row in red.
Figure: All switches off: the buttons grey and the status bar says UART off (DIP) - the shield is still on Wi-Fi, but no UNO can reach it.
Figure: OUT OF RANGE: the shield's card turns red and the WI-FI card shows out of range.

The Test page measures the running model. The Wi-Fi join test made the shield leave and re-join the router three times, and the web request test opened the page three times:

Figure: Wi-Fi join test: 3 re-joins, WIFI GOT IP after 2.30 to 3.00 s (association plus DHCP).
Figure: Web request test: 3 of 3 answered, 72 ms for the full page of 334 bytes - most of it the UNO reading +IPD and sending the page.
Figure: Settings: TEP Dark or Light, the text size, open the panel at Run, the window size.
Figure: Help: report a bug, suggest a feature, the article, the user guide, updates, donate, the website, the forum; Copy diagnostics.

Demo 2: A Cloud Logger on the DEBUG Header

Figure: The second demo: the shield's DEBUG TX to the UNO's D8 and DEBUG RX to D9 (the labels DBG_TX / DBG_RX), switch 3 on; RV1 on A0.

ESP-12E-WiFi-Shield-Debug-Cloud.pdsprj uses the shield the other way: switches 1 and 2 off, switch 3 on, and two jumper wires from the DEBUG header to the UNO's D8 and D9. Now D0 / D1 belong to the UNO's serial monitor again (9600 baud), and the shield talks to AltSoftSerial - the software serial port that can receive in Proteus:

AltSoftSerial esp;                     // RX = D8 (from DEBUG TX), TX = D9 (to DEBUG RX)
SoftwareSerial espFast(12, 9);         // only sends one command at 115200 on D9 (D12 unused)

A software port cannot receive at 115200 bps, so the sketch sends one command at that speed with SoftwareSerial - AT+UART_CUR=9600 - and then talks at 9600:

  esp.end();                           // D9 to SoftwareSerial for one command
  espFast.begin(115200);               // the ESP-12E's factory speed
  espFast.print(F("AT+UART_CUR=9600,8,1,0,0\r\n"));
  espFast.end();
  esp.begin(9600);                     // AltSoftSerial takes D9 over

Every 20 seconds it uploads the pot on A0 to an IoT channel with a plain HTTP GET in the style of ThingSpeak's update API. In Proteus the virtual internet host answers with the entry number:

  snprintf_P(request, sizeof(request), PSTR("GET /update?api_key=%s&field1=%lu&field2=%d HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n"),
             API_KEY, uptime, a0, HOST);
Figure: The UNO's monitor: the shield found on the DEBUG header, joined, and the first two uploads stored as entries 1 and 2.
UNO + ESP-12E WiFi Shield (DEBUG header): cloud upload
www.TheEngineeringProjects.com
Shield found on the DEBUG header, now at 9600 bps
Joining TEP-WiFi... connected
Uploading A0 to api.thingspeak.com every 20 s
Serial monitor: AT... (to the shield), STATUS, UPLOAD, HELP
Upload 1: uptime 5 s, A0 = 410, entry 1
Upload 2: uptime 26 s, A0 = 410, entry 2

Any line that starts with AT goes to the shield as it is, and its answer comes back - so the monitor is also an AT terminal:

  if ((text[0] == 'A' || text[0] == 'a') && (text[1] == 'T' || text[1] == 't')) {
    Serial.print(F("> "));
    Serial.println(text);
    esp.print(text);

We typed AT+GMR, AT+CWMODE=3 and STATUS. The AP LED lit on the shield (see above):

Figure: AT+GMR: AT version 1.7.4.0 and SDK 3.0.4; AT+CWMODE=3: OK; STATUS: the uploads, A0 and the Wi-Fi.
AT+GMR
> AT+GMR
  < AT version:1.7.4.0(May 11 2020 19:13:04)
  < SDK version:3.0.4(9532ceb)
  < compile time:May 27 2020 10:12:17
  < Bin version(Wroom 02):1.7.4
  < OK
AT+CWMODE=3
> AT+CWMODE=3
  < OK
STATUS
Figure: The phone's CLOUD tab: the internet host with the updates stored, the last field1 (uptime) and field2 (A0 = 410), a chart of the uploads; the switches row shows DEBUG on.
Figure: Cloud upload check: 2 uploads stored, 0 refused, 20.0 s apart, about 530 ms from CIPSTART to CLOSED per upload.
Figure: AT check: the shield's settings read with its own queries (AT+GMR, CWMODE, CWJAP, CIFSR, UART_CUR ...) and the last commands from the UNO with their response times.

Demo 3: The Shield Sends Temperatures to the TTGO T-Display

Now the shield meets the previous library of the series, our TTGO T-Display ESP32 Library for Proteus. In ESP-12E-WiFi-Shield-and-T-Display-UDP.pdsprj the UNO and the shield (U2, 192.168.1.102) are a small temperature node - the pot on A0 stands for a sensor, 0 to 50.0 C - and the T-Display (U1, 192.168.1.101) is its display and remote. They talk UDP on port 4210, both ways.

Figure: The project: U1 the TTGO T-Display, ARD1 the UNO with RV1 on A0 at 70 % (35.0 C), U2 the shield on D0 / D1.

The UNO opens one UDP link to the T-Display, with its own local port 4210 so that the T-Display can answer:

  snprintf_P(at, sizeof(at), PSTR("AT+CIPSTART=\"UDP\",\"%s\",%u,%u,0"), DISPLAY_IP, PORT, PORT);
  command(at, 5000);

Every second it sends the temperature, the fan (the UNO's LED on D13) and the AUTO mode. A UDP datagram with the AT firmware is AT+CIPSEND=length, the > prompt, the data and SEND OK:

bool sendText(const char* text) {
  char at[24];
  snprintf_P(at, sizeof(at), PSTR("AT+CIPSEND=%d"), (int)strlen(text));
  Serial.print(at);
  Serial.print(F("\r\n"));
  if (!waitFor(">", 1000)) return false;
  Serial.print(text);
  return waitFor("SEND OK", 2000);
}

With AUTO on, the UNO runs the fan from 30.0 C and stops it below 29.0 C; a datagram from the T-Display changes the mode:

    if (!strcmp(msg, "FAN ON")) { fan = true; autoMode = false; }
    else if (!strcmp(msg, "FAN OFF")) { fan = false; autoMode = false; }
    else if (!strcmp(msg, "AUTO ON")) autoMode = true;
    else if (!strcmp(msg, "AUTO OFF")) autoMode = false;

On the other side the T-Display listens on port 4210 with WiFiUDP, draws the temperature, a graph and the fan, and its two buttons send commands back:

void send(const char *text) {
  udp.beginPacket(node, PORT);
  udp.print(text);
  udp.endPacket();
  Serial.print("Sent to the UNO: ");
  Serial.println(text);
}

Press Run. The pot is at 70 %, so the UNO reports 35.0 C and, in AUTO, turns the fan on:

Figure: U1 at the start: 35.0 C, FAN ON and AUTO from the UNO, the bars red above the yellow 30 C line.
Figure: The UNO's monitor: the UDP link to 192.168.1.101:4210 and the datagrams - the data has no line end, so the next AT+CIPSEND follows on the same line.
AT+CWJAP="TEP-WiFi","12345678"
AT+CIPMUX=0
AT+CIPSTART="UDP","192.168.1.101",4210,4210,0
AT+CIPSEND=20
T=35.0 FAN=ON AUTO=1AT+CIPSEND=20

Then we typed fan off in the T-Display's monitor - the same as its BOOT button:

Figure: After fan off: the UNO switched its fan (D13) off and AUTO off, and answered at once - the display shows FAN OFF.
Figure: After fan on: FAN ON again, by hand (AUTO still off).
Figure: The T-Display's monitor: joined, listening on 4210, the UNO's state, then fan off, fan on and auto on with the UNO's answers.
TTGO T-Display: UNO temperature (UDP)
Connecting to TEP-WiFi.....
IP address: 192.168.1.101
Listening on UDP port 4210
From the UNO: T=35.0 FAN=ON AUTO=1
fan off
Sent to the UNO: FAN OFF
From the UNO: T=35.0 FAN=OFF AUTO=0
fan on
Sent to the UNO: FAN ON
From the UNO: T=35.0 FAN=ON AUTO=0
auto on
Sent to the UNO: AUTO ON
From the UNO: T=35.0 FAN=ON AUTO=1

The shield's panel shows the same exchange from its side - a UDP link, bytes in and out, the AT commands:

Figure: U2's panel: online as 192.168.1.102, CIPMUX 0 with one link, the datagrams counted in TRAFFIC, the last AT+CIPSEND.

Our earlier demos linked boards with HTTP, raw TCP and UDP between ESP32 boards; this one shows the classic shield way - an UNO that only speaks AT commands, talking UDP to an ESP32 board on the same network.

Pins of the ESP8266 WiFi Shield

The Proteus pins of the shield (the other header holes are drawn only)
PinWhat it is
D0the ESP-12E's TX through switch 1 - to the UNO's D0 (RX)
D1the ESP-12E's RX through switch 2 - from the UNO's D1 (TX)
TX / RX (DEBUG)the ESP-12E's TX / RX through switch 3
5V / GNDthe shield's supply

Properties of the Shield

Double-click the shield to change them; every run starts again from the properties
PropertyWhat it does
WIFISSID / WIFIPASSthe router in range (TEP-WiFi / 12345678)
BAUDthe factory UART speed (115200)
DIPthe switches at Run: 1100 (D0 / D1), 0010 (DEBUG), 1101 (with DFU) ...
PANELthe phone's tab at start (BROWSER, CLOUD, WIFI)
PAGEPORTthe port OPEN ESP PAGE opens (80)
CLOCKthe clock for SNTP: PC or a fixed start time

Troubleshooting

  • The UNO's LED blinks fast and nothing joins: switches 1 and 2 must be on, and the shield's D0 / D1 must reach the UNO's D0 / D1.
  • Typing in the monitor does nothing: with switch 1 on, the shield drives D0 - use the DEBUG header for the shield.
  • The shield answers ERROR to everything: the sketch printed normal text on Serial; on D0 / D1 Serial is for AT commands only.
  • FLASH MODE on the panel: switch 4 was on at the last reset - turn it off and press ESP RST.
  • The sketch loses the shield after ESP RST: a reset clears the server, CIPMUX and UART_CUR - set them up again, as the demos do.
  • No answer on the DEBUG header: switch 3 on, DEBUG TX to D8, DEBUG RX to D9 for AltSoftSerial.
  • No panel: click the PANEL pad or the ESP-12E, or turn "Open the panel at Run" back on in Settings.

Things to Know Before Using a Real Shield

  • Check the switches: makers number and wire them differently - read your board's silkscreen or its seller's notes.
  • Uploading: turn the switches that connect D0 / D1 off while the Arduino IDE uploads, then on again.
  • The firmware: most shields ship with AT firmware at 115200 bps, some older ones at 9600; AT+GMR tells you the version.
  • Power: the ESP-12E draws up to about 200 mA while sending - power the UNO from a good supply, not a weak USB port.
  • Our ESP-01 sketches work with small changes: the pins and the reset line differ (the shield has its own button).

Limitations of the Simulation

  • The ESP8266 runs our model of the AT firmware 1.7.4, not your own ESP8266 firmware: flash mode only stops the AT firmware, no upload is modelled.
  • Not modelled: the soft access point (CWMODE 2 / 3 light the AP LED, but nothing can join it), SSL connections, the shield's level shifter voltages, the other ESP-12E GPIOs, the radio itself - the join and network times are realistic values.
  • A shield cannot be stacked in Proteus: wire D0 / D1 (or the DEBUG header) to the UNO.
  • The antenna colours, the PANEL pad, the panel, its phone, the router and the internet host are TEP additions.
  • ESP8266 and ESP-12E are names of Espressif and Ai-Thinker; this library is not made or endorsed by Espressif, Ai-Thinker, LilyGO, Arduino, ThingSpeak or Labcenter.
  • Tested in Proteus 8.5 in October 2026 (the three demos as shipped, the web server demo 89.6 s of simulation in 157 s, about 0.6 x real time; the T-Display project 27.1 s in 95 s, about 0.3 x). Proteus 7 is not supported.

So, that was all about the ESP8266 WiFi Shield Library for Proteus. I hope it helps you learn AT commands and build Wi-Fi projects with the Arduino UNO before you touch the hardware. Our series started with the ESP32 DevKit V1 Library for Proteus V2.0 - try linking the shield with any of our ESP32 boards. If you use the ESP8266 WiFi Shield Library for Proteus in a project, please share it in the comments or in our forum, and if you have any questions, ask in the comments and I will help you out. Till the next tutorial, take care and have fun!