logo elektroda
logo elektroda
X
logo elektroda

Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices

divadiow 5133 95
ADVERTISEMENT
  • ADVERTISEMENT
  • Helpful post
    #2 21595406
    p.kaczmarek2
    Moderator Smart Home
    That's great news, can we now make a DIY ESP8266 board with 8MB flash chip, etc?
    Helpful post? Buy me a coffee.
  • Helpful post
    #3 21595791
    DeDaMrAz
    Level 22  
    Amazing news!!

    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices
    Flashing went smooth, confirmed WiFI is not resetting after connecting to network, after manual reset all good, GPIO2 works 🙂

    Info:MAIN:Time 4156, idle 0/s, free 32560, MQTT 0(260), bWifi 1, secondsWithNoPing 4090, socks 0/0 
    Info:MAIN:Time 4157, idle 0/s, free 32560, MQTT 0(260), bWifi 1, secondsWithNoPing 4091, socks 0/0 
    Info:MAIN:Time 4158, idle 0/s, free 32560, MQTT 0(260), bWifi 1, secondsWithNoPing 4092, socks 0/0 
    Info:MAIN:Time 4159, idle 0/s, free 30648, MQTT 0(260), bWifi 1, secondsWithNoPing 4093, socks 0/0 



    Will test more but super cool!!
  • #4 21596138
    insmod
    Level 31  
    Added PWM and UART, fixed Wifi first connect and reconnect.

    UART RX had to be done very primitively, this in a task:
    while(1)
    {
       int len = uart_read_bytes(uartnum, data, 512, 20 / portTICK_RATE_MS);
       if(len)
       {
          for(int i = 0; i < len; i++)
          {
             UART_AppendByteToReceiveRingBuffer(data[i]);
          }
       }
    }


    Looks like it works even on ESP32, even if i'm sure i've tried that before and it didn't work.
    I also tried via interrupt, and it works too, until received data is too big - it crashed.
    Removed ESP-specific timer for QuickTick, moved to task. And i had to increase stack size for it, since without it it crashed immediately.

    Didn't fix OTA (and i have no idea why it doesn't work, since image check passes).
    Disabled PWM for GPIO0, it bootloops with it enabled. Worked fine if enabled manually.
  • ADVERTISEMENT
  • #5 21596140
    DeDaMrAz
    Level 22  
    >>21596138

    WiFi is fixed, confirmed.

    PWM is Inverted, but working. PWM_n works as expected (also inverted)

    Smooth transition also works, flag 18

    Can't check UART now.


    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices

    [00:43:42]Info:MAIN:Time 411, idle 0/s, free 27140, MQTT 0(26), bWifi 1, secondsWithNoPing 344, socks 0/0 
    [00:43:43]Info:MAIN:Time 412, idle 0/s, free 27140, MQTT 0(26), bWifi 1, secondsWithNoPing 345, socks 0/0 
  • ADVERTISEMENT
  • #6 21596199
    divadiow
    Level 38  
    >>21595406
    :)
    https://www.elektroda.com/rtvforum/topic4074860-90.html#21238166

    Added after 1 [hours] 5 [minutes]:

    1707_merge_874bdb527589
    2mb version flash and initial boot of that 8mb ESP-01S:

    Code: Text
    Log in, to see the code


    OTA attempt - fatal exception on reboot
    Code: Text
    Log in, to see the code


    Added after 4 [minutes]:

    same OTA experience on 4mb board

    Added after 16 [minutes]:

    insmod wrote:
    Didn't fix OTA (and i have no idea why it doesn't


    Lol. Misread this. Oh well

    Added after 15 [minutes]:

    curious about something I've just read. Does OTA do the same on a real 2mb flash ESP8266? I only have 4mb+
  • Helpful post
    #7 21596825
    insmod
    Level 31  
    Fixed OTA, problem was partition layout. Apparently ESP8266 had a problem with offsets.
    Need 1MB flash test.

    A question: What platforms need PWM duty update every 25ms? I had to hack ESP8266 and ESP-IDF pwm code so that it would update duty only once. Otherwise it spams the console.
  • #8 21596877
    DeDaMrAz
    Level 22  
    insmod wrote:
    What platforms need PWM duty update every 25ms? I had to hack ESP8266 and ESP-IDF pwm code so that it would update duty only once. Otherwise it spams the console.


    That may be a remnant of the IR testing way back on Beken N.

    Added after 1 [hours] 46 [minutes]:

    insmod wrote:
    Fixed OTA



    Confirmed! Pin setup is retained will check more later.
  • #9 21596997
    p.kaczmarek2
    Moderator Smart Home
    Nice progress! I think we can move PWM update to be done only on change.
    Helpful post? Buy me a coffee.
  • Helpful post
    #10 21597042
    insmod
    Level 31  
    Merge-ready, i believe.
    Added powersave (enabled by default from SDK)
    Added deepsleep with timer (it shuts down, but doesn't wake up for me)
    Fixed 1M build.

    No gpio deep sleep on SDK side.
  • #11 21597058
    p.kaczmarek2
    Moderator Smart Home
    Does it support OTA from Tasmota? Or not, due to partitions difference?

    I we wanted to run it with 8MB flash, we need to partition table, like platforms/ESP8266/partitions-2mb.csv ?
    Helpful post? Buy me a coffee.
  • #12 21597059
    DeDaMrAz
    Level 22  
    I wanted to ask that question as well. After digging through my pile of module I have all sorts of chip sizes and of course various flash chips as well that I can add.
  • #14 21597072
    DeDaMrAz
    Level 22  
    insmod wrote:
    What to do with 8mb flash? Max firmware size, from what i remember, is 1MB. 6mb LFS?



    WebApp on a device or something of that nature for example.
  • #15 21597082
    insmod
    Level 31  
    Well, web app needs about 300kb for a full dist (287278 bytes in my example, after i cut startup.js a little to remove all folders, as i'm not sure if they work in OBK).
    That means that it could be loaded on all bekens, LN882H, RTL8710A, 8mb or more RTL8720D, barely on BL602 (with new partitions, on old it fits fine) and almost on RTL8710B (it has only 274432b).
    I tried it in my WBRG1 and it works.

    Of course if it was minified, it would probably fit on every device (at least minus ~11kb just by minifying templateParser.js and httpVueLoader.js).
  • #16 21597084
    DeDaMrAz
    Level 22  
    Idea is to expand it with more features so space is always welcome ( like GPIO doctor for example) webapp is somewhat neglected for some time now.

    On the other hand that WBRG1 has BT and as mentioned before BTHome would be a massive plus for that gateway, and BT in general is a better feature than webapp across devices in my opinion.

    Data logging is another feature that was talked about.

    Another opinion of mine is that we have reached a super wide coverage of devices and we should maybe focus on polishing UI and UX across the board. New features, drivers etc per request and finally doing per device build. I am making a small cluster that possibly can be used for testing that so after deployment we can expand on that topic if it is of interest of course.

    Again just my opinions.
  • ADVERTISEMENT
  • #17 21597086
    insmod
    Level 31  
    Completely minified web app weigh 195261 bytes. Older vue.min.js allows for additional ~7-8kb size reduction.
    On what it wouldn't fit: ECR6600, ESP8266, 2mb ESP-IDF, all XRs, RTL8710C, W800, W600
    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices

    I like UI as it is now, minimalistic and fairly easy to understand.
    I plan to experiment with BT after i port RTL87xxDA (AmebaDplus, Tuya WR11-series, I shelved OPL1000 for now).
    Or perhaps after i try to create easyflash config generation on windows.
  • #18 21597087
    DeDaMrAz
    Level 22  
    Nice on the "minification"!

    It's not that I don't like the UI but if you browse issues or PR's for a bit you'll find so many similar questions regarding UI, webapp, overall UX that is not that welcoming to new users. For example we got some legacy stuff still lingering on the home page, this comes to mind

    (Cfg size: 3584, change counter: 6, ota counter: 1, incomplete boots: 1 (might change to 0 if you wait to 30 sec)!


    Not to mention flags... which I personally like but for new users they are confusing AF.

    This project is dependent in a way from new users so we might as well pay more attention to them and got some of those "complaints" resolved.

    AmebaDplus can be a nice addition but I was ready to bet money that OPL was next 😁

    I must stress again, I am just thinking out a loud!

    P.S. thank you for suggesting another device to look for 😁also to suggest this board as it should be pin compatible with Dplus - https://www.aliexpress.com/item/1005007255730323.html?
  • #19 21597090
    insmod
    Level 31  
    >>21597087
    This board uses T2-U, which is just CBU with a different name (T2 is Tuya-flavored BK7231N).
    Didn't you already have a BW20 module? It is RTL8711DAF (Dplus).
    After Dplus, i'll probably port RTL8720E (AmebaLite), since it uses the same SDK.
    RTL8720ECF: https://aliexpress.com/item/1005007814225820.html

    Additional challenge for me - to port without modifying anything in SDK, like i've done ESP-IDF.
  • #20 21597094
    DeDaMrAz
    Level 22  
    At this point I have no idea what I have in the box of modules, yesterday I found a W600 module that I forgot I ever ordered, so... maybe 😁

    But as every good alpha tester I'll order some more of course 🙂 pair of each because science!

    What stalled on OPL? I've seen some sonoff devices in the wild using it
  • #21 21597095
    insmod
    Level 31  
    >>21597094
    The lack of AP mode.
    You did have BW20, i remember you posted an ali order screenshot with it.
  • #22 21597097
    DeDaMrAz
    Level 22  
    insmod wrote:
    You did have BW20, i remember you posted an ali order screenshot with it.


    You made me look!! And yes, you are 100% right, I have them all... even some exotic ones..

    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices
  • #24 21597099
    DeDaMrAz
    Level 22  
    Yeap, all of them...

    Remember I was absent for more than 6 months... because life, and work, and shit... completely forgot about it all. I've been playing catchup for last couple of days, maybe weeks - not even close to get the hang of things....

    Thank you for the reminder!
  • #25 21597261
    divadiow
    Level 38  
    insmod wrote:
    There is a possibility to OTA from Tasmota, but firmware must be built manually with this guide


    tried anyway to see what it would do. same with Tasmota and Tasmota-4M

    Code: Text
    Log in, to see the code


    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices

    Added after 8 [minutes]:

    cool. OTA log

    Code: Text
    Log in, to see the code
  • #26 21597272
    p.kaczmarek2
    Moderator Smart Home
    I like current UI as well. Maybe we could try to flash WebApp automatically with BK7231 Easy UART Flasher, but auto-download button/mechanism seems easier.

    We may also consider adding this change to all platforms:
    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices
    This seems to make LFS faster with no real drawbacks at all
    Helpful post? Buy me a coffee.
  • #27 21597496
    DeDaMrAz
    Level 22  
    I think I was misunderstood about the IU - I like it as well and don't want to change it in general just to touch upon it and remove some legacy stuff for example and provide some new information on there.
    My idea originated from tasmota and how it handles internal chip temperature - with a setoption146 "flag"/command. Maybe it can be done in OBK in a similar fashion, as I remember there are some chips that don't have internal temp probe, so we can move those "new" features" to a flag for example.
    Again to ping @max4elektroda whose idea on that topic I liked (not tested by me).

    And on the polishing UI I was talking mostly about some features that I personally find annoying and answering the same questions from time to time - for example

    "why does it take two back click to go back from config to home page??"


    Or

    "does flag 37 actually work??"


    Those kind of things can (I think) improve on UX just by little tweaks on the UI. I think I am capable of testing almost anything in OBK at this point and I volunteer to test and verify whatever need be.
  • Helpful post
    #28 21597649
    insmod
    Level 31  
    And another idea for device-hosted web app:
    If we could somehow enable Content-Encoding gzip specifically for web app page/scripts, then they could be stored precompressed.
  • Helpful post
    #29 21597659
    DeDaMrAz
    Level 22  
    >>21597649

    Imagine a webapp running on that little gateway (8Mb of space) as well + zigbee + BTHome... how nice would that be??
  • #30 21597813
    p.kaczmarek2
    Moderator Smart Home
    Gzip may be a good idea. The header is not compressed, and it still plain text, it looks like somewhat like that:
    
    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Encoding: gzip
    Content-Length: 1234
    
    

    Then compressed payload follows.

    Maybe we could add some kind of internal mechanism to LFS access, for example, when MyScript.vue is requested, LFS checks first for MyScript.vue.gzip and if present, returns it as a compressed stream, otherwise fallbacks to default behaviour.

    We would just need an "Upload GZIpped" button on LFS page.

    Added after 1 [minutes]:

    PS: Here is a little LFS profiller, I will add it to web app soon:
    Code: HTML, XML
    Log in, to see the code


    Flashing OpenBeken/OBK firmware to ESP8266/ESP8285 devices
    Helpful post? Buy me a coffee.

Topic summary

✨ The discussion centers on flashing a 2MB OpenBeken/OBK firmware onto a 4MB ESP8266 board. Initial boot logs confirm successful recognition of the 4MB flash size with a detailed partition table including OTA data, WiFi NVS, two OTA app partitions, and an LFS partition. Users report smooth flashing and stable WiFi connectivity without resets after manual reboot. GPIO2 functionality is confirmed. Subsequent updates include added PWM and UART support, with UART implemented via a task-based polling method to avoid crashes seen with interrupt-driven approaches. PWM operates inverted but functional, with PWM_n also working as expected. OTA updates remain non-functional despite passing image checks. Adjustments to QuickTick timer handling and stack size were necessary to prevent crashes. Disabling PWM on GPIO0 resolved bootloop issues. Overall, the firmware demonstrates improved hardware compatibility and peripheral support on the 4MB ESP8266 platform.
Generated by the language model.

FAQ

TL;DR: OpenESP8266 now boots on 1MB, 2MB, 4MB, and 8MB ESP8266/ESP8285 boards, and one developer called the OTA fix "merge-ready" after partition issues were corrected. This FAQ helps builders flash, size, and troubleshoot OpenBeken on ESP8266-class hardware with ESP-Flasher or esptool. [#21597042]

Why it matters: ESP8266 support is usable for testing and many real devices, but flash mode, partition size, OTA headroom, and pin indexing still decide whether a build boots cleanly or crashes.

Topic 1MB flash 2MB flash 4MB/8MB flash
Firmware style seen in thread factory app OTA layout OTA layout
Example boot result confirmed boot confirmed boot after DOUT flashing confirmed boot
LFS space seen 64KB 128KB 192KB in shown 4MB/8MB layouts
OTA status in thread fixed build exists fixed after partition change fixed after partition change

Key insight: Most "bad firmware" symptoms in this thread were not random. They came from three concrete causes: wrong flash mode, wrong partition layout, or too little free flash/RAM for OTA and runtime features. [#21596825]

Quick Facts

  • Boot logs in the thread show OpenESP8266 running with SPI flash sizes of 1MB, 2MB, 4MB, and 8MB. The reported AP fallback IP is 192.168.4.1 after first boot. [#21599222]
  • A full device-hosted WebApp was measured at 287,278 bytes before aggressive minification and 195,261 bytes after complete minification, which is why gzip and LFS matter on small flash targets. [#21597082]
  • On one stable ESP8285 1MB test, free heap stayed around 28,680–29,360 bytes with Wi-Fi connected and no extra drivers started. That is workable, but not generous. [#21599222]
  • OTA failures were traced to partition layout first, then later to oversized builds and active runtime load. One failing OTA log showed a mapped segment of 732,660 bytes before image validation failed. [#21757126]

How do I flash OpenBeken/OpenESP8266 firmware onto an ESP8266 or ESP8285 with ESP-Flasher or esptool, including the correct boot mode wiring and flash address?

Flash the UART or factory image at address 0x0 with the chip in download mode. 1. Wire TX↔RX, hold GPIO0 to GND, and power the module. 2. In ESP-Flasher, write the image to 0x0; with esptool, the thread shows write_flash 0 ...bin. 3. If boot fails on ESP8285-class boards, retry with --flash_mode dout. One tester said the ESP-12F process was the same as ESP-01: GPIO0 low, normal serial wiring, flash to 0x0, and boot succeeded. [#21757469]

Why does OTA update on OpenESP8266 fail with errors like "unaligned segment length 0xffffffff" or "image is corrupted" when the build gets too large?

OTA fails because the second app slot no longer has enough room for the new image. In one failing case, the OTA log mapped a segment of 732,660 bytes and then reported unaligned segment length 0xffffffff and Image validation failed. Later testing showed OTA started working again after removing some compiled drivers and, in practice, stopping running drivers before update. The thread ties this to image size and memory pressure, not to Wi-Fi alone. [#21758993]

What is LFS in OpenBeken/OpenESP8266, and why do logs show messages like "lfs is absent" after first boot?

LFS is a small on-device file system used to store files such as scripts and WebApp assets. "LFS is a flash file system that stores user files inside a dedicated partition, separate from the app image, so firmware can read scripts or web assets after boot." Fresh boots often show lfs is absent because the partition exists in the table but no files have been uploaded yet. The same logs also show failed to get file autoexec.bat, which matches an empty LFS rather than a bad firmware flash. [#21595385]

What is GPIO_NUM_NC in the ESP8266 pin mapping, and how is it used for hidden or non-usable pins like flash-connected GPIOs?

GPIO_NUM_NC marks entries that exist in the index map but should not be driven as real GPIOs. In the proposed ESP8266 remap, indexes 6, 7, 8, and 11 were set to GPIO_NUM_NC, labeled NC, and hidden in the UI so the index numbers could line up with real IO names like IO12 and IO16. The same discussion added a separate ADC entry while keeping unusable flash-connected pins out of normal configuration. [#21759275]

Which partition layout should I use for OpenESP8266 on 1MB, 2MB, 4MB, and 8MB flash chips?

Use the layout that matches the actual flash size and OTA strategy shown by the working boots. The 1MB build used nvs at 0x9000, factory app at 0x10000, and lfs at 0x0f0000. The working 2MB DOUT build used otadata, app0 at 0x10000, lfs at 0x0f0000, app1 at 0x110000, and nvs at 0x1f0000. The 4MB and 8MB examples kept app0/app1 at 0x10000 and 0x0f0000 with larger LFS space around 0x1d0000. [#21597261]

Why does an ESP8266 or ESP8285 boot only after flashing with --flash_mode dout, even when the boot log later reports QIO?

Because the flash write mode used during programming can still decide whether the image lands in a bootable form. In the thread, a 1MB ESP8285H08 booted only after esptool write_flash 0 ... --flash_mode dout, even though the later log still printed SPI Mode : QIO. A separate 2MB case also failed until a flasher run produced a boot log that explicitly showed SPI Mode : DOUT. The practical fix was simple: use DOUT when the module refuses to boot after normal flashing. [#21599222]

What’s the difference between ESP8266 and ESP8285 when running OpenBeken, especially regarding RAM, internal flash, and supported firmware sizes?

They run the same firmware class with the same RAM budget, but they differ in flash packaging. One developer stated that ESP8266 and ESP8285 have the same amount of RAM, while ESP8285 has built-in 1MB flash and ESP8266 uses external SPI flash. That is why the thread shows ESP8285 tests mainly on 1MB and 2MB parts, while ESP8266 boards were tested with 2MB, 4MB, 8MB, and even 16MB-modified hardware. Runtime limits still come mostly from RAM, not just flash size. [#21599257]

How does OpenESP8266 OTA from Tasmota differ from normal OBK OTA, and why does the RTOS SDK vs NONOS SDK mismatch matter?

Tasmota-to-OpenESP8266 OTA is not the same as normal OpenBeken OTA because the frameworks differ. The thread states that Tasmota uses the Arduino framework with NONOS SDK, while OpenESP8266 uses ESP8266 RTOS SDK, so their image expectations and upgrade paths are incompatible by default. A manual bridge is possible only with a special FOTA workflow from Espressif. Standard OBK OTA assumes an RTOS-compatible partition layout and image format, which is why direct Tasmota-style upgrades are not the normal path. [#21597062]

Why is the DHT11 or other sensor shown on the wrong pin number in the OpenESP8266 home page or console when using higher GPIOs like IO14-IO16?

The display is wrong because the UI and some console paths used pin indexes instead of real GPIO aliases. The thread shows DHT11 configured on GPIO14 appearing as pin 10, and other tests found pins 14–16 displayed as 10–12. One maintainer explained that this happens because IO6–IO8 are flash pins and were removed from the visible list, so later entries shift. The sensor was not necessarily wired wrong; the mapping layer was. [#21691202]

What causes Wi-Fi connection problems on OpenESP8266, including first-connect issues, reconnect bugs, and failure to join WPA3 networks?

Early Wi-Fi failures came from unfinished porting, and WPA3 still did not work in the thread. One developer explicitly posted that they fixed Wi-Fi first connect and reconnect, and later testers confirmed the Wi-Fi fix. By contrast, a later log shows repeated handler warnings and immediate disconnect when joining a WPA3 SSID, with no IP address assigned. So first-connect and reconnect bugs were fixed during July 2025, but WPA3 remained unsuccessful in the reported tests. [#21614400]

In OpenBeken on ESP8266, how should pin indexes map to real pin names like IO12 or IO16, and what is the best way to avoid confusion in startDriver commands?

Map indexes so they match real IO numbers, or accept string pin names in commands. The thread shows why users get confused: on the older ESP8266 mapping, IO12 could require index 8 in startDriver, not 12. A proposed fix used NC placeholders for missing pins so index 12 equals IO12 and index 16 equals IO16. Another maintainer preferred parsing names like IO12 directly in commands, which avoids platform-specific mental math entirely. [#21759160]

Where does the free heap go on ESP8266 when enabling MQTT, Home Assistant discovery, Berry, or multiple drivers, and how can low-memory crashes be reduced?

It goes into protocol buffers, task stacks, HTTP client work, and discovery payloads, and ESP8266 does not have much spare RAM. One report shows free heap dropping from 34,284 to 16,812 bytes after Home Assistant discovery, with malloc failure causing a crash. Berry also triggered a Stack canary watchpoint in the HTTP client path, and maintainers said there is simply not enough RAM for heavy features together. Reduce crashes by compiling fewer drivers, disabling active drivers during OTA, and avoiding Berry execution through the HTTP client path. [#21819086]

Which OpenBeken features have been confirmed working on ESP8266 so far, such as PWM, UART, DHT, DS18B20/DS1820, BMP280, ADC, Charts, MAX72XX, and WebApp hosting?

Many core features now work, but some remain rough. Confirmed in the thread are PWM, UART, Wi-Fi reconnect, DHT11/DHT22, DS18B20/DS1820, BMP280, Charts, MAX72XX, and device-hosted WebApp tests. ADC was later added to HAL and UI work was underway. Limits remain: PWM was once inverted, GPIO0 PWM could bootloop, OTA had size limits, and some sensor timing on ESP8266 needed hacky workarounds. Still, by late 2025 multiple testers had real, repeatable success across these drivers. [#21758993]

How can gzip-compressed WebApp files be stored and served from LFS in OpenBeken to save flash space on ESP8266 and other small devices?

Store the WebApp files precompressed in LFS and return them with Content-Encoding: gzip. The thread proposed an LFS lookup that checks for filename.gzip first, then streams that compressed file while keeping a normal fallback path. A maintainer then implemented an "upload as GZIP" button and simple gzip header handling in firmware so the browser decodes the file on the fly. This matters because the fully minified WebApp was measured at 195,261 bytes, which is large for small-flash targets. [#21601376]

ESP8266 vs Tasmota for OpenBeken migration: which JSON naming and sensor reporting conventions should be followed for compatibility with DS18B20, MQTT, and external scripts?

Follow Tasmota naming where possible, especially for DS18B20 JSON keys. The thread shows a real compatibility issue: OpenBeken originally reported DS1820, while Tasmota used DS18B20, forcing external scripts to handle both keys. Maintainers agreed that OBK should follow the Tasmota standard, then changed it and also checked Tasmota’s multi-sensor format using names like DS18B20-1 with an Id field. That keeps MQTT consumers and simple PHP or Home Assistant tooling more portable. [#21702907]
Generated by the language model.
ADVERTISEMENT