Hacking ESP8285 GeekCreit 4 Way relay controller

What an adventure it was. For the first time, I started the livestream not knowing whats ahead. Determined and armed with Google, I started the livestream and proceeded with taking the case of the ESP8285 GeekCreit 4 Way relay controller apart. It’s was a good learning experience, I’m glad some of you were there to cheer, help and keep my company! This is how you can hack the ESP8285 GeekCreit 4 Way relay controller.

ESP8285 GeekCreit 4 Way relay controller

The controller has been given to me by a hackspace friend. A rather unknown board after some Googling turned out to be the ESP8285 GeekCreit 4 Way relay controller. Armed with this knowledge, I found a rather confusing product sheet. Confusing, as images are mirrored and everything is written in Chinese.

I’m not the one to give up quick, so I started to try things out. For the sake of your time, I have created the complete pinout for you. If you want to refer to the original datasheet be my guest.

ESP8285 pinout

The pinout itself on the pictures was confusing so I took the liberty of redesigning it.

ESP8285 PSF-B04 Pinout
1 ANT Antenna
2 ADC Interface, Input Range: 0 – 1V
3 CH_EN Chip Enable High: Active; Low: Off. Note: External pull-up 1~10K resistor, connect 100nF capacitor to ground
4 GPIO16
5 GPIO14 5S Enter configuration mode”}”>Channel 4 switch pin, active low APP configuration pin, low level >5S Enter configuration mode
6 GPIO12 Channel 1 relay switch, active high Note: as a switch button, on The electric moment will be high for a period of time, need to pull down (1~4.7K) resistor to ground
7 GPIO13 Wi-Fi status indicator, connect LED series current limiting resistor to VCC
8 GPIO15 channel 4 relay switch, Active high: Chip configuration pin, need pull-down (1~4.7K) resistor to ground
9 GPIO02 can be used as flash memory UART1_TX
10 GPIO00 5S Enter configuration mode”}”>channel 1 switch pin, active low APP configuration Pin, low level>5S Enter configuration mode
11 GPIO4 Channel 3 relay switch, active high 1
12 GND
13 GPIO09 5S Enter configuration mode”}”>Channel 2 switch pin, active low APP configuration pin, low level >5S Enter configuration mode
14 GPIO10 5S Enter configuration mode”}”>Channel 3 switch pin, active low APP configuration pin, low level >5S Enter configuration mode
15 GPIO11
16 GPIO06
17 GPIO07
18 GPIO08
19 GPIO05 Channel 2 relay switches, high active
20 GND
21 RX when used for programming Flash UART_RX
22 TX at programming Flash UART_TX
23 3.3V (VCC) external power supply
24 RST reset signals: active low

Having the ESP8285 pinout is one thing, but mapping this to an existing board is another. While the AFE Firmware I’m going to use have most of the mapping done, knowing what’s what is crucial when it comes to writing a custom code. This is the board and the connections:

ESP8285 GeekCreit 4 Way relay controller Pinout
GPIO00 connect to GND on boot to enter flash mode
GPIO04 control relay 03
GPIO05 control relay 02
GPIO12 control relay 01
GPIO14 control pairing button
GPIO15 control relay 04
TX connect to RX of the programmer
RX connect to TX of the programmer
GND connect to GND
3.3V connect to power

To flash a ready bin file or your own Arduino IDE code, you have to back up, wipe the flash and upload the new bin file or the Arduino code. The procedure is described in detail here.

Please note, this board has to be powered via serial adapter AND the USB power supply when flashing the bin files.

I’m going to cover the AFE Firmware, which is pretty easy to use, if you want to push your own code, just open the Arduino IDE and flash it using the ESP8285 module in the board manager.

Before you get irritated, the ESP8285 GeekCreit 4 Way relay controller has a function button which drives the board modes. There is only one mode in which the board will function properly so circle the mode couple of times and try it out.

AFF Firmware on ESP8285 GeekCreit 4 Way relay controller

If you are feeling lazy, Adrian Czabanowski created the firmware for this (and other) controllers. You can find his firmware on the website www.smartnydom.pl but a lot of it is in Polish.

Fortunately, you have me, and I’m here to make it easy – and download the Firmware for your board with up to 4 relays (T4). There is a version for ESP8266 and ESP8285 so make sure you get the right one. Flash the firmware (rename it to something simple) so you don’t have to type all that in the PowerShell.

Once the firmware is flashed, hold the pairing button for about 10 sec. You will see the board’s LED blinking fast. The ESP8285 GeekGerit 4 Way relay controller will go into the AP mode. Check the SSIDs on your phone and you will see the AFE Device – connect to it and note the gateway IP – usually, it’s something like:

And connect to it. Don’t bother with setting up everything on your mobile, unless you don’t have a PC around. Just update the Network details and finish configuration. Once this is done, the ESP8285 GeekCreit 4 Way relay controller will get a new IP assigned by your router.

Load the device page and enter settings again. From here you will be able to configure the device to your needs. Select the number of relays (4 – GPIO12,04,05,15), switches (1 – GPIO14) and LEDs (1 – GPIO13)

Enable the MQTT and HTTP protocols and check the general configuration. Make notes of anything you don’t think you can remember as we will need this to use the MQTT and HTTP protocols.


There are 2 protocols that can be used to interact with the ESP8285 GeekCreit 4 Way relay controller. Both have their own advantages and I will show you how to link these to a NodeRED server. If you want to learn more about MQTT and HTTP in NodeRED I have a fantastic tutorial for you.


The ESP8285 GeekCreit 4 Way relay controller comes with 4 relays that we can toggle. The MQTT broker allows you to specify the topic for the device, but to control each of the relays we have to modify that topic more.

Let’s say I use the topic name /esp8285/ this means that to control the relays, I will have to add the name of each relay (from the config page) to the topic.


To issue the commands I have to modify the topic further:

MQTT commands
TOPIC Message Result
/ESP8285/cmd reboot Reboot ESP8285
/ESP8285/cmd configurationMode Open config mode
/ESP8285/state connected publish on connected (only firmware T0,T1,T2)
/ESP8285/state disconnected publish on disconnected (only firmware T0,T1,T2)
/ESP8285/switch1/cmd on turn on “switch1”
/ESP8285/switch1/cmd off turn off “switch1”
/ESP8285/switch1/cmd toggle toggle “switch1”
/ESP8285/switch1/cmd get get status of the “switch1”
/ESP8285/switch1/get defaultState set “switch1” to default state (see config settings)
/ESP8285/switch1/state on OR off “switch1” sens this message back each time it changes the state
/ESP8285/configuration/api/http/cmd on OR off enable/disable HTTP API
/ESP8285/configuration/api/domoticz/cmd on OR off enable/disable Domoticz API
/ESP8285/configuration/api/mqtt/cmd off disable MQTT API

As you can see, this is fairly straight forward, and the control of each relay is done by modifying the topic and setting a correct payload.

HTTP requests

Another way of controlling the ESP8285 GeekCreit 4 Way relay controller is through the HTTP requests. Most of the time, you will be composing the URL which has embedded commands that will be issued to the board.

To build a valid URL you will need:


Make sure to reserve the static IP address. The fields in my example are as follow:

command = on/off/get/toggle
RelayName = switch1/switch2/switch3/switch4

The responses given are sent in a JSON format. If you not sure how to handle JSON I have the tutorial explaining all you need to know here.

Here are a couple of JSON samples:

{ „device”:”ESP8285”, „name”:”switch1”, „command”:”on”, „value”:”on”, „status”:”success” }
{ „device”:”ESP8285”, „name”:”switch1”, „command”:”get”, „value”:”off”, „status”:”success” }
{ „command”:”reboot”, „status”:”success” }

Lastly, to control the MQTT, HTTP and other APIs links look like:


Where Apis names are: mqtt, http, domoticz.


The AFE Firmware is a cool solution if you don’t want to code the HTTP and MQTT protocols yourself. It’s robust enough to link it with the Alexa and Google Home skills. I’d love to see support for HTTPS and other integrations, but for now, this is a quick and easy way to integrate the ESP8285 and ESP8266 switches into your NodeRED environment. I wrote a very basic NodeRED flow to control and display the status of the relays on the dashboard. You can grab these files from below.

Support NotEnoughTech
A lot of time and effort goes into keeping NotEnoughTech alive! If my work helped you out, consider buying me a coffee or check out exclusive rewards available to Patreon supporters.