OROCA EduBot

ESP32-based robotics platform - designed for hands-on education in embedded programming and robotics.

OROCA EduBot board
ESP32
MCU
240MHz
clock
4MB
flash
520KB
SRAM
22· 4 ADC
GPIO
BLE 4.2+ WiFi
radio
On this page

OROCA EduBot Pinout

23 pins
PinGPIOLabelsStatusCapabilitiesNotes
10T1strappingtouch
22SST2PWMstrappingtouch · spi
34D0T0PWMsafetouch
45SCKD5PWMstrappingspi
512T5PWMstrappingtouch
613LED_BUILTINT4PWMstrappingtouch
714T6PWMstrappingtouch
815T3PWMstrappingtouch
916RXD1PWMuartuart
1017TXD2PWMuartuart
1118MOSID6PWMsafespi
1219MISOD7PWMsafespi
1322SCLD3PWMsafei2c
1423SDAD4PWMsafei2c
1525DAC1PWMsafedac
1626DAC2PWMsafedac
1727T7PWMsafetouch
1832T9PWMsafetouch
1933A3D8T8PWMsafeadc · touch
2034A0strappingadc
2135VBATpower-
2236A2strappingadc
2339A1strappingadc
22 GPIOs broken out 12 free · 10 need care · 0 to avoid

Start with these

12 pins with no boot or system involvement
D0GPIO4RXGPIO16TXGPIO17MOSIGPIO18MISOGPIO19SCLGPIO22SDAGPIO23DAC1GPIO25DAC2GPIO26T7GPIO27T9GPIO32A3GPIO33

Freely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.

Fine - with a little care

10 pins · 10 things to know
T1GPIO0 Bootstrapping pin (enter bootloader when low); internal pull-up. Strapping

Must be HIGH during boot for normal startup; if held LOW on reset, forces flash programming mode.

SSGPIO2 Bootstrapping pin (must be low or floating at reset); internal pull-down. Strapping

If driven HIGH on reset (while IO0 is LOW), selects an unsupported SDIO boot mode, causing boot failure.

SCKGPIO5 Bootstrapping pin; internal pull-up; VSPI CS0 (default SPI chip-select); acts as FSPIWP (flash write-protect) on internal-flash variants. Strapping

Must be HIGH during boot; if pulled LOW at reset, alters SDIO slave timing and may prevent normal boot.

T5GPIO12 Bootstrapping pin; JTAG TDI; sets flash voltage (VDD_SDIO); also HSPIQ (flash data line). Strapping

Keep LOW during boot (internal PD); pulling HIGH at reset selects 1.8V flash mode, causing flash brownout if 3.3V flash is used.

LED_BUILTINGPIO13 JTAG clock pin (TCK); also ADC2 channel 4 / Touch4 input. JTAG

Used for JTAG debugging (TCK); avoid using as GPIO if JTAG is needed.

T6GPIO14 JTAG mode select pin (TMS); also HSPI CLK and PWM-capable GPIO. JTAG

Used for JTAG debugging (TMS); driving it as GPIO may interfere with JTAG or produce spurious signals at boot.

T3GPIO15 Bootstrapping pin; JTAG TDO; controls UART0 boot log output; also HSPICS0 (secondary SPI CS). Strapping

Keep HIGH during boot (internal PU); if LOW on reset, bootloader log is silenced and boot mode may change.

A0GPIO34 Input-only GPIO (no output driver); ADC1 channel 6. Other

Cannot be used as output (no drive capability); only suitable for analog/digital input.

A2GPIO36 Input-only GPIO (no output); ADC1 channel 0, Hall sensor VP. Other

Cannot be used as output; only suitable for input (e.g., analog read).

A1GPIO39 Input-only GPIO (no output); ADC1 channel 3, Hall sensor VN. Other

Cannot be used as output; only suitable for input.

These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.

The OROCA EduBot pinout brings out 23 pins - 22 usable GPIO alongside the VBAT power rails.

For peripherals, I²C is mapped to SDA on GPIO23 and SCL on GPIO22; the SPI bus (MOSI, MISO, SCK, SS) is broken out in full; TX/RX on GPIO17 and GPIO16 cover serial logging and flashing.

On the analog side there are 4 ADC-capable pins for sensors and battery monitoring, 10 capacitive-touch inputs and 2 true DAC outputs.

If you want zero surprises, D0, RX, TX, MOSI and 8 more are free of any such role - the safest first picks. 10 of the exposed pins carry boot-time or system duties on the ESP32 (T1, SS, SCK and 7 more).

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Install your USB-serial driver (CH340 / CP210x) if no port appears. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
GPIO4 toggles - wire an LED and resistor to it, or change the pin to your board's own LED.
Set these in Tools · leave everything else at default
Arduino IDE 2.x - Tools Copy
Board: "ESP32 Dev Module"▸
Flash Size: "4MB (32Mb)"▸
Flash Mode: "DIO"▸
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)" (default)▸
Upload Speed: "921600"▸
▸ every other Tools option - leave at default
Board: ESP32 Dev Module
Flash Size: 4MB (32Mb)
Flash Mode: DIO
Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32 Dev Module
blink.ino Copy
// toggle GPIO4 - wire an LED and resistor to it
void setup() {
  pinMode(4, OUTPUT);
}
void loop() {
  digitalWrite(4, HIGH); delay(500);
  digitalWrite(4, LOW);  delay(500);
}
board to selectesp32dev⧉ copy
platformio.ini Copy
[env:oroca_edubot]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
Find it: PlatformIO Home ▸ Boards, search esp32dev - or type it after board =.
board to selectesp32dev⧉ copy
device.yaml Copy
esp32:
  board: esp32dev
  variant: esp32
  framework:
    type: esp-idf

# blink - GPIO4
output:
  - platform: gpio
    pin: 4
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32dev (same ids as PlatformIO).
esptool doesn't pick board settings - a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x1000 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).
Build details: sketch space 3145728 B · data 327680 B · DIO

Specifications

ESP32 · vs other ESP32 chips →
Compute
MCU
ESP32
Clock
240 MHz
SRAM · Flash
520 KB · 4MB
Radio
Wi-Fi
802.11 b/g/n
Bluetooth
4.2 LE
Antenna
PCB
I/O
GPIO · ADC
22 · 4
UART · I²C · SPI
3 · 2 · 2
PWM
16 channels
Power
USB
-
Serial
-
Boot address
0x1000
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
DIO · DIO
Sketch · Data
3 MB · 320 KB
The OROCA EduBot uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates. Flash mode is DIO with DIO boot mode. The maximum sketch size is 3 MB with 320 KB available for data.

About this board

At its core is the ESP32 - a dual-core Xtensa with both Bluetooth Classic and BLE.

Onboard you'll find an amplifier (MAX98357), an MPU9250 IMU and User buttons.

  • Dual GM15BY geared stepper motors for differential drive (mm-precision movement)
  • Expansion board: SSD1306 128x64 OLED, dual VL53L0X ToF distance sensors, NeoPixel RGB LED, IR receiver and line-tracing floor sensors
  • On-board battery voltage monitoring (VBAT)

Resources

Similar boards