ESP-01 Adapter Library for Proteus: the ESP8266 ESP-01 on its 5 V adapter next to the Arduino UNO

ESP-01 Adapter Library for Proteus: ESP8266 ESP-01 on 5V Arduino

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-01 Adapter Library for Proteus. It brings the famous ESP-01 adapter board to Proteus: the small 5 V board with a regulator and a level shifter that the ESP-01 plugs into, so that an Arduino UNO can use the ESP8266 Wi-Fi module with four wires and no extra parts. Your sketch sends AT+CWJAP, AT+CWLAP or AT+CIPSTART over a serial port, and the module scans, joins, serves pages and talks TCP and UDP, right inside the simulation.

Updates

ESP-01 Adapter 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 eighth library of our Wi-Fi series. After the ESP-01S, it is the classic blue ESP-01 again - this time sitting in its adapter, drawn at its real size next to our UNO, with its red power LED and the blue LED on TX. It runs the same AT firmware model as our ESP-01 Library for Proteus. As always, the demos end with a project that links this module with the previous one: the adapter becomes a Wi-Fi remote for the blue LED of the ESP-01S.

NOTICE: real ESP-01 adapters differ between makers: the regulator, the input voltage range and the order and labels of the header pins - some print RX and TX from the Arduino's side. Check the silkscreen of your board 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-01 Adapter 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-01 Adapter Library for Proteus:

ESP-01 Adapter Library for Proteus: the ESP8266 ESP-01 on its 5 V adapter next to the Arduino UNO
Figure: The ESP-01 Adapter Library for Proteus: the adapter (U1) with the ESP-01 in its socket and our Arduino UNO V4.0 running the Wi-Fi clock demo - the red PWR and blue TX LEDs are lit and the antenna is orange because the module is sending a web page.

What is the ESP-01 Adapter Board?

The ESP-01 is a tiny ESP8266 Wi-Fi module with the AT firmware - but it is a 3.3 V part. Its pins are not 5 V tolerant, and its supply must deliver peaks of about 300 mA, more than the UNO's 3.3V pin can give. On the bench that means a separate regulator and a resistor divider on the Arduino's TX line. The ESP-01 adapter does all of that on one small board: an AMS1117 regulator makes 3.3 V from the 5 V input, two small MOSFETs shift the TX and RX levels both ways, CH_PD is tied high, and a 2 x 4 socket holds the ESP-01. What is left for you is a 4-pin header: GND, RX, TX, VCC.

The real adapter and the adapter in Proteus
Real ESP-01 adapterThis library in Proteus
SupplyVCC 5 V (some boards up to 12 V), AMS1117 to 3.3 VVCC on 5 V; the panel shows the regulator
Serial linesTX / RX level-shifted with two MOSFETsTX / RX straight to the Arduino pins
Modulean ESP-01 (ESP8266, AT firmware) in a 2 x 4 socketthe classic blue ESP-01, our AT firmware 1.7.4 model
PinsGND, RX, TX, VCC (the order varies)GND, RX, TX, VCC
LEDsthe ESP-01's red PWR and blue TX LEDsthe same two, live
Wi-Fi802.11 b/g/n, station and soft APa virtual router, DHCP, scans, TCP, UDP, SNTP, ping, a phone
Sizeabout 24 x 42 mm with the ESP-01drawn at the real size against our UNO V4.0

Why an Adapter and Not Just the ESP-01?

Because it makes the wiring the same as for any 5 V module. With a bare ESP-01 on an UNO you need a 3.3 V supply, a divider from the UNO's TX to the ESP-01's RX, and pull-ups on CH_PD and RST. With the adapter you connect VCC to 5V, GND to GND, the adapter's TX to an Arduino input and its RX to an Arduino output - done. The price is that GPIO0, GPIO2 and RST are not brought out, so the adapter cannot put the ESP-01 into its flash mode: it is for the AT firmware, which is exactly what an Arduino project needs.

How the Level Shifter Works

Each line of the level shifter is one small N-channel MOSFET with a pull-up resistor on each side: 3.3 V on the ESP-01's side, 5 V on the Arduino's side. When neither side pulls low, both pull-ups hold their line high - 3.3 V for the module, 5 V for the Arduino. When the ESP-01 pulls its TX low, the MOSFET turns on and pulls the 5 V side low too; when the Arduino pulls its side low, the MOSFET's body diode pulls the 3.3 V side down. So one part works in both directions, and neither chip ever sees the other one's voltage. In Proteus the lines are logic levels, so the model simply passes them through - the panel reminds you that the shifter is there.

AT Commands We Use in This Library

Besides the usual AT+CWJAP, AT+CIPSERVER and AT+CIPSEND, the demos use three commands our earlier Wi-Fi demos did not show: AT+CWLAP lists the networks in range with their signal and channel, AT+PING="host" measures the round trip to a server, and AT+CIPSNTPCFG=1,0 with AT+CIPSNTPTIME? gives the module the time from the internet (SNTP, here in UTC). In Proteus the router has two neighbours for the scan, and the internet host answers pings and HTTP requests.

Features of the ESP-01 Adapter Library for Proteus

  • The adapter with the ESP-01 plugged in, drawn at the real size: the black adapter with its AMS1117, the two MOSFETs, the capacitors and the 4-pin header, and the blue ESP-01 with the ESP8266EX, the flash, the crystal and the antenna.
  • The ESP-01's LEDs, live: the red PWR LED with the supply and the blue LED on TX, which flickers whenever the module sends - at boot and with every answer to the Arduino.
  • A live antenna: orange while the module 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 and two neighbours for scans, a phone that opens your web page, an internet host for pings and HTTP, and TCP / UDP to every TEP Wi-Fi part in the design.
  • Our pop-up panel: the phone, the module card with the adapter's supply, a Test page with four measuring tools, Settings and Help.
  • Two demo projects with our Arduino UNO V4.0: a Wi-Fi clock and scanner with a web page, and a Wi-Fi remote that switches the ESP-01S's blue LED.
  • A compact package: about 2.36 MB, without the C++ source code of the models.

The ESP-01 Adapter Part in Proteus

ESP-01 adapter in Proteus: the part with GND, RX, TX and VCC
Figure: The part as the library draws it: the blue ESP-01 in the socket (the antenna, the 26 MHz crystal, the 25Q40 flash, the ESP8266EX, the PWR and TX LEDs) on the black adapter with the AMS1117, the level shifter, the PANEL pad and the four pins.

Search ESP-01 ADAPTER in Pick Devices; the device is in TEPESP01ADAPTER.LIB. The four pins point down: GND, RX, TX and VCC. The whole part is about 24 x 42 mm against our UNO, the size of the real board with the module in it. Click the PANEL pad or the ESP8266EX chip to open the panel.

ESP-01 adapter in Proteus before Run: both LEDs off
Figure: The adapter placed in a design, before Run: the PWR and TX LEDs off, the antenna gold.

Every State of the Adapter

We ran the clock demo and paused the simulation for each picture. At Run the ESP-01 powers up and prints its boot text, so both LEDs light at once:

ESP-01 adapter in Proteus booting: the PWR and TX LEDs on
Figure: Booting: the red PWR LED on with the 5 V supply, the blue TX LED flickering with the boot text.
ESP-01 adapter in Proteus joining the Wi-Fi: the antenna green
Figure: Joining: the UNO sent AT+CWJAP - the antenna is green while the module hears the router during the join.
ESP-01 adapter in Proteus on Wi-Fi with its web server running
Figure: On Wi-Fi: the antenna back to gold, the TX LED off, the web server listening on port 80.

While data flows, the antenna shows its direction, and the TX LED shows the module answering the UNO:

ESP-01 adapter in Proteus: the antenna green while receiving
Figure: Receiving: the antenna green - the phone's request for the page - and the TX LED lit as the module passes it to the UNO.
ESP-01 adapter in Proteus: the antenna orange while sending
Figure: Sending: orange - the page going out to the phone.

Download ESP-01 Adapter Library for Proteus

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

ESP-01 Adapter Library for Proteus V1.0
  • README.txt: the device, installation, the two demos, the pins, the properties, troubleshooting and the limits.
  • Proteus Library Files: TEPESP01ADAPTER.LIB (the adapter), ArduinoV4TEP.LIB (our Arduino boards V4.0 - the UNO of the demos) and TEPESP01S.LIB (our ESP-01S, the lamp of the second demo).
  • Proteus Model Files: TEPNET.DLL (the adapter 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-01 Adapter 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 and the WiFi Shield).
  4. Delete TEPESP01ADAPTER.IDX, ArduinoV4TEP.IDX and TEPESP01S.IDX from the LIBRARY folder if they are there.
  5. Start Proteus, press P and search for ESP-01 ADAPTER.

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 Clock and Scanner

ESP-01 adapter Proteus simulation with the Arduino UNO: VCC on 5V, TX to D8, RX from D9
Figure: The clock demo: our UNO V4.0 (ARD1) and the adapter (U1) joined by the labels ESP_TX (D8) and ESP_RX (D9), VCC on 5 V, a 10k pot RV1 on A0.

Open ESP-01-Adapter-WiFi-Clock.pdsprj. This is all the wiring the adapter needs: VCC to 5 V, GND to ground, the adapter's TX to the UNO's D8 and its RX from D9. The UNO is our Arduino UNO Library for Proteus V4.0, with its built-in serial monitor at 9600 baud - D0 / D1 stay free for the monitor, and the module talks to AltSoftSerial:

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

The ESP-01 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 with SoftwareSerial and then talks at 9600 - the same trick as in our ESP-01S demos. Then it scans. Every +CWLAP line goes to a small parser that prints the network's name, signal and channel and remembers the strongest one:

void scan() {
  networks = 0; strongestRssi = -127; strcpy(strongest, "-");
  Serial.println(F("Scanning (AT+CWLAP)..."));
  command("AT+CWLAP", 8000, onNetwork);
  Serial.print(networks);
  Serial.print(F(" network(s) in range, the strongest: "));
  Serial.println(strongest);
}

After the join it asks for the time. AT+CIPSNTPCFG=1,0 turns SNTP on with the time zone 0 (UTC), and AT+CIPSNTPTIME? answers with the date and time as text; the sketch keeps only the hh:mm:ss part, and shows --:--:-- while the clock still says 1970 (not synced yet):

void onTime(const char* s) {
  if (strncmp(s, "+CIPSNTPTIME:", 13)) return;
  const char* colon = strchr(s + 13, ':');
  if (!colon || colon - s < 15) return;
  if (strstr(s, "1970")) { strcpy(clockText, "--:--:--"); return; }
  memcpy(clockText, colon - 2, 8); clockText[8] = '\0';
}

Why UTC? Because it is the same everywhere, so the demo works for every reader. For your local time change the second number of AT+CIPSNTPCFG to your time zone in hours - for example AT+CIPSNTPCFG=1,5 for UTC+5. The CLOCK property of the part decides where the model's clock starts: PC uses the computer's clock, or give it a fixed start time to get the same pictures in every run.

Press Run and watch the UNO's monitor. The module is found, the three networks in range are listed, the UNO joins TEP-WiFi, pings the ThingSpeak server, reads the time and starts its web server:

Arduino UNO serial monitor in Proteus: the ESP-01 adapter scans, joins, pings and reads the SNTP time
Figure: The UNO's monitor at 9600 baud: the scan of three networks, the join, the ping and the time in UTC, the clock page ready at 192.168.1.101.
UNO + ESP-01 on the 5 V adapter: Wi-Fi clock and scanner
www.TheEngineeringProjects.com
ESP-01 found on the adapter, now at 9600 bps
Scanning (AT+CWLAP)...
  TEP-WiFi  -45 dBm  channel 6
  Neighbour_WiFi  -79 dBm  channel 1
  Guest_Network  -88 dBm  channel 11
3 network(s) in range, the strongest: TEP-WiFi
Joining TEP-WiFi... connected
Ping api.thingspeak.com: 128 ms
Time (UTC) 15:53:00
Clock page ready: open http://192.168.1.101/
Serial monitor: TIME, SCAN, PING, STATUS, AT..., HELP

Now open the module's panel and tap OPEN ESP PAGE on its phone. The page shows the time of the request, the Wi-Fi signal, the number of networks seen and the pot on A0, with two links:

ESP-01 adapter panel in Proteus: the Wi-Fi clock page on the phone
Figure: The clock page from 192.168.1.101: the time in UTC, TEP-WiFi with RSSI -46 dBm and 3 networks seen, the links TIME and SCAN, Pot on A0: 3.00 V.

TIME reads the clock again; SCAN makes the UNO scan again before it answers:

    if (!strcmp(path, "/scan")) scan();
    readTime();                        // every page shows the time of the request
ESP-01 adapter panel in Proteus: the clock page after SCAN
Figure: After SCAN: a new scan, a new time, page 2 - the address bar shows /scan.
Arduino UNO serial monitor in Proteus: the web requests and the scan they started
Figure: The monitor prints every request: GET / for the page, GET /scan with the scan it started, then GET /time.

The monitor is also a small Wi-Fi tool. Type TIME, SCAN, PING or STATUS - and any line that starts with AT goes to the module as it is:

void ping() {
  char at[48];
  snprintf_P(at, sizeof(at), PSTR("AT+PING=\"%s\""), PING_HOST);
  esp.print(at);
  esp.print(F("\r\n"));
  Serial.print(F("Ping "));
  Serial.print(PING_HOST);
  Serial.print(F(": "));
  const unsigned long start = millis();
Arduino UNO serial monitor in Proteus: TIME, PING, STATUS and AT+CWJAP? for the ESP-01 adapter
Figure: TIME, PING, STATUS and AT+CWJAP? typed in the monitor: the time, a 128 ms ping, the status line and the join details with the RSSI.
TIME
Time (UTC) 15:53:09
PING
Ping api.thingspeak.com: 128 ms
STATUS
IP 192.168.1.101, RSSI -46 dBm, time (UTC) 15:53:09, 3 pages served, A0 = 614, up 19 s
AT+CWJAP?
> AT+CWJAP?
  < +CWJAP:"TEP-WiFi","c8:3a:35:a4:26:89",6,-46
  < OK

The Adapter'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: ESP-01 ON THE 5 V ADAPTER (firmware, mode, UART, TCP, power and the adapter itself: VCC 5 V, AMS1117 3.3 V, level shifter), WI-FI and TRAFFIC.

ESP-01 adapter panel in Proteus: the phone and the ESP-01 ON THE 5 V ADAPTER, WI-FI and TRAFFIC cards
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, the adapter row with VCC 5 V; connected to TEP-WiFi in 2.18 s.
ESP-01 adapter panel in Proteus: the phone with the router out of range
Figure: OUT OF RANGE: the module lost the router - the card on the phone turns red and the WI-FI card shows out of range. GOOD brings it back.
ESP-01 adapter panel in Proteus: the WI-FI tab with the router DHCP clients
Figure: The phone's WI-FI tab: the router TEP-WiFi with its DHCP clients - the ESP-01 U1 at 192.168.1.101 and the phone at .201.

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

ESP-01 adapter Test page in Proteus: the web request test
Figure: Web request test: 3 of 3 answered, about 640 ms for the full page - most of it the 9600 bps link and the time query of every page.
ESP-01 adapter 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-01 adapter 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-01 adapter 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 - both LEDs lit, the antenna orange:

ESP-01 adapter Wi-Fi clock Proteus simulation running with the Arduino UNO V4.0
Figure: The whole demo running: the titles, ARD1, U1 with its PWR and TX LEDs lit, RV1 on A0.

Demo 2: A Wi-Fi Remote for the ESP-01S

Now the adapter meets the previous library of the series, our ESP-01S Library for Proteus. In ESP-01-Adapter-and-ESP-01S-Remote.pdsprj the first UNO and the ESP-01S (U1, 192.168.1.101) are the lamp: they run the blue LED web page of the ESP-01S library, unchanged. The second UNO with the adapter (U2, 192.168.1.102) and a pot on A0 is the remote: it switches the ESP-01S's blue LED by opening the same pages a browser would.

ESP-01 adapter and ESP-01S Proteus simulation: a Wi-Fi remote with two Arduino UNOs
Figure: The project: ARD1 with U1 the ESP-01S (the lamp), ARD2 with U2 the adapter and RV1 on A0 (the remote).

The remote is an HTTP client written with AT commands: one TCP link to the ESP-01S, a three-line GET request, then it reads the answer and closes:

void request(const char* path) {
  char at[48];
  snprintf_P(at, sizeof(at), PSTR("AT+CIPSTART=\"TCP\",\"%s\",80"), LAMP_IP);
  if (!command(at, 5000)) { Serial.println(F("The ESP-01S does not answer (no TCP connection)")); return; }
  char get[64];
  snprintf_P(get, sizeof(get), PSTR("GET %s HTTP/1.1\r\nHost: %s\r\n\r\n"), path, LAMP_IP);
  snprintf_P(at, sizeof(at), PSTR("AT+CIPSEND=%d"), (int)strlen(get));
  answerLength = 0; answer[0] = '\0'; inAnswer = false; keyAt = 0;
  esp.print(at);
  esp.print(F("\r\n"));
  if (waitFor(">", 2000)) { esp.print(get); waitFor("SEND OK", 3000); }
  ++sent;
  Serial.print(F("GET "));
  Serial.print(path);
  Serial.println(F(" sent to the ESP-01S"));

It does not keep the whole page - an UNO has little RAM. Every byte of +IPD data goes through a tiny matcher that looks for GPIO2) is <b> and keeps the word after it, ON or OFF:

void pageByte(char c) {
  if (inAnswer) {
    if (c == '<' || answerLength >= sizeof(answer) - 1) inAnswer = false;
    else answer[answerLength++] = c;
    answer[answerLength] = '\0';
    return;
  }
  keyAt = (c == KEY[keyAt]) ? keyAt + 1 : (c == KEY[0] ? 1 : 0);
  if (KEY[keyAt] == '\0') { keyAt = 0; inAnswer = true; answerLength = 0; answer[0] = '\0'; }
}

The pot is the switch. Five times a second the sketch reads A0: past 60 % it is in the "up" zone, below 40 % in the "down" zone, and in between nothing changes. It acts only when the pot moves into a zone, so an ON or OFF typed in the monitor stays until somebody turns the pot:

    const int now = a0 > ON_ABOVE ? 1 : a0 < OFF_BELOW ? 0 : -1;
    if (now >= 0 && now != zone) setLamp(now == 1, now ? "Pot up" : "Pot down");
    if (now >= 0) zone = now;

RV1 starts at 70 %, so at Run the remote joins TEP-WiFi and switches the lamp on at once:

Arduino UNO with the ESP-01 adapter and a potentiometer in Proteus: the Wi-Fi remote
Figure: The remote side: ARD2, RV1 at 70 % on A0 and U2 the adapter on D8 / D9.
Arduino UNO serial monitor in Proteus: the ESP-01 adapter remote switches the ESP-01S blue LED on
Figure: ARD2's monitor: joined, the pot up, GET /blue/on sent and the ESP-01S's answer read from its page.
UNO + ESP-01 adapter: Wi-Fi remote for the ESP-01S blue LED
ESP-01 found on the adapter, now at 9600 bps
Joining TEP-WiFi... connected
The lamp: http://192.168.1.101/
Turn the pot up (above 60 %) or down (below 40 %), or type ON / OFF
Pot up: BLUE ON
GET /blue/on sent to the ESP-01S
The ESP-01S says: Blue LED (GPIO2) is ON
ESP-01S in Proteus with its blue LED switched on by the ESP-01 adapter remote
Figure: The lamp side at that moment: the ESP-01S's blue LED lit, its antenna green (the request arriving).

Turn RV1 below 40 % (click the pot's arrows) for BLUE OFF - or type the commands in ARD2's monitor, as we did for the pictures:

ESP-01S in Proteus with its blue LED switched off by the ESP-01 adapter remote
Figure: After OFF from the remote: the ESP-01S's blue LED off.
Arduino UNO serial monitor in Proteus: OFF, BLINK, ON and STATUS sent from the ESP-01 adapter remote
Figure: ARD2's monitor: OFF, BLINK and ON, each confirmed by the ESP-01S's page, and STATUS - 4 requests, 4 answered.
Monitor: BLUE OFF
GET /blue/off sent to the ESP-01S
The ESP-01S says: Blue LED (GPIO2) is OFF
BLINK
Monitor: BLINK
GET /blink sent to the ESP-01S
The ESP-01S says: Blue LED (GPIO2) is OFF
ON
Monitor: BLUE ON
GET /blue/on sent to the ESP-01S
The ESP-01S says: Blue LED (GPIO2) is ON
STATUS
Pot 70 %, lamp ON, requests 4, answered 4
Arduino UNO serial monitor in Proteus: the ESP-01S lamp receives the requests of the remote
Figure: ARD1's monitor on the lamp side: the four requests from the remote, the same as from a browser.
Request: GET /blue/on HTTP/1.1
Request: GET /blue/off HTTP/1.1
Request: GET /blink HTTP/1.1
Request: GET /blue/on HTTP/1.1

Both panels show the exchange from their side:

ESP-01 adapter panel in Proteus as the remote of the ESP-01S
Figure: U2's panel: CIPMUX 0 and no server (a client), 4 TCP links opened, 1.3 KB of pages in, the last AT command the 46-byte request.
ESP-01S panel in Proteus as the lamp switched by the ESP-01 adapter
Figure: U1's panel: the server on port 80, 4 requests in and 4 answered, the blue LED ON.

Our earlier projects linked boards with HTTP between ESP32 boards, raw TCP and UDP; this one shows that an UNO with an ESP-01 can be a web client as well as a server - so it can control any device that has a web page, not only our own boards.

Pins of the ESP-01 Adapter

The pins of the adapter, left to right
PinWhat it is
GNDground
RXthe ESP-01's RX through the level shifter - from the Arduino's TX
TXthe ESP-01's TX through the level shifter - to the Arduino's RX
VCCthe 5 V supply (the AMS1117 makes the ESP-01's 3.3 V)

Properties of the Adapter

Double-click the adapter to change them; every run starts again from the properties
PropertyWhat it does
WIFISSID / WIFIPASSthe router in range (TEP-WiFi / 12345678)
BAUDthe ESP-01's factory UART speed (115200)
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-01": TX must reach D8 and RX D9 (AltSoftSerial's fixed pins), VCC 5 V and GND the supply - the panel says NO POWER without it.
  • Nothing answers on a real board: some adapters label RX / TX from the Arduino's side - swap the two wires.
  • The time shows --:--:--: SNTP needs Wi-Fi and a moment after AT+CIPSNTPCFG=1,0 - type TIME again.
  • The sketch loses the module after a reset: a reset clears the server, CIPMUX and UART_CUR - set them up again, as the clock demo does every 30 s.
  • "The ESP-01S does not answer": the lamp (U1) must be on Wi-Fi with its web server running before the remote sends.
  • No panel: click the PANEL pad or the ESP8266EX chip, or turn "Open the panel at Run" back on in Settings.

Things to Know Before Using a Real ESP-01 Adapter

  • Power: the ESP-01 draws up to about 300 mA while it sends. The UNO's 5V pin from USB is enough for a test; a project deserves its own 5 V supply.
  • Check the input range: most adapters take 5 V, some up to 12 V - read your seller's notes before you connect more than 5 V.
  • No flash mode: GPIO0 is not brought out, so you cannot load new firmware through the adapter - use a USB programmer for that, then put the ESP-01 back.
  • The firmware: most ESP-01 modules ship with AT firmware at 115200 bps; AT+GMR tells you the version.
  • Our ESP-01 and ESP-01S sketches work with the adapter unchanged - it only takes care of the supply and the levels.

Limitations of the Simulation

  • The ESP8266 runs our model of the AT firmware 1.7.4, not your own ESP8266 firmware; the adapter has no GPIO0 pin, so there is no flash mode.
  • Not modelled: the soft access point (CWMODE 2 / 3 are accepted, but nothing can join it), SSL connections, the regulator's current limit and the real voltages (the lines are logic levels), the radio itself - the join and network times are realistic values.
  • 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-01 are names of Espressif and Ai-Thinker; this library is not made or endorsed by Espressif, Ai-Thinker, Arduino, ThingSpeak or Labcenter.
  • Tested in Proteus 8.5 in October 2026 (the two demos as shipped, the clock demo 37.9 s of simulation in 93 s, about 0.4 x real time; the remote with its two UNOs 10.4 s in 38 s, about 0.25 x). Proteus 7 is not supported.

So, that was all about the ESP-01 Adapter Library for Proteus. I hope it helps you put the ESP-01 on a 5 V Arduino without worrying about the 3.3 V levels - first in Proteus, then on the bench. Our series started with the ESP32 DevKit V1 Library for Proteus V2.0 - try linking the adapter with any of our ESP32 boards too. If you use the ESP-01 Adapter 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