yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
MicroROS Robot Expansion Board📖
01. microROS control board development environment
  • 1. Introduction to microROS control board
  • 2. Set up ESP32-IDF development environment
  • 3. ESP32-IDF configuration tool
  • 4. Install ESP32-microros components
  • 5. Install and start microROS agent
  • 6. Flash-tool burning firmware
02. ESP32 basic course
  • 1. Turn on the LED light
  • 2. Button function
  • 3. Drive the buzzer
  • 4. Serial communication
  • 5. Battery voltage detection
  • 6. Drive PWM servo
  • 7. Drive motor
  • 8. Read motor encoder data
  • 9. PID controls car speed
  • 10. Read IMU data
  • 11. Read radar data
  • 12. Flash access data
  • 13. Partition table and memory
  • 14. Bluetooth communication
  • 15. WiFi networking
  • 16. Robot kinematics analysis
  • 17.Drive ESP32 WiFi camera
03. microros basic course
  • 1.Publish topic
  • 2. Subscribe topic
  • 3. Multi-topic subscribe and publish
  • 4. Subscribe buzzer topics
  • 5. Subscribe PWM servo topics
  • 6. Subscribe speed control topics
  • 7. Release speed topic
  • 8. Release IMU data topic
  • 9. Publish lidar data topics
  • 10. Customized transmission method
04.ROS2 basic course
  • 1. Introduction to ROS2
  • 2.ROS2 install Humble
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
05. Robot basic course
4.1 Robot information release
  • Robot information release
4.0 Preparation
  • 1. Write firmware
  • 2. How to install and use VM
  • 3. microROS control board configuration
  • 4. Connect to microROS agent
4.2 Robot keyboard control
  • Robot keyboard control
4.3 Robot handle control
  • Robot handle control
4.4 Robot state estimation
  • Robot state estimation
4.5 Line speed calibration
  • Line speed calibration
4.6 Angular velocity calibration
  • Angular velocity calibration
4.7 Robot URDF model
  • Robot URDF model
Download
  • Firmware And Code
  • VM_File
  • 3D Model File
  • ROS2_Basic_VM
Download ZIP

Welcome to MicroROS Robot Expansion Board repository

2. Button function

Button function

Button function1. Experimental purpose2. Hardware connection3. Core code analysis4. Compile and download the burning firmware5. Experimental results

1. Experimental purpose

Read the button status on the microROS control board and print the free memory capacity of the ESP32S3 chipset.

 

2. Hardware connection

As shown in the figure below, the buttons are onboard components, so there is no need to connect other external devices. You only need to connect the type-C data cable to the computer and the microROS control board for the firmware burning function.

image-20240110114106385

The microROS control board has two boot buttons and a custom function button. The boot button and the reset button can allow the ESP32 to enter the burning mode manually. After the boot is completed, the boot button can also be used as a custom function button.

 

3. Core code analysis

The virtual machine path corresponding to the program source code is:

~/esp/Samples/esp32_samples/key

Initialize the KEY peripherals, where KEY_GPIO_BOOT0 corresponds to GPIO0 of the hardware circuit, KEY_GPIO_USER1 corresponds to GPIO42 of the hardware circuit, and the GPIO mode is set to pull-up input mode.

xxxxxxxxxx
void Key_Init(void)
{
    // zero-initialize the config structure.
    gpio_config_t io_conf = {};
    //disable interrupt 禁用中断
    io_conf.intr_type = GPIO_INTR_DISABLE;
    //set as input mode 设置为输入模式
    io_conf.mode = GPIO_MODE_INPUT;
    //bit mask of the pins that you want to set 引脚编号设置
    io_conf.pin_bit_mask = ((1ULL<<KEY_GPIO_BOOT0)|(1ULL<<KEY_GPIO_USER1));
    //disable pull-down mode 禁用下拉
    io_conf.pull_down_en = 0;
    //enable pull-up mode 使能上拉
    io_conf.pull_up_en = 1;
    //configure GPIO with the given settings 配置GPIO口
    gpio_config(&io_conf);
}

Since the functional logic of the boot button Key0 and the custom button Key1 are the same, here we take the button Key1 as an example to analyze the key pressing process.

Determine whether key1 is pressed. If it is pressed, it returns KEY_STATE_PRESS. If it is released, it returns KEY_STATE_RELEASE.

xxxxxxxxxx
static uint8_t Key1_is_Pressed(void)
{
    uint8_t key_state = KEY_STATE_RELEASE;
    if (!gpio_get_level(KEY_GPIO_USER1))
    {
        key_state = KEY_STATE_PRESS;
    }
    return key_state;
}

Non-blocking reading of the status of key1 (software anti-shake) needs to be called every 10 milliseconds, and KEY_STATE_PRESS is returned every time the key is pressed.

​x
uint8_t Key1_Read_State(void)
{
    static uint16_t key_state = 0;

    if (Key1_is_Pressed() == KEY_STATE_PRESS)
    {
        if (key_state < 3)
        {
            key_state++;
        }
    }
    else
    {
        key_state = 0;
    }
    if (key_state == 2)
    {
        return KEY_STATE_PRESS;
    }
    return KEY_STATE_RELEASE;
}

Call the Key_Init function in app_main to initialize the keys, and read the status of Key0 and Key1 in the loop (every 10 milliseconds). When the keys are pressed, a key press prompt is printed, and the current free memory capacity is printed.

xxxxxxxxxx
Key_Init();

while (1)
{
    if (Key0_Read_State() == KEY_STATE_PRESS)
    {
        ESP_LOGI(TAG, "KEY 0 PRESS");
        ESP_LOGI(TAG, "free internal heap size = %ld", esp_get_free_internal_heap_size());
    }
    if (Key1_Read_State() == KEY_STATE_PRESS)
    {
        ESP_LOGI(TAG, "KEY 1 PRESS");
        printf("free heap size = %ld\r\n", esp_get_free_heap_size());
    }

    vTaskDelay(pdMS_TO_TICKS(10));
}

 

4. Compile and download the burning firmware

Use a Type-C data cable to connect the virtual machine/computer and the microROS control board. If the system pops up, choose to connect to the virtual machine.

Activate the ESP-IDF development environment. Note that every time you open a new terminal, you need to activate the ESP-IDF development environment before compiling the firmware.

source ~/esp/esp-idf/export.sh

Enter the project directory

xxxxxxxxxx
cd ~/esp/Samples/esp32_samples/key

Compile, burn, and open the serial port simulator

xxxxxxxxxx
idf.py build flash monitor

If you need to exit the serial port simulator, press Ctrl+].

 

5. Experimental results

The serial port simulator prints the "hello yahboom" welcome message. When we press the boot button Key0, the serial port simulator prints "KEY 0 PRESS" and displays the current internal free memory capacity. When we press the custom key Key1, the serial port simulator will print "KEY 1 PRESS" and display the current free memory capacity.

image-20240110122213053

Turn on the LED light
Drive the buzzer

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文