ESP32学习笔记
文章平均质量分 60
qq_45671732
这个作者很懒,什么都没留下…
展开
-
01-LED-Blink-Demo(开发环境esp-idf)
【代码】01-LED-Blink-Demo(开发环境esp-idf)原创 2023-01-31 21:15:24 · 408 阅读 · 1 评论 -
freeRTOS任务管理
这个小节讲述的是任务的优先级别,设置 获取等操作通过freeRTOS的API文档可以知道每一个任务优先级是从0到 configMAX_PRIORITIES - 1(0代表空闲优先级,configMAX_PRIORITIES - 1是我们可以人为设置的优先级,而且数值越大,说明任务的优先级越高),这个configMAX_PRIORITIES 定义在FreeRTOSConfig.h头文件中。好,我们打开之前的示例,进行修改,获取任务函数的优先级。/*原创 2022-12-09 17:01:51 · 656 阅读 · 0 评论 -
human_face_recognition(AI开发框架esp-who)
BOOT按键的状态的不同也会触发不同的事件,通过register_button()的函数将BOOT按键的状态输出到xQueueKeyState按键的状态队列缓冲区里,再通过register_event()函数输出一个事件队列xQueueEventLogic,最后通过register_human_face_recognition()函数将xQueueAIFrame作为帧输入流传入 xQueueEventLogic传入一个事件队列,帧的输出流设置为NULL,结果将显示在终端上。原创 2022-09-14 10:13:53 · 449 阅读 · 0 评论 -
code_recognition(AI开发框架esp-who)
app_main.capp_peripherals.capp_peripherals.h调用xTaskCreatePinnedToCore()函数将decode_task函数创建任务,在freeRTOS实时性操作系统中运行decode_task()任务函数中做了以下操作:app_camera_init()初始化摄像头后,如果返回值不等于ESP_OK,说明摄像头初始化失败,调用vTaskDelete(NULL);删除任务并退出摄像头初始化后会输出一个帧的输出流,调用esp_camera_fb_ge原创 2022-09-14 10:08:41 · 853 阅读 · 0 评论 -
color_detection(AI开发框架esp-who)
同样,BOOT按键的状态也需要进行记录,通过register_button()将BOOT按键的状态输出到xQueueGPIOKeyState队列缓冲区中。调用register_color_detection()函数将帧的输入流xQueueAIFrame和事件队列xQueueEventLogic传入,输出一个作为帧的输出流的队列缓冲区xQueueLCDFrame,再调用register_lcd()函数将xQueueLCDFrame作为帧的输入流传入,即可显示到LCD屏幕上。原创 2022-08-22 10:25:15 · 286 阅读 · 0 评论 -
cat_face_detection(AI开发框架esp-who)
😀第二步:此时xQueueAIFrame队列缓冲区里面放置着摄像头获取到的图片,调用register_cat_face_detection()的函数,将xQueueAIFrame队列缓冲区作为帧的输入流传入,register_cat_face_detection()函数中会通过AI模型计算,识别到猫脸,然后帧的输出流设置为NULL,至此猫脸检测的结果就显示到终端上了。pixel_fromat是像素的设置,frame_size是每一帧的大小,fb_count是帧的缓冲区的数量 frame_o是帧的输出流。原创 2022-08-21 18:17:19 · 1560 阅读 · 1 评论 -
mutex互斥量
xSemaphoreCreateMutex()创建mutex互斥量,vTaskSuspendAll()挂起任务调度器,使用xTaskCreate()函数创建任务,xTaskResumeAll()恢复任务调度器。大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,其他线程无法获得这种变量。但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。我们为了解决带来的一系列问题,我们需要一把锁。多个线程并发的操作共享变量,会带来一些问题。原创 2022-08-19 11:55:26 · 202 阅读 · 2 评论 -
计数型信号量
1.事件计数:每次事件发生,事件处理函数将释放信号量(信号量计数值加1),其他处理任务会获取信号量(信号量计数值减1)来处理事件。假设有一家停车场,总共有10个空闲停车位,当一个车放置在停车位中,空闲停车位减少1,当一个车从停车位中开出,空闲停车位增加1,那么计数型信号量就可以理解为空闲停车位,也可以理解为有效地 可以用的资源的数目。对于carInTask()的函数,调用uxSemaphoreGetCount()函数获取到计数型信号量的数目,调用xSemaphoreTake()获取信号量。原创 2022-08-19 11:53:42 · 829 阅读 · 1 评论 -
二进制信号量
我们在app_main()中调用xSemaphoreCreateBinary()函数,创建一个二进制信号量,创建完后使用xSemaphoreGive()函数释放创建的信号量,使用xTaskCreate()创建任务。二进制信号量能够满足任务间的互斥和同步,需要的系统开销最小,因此也称快速信号量。在myTask1()和myTask2()中先获取信号量,循环打印后释放信号量。本小节就来认识二进制信号量的创建等过程。xSemaphore:创建的信号量句柄。创建一个二进制信号量,并返回一个句柄。原创 2022-08-19 11:51:18 · 501 阅读 · 1 评论 -
软件定时器
一个软件定时器(或者只是一个“定时器”)允许一个函数在未来的一个设定的时间执行。由计时器执行的函数被称为计时器的回调函数。计时器从启动到执行它的回调函数之间的时间称为计时器的周期。简单地说,计时器的回调函数在计时器的周期到期时执行。改变软件定时器的周期 xTimer:正在分配新时段的计时器。首先要调用xTimerCreate()函数去创建定时器,并给软件定时器传入一个回调函数TimerCallBack()。调用pcTimerGetName()函数返回创建计时器时分配给计时器的人类可读文本名称。原创 2022-08-19 11:46:11 · 645 阅读 · 0 评论 -
Queue邮箱
写数据端wirteTask()写入一个数据到邮箱队列中,readTask()从邮箱队列中读取数据,可以通过写数据的方式来控制readTask()读数据端的执行方向。原创 2022-08-19 11:27:18 · 171 阅读 · 0 评论 -
Queue集合
在接收数据端recTask设置为:当队列集合中的某一个队列存在数据,则会返回相应存在数据的队列的句柄给recTask,recTask会根据相应的队列句柄去相对应的队列中取数据。上图讲述的是三个发送数据端分别向对应的队列中发送数据,sendTask1发送数据111到队列1中,sendTask2发送数据222到队列2中,sendTask3发送数据333到队列3中。接收数据端recTask如何接收数据呢?原创 2022-08-19 11:25:37 · 157 阅读 · 1 评论 -
Queue的多进单出模型
这里值得提一句的是,三个发送数据端可以赋予相同的优先级,也可以赋予不同的优先级,这是根据实际情况去调整的。对于接收数据端,要比三个数据端赋予的优先级还要大才可以,这也是为了保证当消息队列缓冲区中存放了数据,接收端的任务函数可以立即取出并进行处理。在这个延时过程中,发送数据端不断的向队列中发送数据,由于队列是FIFO(First in First Out)先进先出的特点,最先进入的数据会最先被接收数据端取到。创建三个发送数据的任务函数,具体的可以参考上一小节,发送数据的函数创建好后,再创建接收数据的函数。原创 2022-08-19 11:14:12 · 167 阅读 · 0 评论 -
Queue的三种数据传递
队列是任务间通信的主要形式。它们可以用于在任务之间、中断和任务之间发送消息。在大多数情况下,它们被用作线程安全的FIFO (First In First Out)缓冲区,新数据被发送到队列的后面,尽管数据也可以发送到队列的前面。一个sendTask向队列发送数据,一个recTask从队列中接收数据。原创 2022-08-19 11:05:58 · 754 阅读 · 0 评论 -
ESP32的电容touch和外部中断
ESP32的电容touch和外部中断代码编写#include <Arduino.h>// 定义外部中断的Mode// 0: 无中断,读取Touch值// 1:Touch中断,执行 TouchEvent()// 2: 外部IO的中断#define EXT_ISR_MODE 0void TouchEvent(){ Serial.printf("Touch Event.\r\n");}void PinIntEvent(){ Serial.printf("P原创 2022-04-26 20:02:20 · 3572 阅读 · 2 评论 -
点亮ESP32自带的小灯
#include <Arduino.h>int LED = 2;//定义二号引脚void setup(){ pinMode(LED, OUTPUT);//将引脚2号设置为输出引脚 /* void pinMode(uint8_t pin, uint8_t mode); 设置引脚的模式 常用的引脚模式有: 输出模式OUTPUT, 输入模式INPUT, 输入上拉模式INPUT_PULLUP */}void loop原创 2022-04-26 17:12:03 · 1433 阅读 · 1 评论 -
ESP32作为服务器,使用网页控制LED小灯
ESP32作为服务器,使用网页控制LED小灯项目描述ESP32-S开发板加入局域网,使用platformIO编写好ESP32的代码后,编译下载到ESP32中,访问ESP32的IP地址,使用网页控制连接着的LED小灯项目准备:ESP32-S开发板 一根数据线 电脑 LED小灯开发环境:vscode + PlatformIO原理剖析这个ESP32作为服务器,浏览器作为客户端,这是一个简单的B/S架构。在这个项目中我们说为什么要电脑和ESP32加入同一个局域网?从前面的有关于Linux原创 2022-04-25 13:17:58 · 10926 阅读 · 6 评论