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

本文介绍了ESP32_LyraTV4.3开发板的使用,通过实例代码演示了ESP32的HelloWorld、LED控制、按键读取及WiFi AP功能。文章详细展示了基于FreeRTOS的定时器、GPIO操作及WiFi配置,适用于初学者入门ESP32开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP32开发指南目录(开源一小步出品)
https://blog.youkuaiyun.com/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 <stdio.h>
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值