Note :
Interface in firmware is optimized for 4.2' displays with 400x300 resolution, implementation of support for other resolutions is possible, but requires optimization of interface and writing a driver for a specific display.
The firmware is partially compatible with 1.5' displays - the interface output adapted for 200x200 resolution is implemented, you can output your own graphics, but such displays were not in priority and smaller versions of widgets & fonts suitable for the screen resolution were not ready yet. (default interface example)
see also List of supported displays
To flash the firmware, you need to install Microsoft Visual Studio and the Platform IO extension.
The platformio.ini file contains a configuration suitable for ESP8266 D1 Mini and similar boards. For the ESP32 microcontroller, you can rename or copy the configuration from the platformio.esp32.ini file
The ESP32 configuration is prepared for the YD-ESP32-23 - esp32-s3-devkitc-1 (ESP32S3, 8MB FLASH) board and may differ from what you need - this depends on the specific board/model of ESP32 - different models may differ in the number of pins as well as pin numbering and overall configuration.
If the configuration does not match, you can search for an example configuration on the PlatformIO website
For initial testing, you can upload the firmware without connecting external modules (display, temperature sensor). See the assembly diagram for connecting the display and other options.
#define WAVESHARE_BW_42_UC8176 | WaveShare 4.2 BW rev 2.1 |
#define WAVESHARE_BW_42_SSD1683 | WaveShare 4.2 BW 4-color grayscale rev 2.2 WeAct 4.2 BW |
#define WAVESHARE_RY_BW_42_UC8176 | WaveShare 4.2 BW + Yellow rev 2.1 V2 WaveShare 4.2 BW + Red rev 2.1 |
#define HELTEC_BW_15_S810F | Heltec 1.5 BW |
Russian - #include <LocaleRu.h> #include <ui/out/locale_ru/locale.h>
English - #include <LocaleEn.h> #include <ui/out/locale_en/locale.h>
For security reasons, it is not necessary to explicitly specify your home WiFi network settings in the settings file as the device by default creates an access point if no settings are present or the WiFi network is incorrectly specified
Default access point
SSID : VOLNA42-EINK, password : volnaaccess
By connecting to this access point and going to http://192.168.1.1/, you can set your WiFi network settings for correct time auto-detection and sensor data synchronization.
If this is the battery version, temporarily turn off the BAT_SENSOR switch and restart the weather station (turn off \ turn on or press RST).
The weather station will then switch to continuous operation mode and display its IP address on the screen for further configuration.
After configuring, turn BAT_SENSOR back on and restart the device (via the web interface is fine) -> the device will return to power-saving mode
This is an optional integration setup. In this section, you will find information on how to connect the weather station to the smart home system so that it transmits its data from the BME280 sensor. It is assumed that you already have a server set up with an MQTT broker and a smart home control system - Domoticz or Home Assistant.
All requests should be made relative to the root URL path
Example request: Rebooting the device
GET /api/cui/select?filename=fairy
GET /api/clear
Clears the screen and pauses all events (partial and full screen auto-update) until the screen is manually refreshed through the control panel or until a full reboot
GET /api/update
POST /api/reboot?reboot=1
POST /api/cui/format?confirm-format=1
POST /api/reset?reset=1&reset-wifi=1
POST /api/clearrom?confirm-clear=1
Completely clears the EEPROM memory (where all settings and WiFi authorization data are stored) and replaces the data with zero values.
POST /api/partialtest
Force partial update
Some unofficial clones of D1 Mini boards may have the same problem. Check beforehand if pin D0 is correctly connected to the RST pin (for correct re-flashing it should be connected via a 510 ohm resistor, but for sleep mode tests just a jumper is enough).
The firmware provides several sleep modes for "cheap clones" case, different wakeup methods are defined in the UserDefines.h file by the FIX_DEEPSLEEP parameter. (if the parameter is not present, download the actual firmware from the main project branch at GitHub)
Try setting the FIX_DEEPSLEEP parameter to 1 or 2 and check again. If the problem persists, the microcontroller is probably damaged or has more serious problems
By default weather station trying to sync time by NTP server. Device must be connected to WiFi hotspot with internet connections allowed.
If you sure that there is no any problem with internet connection, try to reboot device to reinit connection, or change NTP server in settings on any other
To reinit time without restart you can use this option (then after information about command successfull executed -> "Screen controll" -> "Refresh screen")
If you dont have internet connection, you can set time manually, by setting up "Date & Time" setting in "General options". Optionaly remove "Timezone" option to exclude additions time correction
Relevant for ESP8266
Relevant for ESP32
If you are sure that the correct display type is selected in UserDefines.h (there are basically two options - displays with the SSD1683 prefix or UC8176 - no output will occur if the controller is incorrectly specified), it is likely that the pins are not connected correctly or there is a contact issue somewhere. Double-check that all pins are connected properly. If you are not sure if the ESP board itself is functional, try connecting display to another ESP board. You can check the functionality of the ESP or individual pins by writing a simple sketch implementing a button or LED blinking. But usually, if the ESP board is defective, problems would start during the flashing phase (either flashing intermittently or not at all). My issues were typically resolved by double-checking all pins and running some minimal examples from the manufacturer to confirm that the error was not in my code.
The contact for the BUSY pin might be faulty, or its defined wrong in UserDefines.h -> EPD_BUSY_PIN (e.g., it could be swapped with EPD_RST_PIN).
The manufacturer usually specifies whether this mode of operation is supported. Even if the display controller supports partial updates, it may not work if the board manufacturer does not claim it. Check examples provided by the manufacturer to see if there are methods for partial output.
If the issue persists consistently and no additional factors other than the connected display affect it and a complete power-off does not help, check which pin is causing this behavior and try reassigning what is connected to it to another pin.
I have tried using remaining pins, for example, for switches, and this led to similar issues since ESP8266 only has a few GPIO pins that are safe: GPIO14, GPIO12, GPIO13, GPIO4, GPIO5; all other pins should not be in a certain logical state at startup.
The pinout for connecting the display has been chosen to avoid disrupting the ESP's operation and it did not cause me problems when connecting different displays. However, it may not suit you if you find that the issue is specifically with the display connection (e.g., if a new, untested screen is used that outputs different signals).
Here is also an alternative pinout that I used earlier with pin D4 through a resistor. The device sometimes could hang after flashing and restarting via UART with different displays, but in normal operation, everything worked without problems.
This happened with one ESP controller, it might have been defective, but after replacing the ESP board with another, the problem disappeared. In case ESP8266 you can also try to select different wakeup method in the UserDefines.h file by changing the FIX_DEEPSLEEP parameter.