Petoi Doc Center

Upload Sketch for BiBoard

This chapter is for Advanced users with programming experience.

1. Read the Quick Start Guide

The specific parameters of each functional module of BiBoard, please refer to Chapter 2 of the BiBoard Quick Start Guide.

2. Set up BiBoard

2.1 Prepare the ESP32 development environment

For details, please refer to Chapter 3.2.1 of the BiBoard Quick Start Guide.

2.2 Modify code file in the package

  • sdkconfig.h

  • For Windows:
  • for Mac:
Append a line of code at the end of the file:

2.3 Add hardware partition

2.4 Download the OpenCatEsp32 package

We keep updating the codes as an open-source project. You can star and follow our GitHub repository to get the newest features and bug fixes. You can also share your codes with worldwide OpenCatEsp32 users.
  • Download the ​OpenCatEsp32 repository from GitHub:’s better if you utilize GitHub’s version control feature. Otherwise, make sure you download the WHOLE OpenCatEsp32 FOLDER every time. All the codes have to be the same version to work together.
  • If you download the Zip file of the codes, you will get an OpenCatEsp32-main folder after unzipping. You need to rename it to OpenCatEsp32 before opening the OpenCatEsp32.ino, so that the two names match.
No matter where you save the folder, the file structure should be:
  • There are several testX.ino codes in ModuleTests folder. You can upload them to test certain modules separately. Open any testX.ino sketch with prefix “test”. (I recommend using testBuzzer.ino as your first test sketch)

2.5 Compile and upload the sketch

Modify the device type macro definition in BiBoard.ino according to the device type.
#define BITTLE //Petoi 9 DOF robot dog: 1 on head + 8 on leg
//#define NYBBLE //Petoi 11 DOF robot cat: 2 on head + 1 on tail + 8 on leg
//#define CUB
Modify the motherboard model macro definition in BiBoard.ino according to the motherboard model.
#define BiBoard //ESP32 Board with 12 channels of built-in PWM for joints
//#define BiBoard2 //ESP32 Board with 16 channels of PCA9685 PWM for joints
After the modification is completed, you can click the upload button to upload BiBoard.ino, and the changes in the program will be automatically saved.

2.6 Initialization

When the newly set BiBoard is powered on, it needs to connect the serial port to the computer, and initialize the joint and gyroscope accelerometer (IMU) in the serial port monitor window.
Make sure to set the serial monitor as 115200 baud rate and no line ending.
You will see several questions:
Reset the joints' calibration offsets? (Y/n):
Type ‘Y’ to the question, which means resetting all servo corrections to zero.
- Calibrate the Inertial Measurement Unit (IMU)? (Y/n):
Type ‘Y’ to the question, which means calibrating the MPU6050, i.e. the gyro/accelerometer sensor.
Put the BiBoard FLAT on the table and don't touch it during calibration.
Sometimes the program could halt at the connection stage. You can close the serial monitor and reopen it, or press the reset button on BiBoard, to restart the program.
The program starts calibration after playing the melody 6 times.
The details of serial port printing information are as follows:
* Start *
Scanning I2C network...
- I2C device found at address 0x54 !
- I2C device found at address 0x68 !
- done
Set up the new board...
// The device name to use when connecting with bluetooth
- Name the new robot as: BittleED
Reset the joints' calibration offsets? (Y/n):
Initializing MPU...
- Testing MPU connections...attempt 0
- MPU6050 connection successful
- Initializing DMP...
- Calibrate the Inertial Measurement Unit (IMU)? (Y/n):
Put the robot FLAT on the table and don't touch it during calibration.
- Calibrating the Inertial Measurement Unit (IMU)...
MPU offsets:
// X Accel Y Accel Z Accel X Gyro Y Gyro Z Gyro
//OFFSETS 3752, -968, 942, 170, 76, 21
- Enabling DMP...
- Enabling interrupt detection (Arduino external interrupt 26)...
- DMP ready! Waiting for the first interrupt...
Bluetooth name: BittleED
Waiting for a client connection to notify...
Setup ESP32 PWM servo driver...
After the IMU calibration is completed, every time the robot is powered on, it will enter the regular power-on program.
The main program of Bittle judges whether it has been initialized by comparing the BIRTHMARK in the EEPROM, and will not enter the initialization process again when it is turned on next time.
If you need to recalibrate the servo offsets or recalibrate the IMU (MPU6050), you can enter 'R' in the serial monitor to start over.

2.7 Power on

  • long-press the button which is on the battery and boot up the robot with one side up, it will enter the calibration state automatically. The picture below shows the upper legs and lower legs installed after the robot enters the calibration state.
Please refer to chapter 5 🔌 Connect Wires and chapter 6 📐 Calibration for the complete calibration process.
  • If you power on the robot and it is upright (with its back upward), the robot will start from the "rest" posture (fold the legs and unlock the servos).

2.8 Standard mode and special modes

The default code runs the standard mode. If you have some extensible modules, you may uncomment the definition of a specific module. It will disable the Gyro code to save some programming space and activate the demo of the module.
The behavior of the official modules is defined in separate header files in OpenCat/src/. You can find them in OpenCat/src/io.h -> readSignal(). The behavior of OTHER_MODULES is defined in OpenCat/OpenCat.ino -> otherModule(). You can study the example code to write your own functions.

3. Configuration with App

The BiBoard has built-in Bluetooth and you can connect it with the new Android app:
You can check the update history and added features in (BiBoard\