Opens in a new tab

Three web tools from chiptron.cz: serial monitor, ESP32 firmware flasher, and number base converter

Chromium has supported the Web Serial API for several years. With your permission, a web page can connect to a serial port just like a desktop app. That removes the main reason these little tools would need to be programs. Each one is a single HTML page: communication happens between the browser and the board, nothing is sent to a server – not even firmware you upload – and settings are stored only in the browser’s localStorage. All three share the same look, a Czech/English toggle, and light and dark modes.

Serial Monitor: board output and plots in one place

It’s a classic serial monitor, like the one in the Arduino IDE, with a few extras. Choose a baud rate, click Connect, select a port when the browser asks, and you can see what the board is sending.

  • Baud rate from 9600 to 921600, plus a custom value. Changes take effect after reconnecting, and the tool will remind you.
  • Receive format: ASCII, HEX, or BIN. For ASCII, you can choose an encoding (UTF-8, ISO-8859-2, Windows-1250), which is useful with older devices that send accented characters in Windows-1250.
  • Timestamps: off, at the start of each line, or on a separate line at a chosen interval. That third option works well with fast-moving data.
  • Filter hides lines that don’t contain the search text and highlights matches in the remaining lines. Enable Regex to show, for example, just errors with ^(E|ERROR|CHYBA). An invalid expression simply disables the filter.
  • Sending includes a history navigated with the arrow keys, a line-ending selector (LF, CR, CRLF, or none), and an ASCII/HEX toggle. In HEX mode, type DEAD BEEF and it sends four bytes.
  • Reset device pulses DTR and RTS, restarting the board without unplugging USB. You can also hold either signal manually.
  • Export output to .txt or .csv, with timestamps in both milliseconds and ISO format.

Plotter: send numeric data straight to a graph

The Plotter tab graphs numbers arriving over the serial connection. Just send them separated by semicolons:

Serial.printf("temperature:%.2f;humidity:%.1f;dew_point:%.2f\n", t, h, dp);

Series names are optional; 23.5;60;1013 works too. There’s a reason the default separator is a semicolon: that leaves commas free for decimal values, so 23,5 works too. The Y axis adjusts automatically, but you can lock it to a fixed range. You can also save the graph as a PNG or export the data as CSV.

Two things worth knowing in advance. The Plotter picks up every number it finds in a line, so an ESP32 boot log will produce series out of thin air. And don’t mix values with very different ranges: pressure around 1013 hPa will turn a temperature around 23 °C into a flat line at the bottom.

Find the Serial Monitor at https://serialmonitor.chiptron.cz/


ESP32 Web Flasher: flash firmware without esptool

Flashing a ready-made .bin to an ESP32 is still more awkward than it needs to be. You either install Python and esptool.py, or open a project in the Arduino IDE that you have no intention of compiling. And, most importantly, you need to know the offsets for each file. The bootloader sits in a different place on the original ESP32 than on newer S3 and C3 chips, which is the most common reason a board ends up in a reboot loop after being flashed manually. The Flasher is built on esptool-js, Espressif’s official JavaScript port of esptool, and takes care of all that: it sets the offsets based on the selected chip, then reads the actual chip from the hardware after connecting. If it doesn’t match your selection, it won’t start writing. There are four steps, and each one unlocks only after you complete the previous one.

Drag the .bin files into the drop zone and the tool reads their headers. A firmware image starts with byte 0xE9, a partition table with the pair 0xAA 0x50, and the bootloader is identified by its size. A merged image (firmware.factory.bin from esptool merge_bin) is identified by the partition table inside it at 0x8000. The whole image is written to 0x0, and the tool won’t let you add any other files alongside it. The header also contains a chip_id at offset 12, so firmware for the wrong chip won’t pass.

You don’t need to hunt down boot_app0.bin. Neither the Arduino IDE nor PlatformIO exports it, but a board with an OTA partition layout may not boot without it. It’s 8 kB filled with 0xFF – an empty OTA partition – and the flasher has it built in.

Before writing, you can run Check without writing, which goes through all the rules and displays the flash plan without writing anything to the board. You can also choose to verify the MD5 checksum after flashing and start the serial monitor. The Back up current button reads the entire flash to a file, which is worth doing if the board has firmware you can’t get anywhere else. On a 4 MB device, it takes about a minute.

One reassuring thing to finish with: bad firmware won’t destroy your board. Flash memory can always be rewritten. The only way to permanently kill an ESP32 is by writing its eFuse bits, and this tool never touches them.

Find the ESP32 Flasher at https://esp32flasher.chiptron.cz/


Number base converter: DEC, BIN, HEX, ASCII, and bit masks

This is the smallest of the three, and the one I use most often. There are four fields: enter a value in any one of them and the others update automatically. The important setting is bit width: 8, 16, 32, or 64 bits. The value then behaves like a register – anything that doesn’t fit is truncated, and the tool tells you. Switch to Signed to see the negative interpretation in two’s complement, while the bit pattern stays the same. That’s the moment when it clicks why 0xFF can mean 255 one minute and minus one the next.

The Prefixes and C types tab displays the same value in formats you can paste straight into code (0xFF, 0b11111111, 0o377, $FF, %11111111) and adds badges for the C types it fits into. The Bitwise calculator handles AND, OR, XOR, NOT, and shifts; the result format follows operand A. And the Bitmask helper is the reason I wrote the converter:

uint16_t mask = 0x8421;  // (1U << 0) | (1U << 5) | (1U << 10) | (1U << 15)

// Set bits:     reg |=  mask;
// Clear bits:   reg &= ~mask;
// Toggle bits:  reg ^=  mask;
// Test bits:    if (reg & mask) { ... }

You can set the width to something outside the usual choices, say 24 bits, and the set bits will be preserved. Everything can be copied with one click, and you can share the result as a link because the state is stored in the page URL.

Find the number base converter at https://hexdecbin.chiptron.cz/


What you need

Serial Monitor and Flasher both use the Web Serial API, which is supported only by Chromium-based desktop browsers: Chrome, Edge, and Opera. Firefox and Safari don’t support it. Support on Android is still rolling out and depends on both the Chrome version and the device; it’s not available on iOS at all. The converter is plain JavaScript and runs everywhere.

If the board doesn’t show up in the port dialog, it’s almost always the cable. Plenty of USB cables are power-only and have no data wires, so the board lights up but the computer can’t see it. If that doesn’t solve it, you may be missing the CP2102 or CH340 USB-to-serial driver. Boards with native USB (ESP32-S3 and C3) don’t need one.

The tools are free and ad-free. If one saves you an evening of figuring out what’s wrong, I’d appreciate a coffee.

Share the article:
Show your
Maker soul!
Buy a T-Shirt
Coffee for Chiptron
Give a boost to the next article

Related Articles

Serialmonitor vylepšený o plotter

Anyone who’s ever programmed an Arduino or ESP32 knows the ritual: upload the code, open Serial Monitor in the Arduino IDE, and watch the stream of numbers to check if the sensor is returning sensible values. It works great—until you’re…

Wokwi simulátor — ukázka prostředí

To start playing around and programming with Arduino Uno, ESP32, or Raspberry Pi Pico, you don’t necessarily need to have them on your desk.

CH32V microcontrollers – you’ve probably heard of them. They are sold at a ridiculously low price but come with a very decent set of features, plus they are available in a solder-friendly package. Among the peripherals, you’ll find not only…

ESP32, S2, S3, C3, C6, H2, C5, P4 and the upcoming S31 – which chip to choose for your project? Comparative peripherals table, use-case decision tree, software platforms overview, and tips on where to buy dev boards in Czechia.

Linux 6.11 runs directly on the Xtensa core of the ESP32-S3 without emulation. After login, the shell mirrors to the 9.7″ ED097TC2 e-paper display.

MeteoPlaneRadar 0.7.0: aircraft radar, weather radar, forecast, spot electricity price and the grid mix on a round 2.1″ display. Flashed from a browser.

Trends