【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 <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;
}

### 回答1: ESP32-CAM OV2640的原理图是该开发板的电路图设计。该开发板集成了ESP32芯片及OV2640图像传感器模块,同时还添加了USB转串口芯片、电源管理芯片等周边硬件模块,提供了丰富的接口。原理图中主要分为以下几个部分: 1.ESP32芯片区:这部分主要包括ESP32ESP32相关的电路,例如外部晶振、电源、信号线等。ESP32是开发板的核心,集成了Wi-Fi、蓝牙等通信模块,可以实现与电脑、手机等设备的通信。 2.OV2640图像传感器区:这部分主要包括OV2640传感器和相关的电路,例如可变电阻器、晶振等。OV2640是一款常用的图像传感器,可以捕捉高分辨率图像,并将数据传输到ESP32芯片中进行处理。 3.电源管理区:这部分主要包括电源管理电路和芯片,例如稳压芯片、滤波器等。电源管理电路可以提供稳定的电源,确保ESP32和OV2640能够正常工作。 4.USB转串口区:这部分主要包括USB转串口芯片和相关电路,例如电容、晶振等。USB转串口芯片可以实现开发板与电脑的连接,并通过串口进行数据传输。 除了以上四个部分,原理图中还包括了一些外部接口,例如MicroSD卡插座、LED指示灯、按键等。这些接口可以方便开发者进行开发和调试。通过ESP32-CAM OV2640原理图的了解,开发者可以更好地理解开发板的电路设计,为后续的开发工作提供有力的支持。 ### 回答2: ESP32-CAM OV2640原理图是一种电路图,它描述了ESP32-CAM开发板与OV2640摄像头模块之间的互连。ESP32-CAM开发板采用ESP32芯片,而OV2640摄像头模块具有200W像素的高清图像能力。 ESP32-CAM开发板包括主处理器、SD卡槽、WiFi天线和其他外围器件。OV2640摄像头模块包括传感器和图像处理模块,并且具有I/O接口,使用了标准SMBus(I2C)协议与主处理器通信。 ESP32-CAM OV2640原理图包括主处理器控制引脚、传感器接口引脚、SD卡接口引脚、WiFi天线接口引脚等,以及连接它们的线路。其中包括电源连接、传输数据线路和信号引脚线路。 ESP32-CAM OV2640原理图的设计目标是使ESP32-CAM开发板可以控制OV2640摄像头模块,从而实现高清拍摄和数据传输功能。可通过此电路图进行特定版本的开发或制造,实现客户指定配置下的产品。 总之,ESP32-CAM OV2640原理图是描述ESP32-CAM开发板和OV2640摄像头模块之间连接的电路图,是将两部分模块融合在一起,实现高清拍摄及数据传输功能的重要工具。 ### 回答3: ESP32-CAM OV2640是一款带有摄像头的Wi-Fi模块,它使用了OV2640图像传感器和ESP32微控制器,可直接进行图像采集和传输。 这个模块的原理图详细描述了ESP32和OV2640的连接方式和电路设计,同时也包括一些其他组件,例如电源芯片和USB转串口芯片等。每个元件的功能都明确说明了,帮助开发者理解和进行二次开发。 首先,ESP32-CAM OV2640模块的供电方式是通过USB接口,然后通过TPS62172芯片提供3.3V的电源。OV2640图像传感器、液晶显示屏和SD卡等设备则使用2.8V的电源。 其次,ESP32芯片通过Pin32和Pin33与OV2640进行I2C总线通信,用于控制和读取传感器的各种设置和状态,例如分辨率、帧率、曝光时间等。 此外,OV2640传感器还通过8位数据总线与ESP32芯片连接,用于传输图像数据。在模块的电路图中,可以看到ESP32芯片的GPIO5-GPIO18通过一系列数据总线缆连接到OV2640传感器的SDA、SDO、SCL、PCLK等引脚,实现数据传输。 ESP32-CAM OV2640模块还附带有一些其他组件,例如USB转串口芯片、flash存储器等,可用于程序调试和数据存储。在原理图中,这些元件也都明确标注,并与ESP32和OV2640等元件相互连接。 总之,ESP32-CAM OV2640模块的原理图详细描述了该模块的电路组成和各元件之间的连接方式,开发者可以根据这份原理图做出合适的设计和改进,在更多的应用场景中发挥该模块的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值