- 博客(170)
- 收藏
- 关注
原创 18-HW_PWM(硬件改变 PWM 占空比)
硬件脉冲宽度调制(HW_PWM)是ESP32-S3的一个重要特性,它可以用于控制LED的亮度、电机的速度等。硬件脉冲宽度调制与软件改变 PWM 占空比实验的驱动一致。
2024-04-24 11:54:59
570
原创 17-软件脉冲宽度调制(SW_PWM)
脉冲宽度调制(PWM)是一种在数字系统中模拟模拟信号的方法。通过改变脉冲的宽度,我们可以控制电源的输出,从而控制例如LED的亮度或电机的速度。
2024-04-22 16:02:08
712
原创 16-NVS Iterators (迭代器)
ESP32-S3的NVS库提供了迭代器,允许你根据指定的分区名称、命名空间和数据类型轮询NVS中存储的键值对。使用方法类似于c++里的迭代器(iterator)用于遍历容器,而NVS的迭代器同样用来遍历nvs。
2024-04-20 14:47:34
349
1
原创 15-partition table (分区表)
如果在 menuconfig 中选择“自定义分区表 CSV”,我们一般选用这个👇CSV文件作为我们的自定义分区表,复制将这个文件粘贴到项目的根目录下。✨我们来详细看一下当前分区表中的内容都有什么分区名称类型子类型偏移量大小描述nvsdatanvs留空(具体地址值未指定)0x6000非易失性存储区,用于保存设备重启后仍需保留的配置数据,如Wi-Fi凭据等phy_initdataphy留空(具体地址值未指定)0x1000。
2024-04-20 12:48:32
1524
原创 14-Error Handling (错误处理)
大多数ESP-IDF专用函数都使用 返回值返回错误代码。返回值是有符号整数类型。函数功能执行成功(无错误)时 返回值用代码表示为ESP_OK各种 ESP-IDF 头文件使用预处理器定义定义可能的错误代码。通常,这些定义以前缀开头。文件中定义了一般故障(内存不足、超时、参数无效等)的常见错误代码。ESP-IDF 中的各种组件可能会针对特定情况定义额外的错误代码。更加详细内容,在乐鑫官方文档👇😉。
2024-04-19 16:52:57
505
原创 13-ESP32 NVS BLOB类型存储
BLOB是一种用于存储二进制数据的数据类型。与其他数据类型(如整数和字符串)不同,BLOB可以存储💾可变长度的数据,这使得它非常适合存储诸如图像、音频或任何其他类型的大型数据。🎵🖼️在ESP32-S3的NVS库中,BLOB值的上限为508,000字节或分区大小的97.6%减去4000字节,以较小的值为准。虽然NVS最适合存储许多小值,但是如果需要存储大的BLOB或字符串,可以考虑使用基于磨损均衡库的FAT文件系统。这篇博客讲解了很多关于ESP32-S3的NVS和BLOB的知识。
2024-04-19 14:56:08
850
原创 12-ESP32-S3 的 NVS(Non-Volatile Storage)
ESP32-S3 是一款集成了 Wi-Fi 和蓝牙功能的系统级芯片,适用于各种物联网应用。其中,NVS(Non-Volatile Storage,非易失性存储)是 ESP32-S3 的一个重要特性,它允许我们在芯片的闪存中存储和读取数据,即使在断电后,这些数据也不会丢失。
2024-04-19 13:15:58
1302
原创 11-ESP32 自定义Menuconfig
menuconfig 是ESP32-IDFk框架下一个非常强大的配置工具,可以让我们自定义项目的配置参数。那这个菜单是否可以添加我们自己的内容呢,答案是可以的😉。我们可以把代码里的一些功能添加到菜单中,用一种别样的方法来配置代码中的一些参数(代码中的宏)🤞。
2024-04-19 00:49:54
1340
原创 10-WATCH_DOG(看门狗)
ESP32-S3的看门狗功能是一个重要的系统保护机制,它可以确保在程序发生异常(如进入死循环或跑飞)时,系统能够自动重启,以保障系统的稳定运行。中断看门狗负责确保 ISR(中断服务例程)不会长时间被阻塞。TWDT 负责检测长时间不屈服而运行的任务实例。可以使用menuconfig来配置看门狗的参数。
2024-04-18 17:51:45
1054
原创 08-GPtimer
通用定时器可用于准确设定时间间隔、在一定间隔后触发(周期或非周期的)中断或充当硬件时钟。如下图所示,**ESP32-S3** 包含两个定时器组,即定时器组 0 和定时器组 1。每个定时器组有两个通用定时器(T0,T1)和一个主系统看门狗定时器(WDT)。所有通用定时器均基于 16 位预分频器和 54 位可自动重新加载向上/向下计数器。
2024-04-18 15:18:21
1377
原创 07-ESP timer
ESP Timer是ESP32-S3的一个强大功能,它允许创建软件定时器并在超时时调用它们的回调函数。这对于需要执行延迟或周期性操作的用户软件非常有用,例如延迟设备启动/停止或周期性采样传感器数据。对于需要较好实时性能(如生成波形)或可配置定时器分辨率的应用场景,建议改用GPTimer。此外,GPTimer 还具有 ESP Timer 中没有的功能,例如事件捕获。
2024-04-16 16:15:28
1381
原创 06-esp32-idf开发调试方法(内置JTAG,OpenOCD调试)
使用VS Code和ESP-IDF进行ESP32开发和调试在我们搭建 **IDF** 框架后,**OpenOCD** 已经自动下载好了, 我们通过 **JTAG** 接口连接使用 **OpenOCD** 进行调试。而**ESP32**芯片中内置 了**JTAG** 电路,无需额外芯片即可调试,更加方便,所以这里我们讲解使用模块自带的usb-jtag接口进行调试。
2024-04-15 17:50:09
3463
6
原创 在Arduino IDE中使用文件夹组织源文件和头文件
如果你是一名Arduino爱好者,你可能会发现随着项目的复杂度增加,代码的管理变得越来越困难。在Arduino IDE中,你可以通过使用文件夹来更好地组织你的源文件和头文件,使得代码更加清晰易读。
2024-03-30 22:02:43
2940
原创 05-ESP32-S3-IDF USART
ESP32-S3有两个全功能的USART通道,USART0和USART1,USART2,支持异步通信(RS232 和 RS485)和 IrDA,通信速率可达到 5 Mbps。
2024-03-13 13:46:40
2874
原创 03-在ESP-IDF中使用C++面向对象编程
ESP-IDF同样提供了关于C++使用的例程,可以在你电脑中的ESP-IDF安装路径下找到关于ESP-IDF C++的更多内容可以阅读下下方的官方文档ESP-IDF C++支持。
2024-03-12 14:46:28
1933
原创 04-ESP32S3-GPIO 输入/输出/EXTI
ESP32S3提供了多达45个物理GPIO管脚,这些管脚不仅可以作为通用的输入输出接口,还可以连接到内部外设信号。通过GPIO交换矩阵、IO MUX和RTC IO MUX,可以灵活地配置外设模块的输入信号来源于任何GPIO管脚,同时外设模块的输出信号也可以连接到任意GPIO管脚。
2024-03-10 20:51:20
2138
原创 02-在 ESP-IDF 项目中添加 .c 和 .h 文件的
ESP-IDF(Espressif IoT Development Framework)是一个用于开发基于 ESP32 和 ESP8266 微控制器的嵌入式应用程序的框架。在 ESP-IDF 项目中添加新的 .c 和 .h 文件是很常见的,但要确保这些文件能够正确地被编译和链接到项目中,需要适当地配置 CMakelists.txt 文件。
2024-03-10 18:42:22
2638
原创 01-ESP-IDF项目文件结构与Menuconfig
在物联网(IoT)领域,ESP32和ESP32-S系列微控制器由其强大的功能和灵活性而备受青睐。为了简化开发过程,Espressif Systems提供了ESP-IDF(Espressif IoT Development Framework),这是一个功能强大的开发框架,为开发人员提供了丰富的工具和组件来构建各种类型的物联网应用程序。我们在使用ESP-IDF开发项目时项目特指一个目录,我们要了解的文件结构及其组成,以便更好地理解如何利用ESP-IDF来开发应用程序。
2024-03-10 12:53:45
2568
1
原创 00-ESP-IDF 环境配置指南
1.首先我们在浏览器搜索esp-idf,点击第一个选项2.点击右边栏的安装3.我们选择手动安装选择需要的系统版本4.点击链接5.这里我们选择一个版本,建议不要选择最新的,安装出现问题在网上不好找到解决办法6.下载完成之后点击运行,一直选择下一步安装完成后,在我们的桌面会多出两个图标7.我们点击第一个图标,这是CMD的命令行工具,在命令行中输入idf.py出现以下信息表示安装成功了。
2024-03-09 21:34:56
2787
原创 PyCharm 显示无法加载文件 D:\...,因为在此系统上禁止运行脚本。
PyCharm 显示无法加载文件 D:\python test\AI_CV\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。
2024-03-08 15:02:57
603
原创 LeetCode 53 最大子数组和
动态规划是解决最大和的连续子数组问题的一种有效方法。通过将原问题分解成更小的子问题,并利用动态规划的思想,我们可以在O(n)的时间复杂度内解决该问题。
2024-03-08 00:18:19
348
原创 LeetCode 76 最小覆盖字串
最小窗口子字符串问题,使用C++的滑动窗口方法解决方案。这个算法有效地在给定字符串中找到包含另一个字符串所有字符的最小子字符串。滑动窗口技术能够在线性时间复杂度内解决这个问题,是实际应用的有效解决方案。最小窗口子字符串问题是一个经典的算法问题,我们的任务是在给定字符串中找到包含另一个字符串所有字符的最小子字符串。在本文中,我们将探讨使用C++的滑动窗口方法解决这个问题。我们将使用滑动窗口技术来高效地解决这个问题。,我们需要找到字符串。所有字符的最小窗口。
2024-03-01 23:26:06
300
原创 LeetCode 239 滑动窗口最大值
本文介绍了一种使用双端队列来解决滑动窗口最大值的问题的方法。通过维护一个单调递减的双端队列,可以在OnO(n)On的时间复杂度内解决该问题,其中nnn是数组的长度。这种方法在面对滑动窗口问题时具有较高的效率和可读性,是一种常见的解题思路。
2024-02-28 21:26:43
311
原创 LeetCode 560 和为 K 的子数组
本文介绍了使用哈希表解决数组中子数组和为特定值的问题。通过在遍历过程中记录累积和及其出现次数,我们可以在 O(n) 的时间复杂度内解决该问题,避免了暴力求解的高时间复杂度。这种方法在实际应用中具有较高的效率和可扩展性,可以解决更加复杂的子数组和问题。
2024-02-28 19:26:23
423
原创 LeetCode 438. 找到字符串中所有字母异位词
通过滑动窗口的方法,我们可以高效地解决寻找字符串中所有异位词的子串问题。该方法的时间复杂度为O(n),其中n是字符串s的长度。我们通过比较字符频次来判断字符串的异位词关系,从而快速找到所有符合条件的子串。
2024-02-28 00:17:03
783
原创 LeetCode 3:寻找最长不含重复字符的子串长度
通过滑动窗口的方法,我们可以在时间复杂度为 O(n) 的情况下解决这个问题。该方法利用了哈希集合的快速查找特性,使得算法具有高效性能和较好的扩展性,适用于处理大规模的字符串输入。
2024-02-27 22:41:11
524
原创 LeetCode 42 接雨水--单调栈
使用单调栈算法可以有效地解决接雨水问题,其时间复杂度为O(n),空间复杂度为O(n),其中n是柱子的数量。这种方法利用了栈的单调性质,使得我们可以在线性时间内解决这个问题,是一个高效且常用的解决方案。
2024-02-27 21:25:47
587
原创 LeetCode 038 每日温度——单调栈解法
在算法和数据结构中,单调栈是一种常见的技巧,它在解决一些数组或者字符串相关的问题中非常有用。其中,「每日气温」问题是一个经典的例子,它可以通过单调栈得到高效的解决方案。
2024-02-27 16:22:22
266
原创 LeetCode 15 三数之和
通过双指针法,我们可以在时间复杂度为 O(n^2) 的情况下解决三数之和问题。算法的关键在于排序数组以及巧妙地使用双指针来遍历数组,同时避免重复解的出现。这种方法在面对大规模数据时具有较高的效率和可扩展性,是解决类似问题的一种常见方法。
2024-02-26 22:44:10
488
原创 LeetCode 11 盛最多水的容器
本题利用双指针的方法,通过移动指针来逐步缩小搜索空间,同时根据木桶效应,我们移动较小高度的指针,从而确保每次移动都有可能获得更大的水量。这种算法的时间复杂度为 O(n),空间复杂度为 O(1),是一种高效的解决方法。
2024-02-26 10:55:48
416
原创 LeetCode283 移动0
在这篇博客中,我们将探讨如何通过不复制数组的情况下,在原地对数组进行操作,将所有零移动到数组的末尾。给定一个数组nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
2024-02-26 09:51:29
500
原创 LeetCode128 最长连续序列
在这篇博客中,我们将讨论如何设计并实现一个时间复杂度为 O(n) 的算法来解决给定未排序整数数组的最长连续序列问题。给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
2024-02-26 09:27:33
446
原创 LeetCode49 字母异位词分组
字母异位词分组问题可以通过使用哈希表来有效地解决。通过对每个字符串进行排序,并将排序后的字符串作为键,我们可以将具有相同字母组成的单词分组在一起。最终,我们将哈希表中的结果转换为答案列表,即得到了按要求分组的字母异位词列表。
2024-02-25 23:00:33
984
原创 LeetCode1 两数之和
通过使用哈希表,我们可以在线性时间复杂度内解决这个问题。该解决方案的时间复杂度为 O(n),其中 n 是数组nums的长度。哈希表的优势在于能够以接近常量时间的复杂度进行查找操作,从而提高了解决问题的效率。同时,该解决方案还考虑了算法的可读性和简洁性,使得代码易于理解和维护。希望通过本文的讲解,博友们能够更深入地理解两数之和问题,并能够灵活运用哈希表等数据结构解决类似的算法问题。
2024-02-25 16:41:18
380
原创 C++右值引用和移动语义
在C++中,我们经常会遇到左值和右值的概念。左值是可以获取地址的表达式,只要是一个变量,那他就一定是个左值。而右值则是临时的,不能赋值,也没有持久的内存地址。在上述代码中,我们创建了一个右值引用a,并将其初始化为10。我们也创建了一个常量左值引用b,并将其初始化为10。
2024-02-20 11:49:37
622
原创 C++ 中的 std::stringstream
是 C++ 标准库中的一部分,它提供了一种方便的方式来操作字符串。它可以被视为一个字符串流,我们可以像操作 I/O 流一样来操作字符串。这使得我们可以使用插入运算符()来向流中插入数据和从流中提取数据。是 C++ 中一个非常强大的工具,它提供了一种灵活的方式来处理字符串。
2024-02-20 11:16:27
709
原创 C++ 中的单例模式singleton
单例模式是一种设计模式,它限制一个类只能创建一个对象。这个模式通常用于那些需要全局访问点的类,例如配置类或日志类。单例模式是一种常见的设计模式,它可以确保一个类只有一个实例,并提供一个全局访问点。通过理解和掌握单例模式,我们可以编写出更加健壮和灵活的 C++ 代码。
2024-02-20 11:12:28
569
原创 C++ 中的 decltype 关键字
decltype是 “declared type” 的缩写,意为 “声明的类型”。它是 C++11 引入的一种新的类型推导机制,用于检查实体的声明类型或表达式的类型和值类别。decltype可以与typedef或using结合使用,用于定义类型。// sizeof(a) 的返回值为 size_t 类型decltype是 C++ 中的一个强大工具,它提供了一种灵活的方式来推导类型,特别是在模板和泛型编程中。
2024-02-20 10:55:44
587
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅