- 博客(40)
- 收藏
- 关注
原创 xl9555-IO拓展芯片
XL9555是一个IO拓展芯片,他有寄存器,每个寄存器有16位,对应16个IO口,我们可以通过esp32使用IIC来配置寄存器,达到控制16个IO的作用,掉电后会丢失配置,恢复默认值,值得一提的是XL9555的中断功能只是起到一个提醒esp32发生中断的作用,具体是哪一个引脚发生了中断还是要esp32读取输入寄存器来进行判断。核心结论:XL9555 是,用 I2C 与 ESP32 通信,核心作用是,解决 ESP32 引脚不足、并支持中断唤醒与多片级联。
2026-01-09 16:09:36
349
原创 esp32s3-pwm介绍与stm32的不同原理
1.ESP32-S3 最多可同时生成,由 LEDC 和 MCPWM 模块共同提供。2.通道就是独立输出 PWM 波形的硬件单元,LEDC 的 8 个通道虽然独立输出,但会共用 4 个定时器,同一定时器下的通道 PWM 周期是相同的;MCPWM 的通道独立性更强,不仅波形独立,还能灵活配置互补、死区等专属功能。3.MCPWM 是,专为电机控制、数字电源等高要求场景设计;LEDC 是,主打 LED 调光与基础 PWM 输出。
2026-01-08 17:35:42
289
原创 ESP-IDF组件编译规则
分为两部分 —— 你的项目代码每次变更都会重新编译,ESP-IDF 内置组件或自定义组件的源码只要没改,就会直接复用之前的编译产物,不用重复编译,前提是都需要编译一次。先构建,把那些需要的驱动库都加载到项目里,在进行编译,我们用了那些组件,都需要在CMakeList.txt文件中写出来。main组件依赖所有组件,不需要声明,可以直接引用.h文件,其余我们创建的组件都需要先声明,在进行.h引用。文件夹,我们自己创建的组件优先级大于esp-idf架构组件的优先级。文件夹下面的components。
2026-01-07 14:49:28
114
原创 ESP32S3内存分类,RAM,ROM,FLASH
我们烧录的代码都是存放到flash里面,在上电的瞬间,会将一些全局变量从flash加载到DRAM里面,然后将一些关键的函数如中断函数加载到IRAM里面,普通的函数还是保存到flash里面,在程序运行的时候,cpu会同时从IRAM,flash(通过XIP技术读取)里面读取指令,从DRAM里面读取数据,其中运行时产生的局部变量也是保存到DRAM里面。ROM里面保存的是出厂是厂家烧录的bootloader(开机引导程序)和底层驱动代码,不能更改,好处是掉电不丢失。DIRAM,二者都有的部分,这部分的内存最大。
2026-01-06 17:16:46
126
原创 esp32s3与esp32c3的区别
本文档详细对比乐鑫科技两款主流物联网芯片 ESP32-C3 和 ESP32-S3 的技术特性、性能差异和应用场景,为项目选型提供参考依据。esp32-s3是esp32的升级款,都是双核,esp32-c3是esp8266的升级款,是单核心。此外esp32s3与esp32c3的主频,ai加速都有区别。仅ESP32支持经典蓝牙, ESP32-C3 ,ESP32S3都仅支持 BLE,如果想让esp32作为蓝牙的服务器,选用ble模式(低功耗蓝牙),经典蓝牙只支持1对1连接。BLE支持1对多连接。
2026-01-06 16:10:45
265
原创 esp32s3,读取RFID标签里面的数据
卡片页数是否可读写是按照页数2的数据进行判断的如页数2的数据是 9B 48 00 00(16进制,4字节) 从左到右,1代表连续两个页不可写,0代表连续的两个页可写,所以要读写这一类型的卡片,需要先读数据,确定哪些页是可以读写的。- 块3:控制块(包含密钥A、访问控制位、密钥B)- 页0-3:系统页(包含UID、锁定位)- 总共16个扇区(MIFARE 1K)- 页4-39:用户数据页(4字节/页)- 块0-2:数据块(16字节/块)- 总共40页,每个页4字节。
2025-12-05 17:19:13
325
原创 esp32s3结合platformio使用arduio架构驱动0.96OLED屏幕
esp32s3结合platformio使用arduio架构驱动0.96OLED屏幕,这个的效果是在屏幕上输出1,2,3,4,5,6这6个变量。需要下载库,platformio.ini文件配置如下。代码如下,main文件。
2025-11-17 15:21:30
202
原创 esp32-s3-supermini使用arduio IDE进行mpu6050的数据读取
本代码是读取mpu6050的数据,然后根据数据输出1,2,3,4,5,6,让mpu6050当色子。在工具-库管理输入mpu6050。usb-cdc选enable。
2025-11-13 17:14:34
416
原创 开发esp32s3-supermini,arduio配置esp32s3的环境
esp32s3supermini用的是4MBflash,在platformio里面没有找到对应的型号,这也是一个待解决的问题。2.设置乐鑫ESP32的支持,下面的json是乐鑫官方镜像地址,不用忍受下载不下来要翻墙的噩梦。4.ESP32S3板子插入UART的那个USB,可以设备管理器看到对应端口。5.选择自己的开发板的COM和自己设备管理器显示的COM对应。6.ESP32-S3 SuperMini 开发板。3.选择开发板—输入 ESP32S3 DEV。所以使用了arduio IDE进行了开发,
2025-11-13 11:37:02
439
原创 esp-idf事件机制
是的,你的理解完全正确:✅ 事件循环就是一个在后台运行的任务✅ 它持续运行,等待事件到达✅ 收到事件后调用对应的回调函数✅ 多个事件循环就是多个后台任务✅ 这种设计实现了高效的事件驱动架构这种理解方式简单直观,而且从技术实现上来说也是准确的。事件循环确实是以FreeRTOS任务的形式在后台运行,专门负责处理各种异步事件。
2025-10-27 15:14:15
132
原创 rtso队列,事件组,变量的地址和指针
在内存中,我们创建一个变量,内存会为该变量分配一个空间,这个空间是在物理世界存在的,有单独的名称(如0x10001),这个名称是实现定义好的,不占存储空间,这个地址上存的值就是变量的值,如果在创建一个指针指向这个变量,这个指针会在占用一个地址(如0x10002),这个地址上的值就是变量的地址(0x10001).指向的内存区域复制值)
2025-10-22 11:42:34
111
原创 RTOS内核对象说明
队列·,互斥锁,信号量都存储了RTOS的堆里面,RTOS通常只有一个全局堆,堆是程序员显示申请和释放的(malooc),内存空间是不连续的;栈是编译器自动申请和释放的,函数执行完栈清除,第二次要执行的时候栈空间恢复,A函数调用B函数,B函数的栈空间要被A包含。 动态创建的队列、信号量、任务等,其结构体本身和存储区 (如队列的数据区、任务的栈) 都从堆中分配 ((队列、信号量、互斥锁、事件组、动态任务的任务控制块 TCB 和任务栈)占用的内存也来自堆。 是严重错误,发生在使用的栈空间超过分配的大小时。
2025-10-22 10:04:06
823
原创 esp32s3-idf nvs的写入和读取
nvs是非易失性存储器,数据存放到flash里面,分区表里面有规定nvs的大小,起始地址,对于nvs的读写是分空间的,不同空间彼此独立(即A空间存入的数据不会影响B空间),在空间中写入键值对,即可完成数据的保存。
2025-10-20 17:47:14
184
原创 esp32-idf启动流程
上电后,单片机引导程序从固定位置开始执行代码,执行完之后去flash里面的固定位置访问分区表,获得主程序所在的位置,将主程序拷贝到内存(RAM),代码执行时,开始划分内存空间,代码区、数据区、堆栈区等,程序可以正常运行。我们给esp32烧写代码,烧录到flash里面,flash由分区表进行管理,分区表把flash划分成不同的部分,每一个部分都有自己的独立存储空间。引导程序执行后,才会去Flash的固定位置(如ESP32的0x8000)。引导程序是"硬编码"在固定位置的,CPU知道直接从这里开始执行。
2025-10-17 16:57:49
331
原创 esp32s3-idf-定时器回调函数
3.LVGL定时器本质上是一个定时器链表,时钟来源是系统时钟(tick),系统时钟由硬件定时器外设提供时钟,我们esp-idf使用的定时器api函数是操作的硬件定时器。1.我们使用esp-idf框架创建的回调函数,也是遵循c语言规则,函数内部创建的普通变量在执行完之后都被释放,执行前在函数堆栈里面创建,执行后从堆栈删除。1.在回调函数内部,我们使用了static变量,此时变量位置在静态存储区(单独存在的位置,不在函数堆栈上)2.我们使用回调函数时传入的参数,那是我们创建的变量,由我们管理。
2025-10-16 18:07:35
157
原创 串口助手心得
我们在使用串口助手向esp32或者stm32发送数据的时候,点击发送会在数据后方加上\r\n,代表换行和将光标移动到首位(\r),这是占两个字节,我们发送0x01点击发送,实际上是三个字节。esp32调用读取函数一次可以读取一个字节(8位)0x01一个\r\n算两个字节。
2025-10-15 11:55:28
118
原创 esp32双核总结(arduio蓝牙回调函数)
3.任务A调用函数B,就是把函数B放入了上下文,也就是自己的栈空间里面,即使函数B在另外一个文件,任务A在调用函数B的过程中,会把函数B的所有变量和信息都加载到栈空间里面,可以对变量进行读取,但不建议修改,任务A运行完函数B以后就会把函数B释放掉,栈空间里面函数B的信息也被释放。确保同一处空间只有一个任务来操作。1.所谓双核心,就是在操作系统里面,可以独立运行两个任务,并且两个核心里面的任务互不打扰,比如A任务在核心0,B任务在核心1,A的优先级比B低,但B不会抢占A任务。
2025-10-11 18:15:56
131
原创 esp32s3-idf-dht11
使用rmt外设作为接收外设,接收到的数据会是一个32位的数据0-14位表示第一部分的电平,15表示电平的高低(0或者1),16-30表示第二部分的电平,31表示电平的高低(0或者1),rmt作为可以编辑的信号发生器,就是为了那些时序精准的时序准备,避免了gpio不够精准的局限。
2025-09-26 10:34:02
214
原创 esp32s3驱动sd卡,基于arduio架构
2025.9.17卡了一下午,终于搞出来一个可以供esp32s3使用的sd卡驱动模块。ps:有时候要选择对的sd卡驱动模块。
2025-09-17 17:55:04
129
原创 ESP32-S3-Freertos,事件组和任务通知,ESP-IDF
事件组,简单来说是一个“数组”,每一个任务都可以对这个事件组进行置位,当有任务读取时,调用读取函数会返回当前的置位情况,返回值是整数类型。任务通知,与其余同步方式不同的是直接可以使用任务句柄进行通信。
2025-09-16 11:27:06
217
原创 stm32系统时钟配置
3.进入里面有SetSysClockTo72这个函数,这个函数里面配置了时钟树。2. 进入SystemInit函数里面有SetSysClock函数。1.启动文件里面调用SystemInit函数。锁相环(PLL):相当于时钟倍频的工具。
2025-06-29 17:45:35
349
原创 rtos任务调度思想,多任务的执行逻辑
rtso在stm32(单核)上运行,也算是给stm32移植了一个简易的操作系统,所谓操作系统就是可以提供任务调度来实现多任务的代码,我们写的函数,在rtos里面用创建的任务来执行我们的函数,rtos有自己的时钟管理(tick中断)。3.任务调度,就是按照优先级的大小从上到下遍历taskready链表,同一个优先级的任务在同一个链表中,rtos里面一共有56个链表(一个优先级一个链表),发现有非空的链表,就执行下一个任务。
2025-06-08 20:10:30
267
原创 frp服务总结
frp服务,简单来说就是在服务器上安装好frp服务器(腾讯云)后,在安装对应的客户端程序(本机),通过本地frp程序与服务器端的frp服务建立双向的通道,可以实现将本地的http、udp等服务暴露在公网ip上(腾讯云服务器ip)。我们可以通过访问服务器ip+端口号,间接的访问本地的http服务。3.配置文件包含frp服务器的ip,端口,秘钥,这个配置文件(右下)会让frpc,和frps分别建立一张路由表,当我们访问服务器7788端口时,FRPS在通过加密隧道转发请求时,会在数据包中添加。
2025-06-02 18:30:01
314
原创 stm32与esp32通信
发送:一次发送一个发送寄存器里面的值(8位)代表一个字符,如hello里面的h,发送完成后标志位变为SET,下次写入数据寄存器会自动清除发送完成标志位,故此循环后,无需清除标志位。我们发送的数据“LED_ON_OK\r\n”会被自动翻译成加上'\0'结束的字符串数组,并且返回首地址。接收:接受寄存器一次接受一个byte(8位),如如hello里面的h,循环读取,如esp32发送的是。“@hello\r\n”,根据stm32的规则处理去掉头@,尾\r\n得到数据hello。stm32的串口接收与发送逻辑。
2025-05-21 20:04:16
493
原创 esp32通过mqtt服务器上传数据给HA,HA远程控制esp32
esp32首先要向HA发送json字符串实现注册设备,注册完成后只需要接受话题或者发送话题的数据,不需要重复注册,如果HA里面显示实体失效,需要重新注册(在发送一次json字符串),下面代码注册了两个设备,分别是sensor类型的(传感器)和switch(开关)类型的。不同类型使用不同的话题类型。
2025-05-19 18:35:41
400
原创 腾讯云服务器部署docker,mqtt服务器,homeassist
可以简单理解服务器里面安装的软件都是一个虚拟机(容器里面的软件),只不过这些虚拟机可以相互通信,通过端口进行通信,外人访问时有专门对外的端口,对内进行数据交换时有对内的端口,外人访问软件时需要服务器ip和软件对外的端口号就可以访问。宝塔:管理服务器软件的软件,在服务器安装完城后会给出域名和端口,我们可以借助这个域名和端口来访问我们的服务器。购买完后的服务器要重装系统,重置密码,在选择密码登录,即可进入服务器的页面,这个页面可以代表这是一台远程的Wubantu电脑,我们要在上面安装宝塔,docker。
2025-05-18 20:25:03
306
原创 esp32通过链接腾讯云服务器链接mqtt服务器,来向Homeassist注册设备
简单来说就是esp32向云服务器里面的Homeassist发送数据,要送数据首先要在Homeassist里面创建接收数据的地方。以下Homeassist简称HA。上面部分内容则是实体,简单来说就是数据的种类,如温度传感器,光敏传感器。用mqttx来进行演示,在HA里面创建设备,发送内容为JSON格式。esp32的代码:为了安全我把服务器的ip,端口号没有显示出来。两者结合就可以达到辨别是哪一块电路板上的哪一个传感器的设备。device:代表是哪一块电路板,用于区分设备。
2025-05-18 19:23:17
299
原创 esp32(客户端)链接本地mqtt服务器,配合mqttx(客户端),点亮led,局域网连接
mqttx向服务器发送消息和消息类型,服务器接收,发现有客户端(esp32)订阅该消息类型,会把该消息转发给esp32,esp32进行解码后进行逻辑判断,执行对应的函数。数据传输时为byte类型,要进行decode解码,解码类型为utf-8,
2025-05-15 18:25:36
383
原创 esp32链接mqtt本地服务器(同一局域网)
micropython,mqtt库,mqtt库文件,名字叫做。2.编写程序让esp32连接本地mqtt服务器。
2025-05-15 17:32:26
183
原创 部署本地mptt服务器
https://www.123pan.com/s/hNJKVv-cwn8v.html 提取码:0214。2.找到bin目录,运行cmd,运行 emqx start 命令。然后回车,会看到如下界面,表示安装MQTT服务器成功。密码:原始(public)新密码:wang1234。3. 打开浏览器,输入。
2025-05-15 17:01:44
319
原创 micropython蓝牙代码,app使用蓝牙调试助手,micropython库使用 v1.19.1 (2022-06-18) .bin这个版本
【代码】mycropython蓝牙代码,app使用light blue。
2025-05-14 17:49:39
168
原创 python爬虫,爬取口红的评论信息(含有数据库,可视化界面,数据分析图,登录界面密码验证等)
【代码】python爬虫,爬取口红的评论信息(含有数据库,可视化界面,数据分析图,登录界面密码验证等)
2023-07-20 18:18:38
547
1
原创 学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写,课设专版。
【代码】学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写,课设专版。
2023-05-28 23:18:57
148
2
原创 学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写,课设专版。
【代码】学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写,课设专版。
2023-05-28 23:09:36
157
1
原创 【无标题】python用户登录,注册,且使用图形界面 进行登录
本文章自创,含有用户登录,注册,且包含图形界面,大家可以当成模板进行学习,大家互相学习,有不对的在评论区指出,谢谢大家。
2023-05-28 22:53:37
637
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅