Freenove Ultimate Starter Kit for ESP32-WROVER: lesson by lesson, simulated
Every project of the kit’s Python tutorial, chapter by chapter, as a MicroPython program that runs on a simulated ESP32 in your browser, on the GPIO numbers the tutorial’s code uses: from a blinking LED to a keypad door lock and joining WiFi.
Not affiliated with Freenove. Lesson titles are referenced so you can follow along.
Every lesson in the kit’s order
Lesson numbers and titles follow the Python tutorial of fnk0047-docs v1.0.0. Each circuit uses the kit’s parts on the pins the lesson uses.
44 of the 54 lessons with a circuit run here, 7 of them with a change we name, 10 coming soon.
- 1.1
Blink
Runs hereGPIO 2 switches on and off once a second. On the kit’s board that is its own LED; here an LED on GPIO 2 blinks with the DevKitC’s blue one.
- 1.2
Blink
Runs hereThe same program, now blinking an LED and a 220 ohm resistor on the breadboard from GPIO 2.
- 2.1
Button & LED
Runs hereA push button on GPIO 13 with a 10k pull-up: the LED on GPIO 2 is lit while the button is held.
- 2.2
MINI table lamp
Runs hereEach press of the button flips the LED on or off, like a lamp switch, with the contact bounce filtered out.
- 3.1
Flowing Light
Runs hereA ten-segment LED bar on ten GPIOs, a 220 ohm on each segment: one segment runs up the bar and back.
- 4.1
Breathing LED
Runs herePWM on GPIO 2 ramps the LED’s duty up and down, so it fades in and out.
- 4.2
Meteor Flowing Light
Runs hereEight bar segments on eight PWM channels: a bright head with a dimming tail sweeps up the bar and back.
- 5.1
Random Color Light
Runs hereA common-anode RGB LED on GPIO 4, 2 and 15 jumps to a random color five times a second.
- 5.2
Gradient Color Light
Runs hereThe same RGB LED walks smoothly around the color wheel, red to green to blue.
- 6.1
NeoPixel
Runs hereEight WS2812 LEDs on GPIO 2, filled one by one in red, green, blue and white with the neopixel module.
- 6.2
Rainbow Light
Runs hereA color wheel spread across the eight LEDs, turning a step at a time.
- 7.1
Doorbell
Runs hereHold the button on GPIO 4 and an active buzzer, switched by an S8050 from GPIO 13, sounds.
- 7.2
Alertor
Runs hereA passive buzzer on the same transistor wails like a siren while the button is held, its pitch following a sine wave.
- 8.1
Serial Print
Runs hereprint() sends a greeting and then the board’s running time to the Serial Monitor every second.
- 8.2
Serial Read and Write
Runs hereType a line in the Serial Monitor: input() reads it and the board answers with what you typed.
- 9.1
Read the Voltage of Potentiometer
Coming soonA potentiometer on the ADC, its reading written to the DAC on GPIO 25 so an LED follows the knob.
The simulated ESP32 has no DAC yet, so machine.DAC cannot drive the LED. The knob and the ADC alone run in 11.1.
- 10.1
Read Touch Sensor
Coming soonA bare jumper on a touch pin, and its capacitive reading printed as you touch it.
The simulated ESP32 has no touch sensor yet, so machine.TouchPad has nothing to read.
- 10.2
Touch Lamp
Coming soonA touch on the jumper wire turns the LED on or off.
It needs the touch sensor, which the simulated ESP32 does not have yet.
- 11.1
Soft Light
Runs hereA potentiometer on GPIO 36 sets the PWM brightness of the LED on GPIO 25.
The tutorial’s drawing puts the knob on GPIO 4; its Python code reads GPIO 36, which is what is wired here.
- 11.2
Soft Colorful Light
Runs hereThree knobs on GPIO 36, 39 and 34 mix the red, green and blue of an RGB LED on GPIO 15, 2 and 5.
Wired to the pins the Python code uses; the drawing shows the C chapter’s pins.
- 11.3
Soft Rainbow Light
Runs hereA knob on GPIO 36 turns a rainbow on the eight NeoPixels on GPIO 2.
- 12.1
NightLamp
Runs hereA photoresistor and a 10k on GPIO 36: the darker it gets, the brighter the LED on GPIO 25.
Wired to the pins the Python code uses (GPIO 36 and 25); the drawing shows GPIO 4 and 12.
- 13.1
Thermometer
Runs hereA thermistor and a 10k on GPIO 36, turned into degrees Celsius with the beta equation.
Wired to GPIO 36, which the Python code reads; the drawing shows GPIO 4. The ADC is set to its straight 6 dB range, so the reading is not bent by the 11 dB curve.
- 14.1
Joystick
Runs hereA joystick with X on GPIO 36, Y on 39 and its switch on 14, printed once a second.
Wired to the pins the Python code uses; the drawing shows the C chapter’s GPIO 13 and 12.
- 15.1
Flowing Water Light
Runs hereA 74HC595 on GPIO 14, 12 and 13 walks one lit segment along eight bars of the LED bar graph.
OE is tied to ground, as in the tutorial’s drawing, so the outputs are always on; the tutorial’s code also names GPIO 5 for OE, which is left unwired here.
- 16.1
7-Segment Display.
Runs hereA 74HC595 on GPIO 15, 2 and 4 drives a common-anode digit, counting 0 to F.
- 16.2
4-Digit 7-Segment Display
Runs hereThe 74HC595 sets the segments, GPIO 25, 26, 27 and 14 pick the digit, and 0123 is multiplexed.
- 16.3
LED Matrix
Coming soonTwo 74HC595s scan a bare 8x8 LED matrix to draw a smiley and scroll characters.
The kit’s bare 8x8 LED matrix is not simulated yet. The MAX7219 matrix module is, if you want to try a matrix now.
- 17.1
Relay & Motor
Runs hereEach press of the button on GPIO 15 flips a relay through an S8050 on GPIO 13, and the relay runs a motor.
The motor runs from the board’s 5 V here; the lesson powers it from a 9 V battery on the extension board.
- 17.2
Control Motor with Potentiometer
Runs hereA knob on GPIO 36 drives a motor both ways on an L293D: enable on 13, inputs on 12 and 14.
The motor supply comes from the board’s 5 V rather than the 9 V battery.
- 18.1
Servo Sweep
Runs hereA servo on GPIO 15 sweeps from 0 to 180 degrees and back with 50 Hz PWM.
- 18.2
Servo Knop
Runs hereA potentiometer on GPIO 34 points the servo on GPIO 15.
- 19.1
Stepper Motor
Runs hereA 28BYJ-48 on its ULN2003 board, IN1 to IN4 on GPIO 14, 27, 26 and 25: one turn each way.
- 20.1
LCD1602
Runs hereAn I2C LCD1602 with SDA on GPIO 13 and SCL on 14 says hello and counts.
The display is driven by a small lcd1602.py of Mokxi’s own in place of the tutorial’s two driver files.
- 21.1
Ultrasonic Ranging
Runs, with a changeAn HC-SR04 with TRIG on GPIO 13 and ECHO on 14, its echo timed by hand with ticks_us().
A 1k and a 2k on ECHO bring its 5 V signal down to the 3.3 V the pin takes; the tutorial wires ECHO straight to the pin.
- 21.2
Ultrasonic Ranging
Runs, with a changeThe same sensor read through a small driver file, which does the timing.
A 1k and a 2k on ECHO bring its 5 V signal down to the 3.3 V the pin takes; the tutorial wires ECHO straight to the pin.
- 22.1
Matrix Keypad
Runs hereA 4x4 keypad with rows on GPIO 14, 27, 26, 25 and columns on 13, 21, 22, 23: each key printed as it is pressed.
- 22.2
Keypad Door
Runs hereType 1234 and the servo on GPIO 19 opens the door; each key beeps a buzzer on GPIO 18, a wrong code beeps long.
- 23.1
Infrared Remote Control
Runs hereAn IR receiver on GPIO 15 with a 10k pull-up: each remote button’s code is printed.
- 23.2
Control LED through Infrared Remote
Runs hereRemote keys 0 to 3 set the brightness of the LED on GPIO 14, with a beep from the buzzer on GPIO 13.
- 24.1
Hygrothermograph
Runs, with a changeA temperature and humidity sensor on GPIO 13 with a 10k pull-up, read every two seconds with the dht module.
The kit’s DHT11 is played by a DHT22, read with dht.DHT22: the simulated DHT11 does not answer MicroPython on the ESP32 yet. The wiring is the same.
- 24.2
Hygrothermograph
Runs, with a changeThe sensor on GPIO 18, its temperature and humidity shown on the I2C LCD1602.
The kit’s DHT11 is played by a DHT22, read with dht.DHT22: the simulated DHT11 does not answer MicroPython on the ESP32 yet. The wiring is the same.
- 25.1
Infrared Motion Detector with LED Indicator
Runs hereAn HC-SR501 motion sensor on GPIO 14 lights the LED on GPIO 13 while it sees movement.
- 26.1
Read a MPU6050 Sensor Module
Runs hereAn MPU6050 on I2C (SCL 14, SDA 13): acceleration and rotation, raw and in g and degrees per second.
The registers are read with machine.I2C directly, in place of the tutorial’s mpu6050.py driver.
- 27.1
Bluetooth Low Energy Data Passthrough
Coming soonA Bluetooth LE serial link between the board and a phone app.
MicroPython’s bluetooth module needs the ESP32’s radio, which is not simulated for MicroPython yet.
- 27.2
Bluetooth Control LED
Coming soonA phone sends "led_on" or "led_off" over Bluetooth LE to switch an LED.
It needs MicroPython’s bluetooth module, which is not simulated yet.
- 28.1
Station mode
Runs, with a changeThe board joins a WiFi network as a client and prints the address it is given.
It joins Mokxi’s simulated access point (named in the board’s WiFi properties), not your router.
- 28.2
AP mode
Runs, with a changeThe board starts its own hotspot and prints its settings.
The hotspot starts, but nothing can join it in the simulator, and its IP settings are left at the defaults.
- 28.3
AP+Station mode
Runs, with a changeA hotspot of its own and a client connection to a router, both at once.
The client joins Mokxi’s simulated access point, and nothing can join the hotspot.
- 29.1
As Client
Coming soonThe board opens a TCP connection to a program on your computer and echoes what it sends.
There is no computer on the simulated network to connect to, so a raw TCP client has nowhere to go.
- 29.2
As Server
Coming soonThe board listens on a TCP port for a program on your computer and echoes what it receives.
Nothing on the simulated network can open a raw TCP connection to the board on that port yet.
- 30.1
Camera Web Server
Coming soonThe board’s camera streams video to a web page it serves over WiFi.
It needs a separate camera firmware and the camera module, neither of which is simulated.
- 31.1
Soldering a Buzzer
Coming soonA doorbell soldered on perfboard: a button sounds a buzzer and lights an LED, with no board and no code.
Mokxi does not model soldering on perfboard. The same doorbell idea runs in 7.1.
- 31.2
Soldering a Flowing Water Light
Runs hereThe 74HC595 running light, soldered: the same program and pins as 15.1.
Built on a breadboard here, with the LED bar graph in place of eight separate LEDs.
Lesson list and pins read from Freenove’s online tutorial. The explanations on this page are our own.
Everything the Freenove Ultimate Starter Kit for ESP32-WROVER can build
44 projects use only the parts in this box, ordered from a first blink to the hardest.
Beginner (23)
- MicroPython serial echo: input() on an ESP32
- MicroPython serial print: the ESP32’s running time
- MicroPython WiFi access point mode on an ESP32
- MicroPython WiFi station mode on an ESP32
- MicroPython joystick on GPIO 36, 39 and 14
- MicroPython NeoPixel: eight WS2812 LEDs on GPIO 2
- MicroPython rainbow on eight NeoPixels
- MicroPython servo sweep on GPIO 15
- DevKitC blink
- MicroPython blink on ESP32 GPIO 2
- MicroPython breathing LED with PWM on GPIO 2
- MicroPython DHT sensor: temperature and humidity
- MicroPython flowing light on a ten-segment LED bar
- MicroPython color wheel on a common-anode RGB LED
- MicroPython random colors on a common-anode RGB LED
- MicroPython knob points a servo: GPIO 34 and 15
- MicroPython button on GPIO 13 lights an LED
- MicroPython dimmer: a knob on GPIO 36, an LED on 25
- MicroPython night lamp: a photoresistor dims an LED
- MicroPython motion sensor lights an LED
- MicroPython table lamp: a button toggles an LED
- Motion light
- MicroPython doorbell: a button sounds a buzzer
Intermediate (18)
- MicroPython WiFi AP and station at once on an ESP32
- MicroPython 4x4 keypad on an ESP32
- MicroPython I2C LCD1602: hello and a counter
- MicroPython MPU6050 accelerometer and gyroscope
- MicroPython stepper motor on a ULN2003 board
- MicroPython HC-SR04 distance, timed by hand
- MicroPython HC-SR04 distance with a driver file
- MicroPython knob turns a NeoPixel rainbow
- MicroPython meteor light on eight PWM bar segments
- MicroPython thermometer: a thermistor on GPIO 36
- MicroPython 74HC595 flowing light on an LED bar
- MicroPython 7-segment digit through a 74HC595
- MicroPython DHT readings on an I2C LCD
- MicroPython infrared remote codes on GPIO 15
- MicroPython color mixer: three knobs, one RGB LED
- MicroPython alarm siren on a passive buzzer
- MicroPython remote sets an LED’s brightness
- MicroPython relay switches a motor: button on 15
Add a few parts, unlock more projects
The smallest shopping lists that open the most new projects for the Freenove Ultimate Starter Kit for ESP32-WROVER.
Add Slide switch
Unlocks 3 more projects:
Add Multimeter and Slide switch
Unlocks 5 more projects:
Add Capacitor, Multimeter and Slide switch
Unlocks 7 more projects:
Projects that combine two kits
Own another kit as well? These need parts from both boxes, and neither can build them alone.
The kit’s parts, and what plays them here
The parts in the Freenove Ultimate Starter Kit for ESP32-WROVER, by the names its maker gives them. Each one is in the editor’s parts panel.
- ESP32-WROVER board ESP32-DevKitC V4 Plays the kit’s board: the same ESP32 chip and the same GPIO numbers.
- GPIO Extension Board and breadboard The parts are wired straight to the board’s pins here, so the extension board is not drawn.
- LEDs LED
- LED bar graph LED bar graph, 10 segments
- RGB LED RGB LED Set to common anode, as the kit’s is.
- Freenove 8 RGB LED Module Addressable RGB LEDs Eight WS2812 LEDs in a strip.
- 220 ohm, 1k and 10k resistors Resistor
- Push buttons Pushbutton
- Rotary potentiometers Potentiometer
- Photoresistor Light sensor
- Thermistor Thermistor, 10k NTC
- NPN transistors (8050) Transistor (NPN or PNP) Set to S8050.
- Rectifier diode Diode
- Active buzzer Buzzer
- Passive buzzer Piezo speaker
- Relay DPDT relay
- DC motor DC motor
- L293D Motor driver, L293D
- Servo Hobby servo
- Stepper motor and ULN2003 driver Stepper motor, 28BYJ-48 with ULN2003
- Joystick Thumb stick
- MPU6050 module Accelerometer and gyroscope, MPU6050
- 74HC595 74HC595 shift register
- I2C LCD1602 module Character LCD with I2C backpack
- 1-digit 7-segment display Seven segment display
- 4-digit 7-segment display Four-digit seven segment, multiplexed
- 4x4 keypad Keypad, 4x4
- Infrared receiver Infrared receiver, VS1838B
- Infrared remote Infrared remote, 21 buttons
- DHT11 Temperature and humidity, DHT22 Played by a DHT22 here, wired the same way.
- Infrared motion sensor (HC-SR501) Motion sensor
- Ultrasonic ranging module (HC-SR04) Ultrasonic ranger
- LED matrix (8x8) Not simulated yet; the MAX7219 matrix module is.
- Camera Not simulated: the camera lesson needs its own firmware and the camera module.
- Perfboard and pin headers The soldering projects are built on a breadboard here.
- USB cable and jumper wires The editor connects the board for you, and wires are drawn between pins.
A link and a QR code for this page
Print either one beside a lesson, or tape it inside the box lid. Both open this page.
mokxi.com/k/freenove-esp32
The code is black on white with a quiet border, so it prints and scans at any size from 2 cm up.
Download the QR code (SVG)Make kits? See what we offer kit makers.
Questions about this page
Is this made by Freenove?
No. Mokxi is independent and is not affiliated with Freenove. The page follows the kit’s lessons so you can use the two side by side; the circuits, sketches and explanations are Mokxi’s own.
Do I need the kit?
No. Every lesson that runs here runs in the browser, so you can try them before you buy a kit, or keep going while a part is missing or broken.
Is the code the same as in my manual?
The pins and the parts are the same, and the programs are MicroPython running on the real MicroPython firmware, with the same built-in modules. The code itself is written for this page, with comments that explain each step, and a few small drivers of our own stand in for the kit’s driver files, so it will not match the manual line for line.
What do "with a change" and "coming soon" mean?
A lesson marked "with a change" runs, but something differs from the kit, and the note under it says exactly what. "Coming soon" means we cannot simulate that lesson yet, and the note says why. We do not mark a lesson as running unless it does.
Is it free?
Yes. Every lesson on this page opens with no account. A free account saves your own copies of the circuits.
Other kits
Companion pages for more starter kits.
Start at lesson one
Every project opens in the editor with no account and nothing to install. Run it, change a number, run it again.