【ESP32】-【LED+KEY+WIFI AP】

ESP32开发指南目录(开源一小步出品)
https://blog.csdn.net/qq_24550925/article/details/85933563

2020-06-04
今天还算顺利,弄了hello world,led,key,wifi ap。还看了一下FreeRTOS,和之前玩过的ucos感觉差不多。操作系统没怎么深入学习过。后面慢慢玩起来,反正乐鑫的idf也是跑FreeRTOS的。

贴上最近搞的源码。
开发板是乐鑫 ESP32_LyraT V4.3

/* Hello World Example

This example code is in the Public Domain (or CC0 licensed, at your option.)

Unless required by applicable law or agreed to in writing, this
software is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include
#include “freertos/FreeRTOS.h”
#include “freertos/task.h”
#include “esp_system.h”
#include “esp_spi_flash.h”
#include “esp_wifi.h”
#include “esp_event_loop.h”
#include “esp_log.h”
#include “esp_err.h”
#include “nvs_flash.h”
#include “esp_event.h”

#define LED_IO 22

#define KEY_REC_IO 36
#define KEY_MODE_IO 39

uint8_t key_value = 0;
uint16_t timer_ms_cnt = 0;
uint16_t timer_1s_cnt = 0;
uint8_t led_flag = 0;
//定时器句柄
esp_timer_handle_t fw_timer_handle = 0;

void read_key(void);
void fw_timer_cb(void *arg);
static esp_err_t event_handler(void *ctx, system_event_t *event);

void app_main()
{
printf(“app_main!\n”);

//选择 IO
gpio_pad_select_gpio(LED_IO);
gpio_pad_select_gpio(KEY_REC_IO);
gpio_pad_select_gpio(KEY_MODE_IO);

//设置 IO 为输出
gpio_set_direction(LED_IO, GPIO_MODE_OUTPUT);
gpio_set_level(LED_IO, 1);//不亮

//设置按键 IO 输入
gpio_set_direction(KEY_REC_IO, GPIO_MODE_INPUT);
gpio_set_direction(KEY_MODE_IO, GPIO_MODE_INPUT);

//定时器结构体初始化
esp_timer_create_args_t fw_timer =
{
.callback = &fw_timer_cb, //回调函数
.arg = NULL, //参数
.name = “fw_timer” //定时器名称
};

//定时器创建、启动
esp_err_t err = esp_timer_create(&fw_timer, &fw_timer_handle);
err = esp_timer_start_periodic(fw_timer_handle, 1 * 1000);//1ms回调
if(err == ESP_OK)
{
printf(“fw timer cteate and start ok!\r\n”);
}

ESP_ERROR_CHECK( nvs_flash_init() );
tcpip_adapter_init();
ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
wifi_config_t wifi_config = {
.ap = {
.ssid = “Helon_test”,
.ssid_len = 0,
/* 最多只能被4个station同时连接,这里设置为只能被一个station连接 */
.max_connection = 1,
.password = “12345678”,
.authmode = WIFI_AUTH_WPA_WPA2_PSK,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());

while(1)
{
if(timer_ms_cnt > 10) //10ms
{
timer_ms_cnt -= 10;
read_key();
}

  if(timer_1s_cnt >= 1000)   //1s
  {
     timer_1s_cnt -= 1000;   
     printf("key_value = 0x%.2x \n",key_value);

     if(led_flag)
     {
        led_flag = 0;
        gpio_set_level(LED_IO, 1);    //led亮
     }
     else
     {
        led_flag = 1;
        gpio_set_level(LED_IO, 0);    //led灭
     }
     

  }

  //红灯亮

// vTaskDelay(200 / portTICK_PERIOD_MS);

}

}

void read_key(void)
{
static uint8_t cnt1 = 50;
static uint8_t cnt2 = 50;

if(gpio_get_level(KEY_REC_IO)==0)//按键按下
cnt1++;
else
cnt1–;

if(gpio_get_level(KEY_MODE_IO)==0)//按键按下
cnt2++;
else
cnt2–;

if(cnt1 > 52)
{
cnt1 = 50;
key_value |= 0x01;
}
else if(cnt1 < 48)
{
cnt1 = 50;
key_value &= ~0x01;
}

if(cnt2 > 52)
{
cnt2 = 50;
key_value |= 0x02;
}
else if(cnt2 < 48)
{
cnt2 = 50;
key_value &= ~0x02;
}
}

void fw_timer_cb(void arg)
{
timer_ms_cnt++;
timer_1s_cnt++;
/

//获取时间戳
int64_t tick = esp_timer_get_time();
printf(“timer cnt = %lld \r\n”, tick);
if (tick > 50000000) //50 秒结束
{
//定时器暂停、删除
esp_timer_stop(fw_timer_handle);
esp_timer_delete(fw_timer_handle);
printf(“timer stop and delete!!! \r\n”);
//重启
esp_restart();
}
gpio_set_level(LED_IO, 0);
vTaskDelay(100 / portTICK_PERIOD_MS);
gpio_set_level(LED_IO, 1);
vTaskDelay(100 / portTICK_PERIOD_MS);
*/
}

/**

  • wifi事件处理函数
  • @param[in] ctx :表示传入的事件类型对应所携带的参数
  • @param[in] event :表示传入的事件类型
  • @retval ESP_OK : succeed
  •          其他    :失败 
    
  • @par 修改日志
  •           Ver0.0.1:
                  Helon_Chan, 2018/06/04, 初始化版本\n 
    

*/
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
switch (event->event_id)
{
case SYSTEM_EVENT_AP_START:
printf("\nwifi_softap_start\n");
break;
case SYSTEM_EVENT_AP_STACONNECTED:
printf("\nwifi_softap_connectted\n");
break;
case SYSTEM_EVENT_AP_STADISCONNECTED:
printf("\nwifi_softap_disconnectted\n");
break;
default:
break;
}
return ESP_OK;
}

你可能感兴趣的:(ESP32)