读取microROS控制板上的按键状态,打印ESP32S3芯片组空闲的内存容量。
如下图所示,按键为板载元器件,所以不需要外接其他设备,只需要把type-C数据线连接电脑与microROS控制板作为烧录固件功能即可。

microROS控制板有两个boot按键和一个自定义功能按键,boot按键搭配reset复位按键可以让ESP32手动进入烧录模式,在开机完成后,boot按键也可以作为自定义功能按键来使用。
程序源码对应的虚拟机路径为:
~/esp/Samples/esp32_samples/key
初始化KEY外设,其中KEY_GPIO_BOOT0对应硬件电路的GPIO0,KEY_GPIO_USER1对应硬件电路的GPIO42,GPIO模式设置为上拉输入模式。
xxxxxxxxxxvoid 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);}
由于boot按键Key0和自定义按键Key1的功能逻辑是一样的,这里以按键Key1为例来分析按键过程。
判断按键key1是否被按下,如果被按下返回KEY_STATE_PRESS,松开状态返回KEY_STATE_RELEASE。
xxxxxxxxxxstatic 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;}
非阻塞式读取按键key1的状态(软件防抖), 需每10毫秒调用一次,每次按键按下返回一次KEY_STATE_PRESS。
xuint8_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;}
在app_main里调用Key_Init函数初始化按键,并在循环中(每10毫秒)读取按键Key0和按键Key1的状态,当按下按键时打印按键按下提示,并打印当前空闲的内存容量。
xxxxxxxxxxKey_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));}
使用Type-C数据线连接虚拟机/电脑与microROS控制板,如果系统弹窗选择连接到虚拟机上。
激活ESP-IDF开发环境,注意每次打开新终端都需要先激活ESP-IDF开发环境才可以编译固件。
xxxxxxxxxxsource ~/esp/esp-idf/export.sh
进入项目目录
xxxxxxxxxxcd ~/esp/Samples/esp32_samples/key
编译、烧录、打开串口模拟器
xxxxxxxxxxidf.py build flash monitor
如果需要退出串口模拟器,请按Ctrl+]。
串口模拟器打印"hello yahboom"欢迎词,当我们按下boot按键Key0时,串口模拟器会打印“KEY 0 PRESS”并且显示当前内部空闲内存容量。当我们按下自定义按键Key1时,串口模拟器会打印“KEY 1 PRESS”并且显示当前空闲内存容量。
