Getting Started with FoBE Quill ESP32S3 Mesh

Introduction
The FoBE Quill ESP32S3 Mesh is a compact and feature-rich IoT development platform, integrating Espressif's high-performance multi-protocol SoC ESP32-S3 and Semtech's ultra-low-power sub-GHz radio transceiver SX1262. Designed for IoT applications, it provides a comprehensive wireless connectivity solution supporting IEEE 802.11 b/g/n Wi-Fi, Bluetooth 5, Thread, Zigbee, and LoRa®.
This development board features efficient battery charging management, discrete power path, ultra-low quiescent current DC-DC converter, a 1.3-inch monochrome OLED display (SSD1306 compatible), user-programmable LED and button, MFP expansion connector, reversible USB-C connector, and easy-to-expand pin headers, making it ideal for rapid prototyping and development.
Tech specs
| Board | Name | FoBE Quill ESP32S3 Mesh |
| SKU | F1102 | |
| Microcontroller | Espressif ESP32-S3FH4R2 (Dual-core Xtensa® 32-bit LX7, up to 240 MHz) | |
| USB | USB-C® | Native USB OTG (Full Speed) in the ESP32-S3 Processor |
| Pins | Digital I/O Pins | 20 |
| Analog input Pins | 6 (12-bit ADC) | |
| PWM Pins | 8-channel LED, 2-channel Motor | |
| Communication | UART | Yes, 3x with GDMA |
| I2C | Yes, 2x I2C master/slave | |
| I2S | Yes, 2x | |
| SPI | Yes, 2x SPI with GDMA | |
| CAN | Yes, 1x TWAI® ISO 11898-1 CAN 2.0 | |
| Power | Circuit operating voltage | 3.3 V |
| Input voltage (VIN) | 3.7 - 5 V | |
| DC Current per I/O Pin | 20 mA | |
| Clock speed | SoC | up to 240MHz |
| Memory | Integrated | 4 MB Flash + 2 MB PSRAM |
| Wireless | Integrated | Wi-Fi 802.11 b/g/n (2.4 GHz), Bluetooth® 5 (LE)Embedded SMD ceramic antenna |
| SX1262 on Board | LoRa® (470 MHz for Model SLT, 868 - 915 MHz for Model SHT)iPEX-U.FL connector for sub-GHz external antenna | |
| Display | Size | 1.3 inch |
| Panel | OLED, Monochrome | |
| Resolution | 128 x 64 pixels | |
| Driver | SSD1306 compatible | |
| Buttons | Reset | Yes, 1x |
| User (Boot for Flash) | Yes, 1x | |
| LEDs | User | Yes, 1x Blue |
| Charging | Yes, 1x Orange | |
| Connectivity | Battery | 3.7 V Rechargeable LiPo/Li-ion, JST PH2.0 2-Pin |
| MFP (Multi-Function Port) | JST SH1.0 6-Pin | |
| Debugger (JTAG) | 2.54mm pitch pin header | |
| Dimensions | Width | 60.96 mm |
| Length | 22.86 mm | |
Hardware diagram
The following figure illustrates the FoBE Quill ESP32S3 Mesh hardware diagram.

Mechanical dimensions
FoBE Quill ESP32S3 Mesh is a single-sided PCB with dimensions of 60.96mm x 22.86mm (2.4" x 0.9"), 1.6mm thick, featuring a USB Type-C port and dual through-hole pin headers.

Power supply
The FoBE Quill ESP32S3 Mesh is designed to be powered by a battery and includes charging circuitry for lithium batteries. The charger can be powered from a wall adapter via the USB Type-C connector. The incoming USB voltage is routed exclusively to the charger IC, which monitors the battery and stops charging when it's full or if the temperature is too high (this requires soldering a thermistor to the NTC test point). The output from the charger then powers the development kit through a step-down converter.
A high-efficiency step-down converter (TPS62825) with a low quiescent current generates the 3.3V rail. This power supply powers the entire development kit and connected peripheral modules, supporting a maximum current of 2A.
Peripheral Power
PERI_3V3 is a switchable 3.3V power supply that can be controlled by the MCU to cut off power to the MFP (Multi-Function Port) during idle periods, thus saving power.
PERI_3V3 is controlled by GPIO1:
- Set GPIO1 = HIGH to turn on PERI_3V3
- Set GPIO1 = LOW to turn off PERI_3V3
DISPLAY power is also controlled by the MCU, via GPIO12:
- Set GPIO12 = HIGH to turn on OLED power
- Set GPIO12 = LOW to turn off OLED power
Voltage measurement
Battery voltage measurement is performed using a set of high-precision thick film resistors. The high-side resistor (R1) is 1M Ohm, and the low-side resistor (R2) is 1.5M Ohm. The SoC's ADC pin (GPIO0) is connected to the measurement point:
For a voltage divider circuit with two resistors R1 and R2 in series, where Vin is the input voltage (battery voltage) and Vout is the voltage across R2 (measured by the ADC):
Vout = Vin * (R2 / (R1 + R2))
In this case: Vout = Vin * (1.5M / (1M + 1.5M)) = Vin * 0.6
Therefore: Vin = Vout / 0.6 = Vout * 1.667
By reading the voltage at the measurement point with the ADC, the battery voltage can be calculated by multiplying the measured voltage by 1.667.
General purpose I/Os
Up to 20 multi-function GPIOs are available on the header pins (8 can be used as ADC inputs). These GPIOs operate at 3.3V logic level and can be mapped to various digital peripherals (UART, SPI, I2C, PWM, etc.) for flexible development.
The MFP additionally provides 4 GPIO pins, or directly connected to modules supporting the MFP interface, or expand to two I2C channels.
Display
The FoBE Quill ESP32S3 Mesh features an onboard 1.3-inch monochrome OLED display, 128 x 64 resolution, driven by an SSD1306 compatible controller via I2C.
Buttons and LEDs
There are two buttons and one blue LED connected to dedicated GPIOs on the ESP32-S3 SoC. The following table shows the Button and LED connections:
| Component | GPIO Pin | Active state |
|---|---|---|
| Reset Button | RESET | Low |
| USR Button | GPIO0 | Low |
| USR LED | GPIO11 | Low |
Sub-GHz Radio
The FoBE Quill ESP32S3 Mesh board features an onboard sub-GHz radio module based on the Semtech SX1262 chip. It supports LoRa and (G)FSK modulation and operates in the 433 MHz, 868 MHz, and 915 MHz frequency bands (model dependent). An integrated 1.8V TCXO ensures excellent stability, unaffected by temperature variations.
Key specifications include an active receive current consumption of just 4.2 mA, a maximum transmit power of up to +22 dBm, and high sensitivity down to -148 dBm, providing excellent interference immunity.
The module connects to the ESP32-S3 SoC via SPI for long-range wireless communication:
| SX1262 Pin | GPIO Pin | Active state |
|---|---|---|
| MISO | GPIO41 | |
| MOSI | GPIO39 | |
| SCK | GPIO40 | |
| NSS | GPIO45 | Low |
| RST | GPIO44 | Low |
| BUSY | GPIO43 | High |
| DIO1 | GPIO42 | High |
| RXEN | GPIO46 | High |
Antenna
Wi-Fi/Bluetooth Antenna
The FoBE Quill ESP32S3 Mesh board has an embedded SMD ceramic antenna for the ESP32-S3 SoC, which supports Bluetooth and 2.4 GHz communication.
Sub-GHz Antenna
The FoBE Quill ESP32S3 Mesh board has an iPEX-U.FL connector for connecting an external sub-GHz antenna.
Debug interface
The FoBE Quill ESP32S3 Mesh board provides a debug interface via USB (CDC/JTAG) and edge JTAG pins. This allows developers to program and debug their applications using compatible tools and IDEs.
Light up the board
Prerequisite
Before you begin, please make sure you have the following items:
Hardware
- FoBE Quill ESP32S3 Mesh board
- USB-C Cable (must support data transfer)
- 3.7V Li-Ion/LiPo Battery (optional, for battery-powered applications)
- Sub-GHz Antenna (optional, but if your program enables sub-GHz communication, please be sure to connect the antenna, otherwise, the module will be damaged)
Software
You can choose multiple IDEs for coding the FoBE Quill ESP32S3 Mesh:
Setup the board
To light up your FoBE Quill ESP32S3 Mesh board, follow these steps:
- Connect the Sub-GHz antenna to the iPEX-U.FL connector on the board (if applicable).
If you are using the Sub-GHz radio module, please ensure that you connect an appropriate antenna to the iPEX-U.FL connector. Using the module without an antenna may damage it.
- Connect the board to your computer using a USB-C cable.
Make sure your USB cable supports data transfer (USB 2.0 or USB 3.0 are both fine), and is not a charge-only cable.
-
Launch the Arduino IDE.
-
Install the board package.
Follow documentation Platform Arduino to install the FoBE Quill nRF52840 Mesh board package.
-
Select the board and port.
- Click the board selector in the top left corner of the Arduino IDE.
- Select the port corresponding to your FoBE ESP32-S3 Mesh board.
- Select FoBE ESP32-S3 Mesh from the list of available boards.

-
Open an example sketch.
- Navigate to File > Examples > 01.Basics > Blink.

-
Upload the sketch.
- Click the Upload button (right arrow icon) in the Arduino IDE toolbar.
- Wait for the upload process to complete.

Once the upload is complete, the onboard blue LED should start blinking, indicating that your board is successfully set up and running the example sketch.

Advanced usage
Measuring battery status
The battery voltage can be measured using the ADC (Analog-to-Digital Converter) on the ESP32-S3 SoC. The measurement is performed through a voltage divider circuit, as described in the Power Supply section.
Measuring battery voltage
#include <Arduino.h>
void setup()
{
// Initialize serial communication
Serial.begin(115200);
// Configure ADC
analogReadResolution(12); // 12-bit resolution (0-4095)
analogSetAttenuation(ADC_11db); // For 0-3.3V range
}
void loop()
{
// Read battery voltage
int raw = analogRead(PIN_VBAT);
float vref = 3.3; // ADC reference voltage for ESP32-S3
float vmeas = raw * vref / 4095.0; // Measured voltage at ADC pin
float voltage = vmeas * 1.667; // Calculate actual battery voltage using voltage divider ratio
Serial.print("Battery voltage: ");
Serial.print(voltage);
Serial.println(" V");
delay(1000);
}
Drawing on the display
The OLED display can be controlled using the Adafruit SSD1306 library for Arduino.
Make sure you have installed the Adafruit SSD1306 and Adafruit GFX libraries via the Arduino IDE Library Manager.
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C // Confirm I2C address
// FoBE Logo bitmap data (128x32 pixels)
const unsigned char fobe_logo[] PROGMEM = {
0x07, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xc0, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xc0,
0x07, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xc0,
0x07, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xc0,
0x07, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xc0,
0x07, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0xdf, 0xdf, 0xe0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x1f, 0xcf, 0xf0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0xc3, 0xf0, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x81, 0xf8, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xf8, 0x7f, 0x81, 0xf8, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xf8, 0x7f, 0x80, 0xfc, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0xf0, 0x7f, 0x00, 0xfc, 0x00, 0x00, 0x3f, 0xc0, 0x1f, 0xff, 0xff, 0x80,
0x07, 0xff, 0xff, 0x81, 0xf0, 0xff, 0x00, 0x7c, 0x1f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0x80,
0x07, 0xff, 0xff, 0x83, 0xf0, 0xff, 0x00, 0x7c, 0x1f, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80,
0x07, 0xff, 0xff, 0x83, 0xf0, 0xff, 0x00, 0x7c, 0x1f, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0x80,
0x07, 0xff, 0xff, 0x83, 0xf0, 0x1f, 0xf0, 0x7c, 0x1f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0x80,
0x07, 0xff, 0xff, 0x83, 0xf0, 0x1f, 0xe0, 0x7c, 0x1f, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0x80,
0x07, 0xf0, 0x00, 0x01, 0xf0, 0x1f, 0xc0, 0xfc, 0x1f, 0x80, 0x0f, 0xf0, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x01, 0xf0, 0x1f, 0x80, 0xfc, 0x1f, 0x80, 0x03, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x01, 0xf8, 0x3f, 0x80, 0xfc, 0x1f, 0x80, 0x03, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x01, 0xf8, 0x3f, 0x01, 0xf8, 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x00, 0xfc, 0x3e, 0x03, 0xf8, 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x00, 0xfe, 0x3c, 0x03, 0xf0, 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x00, 0x7f, 0x78, 0x0f, 0xf0, 0x1f, 0x80, 0x03, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x00, 0x3f, 0xf0, 0x1f, 0xe0, 0x1f, 0x80, 0x07, 0xf8, 0x1f, 0x80, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xe0,
0x07, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xe0,
0x07, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xe0,
0x07, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xfe, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xe0,
0x07, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xe0,
0x07, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, 0xe0};
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
Serial.begin(115200);
pinMode(PIN_OLED_EN, OUTPUT); // Setup OLED power pin
digitalWrite(PIN_OLED_EN, LOW); // Turn on the power
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.ssd1306_command(0xA0); // Fix Segment mapping for SSD1312
// Display logo
display.clearDisplay();
display.drawBitmap(0, 16, fobe_logo, 128, 32, SSD1306_WHITE);
display.display();
}
void loop()
{
}
Power Consumption Verification
To verify the power consumption of the FoBE Quill ESP32S3 Mesh, you can use a multimeter or an oscilloscope to measure the current drawn by the board in different modes (sleep, active, etc.).
You can follow the Meshtastic application guide to set up a low-power scenario for measurement.
Applications
Meshtastic
Meshtastic is a popular open-source project that allows you to create an off-grid, decentralized mesh network built to run on affordable, low-power devices.
The FoBE Quill ESP32S3 Mesh is compatible with Meshtastic, allowing you to build your own mesh network using this development board.
Flashing firmware
This tutorial will guide users to flash the FoBE Quill ESP32S3 Mesh to the Meshtastic version, for those who want to use the Meshtastic network.
Preparation
- FoBE Quill ESP32S3 Mesh Board x 1
- USB-C cable x 1
- Computer with Python 3 installed
Wiring
Connect the FoBE Quill ESP32S3 Mesh to your computer using a USB-C cable.
Flash Meshtastic firmware
Download the latest firmware from the FoBE Meshtastic Index.
- UF2
- Hex
Double click the Reset button, there should be a FoBE Boot drive on your PC.

Drag the firmware-fobe_quill_esp32s3_mesh-2.7.3.cf574c7.uf2 file to the drive. The installation will run automatically, then the drive will disappear.
This is the recommended method to install the latest version:
pip3 install --user adafruit-nrfutil
To flash the firmware, run the following command:
adafruit-nrfutil --verbose dfu serial --package firmware-fobe_quill_nrf52840_mesh-2.7.3.cf574c7.zip \
--port <your_device_port> -b 115200
Now you can use the FoBE Quill ESP32S3 Mesh with the Meshtastic network. You can use the Meshtastic app to configure your device and start using it.
More information can be found in the Meshtastic documentation.
Resources
[PDF] FoBE Quill ESP32S3 Mesh Datasheet
[PDF] FoBE Quill ESP32S3 Mesh Schematic