自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 esp32,esp-idf设备配网

节课我们实现了sta功能,但我们只是用固定的SSID和密码来连接,在实际项目中不可能这么做,需要有办法把SSID和密码告诉给ESP32S3,这个过程就叫配网。常见的配网方式有如下4种优点:操作简单缺点:需要有屏(触摸屏)有按键支持优点:操作稍简单,原理本质上是通过广播UDP数据,通过编码UDP数据包的长度来实现将SSID和密码传输给设备缺点:配网成功率不高,不同平台难以移植兼容优点:操作较为简单,成功率高,原理本质上就是我们的手机通过ble去连接设备,然后将ssid和密码发送给设备。

2026-10-14 11:44:52 96

原创 海凌科 AI-10人脸识别模块使用原理

这款人脸识别模块自带本地大模型人脸算法,主要的使用逻辑就是通过串口来控制,通过发送不同的串口命令帧来让人脸识别模块响应不同的处理,2.人脸识别(模块采集人脸信息,然后遍历本地的人脸信息,如果遍历找到符合的就返回索引成功的信息,一般包含人脸id,和响应成功标识)但要注意的是这个模块透不过厚玻璃(红外光反射干扰),要解决这个问题可以使用rfid来进行解决。3.人脸删除(通过串口命令帧来让人脸识别模块删除本地的人脸索引,通过id号来进行删除)1.人脸录入(模块通过摄像头录入人脸到本地,每一个人脸都有一个编号)

2026-10-14 11:43:56 144

原创 迪文屏显示网络摄像头画面原理

这个屏幕可以显示摄像头画面是因为这个迪文屏里面有一个51编译后的代码,他可以发送拉取画面的请求给网络摄像头,摄像头收到就会回传画面给屏幕,我们的保护器通过串口给屏幕发送命令帧(迪文专属的命令帧 5A A5开头),屏幕收到后就会发送请求给网络摄像头,从而获取摄像头画面。这个软件是首次使用摄像头的时候查找摄像头的默认ip,查找到后可以配置摄像头的ip(项目要用的ip),然后在浏览器上输入摄像头的ip(新配置好的ip)默认用户名是:admin,密码是:123456。1.视频类型:视频流。

2026-10-14 11:29:58 192

原创 智嵌物联,串口-wifi网关的配置

2.下面的TCP/RTU互传的意思是电脑的modbus pull连接这个wifi网口,这两个之间是modbus TCP连接,数据格式是tcp的格式,(以太网口也是这个格式),但是我们的mcu是RTU格式(普通的有线485都是这个格式),这个网口收到tcp格式的数据会自己转化成RTU的格式,收到RTU的格式会自己转化成TCP的格式。3.下面的是wifi网口的配置,重点是串口参数,如果连接MCU就要和MCU串口的格式一样,毕竟是与mcu通信。TCP的设置(默认),这里主要看端口。Wifi的名称和密码。

2026-10-14 11:18:43 145

原创 HTTP,Websocket,SSE协议

客户端可以根据不同的URI,比如想要使用websocket,就在路径后面加上/ws,就可以访问服务器针对websocket协议的回调函数,服务器根据不同的路由来设置不同的回调函数,来实现支持不同的通信协议。SSE也是基于http的长连接协议,但他是单向的,只能服务器向客户端发送数据,数据都是文本和字符串,同样,客户端也需要自己构建请求头,服务器响应后也会保存套接字来进行通信。http协议在嵌入式开发很常见,就是面向服务器的一次连接(一次通信完就断开),客户端可以根据不同的路由来访问服务器不同的功能。

2026-03-10 17:38:04 137

原创 C语言变量存放规则

普通变量是没有任何关键词修饰的变量,全局变量就是放在全局/静态存储区,外部文件想要引用可以加extern代表变量在之前定义过,并不会分配内存,只是声明,但修改值(两个文件)都是有效的,普通局部变量就是在栈空间上,函数运行完就没了。const修饰代表常量,const修饰的全局变量是放在flash里面的,与代码放在一起,是不能修改的(物理上不能修改),const修饰的局部变量是放在栈上面的,原则上是可以修改但不建议修改。全局变量是只有本文件可以进行修改,局部变量是只有本函数可以修改。

2026-03-01 17:32:25 45

原创 esp-idf关于lvgl

lvgl读取数据坐标也算一个rtos的任务,他是周期性来运行的,不管有没有下降沿,定时一直读;读的时候判断电平,有效才处理,下降沿只在按下那一刻出现一次。之后只要 INT 是低电平,你的任务就一直读、一直有效,拖动就是这样实现的。lvgl是一个开源图形库。

2026-02-27 23:43:58 190

原创 esp32,使用esp-idf链接mqtt服务器,消息接收

注意:1.mqtt服务器发给esp32的消息,中间没有/0,使用“%s”这种格式打印的数据会自动往后打印,直到遇见/0,解决方法是。2.消息发送时使用strlen可以获取字符串或者数组的真实大小,不会发送数组的闲杂空位。本次连接使用的是mqtt的官方公共服务器,前提是要先链接wifi。定长打印,根据参数里面的长度。

2026-01-19 17:12:54 255

原创 esp32s3-idf使用smart_config一键配网

所谓配网,就是让esp32收到wifi的账号和密码,自己去连接wifi,使用的的是乐鑫开发的esptouch这个配网app,只支持2.4ghz的wifi,不支持5g。esp32端通过事件接收机制,会收到事件的数据,每一个事件类型都对应一个数据类型,然后处理数据获取账号和密码,再配置wifi就可以连接了。配网的流程是esp32先开启配网,然后手机打开配网软件,配网软件会连续发送三个开始码,然后发送账号密码,在发送三个终止码。

2026-01-17 16:32:20 284

原创 esp32s3-idf链接wifi

esp32-idf链接wifi,主要是建立了一个事件循环监听机制,通过向事件监听里面注册要监听的事件类型,在回调函数里面处理对应的事件,就可以处理wifi的各种连接事件。

2026-01-17 15:51:33 226

原创 xl9555-IO拓展芯片

XL9555是一个IO拓展芯片,他有寄存器,每个寄存器有16位,对应16个IO口,我们可以通过esp32使用IIC来配置寄存器,达到控制16个IO的作用,掉电后会丢失配置,恢复默认值,值得一提的是XL9555的中断功能只是起到一个提醒esp32发生中断的作用,具体是哪一个引脚发生了中断还是要esp32读取输入寄存器来进行判断。核心结论:XL9555 是,用 I2C 与 ESP32 通信,核心作用是,解决 ESP32 引脚不足、并支持中断唤醒与多片级联。

2026-01-09 16:09:36 714

原创 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 483

原创 ESP-IDF组件编译规则

分为两部分 —— 你的项目代码每次变更都会重新编译,ESP-IDF 内置组件或自定义组件的源码只要没改,就会直接复用之前的编译产物,不用重复编译,前提是都需要编译一次。先构建,把那些需要的驱动库都加载到项目里,在进行编译,我们用了那些组件,都需要在CMakeList.txt文件中写出来。main组件依赖所有组件,不需要声明,可以直接引用.h文件,其余我们创建的组件都需要先声明,在进行.h引用。文件夹,我们自己创建的组件优先级大于esp-idf架构组件的优先级。文件夹下面的components。

2026-01-07 14:49:28 211

原创 ESP32S3内存分类,RAM,ROM,FLASH

我们烧录的代码都是存放到flash里面,在上电的瞬间,会将一些全局变量从flash加载到DRAM里面,然后将一些关键的函数如中断函数加载到IRAM里面,普通的函数还是保存到flash里面,在程序运行的时候,cpu会同时从IRAM,flash(通过XIP技术读取)里面读取指令,从DRAM里面读取数据,其中运行时产生的局部变量也是保存到DRAM里面。ROM里面保存的是出厂是厂家烧录的bootloader(开机引导程序)和底层驱动代码,不能更改,好处是掉电不丢失。DIRAM,二者都有的部分,这部分的内存最大。

2026-01-06 17:16:46 219

原创 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 889

原创 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 445

原创 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 295

原创 esp32-s3-supermini使用arduio IDE进行mpu6050的数据读取

本代码是读取mpu6050的数据,然后根据数据输出1,2,3,4,5,6,让mpu6050当色子。在工具-库管理输入mpu6050。usb-cdc选enable。

2025-11-13 17:14:34 620

原创 开发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 743

原创 esp-idf事件机制

​​是的,你的理解完全正确:​​✅ ​​事件循环就是一个在后台运行的任务​​✅ ​​它持续运行,等待事件到达​​✅ ​​收到事件后调用对应的回调函数​​✅ ​​多个事件循环就是多个后台任务​​✅ ​​这种设计实现了高效的事件驱动架构​​这种理解方式简单直观,而且从技术实现上来说也是准确的。事件循环确实是以FreeRTOS任务的形式在后台运行,专门负责处理各种异步事件。

2025-10-27 15:14:15 161

原创 rtso队列,事件组,变量的地址和指针

在内存中,我们创建一个变量,内存会为该变量分配一个空间,这个空间是在物理世界存在的,有单独的名称(如0x10001),这个名称是实现定义好的,不占存储空间,这个地址上存的值就是变量的值,如果在创建一个指针指向这个变量,这个指针会在占用一个地址(如0x10002),这个地址上的值就是变量的地址(0x10001).指向的内存区域复制值)

2025-10-22 11:42:34 142

原创 RTOS内核对象说明

队列·,互斥锁,信号量都存储了RTOS的堆里面,RTOS通常只有一个全局堆,堆是程序员显示申请和释放的(malooc),内存空间是不连续的;栈是编译器自动申请和释放的,函数执行完栈清除,第二次要执行的时候栈空间恢复,A函数调用B函数,B函数的栈空间要被A包含。​ 动态创建的队列、信号量、任务等,其结构体本身和存储区 (如队列的数据区、任务的栈) 都从堆中分配 (​(队列、信号量、互斥锁、事件组、动态任务的任务控制块 TCB 和任务栈)占用的内存也来自堆。​ 是严重错误,发生在使用的栈空间超过分配的大小时。

2025-10-22 10:04:06 874

原创 esp32s3-idf nvs的写入和读取

nvs是非易失性存储器,数据存放到flash里面,分区表里面有规定nvs的大小,起始地址,对于nvs的读写是分空间的,不同空间彼此独立(即A空间存入的数据不会影响B空间),在空间中写入键值对,即可完成数据的保存。

2025-10-20 17:47:14 266

原创 esp32-idf启动流程

上电后,单片机引导程序从固定位置开始执行代码,执行完之后去flash里面的固定位置访问分区表,获得主程序所在的位置,将主程序拷贝到内存(RAM),代码执行时,开始划分内存空间,代码区、数据区、堆栈区等,程序可以正常运行。我们给esp32烧写代码,烧录到flash里面,flash由分区表进行管理,分区表把flash划分成不同的部分,每一个部分都有自己的独立存储空间。引导程序执行后,才会去Flash的固定位置(如ESP32的0x8000)​。引导程序是"硬编码"在固定位置的,CPU知道直接从这里开始执行。

2025-10-17 16:57:49 362

原创 esp32s3-idf-定时器回调函数

3.LVGL定时器本质上是一个定时器链表,时钟来源是系统时钟(tick),系统时钟由硬件定时器外设提供时钟,我们esp-idf使用的定时器api函数是操作的硬件定时器。1.我们使用esp-idf框架创建的回调函数,也是遵循c语言规则,函数内部创建的普通变量在执行完之后都被释放,执行前在函数堆栈里面创建,执行后从堆栈删除。1.在回调函数内部,我们使用了static变量,此时变量位置在静态存储区(单独存在的位置,不在函数堆栈上)2.我们使用回调函数时传入的参数,那是我们创建的变量,由我们管理。

2025-10-16 18:07:35 188

原创 串口助手心得

我们在使用串口助手向esp32或者stm32发送数据的时候,点击发送会在数据后方加上\r\n,代表换行和将光标移动到首位(\r),这是占两个字节,我们发送0x01点击发送,实际上是三个字节。esp32调用读取函数一次可以读取一个字节(8位)0x01一个\r\n算两个字节。

2025-10-15 11:55:28 147

原创 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 171

原创 esp32s3-idf-dht11

使用rmt外设作为接收外设,接收到的数据会是一个32位的数据0-14位表示第一部分的电平,15表示电平的高低(0或者1),16-30表示第二部分的电平,31表示电平的高低(0或者1),rmt作为可以编辑的信号发生器,就是为了那些时序精准的时序准备,避免了gpio不够精准的局限。

2025-09-26 10:34:02 272

原创 esp32s3-idf i2c驱动mpu6050

esp32s3有两个i2c驱动,本次使用i2c0。

2025-09-23 14:34:58 236

原创 esp32s3,pwm,espidf

【代码】esp32s3,pwm,espidf。

2025-09-19 14:51:14 145

原创 esp32s3驱动sd卡,基于arduio架构

2025.9.17卡了一下午,终于搞出来一个可以供esp32s3使用的sd卡驱动模块。ps:有时候要选择对的sd卡驱动模块。

2025-09-17 17:55:04 183

原创 ESP32-S3-Freertos,事件组和任务通知,ESP-IDF

事件组,简单来说是一个“数组”,每一个任务都可以对这个事件组进行置位,当有任务读取时,调用读取函数会返回当前的置位情况,返回值是整数类型。任务通知,与其余同步方式不同的是直接可以使用任务句柄进行通信。

2025-09-16 11:27:06 248

原创 esp32S3-freertos信号量和互斥锁

【代码】esp32S3-freertos信号量和互斥锁。

2025-09-11 15:21:39 149

原创 stm32系统时钟配置

3.进入里面有SetSysClockTo72这个函数,这个函数里面配置了时钟树。2. 进入SystemInit函数里面有SetSysClock函数。1.启动文件里面调用SystemInit函数。锁相环(PLL):相当于时钟倍频的工具。

2025-06-29 17:45:35 424

原创 rtos任务调度思想,多任务的执行逻辑

rtso在stm32(单核)上运行,也算是给stm32移植了一个简易的操作系统,所谓操作系统就是可以提供任务调度来实现多任务的代码,我们写的函数,在rtos里面用创建的任务来执行我们的函数,rtos有自己的时钟管理(tick中断)。3.任务调度,就是按照优先级的大小从上到下遍历taskready链表,同一个优先级的任务在同一个链表中,rtos里面一共有56个链表(一个优先级一个链表),发现有非空的链表,就执行下一个任务。

2025-06-08 20:10:30 313

原创 frp服务总结

frp服务,简单来说就是在服务器上安装好frp服务器(腾讯云)后,在安装对应的客户端程序(本机),通过本地frp程序与服务器端的frp服务建立双向的通道,可以实现将本地的http、udp等服务暴露在公网ip上(腾讯云服务器ip)。我们可以通过访问服务器ip+端口号,间接的访问本地的http服务。3.配置文件包含frp服务器的ip,端口,秘钥,这个配置文件(右下)会让frpc,和frps分别建立一张路由表,当我们访问服务器7788端口时,FRPS在通过加密隧道转发请求时,会在数据包中添加​。

2025-06-02 18:30:01 359

原创 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 642

原创 esp32通过mqtt服务器上传数据给HA,HA远程控制esp32

esp32首先要向HA发送json字符串实现注册设备,注册完成后只需要接受话题或者发送话题的数据,不需要重复注册,如果HA里面显示实体失效,需要重新注册(在发送一次json字符串),下面代码注册了两个设备,分别是sensor类型的(传感器)和switch(开关)类型的。不同类型使用不同的话题类型。

2025-05-19 18:35:41 499

原创 腾讯云服务器部署docker,mqtt服务器,homeassist

可以简单理解服务器里面安装的软件都是一个虚拟机(容器里面的软件),只不过这些虚拟机可以相互通信,通过端口进行通信,外人访问时有专门对外的端口,对内进行数据交换时有对内的端口,外人访问软件时需要服务器ip和软件对外的端口号就可以访问。宝塔:管理服务器软件的软件,在服务器安装完城后会给出域名和端口,我们可以借助这个域名和端口来访问我们的服务器。购买完后的服务器要重装系统,重置密码,在选择密码登录,即可进入服务器的页面,这个页面可以代表这是一台远程的Wubantu电脑,我们要在上面安装宝塔,docker。

2025-05-18 20:25:03 351

原创 esp32通过链接腾讯云服务器链接mqtt服务器,来向Homeassist注册设备

简单来说就是esp32向云服务器里面的Homeassist发送数据,要送数据首先要在Homeassist里面创建接收数据的地方。以下Homeassist简称HA。上面部分内容则是实体,简单来说就是数据的种类,如温度传感器,光敏传感器。用mqttx来进行演示,在HA里面创建设备,发送内容为JSON格式。esp32的代码:为了安全我把服务器的ip,端口号没有显示出来。两者结合就可以达到辨别是哪一块电路板上的哪一个传感器的设备。device:代表是哪一块电路板,用于区分设备。

2025-05-18 19:23:17 340

109837907346284912.22学生成绩管理系统.rar

109837907346284912.22学生成绩管理系统.rar

2022-10-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除