Distance in cm, from about 2 cm to 4 m. Shows 999.0 until the first good reading.
Signal: Trigger (GPIO 15) sends a 10 µs pulse. Echo (GPIO 2) is timed, and the board gives up after 24 ms.
Week 12: Distance & Echolocation (HC-SR04)Technical details · IoT Kit V1.0
See where each part plugs in, how the board gets power and joins Wi-Fi, what it remembers, and how to run it safely on a school network.

MakerBuddy is a learning board built around an ESP32, a small computer with Wi-Fi. The kit's board is the MakerBuddy IoT Kit V1.0. It comes in purple or green, and both colours are the same board.
This page matches firmware 2.10 and web app 3.6. It was checked on 28 October 2026. If this page and the printing on your board ever disagree, trust the board.
| Spec | What the board has |
|---|---|
| Brain | A 30-pin ESP32 DevKit. Its ESP32 module has Wi-Fi and Bluetooth built in |
| Program space | Firmware 2.10 is 1,284,130 bytes, about 97% of the default program space. There is little room for extra code |
| Wireless | 2.4 GHz Wi-Fi (802.11 b/g/n) only. MakerBuddy does not use the Bluetooth |
| Power | 5 V through the DevKit's micro-USB port |
| Parts | 6 built into the board, 9 that plug into labelled sockets |
| Connections used | On/off pins, analog inputs (ADC1), dimming (PWM), I²C for the screen, 1-Wire for the waterproof probe |
| Control | Web requests (HTTP on port 80) and a live link (WebSocket at /ws) on your own network. No account and no login |
| Saved settings | The ESP32's own storage (Preferences, also called NVS), under the name iot-kit |
| Live readings | Read every second, and sent to dashboards about every 2 seconds |
/ws) on your own network. No account and no loginiot-kitEvery kit has the board with its ESP32 DevKit, 6 parts built into the board and 9 parts that plug in. Each socket is labelled, and most plugs fit only one way round. The distance sensor and the text screen use four wires that you match by name.
Each card shows the part's pin (GPIO), what the board reports, the signal it uses and the lesson that teaches it. Pick a card to ring the part on the picture. Each picture opens full size, so you can zoom in on a phone.
The kit photo at the top of this page also shows connector cables, a small bulb, a small fan, craft sticks and a screwdriver. Ask us to confirm what ships with your order.
The board runs on 5 V from a USB cable plugged into the ESP32 DevKit's micro-USB port. The DevKit turns the 5 V into the 3.3 V its chip needs.
The board joins your own Wi-Fi, and the dashboards talk to it straight over that network. You set it up once per board and network. The step-by-step setup is in the documentation.
Not sure about your school Wi-Fi? Check it in four questions.
MakerBuddy_XXXX, with the password 12345678. The XXXX comes from its hardware (MAC) address. Its setup page is at http://192.168.4.1.name.local (mDNS) once it has a saved name.Firmware 2.10 is built for a trusted local classroom network. It has no login and no encryption. Read these limits before you connect it, then follow the four steps below.
Keep it off the internet
Never make the board reachable from the internet. Don't open or forward port 80 to it.
Use a separate classroom network
Where you can, put the boards on their own classroom Wi-Fi.
Keep real passwords off it
Don't use passwords that protect anything important on the boards' network.
Not for safety decisions
Don't use MakerBuddy readings or controls for medical, industrial, life-critical or certified safety decisions.
The newest firmware is 2.10. The dashboards can't install it over Wi-Fi yet. They only send the board update files from plain http:// links, and the 2.10 file on GitHub uses https://. So they show: "New version 2.10 available. This download requires manual installation through Arduino IDE."
To install 2.10, use a computer, a USB cable and the Arduino IDE. The steps are in Install by USB.
The dashboards look for updates in the firmware release feed (opens in a new tab), a firmware.json file on GitHub. They wait up to 15 seconds and don't follow redirects.
Erases all saved settings
The whole iot-kit store: Wi-Fi, board name, rules, calibration, and the screen and mapping settings. This happens before the download starts, so even a failed update wipes them.
Pauses its timers
For the sensors, the screen and blinking. If the update fails, they stay paused until you restart the board.
Downloads the file
Over plain HTTP, straight into the ESP32's updater. It does not check where the file comes from or whether it is genuine.
Shows progress
On the screen, then restarts when the update is complete.
The rest of this page explains exactly how the firmware behaves: the servo, the screen, rules, timing and saved settings. You don't need it to teach the lessons. The lessons use the dashboard and rules, with no code.
The message formats (REST and WebSocket) are in the documentation, and so is building the firmware.
Only one thing controls the servo at a time, and the board decides which. Live readings report the current owner as so.
| Owner | so | When it applies |
|---|---|---|
| Manual | 0 | The dashboard slider, WebSocket V, or POST /api/servo |
| Knob | 1 | The knob mapping is set to the servo |
| Sensor | 2 | The Servo Mapping card follows one sensor |
| Rule | 3 | A rule with a servo step is running, waiting between timer runs, or watching its condition |
soV, or POST /api/servosososoWhile another owner holds the servo, manual commands are refused. REST answers 409, and WebSocket replies with an e error. The board enforces this lock only for the servo. For the light, buzzer and relay, "locked" is a dashboard warning.
The 16×2 screen (I²C) either cycles through sensor screens or shows your own two lines. Your lines can include live readings with ten wildcards, from {temp} to {button}. All ten are in the tool below.
{temp} showing 24.5 uses 4 characters, not 6.{temp}, {humidity}, {ds18b20} and {distance}. Whole numbers for {light}, {gas}, {soil} and {pot}. YES or NO for {motion} and {button}.Temp: {temp} fits today, but a value can get wider. Distance, for example, shows 999.0 before its first reading./api/lcd endpoint saves text without checking.The board stores and runs up to 10 rules, each with up to 10 steps. Rules are saved on the board. They survive power-off and run again at power-on, unless someone stopped them by hand. Pressing Stop never switches outputs off.
The full REST and WebSocket rule formats are in the automation rules documentation.
Timers only raise a flag. The main program loop does the real work.
| What | How often |
|---|---|
| Read the sensors | Every 1 second |
| Send readings to dashboards | At most every 2 seconds |
| Refresh the screen | Up to every 100 ms |
| Change sensor screen | Every 3 seconds |
| Wi-Fi/IP, board-name and custom screens | Every 5 seconds each |
| Blink the blue light | Every 500 ms |
| Move the servo one step | Every 20 ms, while a mapping or rule moves it |
| Check the rules | Every loop, unless a rule save is waiting |
| Re-send the rule list (2.10) | Within 1 second of a rule starting, finishing or stopping on its own, or of a REST rule change |
| Clean up dropped dashboard connections | Every 10 seconds |
| Start a requested update | At the top of the next loop |
Wi-Fi setup and joining, buzzer beeps (500 ms), distance timeouts and updates can pause the loop for a moment. So the 20 ms servo step is the usual rate, not a guarantee.
All settings live in the ESP32's own storage, under the name iot-kit.
| Keys | What they hold |
|---|---|
wifi_ssid, wifi_password, deviceName | Wi-Fi name, Wi-Fi password and board name |
lcdDefault, customText1, customText2 | Screen mode and your two lines |
potMappingId | Knob mode (the old potMapping key is moved over) |
servoMap | Sensor-to-servo settings (the "on" state is never restored) |
soilDry, soilWet | Soil calibration |
seqCount | How many rules there are |
seq_0 … seq_9 | The rules, in compact binary |
seqc_0 … seqc_9 | Second-condition add-ons |
seqv_0 … seqv_9 | Servo step options: relative target, movement time, sweep and start angle |
seqms_0 … seqms_9 | "Stopped by hand" flags |
seqBlob | The old all-in-one format. It is moved over, then deleted |
wifi_ssid, wifi_password, deviceNamelcdDefault, customText1, customText2potMappingIdpotMapping key is moved over)servoMapsoilDry, soilWetseqCountseq_0 … seq_9seqc_0 … seqc_9seqv_0 … seqv_9seqms_0 … seqms_9seqBlobMakerBuddyTypes.h are saved as binary, so reordering or resizing fields needs a planned migration. That is why new rule options live in separate records (seqc_N, seqv_N). A rule without them behaves exactly as before.The firmware is open source. You can change it and upload it from the Arduino IDE over USB.
arduino-cli), board "ESP32 Dev Module" (esp32:esp32:esp32), "esp32 by Espressif Systems" 3.3.7 and 8 libraries. The firmware does not need ESP32Servo.The library list, the PlatformIO notes and the upload steps are in Arduino development.
Checked the specs?
Every kit has the IoT Kit V1.0 board, its six built-in parts and nine plug-in parts. Schools in Pakistan order online and pay by bank transfer. Everywhere else, ask for a written quote. Want to check your network or a class order first? Talk to us.

Pick a part below to ring it on the picture, or click a socket.
Distance in cm, from about 2 cm to 4 m. Shows 999.0 until the first good reading.
Signal: Trigger (GPIO 15) sends a 10 µs pulse. Echo (GPIO 2) is timed, and the board gives up after 24 ms.
Week 12: Distance & Echolocation (HC-SR04)Shows 2 lines of 16 characters: sensor screens, or your own text.
Signal: I²C: data (SDA) on GPIO 21, clock (SCL) on GPIO 22.
Week 19: Visual Output (LCD Display)On or off. It switches a separate low-voltage circuit.
Signal: On/off output. It switches at once; any delay sent with the command is ignored.
Low-voltage things only. Never connect mains (wall) electricity.
Week 15: Relay Control & Electrical IsolationTurns to an angle from 0 to 180°. It does not spin all the way round.
Signal: PWM on its own channel (8, 16-bit): 50 Hz, a 0.5–2.5 ms pulse for 0–180°.
Week 14: Introduction to Motors: SG90 ServoMotion: yes or no.
Signal: On/off input. The pin goes high for motion.
Week 13: Security Sensing (PIR Motion)Temperature in °C, from −55 to 125. Reads 0.0 when unplugged.
Signal: 1-Wire. The board asks for a reading, then collects it on the next pass.
Week 11: Precision Temperature (DS18B20)Temperature in °C (0–50) and humidity in %.
Signal: Read once a second. A failed read is sent as 0.0, which is not a real temperature.
Week 10: Atmospheric Sensing (DHT11)A gas level from 0 to 100. Compare it with the reading in clean air.
Signal: Analog input (ADC1): the average of 4 readings, scaled to 0–100.
It gets hot. Let it warm up for a few minutes, and don't touch its metal cover.
Week 17: Gas & Air Quality (MQ-2)Moisture 0–100 after calibration, plus the raw number (0–4095). Wetter soil gives a lower raw number.
Signal: Analog input (ADC1): the average of 4 readings. Default calibration: dry 3000, wet 1200.
Week 18: Smart Agriculture (Soil Moisture)The firmware does not use the UART header, and uses I²C only for the screen. Using them needs your own code.

Pick a part below to ring it on the picture, or click a socket.
Pressed or not pressed. Hold it for 10 seconds to reset the Wi-Fi.
Signal: Input with pull-up (INPUT_PULLUP): the pin reads low when pressed.
Week 6: Digital Inputs: The Push ButtonOn or off, brightness 0–255, and it can blink.
Signal: PWM brightness 0–255. Blinking switches it every 500 ms.
Week 4: Hello World & PWM DimmingRed (13), green (14) and blue (27), each 0–255.
Signal: PWM, 0 = off and 255 = full. It is a common-anode LED, so the board sends 255 minus your value.
Week 5: The Physics of Color (RGB LED)A light level from 0 to 100.
Signal: Analog input (ADC1): the average of 4 readings, scaled to 0–100.
Week 7: Light Sensing (LDR)A level from 0 to 100.
Signal: Analog input (ADC1): the average of 4 readings, scaled to 0–100.
Week 9: Analog Inputs & Direct Mapping MasterclassOn or off, one tone. It cannot play different notes.
Signal: On/off output. A dashboard or API command beeps for 500 ms.
Week 8: Term 1 Assessment: The Traffic LightA model of the screen. No board needed.
Screen line 1 shows: Temp: 24.5C. Line 2 shows: Humidity: 55.0%.
Fits, with 5 columns to spare. Shows: Temp: 24.5C
Fits, with 1 column to spare. Shows: Humidity: 55.0%
Add a wildcard to the last line you clicked