/* * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: CC0-1.0 */ #include #include #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_chip_info.h" #include "esp_flash.h" #include "esp_system.h" #include "driver/gpio.h" #include "iot_button.h" #include "button_gpio.h" #include "led_gpio.h" #include "led_indicator.h" #include "led_indicator_blink_default.h" #define IO_PIN GPIO_NUM_2 static const char* TAG = "Btn"; static led_indicator_handle_t led_handle = NULL; static button_handle_t button_handle = NULL; void init_led() { led_indicator_gpio_config_t led_indicator_gpio_config = { .is_active_level_high = 1, .gpio_num = IO_PIN, }; led_indicator_config_t led_indicator_config = { .mode = LED_GPIO_MODE, .led_indicator_gpio_config = &led_indicator_gpio_config, .blink_lists = (void*)NULL, .blink_list_num = 0, }; led_handle = led_indicator_create(&led_indicator_config); if (led_handle == NULL) { printf("Could not init LED indicator"); abort(); } led_indicator_start(led_handle, BLINK_CONNECTING); } static void button_single_click_cb(void* arg, void* usr_data) { printf("Button clicked from %p %p", arg, usr_data); led_indicator_start(led_handle, BLINK_CONNECTED); } void setup_buttons() { button_gpio_config_t gpio_config = { .gpio_num = 0, .active_level = 0, }; button_config_t button_0_cfg = { .long_press_time = CONFIG_BUTTON_LONG_PRESS_TIME_MS, .short_press_time = CONFIG_BUTTON_SHORT_PRESS_TIME_MS, }; ESP_ERROR_CHECK(iot_button_new_gpio_device(&button_0_cfg, &gpio_config, &button_handle)); ESP_ERROR_CHECK(iot_button_register_cb(button_handle, BUTTON_SINGLE_CLICK, NULL, button_single_click_cb, NULL)); } void app_main(void) { printf("Hello world!\n"); setup_buttons(); init_led(); /* Print chip information */ esp_chip_info_t chip_info; uint32_t flash_size; esp_chip_info(&chip_info); printf("This is %s chip with %d CPU core(s), %s%s%s%s, ", CONFIG_IDF_TARGET, chip_info.cores, (chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "", (chip_info.features & CHIP_FEATURE_BT) ? "BT" : "", (chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "", (chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : ""); unsigned major_rev = chip_info.revision / 100; unsigned minor_rev = chip_info.revision % 100; printf("silicon revision v%d.%d, ", major_rev, minor_rev); if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) { printf("Get flash size failed"); return; } printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024), (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external"); printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size()); for (int i = 10; i >= 0; i--) { printf("Restarting in %d seconds...\n", i); vTaskDelay(1000 / portTICK_PERIOD_MS); } printf("Restarting now.\n"); fflush(stdout); esp_restart(); }