Introduction: EV Charger Timer With Web Interface for Type 1 and Type 2 (single and 3-phase) Chargers

This project adds as web controlled timer in front of a standard 'dumb' EV Charger, Type 1 or Type 2 single phase or 3-phase, so you can set the it to charge your car at a specific time. Its construction is trivial and has just 3 parts. The same parts and code can be used for either a Type 1 charger (110VAC or 240VAC) or single phase Type 2 charger up to 7.5kW 240VAC or a 3-Phase Type 2 charger up to 22kW / 240VAC.

The web page allows you to set the charge to On, Off or Auto to turn the charger on/off at specific time. Setting up the time zone and connecting the EV Charge Timer to your local network are all done without re-programming. If you provide access through your router you can control the EV Charger over the internet. The time zone setup includes automatic daylight saving adjustments and the time is set from the internet (NPT server) so the on/off times remain accurate through summer and winter. The web pages are laid out for mobile phone use.

Since this project involves mains power wiring, it should only be undertaken by experienced constructors.

This project is also online at EV Charger Timer

Supplies

Parts List (as at Jan 2026, excluding shipping)

This project repurposed a previous project OLIMEX Internet Power Switch but you can also use the ESP-01 / Relay module from ESP-01 Timer Switch

The code supports both. See the the EV_ChargeTimer.ino for the pin changes needed for ESP-01.

Hardware

1 x ESP8266-EVB – OLIMEX ~US$5.90

1 x USB 5V 1A power adaptor e.g Sparkfun ~US$6.00

1 x 3pole change over 240V 30A relay with 240VAC coil e.g. ENMG G30F-3ZLV-A 220V from Aliexpress ~AU$13.00 – Not needed for Type 1 Chargers

1 x Set power cable and plug and sockets to suit power point and charger.

1 x 5mm Led e.g. Jaycar ZD0295 ~US$2.00

1 x 220R resistor e.g. Sparkfun ~US$0.30

1 x Momentary Push Button, e.g. Jaycar SP0656 ~US$3.30

1 x plastic box 125mm x 175mm x 75mm e.g. AG-1217 from Aliexpress ~US$13.50

1 x set 3mm nylon screws and hex tapped spacers e.g. Jaycar HP0142 (10off screws) ~US$2.40 and Jaycar HP0926 (25off spacers) ~US$8.00

1 x packet 2.5mm cable ties e.g. Jaycar HP1203 ~US$3.30

1 x insulating sheet, nylon or plastic

1 x Mains Power Screw Connector. e.g. Delta 40A Screw Connector -8 pack ~US$4.15

1x USB to TTL cable e.g. Adafruit ID:954 ~US$10.00

1 x 5V supply with 2.1mm center +ve plug, e.g. Sparkfun TOL-15312 ~US$9.50 – used to power ESP8266-EVB when programming it.

Software

Arduino IDE V2 (V2.3.6)

data upload add-on arduino-littlefs-upload

ESP8266 board support V3.1.2ANDESP32 board support V3.3.3 – The ESP32 board support is need for the aduino-littlefs-upload operation

EV_ChargerTimer.zip and libraries.zip – The source code also needs the following libraries to be installed via the Arduino IDE Library Manager:- SafeString V4.1.14+, ESP Async WebServer V1.2.3 and ESP AsyncTCP V1.2.2 and DebouncedSwitch from its zip file. --- The libraries.zip contains those files. Unzip to your Sketch directory.

Step 1: Circuit

Basically the same components and circuit can be use for Type 2 Single Phase EV chargers as well as Type 2 3-phase and Type 1 EV chargers.

Type 2 Single Phase

This is the Type 2 single phase circuit. See below for modification for Type 1 and Type 2 3-phase.

The neutral is switched by the relay because it was convenient to terminate the power cables on the relay terminals.

Type 2 3-phase chargers

For Type 2 3-phase use, connect all 3 phases to the relay poles and use a screw connector to join the neutral. Use one of the phases to power the USB supply and the 30A relay coil via the OLIMEX relay.

Type 1 chargers

For Type 1 chargers, omit the 30A relay and use the on-board 10A OLIMEX relay to switch the active lead.

Step 2: Operation

The operation of this EV Charger Timer is very similar to the ESP-01 Timer Switch. Refer to that project for details on how to connect this EV Charger Timer to your home WiFi network and how to set the time and time zone including daylight saving.

While the code is very similar, this project adds a manual over-ride push button in addition to the web page overrides. Each press of the manual push button toggles the current state of the charger power supply from on to off or off to on. If the EV Charger Timer is in Auto mode, what ever state the manual push button sets, either off or on, remains in effect until the next On Time or Off Time comes around. That is the manual push button does not disable the Auto timings.

Using the web page you can do the same thing by using the On / Off buttons to turn the EV charger on or off and then re-select Auto to put the controller back in Auto mode. Selecting Auto does not change the current setting on/off even if the time is in an off or on time period.

Automatic Restarts

To recover any memory leakage, the ESP8266 is automatically restarted every time the Auto mode switches off the charger. It is also restarted at least once every 24hrs if not in the ON mode. As well as these software restarts, due to the mains power spike that occurs when the 30A relay switches off, the ESP8266 restarts on each the main relay is turned off, either by manual pushbutton or auto or from the web page. The restarts are fast, a few seconds, and the system starts up in the OFF condition but remembers its Auto setting and on/off times so this power spike restart is benign and only results in a slight delay in the web page refresh after turning the charger off. The fix is probably to use a relay with a 24V or 12V DC coil and power that coil from its own power supply, separate from the ESP8266's supply. But that would add extra components and expense for hardly any improvement over the current operation and so was not done.

Step 3: Construction

Cable ties provide strain relief for the power cables entering the case.

The USB supply is dis-assembled to extract the power board and wire added to the +5V / -5V points on the circuit board

The USB supply board is then attached to the bottom of the OLIMEX board with cable ties, after adding a sheet of insulating nylon/plastic between them, and the mounted using the nylon screws and threaded spacers.

Step 4: Programming

In the Arduino IDE, install the ESP8266 board support V3.1.2ANDESP32 board support V3.3.3 board support. Also install the arduino-littlefs-uploadArduino IDE addon.

Unzip the EV_ChargerTimer.zipand libraries.zip to your sketch directory and open the EV_ChargerTimer.ino in the Arduino IDE

Connect the USB to TTL cable to the OLIMEX UEXT connector. For the Adafruit cable there are four wires: red power (5V), black ground, white RX into USB port, and green TX out of the USB port.

Connect only the Gnd, Rx and Tx lines.

NOTE Carefully: TTL Rx → OLIMEX TXD and TTL Tx → OLIMEX RXD

Select board Generic ESP8266 Module

In Arduino File → Preferences select Show verbose output duringupload

To program the OLIMEX, hold down the white push button, plug in the power and start the Arduino Compile.

Keep the button held down until the upload actually starts (5%..)

To upload the web pages, make sure the Arduino Serial Monitor is closedand press Ctrl+Shift+P to open the tools menu and in the search bar type Upload LittleFSto find the upload too. Select it to load the data files.

ESP-01 hardware version

If you are using the ESP-01 / Relay hardware from ESP-01 Timer Switch, follow the programming instructions there. Change the #define ESP_LED at the top of the EV_ChargerTimer.ino to suit your board. See ESP-01 and ESP-01S - How program and use the Pins and Leds for how to add the manual override push button using the limited pins of the ESP-01

Conclusion

This page showed how to add a web page controlled timer to your 'dumb' EV Type 1 or Type 2 charger. The same basic hardware can be used for controlling Type 2 single phase and Type 2 3-phase chargers. Type 1 EV charges do not need the heavy duty 30A relay component. The web pages all you to connect to your home network and set up your time zone and daylight saving settings, after which the ESP8266 keeps time from the internet NTP server. A manual override button.