1 前言 
尝试使用按键控制led灯亮灭。  
2 硬件 
led     key     按键0  
   
3 代码 
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/gpio.h"
#define GPIO_LED4 38	
#define GPIO_LED5 39	
#define GPIO_KEY1 0
void init_key(void)
{
    gpio_pad_select_gpio(GPIO_KEY1);	
    gpio_set_direction(GPIO_KEY1,GPIO_MODE_INPUT);
}
int get_key_value(void)
{
    int a = gpio_get_level(GPIO_KEY1);
    printf("key1 gpio07 value:%d\n",a);
    return a;
}
void init_led(void)
{
    gpio_pad_select_gpio(GPIO_LED4);	
	gpio_set_direction(GPIO_LED4,GPIO_MODE_OUTPUT);
    gpio_pad_select_gpio(GPIO_LED5);	
	gpio_set_direction(GPIO_LED5,GPIO_MODE_OUTPUT);
    gpio_set_level(GPIO_LED4, 0);
    gpio_set_level(GPIO_LED5, 0);
}
void hello_world()
{
    printf("Hello world!\n");
    
    esp_chip_info_t chip_info;
    esp_chip_info(&chip_info);
    printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
            CONFIG_IDF_TARGET,
            chip_info.cores,
            (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
            (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
    printf("silicon revision %d, ", chip_info.revision);
    printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
            (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
    printf("Minimum free heap size: %d 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();
}
void test_led()
{
	printf("Turning off the LED\n");
        gpio_set_level(GPIO_LED4, 0);	
        gpio_set_level(GPIO_LED5, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);	
	printf("Turning on the LED\n");
        gpio_set_level(GPIO_LED4, 1);	
        gpio_set_level(GPIO_LED5, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
}
void app_main(void)
{
    init_led();
    init_key();
    int temp = 0;
    int status_led =0;
    while(1) {    
        
        temp = get_key_value();
        if (temp == 0)
        {
            printf("temp is 0\n");
            gpio_set_level(GPIO_LED4, status_led);
            status_led = 1 - status_led;
            
        }
        else
        {
            printf("temp is 1\n");
            
            
        }
        
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
  
4 结果 
按下按键key0,白灯点亮,再次按下则白灯熄灭。 
                
                
                
        
        
    
  
 
 |