Transmitter line
From V1.0 baseline to V1.2 optimized release, with OLED menus, persistent settings, portal pairing, and filtered analog input handling.
ESP32 controller stack
Browse all transmitter and receiver variants, compare capabilities, search documentation pages, and follow a setup workflow from flash to pairing.
Overview
From V1.0 baseline to V1.2 optimized release, with OLED menus, persistent settings, portal pairing, and filtered analog input handling.
Includes legacy serial-first nodes and direct control receiver variants that map joystick packets into dual-motor PWM commands.
Dedicated pages for changelog timeline, setup wizard, and pinout references support deployment and maintenance workflows.
Firmware
| Folder | Role | Notes |
|---|---|---|
firmware/transmitter/esp-now-oled/v1.2 | Main transmitter | OLED update optimization, EMA filtering, hysteresis deadzone, portal pairing |
firmware/transmitter/esp-now-oled/v1.1 | Older transmitter | Stable UI and settings architecture with portal and telemetry callback support |
firmware/transmitter/esp-now-oled/v1.0 | Initial transmitter | Minimal packet + display baseline implementation |
firmware/receiver/direct-bts/v2.0 | Main receiver | Direct motor logic for dual channels with PWM and response packets |
firmware/receiver/direct-bts-mpu6050/v3.0 | Direct receiver + IMU | ESP-NOW direct drive with MPU6050 estimator and mode-aware control |
firmware/receiver/direct-bts/v1.0 | Basic receiver | Serial monitoring focused variant without integrated motor stage |
bridges/arduino-bts | Addon module | Arduino-side bridge logic for BTS7960 controlled motor systems |
firmware/receiver/fsi6-bts/mpu6050-v1 | FS-i6 bridge + IMU | RC receiver stack with BTS bridge and MPU6050 sensor-assisted control |
firmware/receiver/fsi6-bts/v1 | FS-i6 bridge baseline | RC receiver to BTS bridge motor drive without IMU layer |
firmware/receiver/esp-now-legacy/v1.1.2 | Legacy receiver | Telemetry validation generation and structured reply path |
firmware/receiver/esp-now-legacy/v1.1 | Legacy receiver | First simple one-way receiver callback implementation |
Comparison
| Feature | V1.2 OLED | V1.1 OLED | V1.0 OLED | Direct RX v2.0 | Direct RX MPU v3.0 | Direct RX v1.0 | FS-i6 BTS + MPU | FS-i6 BTS v1 | RX 1.1.2 | RX 1.1 |
|---|---|---|---|---|---|---|---|---|---|---|
| OLED menu UI | Yes | Yes | Basic | No | No | No | No | No | No | |
| Portal target registration | Yes | Yes | No | No | No | No | No | No | No | |
| EMA analog filtering | Yes | No | No | No | No | No | No | No | No | |
| Hysteresis deadzone | Yes | No | No | No | No | No | No | No | No | |
| Telemetry reply support | Optional | Optional | No | Yes | No | No | No | No | Yes | No |
| Direct motor PWM output | No | No | No | Yes | Yes | No | Yes | Yes | No | No |
| IMU integration | No | No | No | No | Yes (MPU6050) | No | Yes (MPU6050) | No | No | No |
| FS-i6 receiver input | No | No | No | No | No | No | Yes | Yes | No | No |
Setup
Upload the receiver first and keep serial monitor open to capture MAC address.
cd firmware/receiver/direct-bts/v2.0
pio run
pio run --target upload
pio device monitor
Upload the transmitter, open settings, and register receiver from captive portal.
cd firmware/transmitter/esp-now-oled/v1.2
pio run
pio run --target upload
ESP-NOW-REMOTE12345678http://192.168.4.15Utilities
Review version milestones and major changes.
Open ChangelogFollow a guided, step-by-step bring-up checklist.
Open WizardOpen a consolidated wiring sheet for transmitter and receiver families.
Open PinoutPackets
typedef struct struct_message {
uint16_t joyX;
uint16_t joyY;
uint16_t potValue;
bool toggle1;
bool toggle2;
bool push1;
bool push2;
} struct_message;
typedef struct struct_reply {
uint8_t sensorValue;
uint8_t counter;
uint8_t flags;
} struct_reply;