ESP-07 Library for Proteus: the ESP8266 ESP-07 Wi-Fi module with an Arduino UNO and an LED on GPIO4

ESP-07 Library for Proteus: ESP8266 Wi-Fi Module with u.FL Antenna

2.5K Views
40
700
60
25
60
PCBWay

Hello friends, I hope you all are doing great. Today, I am going to share the ESP-07 Library for Proteus. The ESP-07 is the ESP8266 Wi-Fi module for projects where the signal matters: next to its small ceramic antenna it has a u.FL socket for an external antenna. With this library you can place it in Proteus, wire it to an Arduino, send it AT commands and watch it join the Wi-Fi, serve web pages, switch its own GPIO pins and talk TCP to other modules - all inside the simulation.

Updates

ESP-07 Library for Proteus

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

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 ninth library of our Wi-Fi series, and it brings three things our earlier ESP8266 modules did not have: the antenna jumper (click it and the RSSI goes up by 7 dB), the boot pins that a bare ESP-07 needs (EN, RST, GPIO0 and GPIO15, checked like on the bench) and six free GPIO pins that your Arduino drives with AT commands. As always, the demos end with a project that links this module with the previous library of the series: the ESP-07 and our ESP-01 adapter become a two-way Wi-Fi chat between two Arduinos.

NOTICE: real ESP-07 modules differ between makers and batches: some have only the blue LED, the antenna selector sits in different places, and the newer ESP-07S has no ceramic antenna at all. Check your module before you wire it. Your feedback is the fuel that keeps us going, so please tell us what you think in the comments below or in the ESP-07 board of our forum. And if our free libraries help you, you can buy us a coffee. So, let's get started with the ESP-07 Library for Proteus:

ESP-07 Library for Proteus: the ESP8266 ESP-07 Wi-Fi module with an Arduino UNO and an LED on GPIO4
Figure: The ESP-07 Library for Proteus: the ESP-07 (U1) with its EN pull-up, GPIO15 pull-down and the LED on GPIO4, next to our Arduino UNO V4.0 running the Wi-Fi switch demo - the LED is on and the ceramic antenna is orange because a page is going out.

What is the ESP-07?

The ESP-07 is one of the Ai-Thinker modules built around the ESP8266 Wi-Fi chip. Under its metal can sit the ESP8266EX, the flash memory and the crystal; outside the can are the antennas and 16 pins, eight on each long side. Like the ESP-01, it ships with the AT firmware, so an Arduino can use it through a serial port with commands such as AT+CWJAP and AT+CIPSEND. Unlike the ESP-01, it brings out almost every pin of the chip - and it is made for range.

The real ESP-07 and the ESP-07 in Proteus
Real ESP-07This library in Proteus
ChipESP8266EX under a metal can, AT firmwareour AT firmware 1.7.4 model
Antennasa ceramic chip antenna and a u.FL socketboth, with a clickable jumper (+7 dB on u.FL)
Pins16, on a 2 mm pitch16, on the 0.1 inch grid of Proteus
Boot pinsEN and RST pulled up, GPIO15 pulled down, GPIO0 high for normal bootchecked at every boot, shown on the panel
GPIOGPIO0, 2, 4, 5, 12, 13, 14, 15, 16GPIO4, 5, 12, 13, 14, 16 driven with AT+SYSGPIO
LEDsred power LED and blue LED on GPIO2 (on most boards)the red PWR and blue IO2 LEDs, live
Supply3.3 V, about 300 mA peaksVCC on 3.3 V

The Ceramic Antenna and the u.FL Socket

The ceramic antenna is a tiny chip at one end of the board. It works, but it is small, so its range is a little shorter than the PCB antenna of an ESP-01 or ESP-12E. The u.FL socket (also called IPEX) takes a small coaxial cable to an external antenna, which can sit outside a metal box or point at a far router - that is why people choose the ESP-07. On many real boards a tiny 0-ohm resistor decides which antenna is connected, and moving it takes a soldering iron. In our part it is a jumper you click: on the u.FL side the module gets an external antenna with 7 dB more signal.

The Boot Pins of a Bare ESP8266 Module

The ESP-01 hides most of its pins, and our ESP-01 adapter even ties CH_PD high for you. The ESP-07 does not: when you use one on its own, a few pins decide whether it starts at all. EN (also called CH_PD) must be pulled up, or the chip stays off. RST resets the chip when it goes low. GPIO15 must be low when the chip starts - pulled down with a resistor - or the ESP8266 tries to boot from an SD card and the AT firmware never runs. GPIO0 low at boot selects the flash mode for loading new firmware. Our model checks all four at every boot and the panel shows them, so a missing resistor in Proteus looks the same as on the bench: no answer from the module.

GPIO Pins Through AT Commands

The AT firmware can also use the free pins of the ESP8266. AT+SYSGPIODIR=4,1 makes GPIO4 an output, AT+SYSGPIOWRITE=4,1 sets it high and AT+SYSGPIOREAD=4 reads a pin back. So the Arduino can switch an LED or a relay that hangs on the ESP-07 itself, without spending one of its own pins - handy when the module sits at the far end of a cable from the Arduino. Both demos use GPIO4 this way.

Features of the ESP-07 Library for Proteus

  • The ESP-07 as it looks: the black board with the metal can, the ceramic antenna, the u.FL socket with its jumper, the two LEDs and the 16 gold pins, drawn a little bigger than the real module.
  • A clickable antenna jumper: ceramic or u.FL; on u.FL the RSSI goes up by 7 dB, a weak signal gets better and the scan sees farther. The ANTENNA property sets it at Run.
  • Real boot pins: EN low switches the module off, RST low resets it, GPIO15 must be low at boot and GPIO0 low selects the flash mode - the panel shows the state of each.
  • Six GPIO pins (GPIO4, 5, 12, 13, 14 and 16) that the Arduino drives or reads with AT+SYSGPIO commands.
  • Live LEDs and antennas: the red PWR LED, the blue IO2 LED, and the antenna in use turns orange while the module sends and green while it receives.
  • The AT firmware 1.7.4 of our ESP-01 Library for Proteus: 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 and two neighbours for scans, a phone that opens your web page, an internet host, and TCP / UDP to every TEP Wi-Fi part in the design.
  • Our pop-up panel: the phone, the module card with the antenna buttons and the boot pins, a Test page with four measuring tools, Settings and Help.
  • Two demo projects with our Arduino UNO V4.0: a Wi-Fi switch for the LED on GPIO4, and a Wi-Fi chat with our ESP-01 adapter.
  • A compact package: about 2.36 MB, without the C++ source code of the models.

The ESP-07 Part in Proteus

ESP-07 in Proteus: the part with its 16 pins, the ceramic antenna and the u.FL socket
Figure: The part as the library draws it: the u.FL socket, the antenna jumper and the ceramic antenna at the top, the PWR and IO2 LEDs, the metal can, the PANEL pad and the 16 pins.

Search ESP-07 in Pick Devices; the device ESP-07 WIFI MODULE is in TEPESP07.LIB. The pins sit on both sides as on the real module: RST, ADC, EN, IO16, IO14, IO12, IO13, VCC on the left and TXD, RXD, IO5, IO4, IO0, IO2, IO15, GND on the right. The part is drawn about 1.15 x the real size, because its pins sit on the 0.1 inch grid of Proteus while the real module uses a 2 mm pitch; next to our UNO it is still small. Click the PANEL pad or the metal can to open the panel, and the jumper to change the antenna.

ESP-07 in Proteus before Run: both LEDs off, the ceramic antenna selected
Figure: The ESP-07 placed in a design, before Run: both LEDs off, the jumper on the ceramic side.

Every State of the ESP-07

We ran the switch demo and paused the simulation for each picture. At Run the ESP-07 powers up and prints its boot text; the blue IO2 LED flashes during the boot, as on the real module:

ESP-07 in Proteus booting: the PWR and IO2 LEDs on
Figure: Booting: the red PWR LED on with the 3.3 V supply, the blue IO2 LED lit while the chip starts.
ESP-07 in Proteus joining the Wi-Fi: the ceramic antenna orange
Figure: Joining: the UNO sent AT+CWJAP and the module talks to the router - the ceramic antenna glows while it does.
ESP-07 in Proteus on Wi-Fi with its web server running
Figure: On Wi-Fi: the antenna back to normal, the web server listening on port 80, only the PWR LED lit.

While data flows, the antenna in use shows the direction:

ESP-07 in Proteus: the ceramic antenna green while receiving
Figure: Receiving: the ceramic antenna green - the phone's request for the page arriving.
ESP-07 in Proteus: the ceramic antenna orange while sending
Figure: Sending: orange - the page going out to the phone.
ESP-07 in Proteus with GPIO4 high after AT+SYSGPIOWRITE=4,1
Figure: GPIO4 high: the UNO sent AT+SYSGPIOWRITE=4,1 - the logic probe of the IO4 pin turns red and the LED of the demo lights.

Now click the jumper. It moves to the u.FL side, and from then on the u.FL socket is the antenna that glows:

ESP-07 in Proteus with the antenna jumper on the u.FL socket
Figure: The jumper moved to the u.FL socket: the module now uses an external antenna.
ESP-07 in Proteus sending through the u.FL antenna
Figure: Sending through the u.FL socket: the socket glows orange instead of the ceramic antenna.
ESP-07 in Proteus with the router out of range
Figure: OUT OF RANGE: the router is gone, so the antennas stay quiet and the module has no IP address.

Download ESP-07 Library for Proteus

Click the button below to download ESP-07-Library-for-Proteus-v1.0.zip (about 2.36 MB, without the C++ source code of the models):

ESP-07 Library for Proteus V1.0
  • README.txt: the device, installation, the two demos, the pins, the properties, troubleshooting and the limits.
  • Proteus Library Files: TEPESP07.LIB (the ESP-07), ArduinoV4TEP.LIB (our Arduino boards V4.0 - the UNO of the demos) and TEPESP01ADAPTER.LIB (our ESP-01 adapter, the client of the second demo).
  • Proteus Model Files: TEPNET.DLL (the ESP-07 and the Wi-Fi network) and TEPARDUINO.DLL (the Arduino boards).
  • Proteus Simulation: the two demo projects, their HEX files and copies of the DLLs.
  • Arduino Code: the three demo sketches. AltSoftSerial is not included - install it 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 ESP-07 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, the ESP-01, the ESP-01S, the WiFi Shield and the ESP-01 adapter).
  4. Delete TEPESP07.IDX, ArduinoV4TEP.IDX and TEPESP01ADAPTER.IDX from the LIBRARY folder if they are there.
  5. Start Proteus, press P and search for ESP-07.

The sketches are normal UNO sketches: select Arduino Uno in the Arduino IDE, install AltSoftSerial, 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 Wi-Fi Switch on the ESP-07's Own Pin

ESP-07 Proteus simulation: EN pull-up, GPIO15 pull-down and an LED on GPIO4
Figure: The switch demo around the ESP-07: R1 10k from EN to +3.3V, R2 10k from GPIO15 to GND, R3 220R and the green LED D1 on GPIO4; TXD and RXD go to the UNO through the labels ESP_TXD and ESP_RXD.

Open ESP-07-WiFi-Switch.pdsprj. The ESP-07 needs a little more than four wires: VCC to +3.3V and GND to ground, R1 pulls EN up, R2 pulls GPIO15 down, and the module's TXD goes to the UNO's D8 and its RXD comes from D9. The LED with R3 hangs on GPIO4 of the ESP-07 - not on the UNO. The UNO is our Arduino UNO Library for Proteus V4.0, with its built-in serial monitor at 9600 baud, and the module talks to AltSoftSerial on D8 / D9.

The ESP-07 starts at 115200 bps, too fast for a software serial port to receive, so the sketch sends one AT+UART_CUR=9600 at that speed and then talks at 9600 - the same trick as in our ESP-01 demos. If nothing answers, it says which pins to check. Then it sets the module up: station mode, and GPIO4 as an output, with the LED off:

void setupModule() {
  command("ATE0");                     // no echo
  command("AT+CWMODE=1");              // station
  command("AT+SYSGPIODIR=4,1");        // GPIO4 (the LED) an output
  setLed(false);

Switching the LED is one AT command. The sketch remembers the state, so the web page and the monitor can show it:

void setLed(bool on) {
  led = on;
  command(on ? "AT+SYSGPIOWRITE=4,1" : "AT+SYSGPIOWRITE=4,0");
}

The page also shows the signal. AT+CWJAP? answers with the router's name, its MAC address, the channel and the RSSI as the last number, so the sketch keeps the text after the last comma:

void onJoined(const char* s) {
  if (strncmp(s, "+CWJAP:", 7)) return;
  const char* last = strrchr(s, ',');
  if (last) rssi = atoi(last + 1);
}

void readRssi() { command("AT+CWJAP?", 2000, onJoined); }

Press Run and watch the UNO's monitor. The module is found, joins TEP-WiFi, reports its signal and starts the web server:

Arduino UNO serial monitor in Proteus: the ESP-07 found, joined to the Wi-Fi with its switch page ready
Figure: The UNO's monitor at 9600 baud: the ESP-07 found and switched to 9600 bps, joined to TEP-WiFi with RSSI -45 dBm, the switch page ready at 192.168.1.101.
UNO + ESP-07: Wi-Fi switch (the LED on the ESP-07's GPIO4)
www.TheEngineeringProjects.com
ESP-07 found, now at 9600 bps
Joining TEP-WiFi... connected
Signal: RSSI -45 dBm
Switch page ready: open http://192.168.1.101/
Serial monitor: ON, OFF, RSSI, SCAN, STATUS, AT..., HELP

Now open the module's panel and tap OPEN ESP PAGE on its phone. The page shows the LED, three links and the signal of the moment:

ESP-07 panel in Proteus: the Wi-Fi switch page on the phone
Figure: The switch page from 192.168.1.101: LED (GPIO4) is OFF, the links ON, OFF and READ, Signal: RSSI -46 dBm.

Every request goes through the same few lines of the sketch: the path of the request decides what happens to the LED, then the page is sent with the new state:

    if (!strcmp(path, "/on")) setLed(true);
    if (!strcmp(path, "/off")) setLed(false);
ESP-07 panel in Proteus: the phone after tapping ON - the LED on GPIO4 is ON
Figure: After ON: the address bar shows /on, the page says LED (GPIO4) is ON - and the LED in the circuit lights.

The monitor is a small Wi-Fi tool too. Type ON or OFF to switch the LED, RSSI for the signal, SCAN for the networks in range and STATUS for a summary; any line starting with AT goes to the module as it is. Here the LED is switched on from the monitor, then the phone and the web request test ask for the page:

Arduino UNO serial monitor in Proteus: ON typed for the ESP-07 LED and the web requests from the phone
Figure: ON typed in the monitor, then four page requests: the phone's OPEN ESP PAGE and the three of the web request test.
ON
LED ON (AT+SYSGPIOWRITE=4,1)
Request: GET / HTTP/1.1
Request: GET / HTTP/1.1
Request: GET / HTTP/1.1
Request: GET / HTTP/1.1

Testing the Antenna Jumper

This is the part that makes the ESP-07 special, so let's measure it. The panel's module card shows the antenna in use with two buttons, Ceramic and u.FL, and the boot pins below them:

ESP-07 panel in Proteus: the ESP-07, WI-FI and TRAFFIC cards with the ceramic antenna selected
Figure: The Wi-Fi page after the set-up: AT 1.7.4.0, station mode, 9600 bps (UART_CUR), the server on port 80; Antenna Ceramic with RSSI -46 dBm; Boot pins EN high, GPIO15 low, GPIO0 high.

Click u.FL (or the jumper on the part) and the external antenna is in use; the RSSI rises from -46 to -40 dBm with a GOOD signal:

ESP-07 panel in Proteus: the u.FL antenna selected, RSSI -40 dBm
Figure: The u.FL antenna: +7 dB, RSSI -40 dBm, the phone showing the page with LED (GPIO4) is ON.

Typed in the monitor, RSSI and SCAN show the same: the router at -38 to -40 dBm and the two neighbour networks at -72 and -81 dBm. Then OFF and STATUS:

Arduino UNO serial monitor in Proteus: RSSI, SCAN, OFF and STATUS for the ESP-07 on the u.FL antenna
Figure: RSSI, SCAN, OFF and STATUS typed in the monitor with the u.FL antenna: -40 dBm, three networks in range, the LED off, the status line.
RSSI
Signal: RSSI -40 dBm
SCAN
Scanning (AT+CWLAP)...
  TEP-WiFi  -38 dBm
  Neighbour_WiFi  -72 dBm
  Guest_Network  -81 dBm
3 network(s) in range
OFF
LED OFF (AT+SYSGPIOWRITE=4,0)
STATUS
LED OFF, IP 192.168.1.101, RSSI -40 dBm, 3 pages served, up 20 s

The difference matters most when the signal is weak. The phone's WEAK button moves the router far away. On the u.FL antenna the module still reads -73 dBm; back on the ceramic antenna it drops to -82 dBm - still connected, but close to the edge:

ESP-07 panel in Proteus: a weak signal on the u.FL antenna, RSSI -73 dBm
Figure: WEAK on the u.FL antenna: RSSI -73 dBm.
ESP-07 panel in Proteus: a weak signal on the ceramic antenna, RSSI -82 dBm
Figure: WEAK on the ceramic antenna: RSSI -82 dBm, shown in orange.
Arduino UNO serial monitor in Proteus: the ESP-07 RSSI on the ceramic antenna with a weak signal
Figure: RSSI typed again with the ceramic antenna and the weak signal: -82 dBm.

OUT OF RANGE takes the router away completely; the module loses its IP address, and the sketch's next page or command fails until GOOD brings the router back and the module joins again:

ESP-07 panel in Proteus: the router out of range
Figure: OUT OF RANGE: the card on the phone turns red, the WI-FI card says out of range and the status bar Not on Wi-Fi.
ESP-07 panel in Proteus: the WI-FI tab with the router DHCP clients
Figure: The phone's WI-FI tab after GOOD: the router TEP-WiFi with its DHCP clients - the ESP-07 U1 at 192.168.1.101 and the phone at .201.

The Test Page, Settings and Help

The panel opens at Run, in the look of our TEP Serial Monitor Advance for Proteus. Its Test page measures the running model. The web request test opened the switch page three times, and the Wi-Fi join test made the module leave and re-join the router three times:

ESP-07 Test page in Proteus: the web request test
Figure: Web request test: 3 of 3 answered, 607 ms for the full page - most of it the 9600 bps link between the UNO and the module.
ESP-07 Test page in Proteus: the Wi-Fi join test
Figure: Wi-Fi join test: 3 re-joins, WIFI GOT IP after 2.44 to 2.53 s (association plus DHCP).
ESP-07 panel settings in Proteus: theme, text size, open at Run, window size
Figure: Settings: TEP Dark or Light, the text size, open the panel at Run, the window size.
ESP-07 panel help in Proteus: bug report, feature request, article, forum
Figure: Help: report a bug, suggest a feature, the article, the user guide, updates, donate, the website, the forum; Copy diagnostics.

The whole first demo while it sends a page - the LED on GPIO4 lit, the antenna orange:

ESP-07 Wi-Fi switch Proteus simulation running with the Arduino UNO V4.0
Figure: The whole demo running: the titles, ARD1 and U1 with R1, R2, R3 and the LED D1 lit.

One more thing the sketch does: every 30 seconds it checks that the module still answers at 9600. A reset puts the ESP-07 back to 115200 bps without its server, so the sketch finds it again and repeats the set-up:

  if (millis() - lastCheck > CHECK_EVERY) {
    if (!command("AT", 1000) && !command("AT", 1000)) {
      Serial.println(F("The ESP-07 restarted - setting it up again"));
      if (startEsp()) setupModule();
    }
    lastCheck = millis();
  }

Demo 2: A Wi-Fi Chat with the ESP-01 Adapter

Now the ESP-07 meets the previous library of the series, our ESP-01 Adapter Library for Proteus. In ESP-07-and-ESP-01-Adapter-Chat.pdsprj the first UNO and the ESP-07 (U1, 192.168.1.101) are the chat server on TCP port 5000, with the LED on GPIO4 again. The second UNO with the ESP-01 adapter (U2, 192.168.1.102) is the client. Whatever you type in one serial monitor appears in the other one, and the client can switch the ESP-07's LED by sending LED ON or LED OFF.

ESP-07 and ESP-01 adapter Proteus simulation: a Wi-Fi chat between two Arduino UNOs
Figure: The project: ARD1 with U1 the ESP-07 (the chat server, the LED on GPIO4), ARD2 with U2 the ESP-01 adapter (the client).

Our earlier demos opened a TCP link for one request and closed it. A chat keeps the link open. The server allows several links with AT+CIPMUX=1, listens on port 5000, and AT+CIPSTO=0 tells the firmware never to close an idle link:

  command("AT+CIPMUX=1");              // several connections - needed for the server
  char at[24];
  snprintf_P(at, sizeof(at), PSTR("AT+CIPSERVER=1,%d"), CHAT_PORT);
  command(at);
  command("AT+CIPSTO=0");              // the chat link never times out

When the client connects, the firmware prints 0,CONNECT - the number is the link. The server keeps that number, because every AT+CIPSEND needs it:

      if (comma && !strcmp(comma + 1, "CONNECT")) {
        peer = atoi(line);
        Serial.print(F("ARD2 joined the chat (link "));
        Serial.print(peer);
        Serial.println(')');
        continue;
      }

Each message arrives as +IPD,<link>,<length>: followed by the text. The server prints it, and two messages are commands: LED ON and LED OFF switch GPIO4 and get an answer; any other message blinks the LED once, so you can see the chat on the board too:

void onMessage() {
  ++received;
  Serial.print(F("ARD2: "));
  Serial.println(msg);
  if (!strcasecmp(msg, "LED ON") || !strcasecmp(msg, "LED OFF")) {
    setLed(!strcasecmp(msg, "LED ON"));
    say(led ? "ESP-07 LED is ON" : "ESP-07 LED is OFF");
  } else {                             // any other message: one blink of the LED
    setLed(!led); delay(150); setLed(!led);
  }
}

The client on the adapter is even simpler. With AT+CIPMUX=0 it has one link, opened with AT+CIPSTART to the ESP-07's address; if the ESP-07 is not ready yet, it tries again every 5 seconds:

void connect() {
  char at[48];
  snprintf_P(at, sizeof(at), PSTR("AT+CIPSTART=\"TCP\",\"%s\",%d"), SERVER_IP, CHAT_PORT);
  linked = command(at, 5000);
  if (linked) { Serial.print(F("Connected to the ESP-07 chat (")); Serial.print(SERVER_IP); Serial.print(':'); Serial.print(CHAT_PORT); Serial.println(')'); }
  else Serial.println(F("The ESP-07 does not answer yet - trying again in 5 s"));
}

Press Run. Both modules join TEP-WiFi, the ESP-07 starts its server and the adapter connects. Then we typed a hello on ARD2:

Arduino UNO with the ESP-07 in Proteus: the chat server side with the LED on GPIO4
Figure: The server side: ARD1 and U1 the ESP-07 with its pull-ups, the pull-down and the LED on GPIO4.
Arduino UNO with the ESP-01 adapter in Proteus: the chat client side
Figure: The client side: ARD2 and U2 the ESP-01 adapter on D8 / D9, VCC on 5 V.

LED ON typed in ARD2's monitor travels over Wi-Fi, ARD1 sends AT+SYSGPIOWRITE=4,1 to its ESP-07, and the LED lights; LED OFF puts it out again:

ESP-07 in Proteus with its GPIO4 LED switched on from the other Arduino
Figure: After LED ON from ARD2: GPIO4 high, the LED D1 lit.
ESP-07 in Proteus with its GPIO4 LED switched off from the other Arduino
Figure: After LED OFF: GPIO4 low, the LED off.

Here is the whole chat from the server's side. Lines with Me: are the ones typed here and sent; lines with ARD2: came over the link:

Arduino UNO serial monitor in Proteus: the ESP-07 chat server receiving messages and LED commands
Figure: ARD1's monitor: the server ready, ARD2 joined on link 0, the hello, our answer, LED ON, LED OFF, a thank-you and STATUS.
Joining TEP-WiFi... connected
Chat server ready on 192.168.1.101:5000 - waiting for ARD2
ARD2 joined the chat (link 0)
ARD2: Hello ARD1, the adapter is online
Hi ARD2, the ESP-07 hears you
Me: Hi ARD2, the ESP-07 hears you
ARD2: LED ON
ARD2: LED OFF
Thanks, LED is off again
Me: Thanks, LED is off again
ARD2: LED ON
STATUS
Link 0, received 4, sent 5, LED ON

And from the client's side - every LED command is confirmed by the ESP-07's Arduino:

Arduino UNO serial monitor in Proteus: the ESP-01 adapter chat client sending LED ON and LED OFF
Figure: ARD2's monitor: the answers of ARD1, LED ON, LED OFF and LED ON again, each confirmed, and STATUS - received 5, sent 4.
ARD1: Hi ARD2, the ESP-07 hears you
LED ON
Me: LED ON
ARD1: ESP-07 LED is ON
LED OFF
Me: LED OFF
ARD1: ESP-07 LED is OFF
ARD1: Thanks, LED is off again
LED ON
Me: LED ON
ARD1: ESP-07 LED is ON
STATUS
Connected, received 5, sent 4

Both panels show the open link - one TCP link, opened once and still open:

ESP-07 panel in Proteus as the chat server on port 5000
Figure: U1's panel: CIPMUX 1, the server on port 5000, 1 link open; the last AT command a 16-byte message.
ESP-01 adapter panel in Proteus as the chat client of the ESP-07
Figure: U2's panel: CIPMUX 0 and no server - a client with 1 link open to the ESP-07.
ESP-07 panel in Proteus: the router DHCP clients with the ESP-07 and the ESP-01 adapter
Figure: The phone's WI-FI tab: the ESP-07 U1 at .101, the ESP-01 U2 at .102 and the two phones of the panels.

Our earlier projects linked boards with HTTP requests and short TCP and UDP messages; this one keeps a TCP link open in both directions, the way a chat, a telemetry stream or a remote console works. Try it with two ESP-07 modules, or with any of our ESP32 boards on the other side.

Pins of the ESP-07

The pins of the ESP-07, left side then right side, top to bottom
PinWhat it is
RSTreset, low = in reset (pull it up on a real module)
ADCthe ESP8266's analog input (0 to 1 V) - not read by the AT firmware model
ENCH_PD, the enable pin: high = on, low = off - pull it up with 10k
IO16, IO14, IO12, IO13GPIO pins for AT+SYSGPIO
VCC3.3 V supply - not 5 V
TXDthe module's UART TX, to the Arduino's RX
RXDthe module's UART RX, from the Arduino's TX (3.3 V logic)
IO5, IO4GPIO pins for AT+SYSGPIO (IO4 drives the LED of the demos)
IO0GPIO0: low at boot = flash mode
IO2GPIO2, the blue IO2 LED
IO15GPIO15: must be low at boot - pull it down with 10k
GNDground

Properties of the ESP-07

Double-click the ESP-07 to change them; every run starts again from the properties
PropertyWhat it does
WIFISSID / WIFIPASSthe router in range (TEP-WiFi / 12345678)
BAUDthe ESP-07's factory UART speed (115200)
ANTENNAthe jumper at Run: CERAMIC or UFL
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

  • "No answer from the ESP-07": TXD must reach D8 and RXD D9 (AltSoftSerial's fixed pins), VCC 3.3 V and GND the supply - the panel says NO POWER without it, and "EN low - disabled" when EN is low.
  • The panel says "SDIO boot (GPIO15 not low)": GPIO15 needs its pull-down; without it the AT firmware does not start. "flash mode (GPIO0 low)" means GPIO0 was low at boot.
  • AT+SYSGPIOWRITE answers NOT OUTPUT!: send AT+SYSGPIODIR=4,1 first - the pins start as inputs.
  • "The ESP-07 does not answer yet" on the chat client: the ESP-07 must be on Wi-Fi with its server running first; the client tries again every 5 seconds.
  • No panel: click the PANEL pad or the metal can, or turn "Open the panel at Run" back on in Settings.

Things to Know Before Using a Real ESP-07

  • Power: the ESP-07 draws up to about 300 mA while it sends. Use a 3.3 V regulator that can deliver that - not the UNO's 3.3V pin.
  • Levels: the ESP-07 is a 3.3 V part. Put a divider (for example 1k / 2k) between a 5 V Arduino's TX and the module's RXD; the module's TXD can go straight to the Arduino.
  • The 2 mm pitch: the pins do not fit a breadboard. Solder the module to an adapter plate - many of them already carry the EN, RST and GPIO15 resistors.
  • Boot resistors: on a bare module pull EN, RST, GPIO0 and GPIO2 up with 10k and GPIO15 down with 10k.
  • The external antenna: check how your board selects it - both antennas wired at once, or a 0-ohm resistor to move. Never send with the u.FL selected and nothing plugged in.
  • The firmware: most ESP-07 modules ship with the AT firmware at 115200 bps; AT+GMR tells you the version, and the GPIO commands depend on it.

Limitations of the Simulation

  • The ESP8266 runs our model of the AT firmware 1.7.4, not your own ESP8266 firmware; GPIO0 low gives the flash mode, but nothing can be flashed.
  • In Proteus an open EN or a 10k pull-up to a 3.3 V terminal both count as on - only a low switches the module off. GPIO15 must really be low.
  • Not modelled: the ADC pin, the soft access point (CWMODE 2 / 3 are accepted, but nothing can join it), SSL connections, the supply's voltage and current, the radio itself - the join and network times and the +7 dB of the external antenna are realistic values, not a radio simulation.
  • The antenna colours, the PANEL pad, the panel, its phone, the router, the two neighbour networks and the internet host are TEP additions.
  • ESP8266 and ESP-07 are names of Espressif and Ai-Thinker; this library is not made or endorsed by Espressif, Ai-Thinker, Arduino or Labcenter.
  • Tested in Proteus 8.5 in October 2026 (the two demos as shipped, the switch demo 40 s of simulation in 78 s, about 0.5 x real time; the chat with its two UNOs about 0.25 x). Proteus 7 is not supported.

So, that was all about the ESP-07 Library for Proteus. I hope it helps you try the ESP-07 with its external antenna and its boot pins in Proteus before you solder the real one. Our series started with the ESP32 DevKit V1 Library for Proteus V2.0 - try linking the ESP-07 with any of our ESP32 boards too. If you use the ESP-07 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!


Comments

0

Join the conversation