- 博客(76)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 工业设计开发生命周期
需求收集与分析(Requirements Gathering and Analysis)确定用户需求和外观需求。细化设计,确定外观和机械结构。比较常见的打印方式有FDM 和 光固化。下面是一张某厂家的光固化打印流程。4.
2024-08-14 12:17:59
117
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 软件开发生命周期(基于ESP-IDF)
软件开发生命周期(Software Development Life Cycle, SDLC)是软件从概念到正式交付和维护的一系列阶段。需求收集与分析(Requirements Gathering and Analysis)确定用户需求和软件需求。根据需求创建软件架构、界面设计和系统设计。编写代码来实现设计阶段定义的软件功能。验证软件是否满足需求并且没有缺陷。包括单元测试、集成测试、系统测试和验收测试。通常在开发环境中进行,由开发者或一小群信任的测试者进行,以发现和修复基本问题。
2024-07-03 16:15:06
427
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 硬件PCB开发生命周期
2.信号衰减和延迟测试:测试信号在传输过程中的衰减情况以及延迟程度,确保在传输路径上不会出现过多的信号衰减或延迟过大。方法:在一个信号通道中发送测试信号,使用工具监测其他信号通道中的信号,观察和记录其他通道中是否出现了不应该存在的信号。2.纹波和噪声测试:确保输出的电压是稳定的,没有过多的纹波和噪声,保证电源提供的电压是干净、稳定的。3.串扰测试:检测不同信号通道之间的串扰情况,即一个信号通道的变化对其他信号通道的影响,以避免干扰。电源和信号完整性测试:确保电源和信号传输的稳定性和完整性。
2023-11-24 01:10:26
3554
原创 MQTT入门(基于ESP-IDF)
MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为远程连接设备提过实时可靠的消息服务,作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。
2024-08-27 10:28:31
386
原创 电池的入门
其中C-表示以锂金属为负极,以二氧化锰为正极的化学电池体系,R-表示电池的形状为圆柱形,如果是方形则F替代;二次电池(Secondary Cell):可以反复充电和放电的电池,如铅酸电池、镍镉(NiCd)电池、镍氢(NiMH)电池和锂离子(Li-ion)电池。电压:LIR2032电池的额定电压为3.6V,充满电后电压可达4.15V,放电终止电压为2.7V;原电池(Primary Cell):只能放电不能充电的电池,如干电池(锌锰电池)和碱性电池。18是直径,65是长度,0是指圆柱,容量为2000mah。
2024-08-26 16:19:46
279
原创 中断入门(基于ESP-IDF)
在《Unix传奇》中有这样一句话,用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。在操作系统中,"用户态"和"内核态"是两种不同的执行级别或模式。进程和线程是用户态下的执行实体,而硬件中断处理则通常在内核态进行。这里的“三等公民”、“二等公民”和“一等公民”是形象地描述它们在资源访问权限和优先级上的不同。
2024-07-22 13:07:05
415
转载 RMT入门WS2812(基于ESP-IDF)
对RMT的初始化需要设置 rmt_config_t 中的相关参数,根据官方的说明:填好相关参数后,需要调用函数 rmt_config() 以使初始化参数有效和函数 rmt_driver_install() 安装驱动。使用方法:1.2 WS2812初始化对WS2812进行初始化:根据 led_strip_config_t 的定义,该结构体的第一个参数为WS2812灯的数量,第二个参数为RMT的通道值。1.3 点亮WS2812led_strip_s 结构体使用了指向函数的指针来模拟面向
2024-07-19 17:01:55
34
原创 GPT-SoVITS语音克隆入门
主要参考资料:GPT-SoVITS: 智能语音合成的新境界:你的声音,现在是我的了!- 手把手教你用 GPT-SoVITS 克隆声音!
2024-07-17 12:06:58
263
转载 Websocket入门
WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议,它可以让客户端和服务器之间进行实时的双向通信。WebSocket 使用一个长连接,在客户端和服务器之间保持持久的连接,从而可以实时地发送和接收数据。
2024-07-08 18:21:59
36
转载 摄像头结构入门
摄像头模组:英文名Camera Compact Module,简称CCM,是影像捕捉至关重要的电子器件,简单来说,是一种将物体的光信号转换为可以读取和储存的数字信号的一种器件,主要由镜头、VCM马达、底座、IR滤光片、图像传感器、电路板等部件组成。**Lens:**镜头,负责成像和对焦**VCM:**音圈马达,用来改变像距,实现镜头自动对焦**Holder:**基座,负责固定镜头**IR:**红外滤波片,负责过滤红外光**Sensor:**图像传感器,负责将图像转换电信号**PCB:**印刷电
2024-07-08 12:59:58
49
转载 NFC入门
NFC(Near Field Communication)近场通信,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。NFC是一种短距离高频的无线电技术,在13.56Mhz频率运行于20cm距离内。其传输速度有106Kbit/s、212Kbit/s或者424Kbit/s三种。目前近场通信已通过并成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。
2024-07-04 11:27:00
213
原创 语音唤醒入门(基于ESP-skainet)
乐鑫提供了经过训练的 WakeNet 和 MultiNet 模型,使用模型前需先将其加载至你的项目,目前 ESP-SR 支持以下模型加载方式:配置方法:运行 idf.py menuconfig 进入 ESP Speech RecognitionAFE声学前端算法 + 使用模型乐鑫 AI 自主研发了一套乐鑫 AFE 算法框架,可基于ESP32-S3 系列芯片进行声学前端处理。
2024-06-30 18:08:56
416
转载 喇叭的入门
在日常生活中,住宅小区告知牌上面标示噪音要低于60分贝,也就是要低于60dB,在这里dB(分贝)的定义为噪声源功率与基准声功率比值的对数乘10的数值,不是一个单位,而是一个数值,用来形容声音的大小。在无线通讯领域,衡量一个地点的某一无线基站通信信号强度也可以用dB表示。如测的某宾馆402房间的1号无线基站通信信号强度为-90dBm,这里的定义为该房间的有用信号强度与所有信号(包括干扰信号)的比值。在天线技术方面,dB是衡量天线性能的一个参数,名称为增益。它是指在输入功率相等的条件下,实际天线与理想天线在空
2024-06-30 15:06:21
369
原创 音频傅里叶变换(基于开源kissffs)
傅里叶变换是一种数学变换,用于将信号从时间域(或空间域)转换到频率域。这种变换揭示了信号的频率成分,是信号处理和系统分析中非常重要的工具。以下是傅里叶变换的一些基本概念:汉明窗(Hamming Window)是一种常用的窗函数,主要用于信号处理领域,特别是在傅里叶分析中。它是由理查德·汉明(Richard Hamming)提出的,因此得名汉明窗。汉明窗的目的是减少信号在进行离散傅里叶变换(DFT)时的频谱泄露现象。频谱泄露是由于信号在时间上被截断而产生的,它会导致频谱分析中的误差。使用窗函数可以对信号的边缘
2024-06-24 15:12:14
437
1
原创 编译器优化入门(基于ESP32)
这是编译器的"无优化"级别。在这个级别上,编译器不会进行任何优化,以最快的速度生成代码。这意味着编译器将直接按照源代码的字面意义生成机器代码,不考虑运行时的性能。这个优化级别专注于生成更小的可执行文件。它尝试通过各种优化手段减少程序的体积,同时也会考虑程序的运行效率。这个优化级别是为调试而设计的,它尝试在不显著影响程序性能的情况下,生成更容易调试的代码。这是编译器的"中等"优化级别。它启用了大多数不涉及显著增加编译时间的优化选项。ESP-IDF 支持多种编译器,但默认情况下,它使用的是乐鑫官方提供的。
2024-06-17 18:39:33
330
原创 LVGL刷屏优化(基于ESP32)
下面是一张图像文件/图像C array从读取到显示的整个底层路径,有了一个路径,我们就可以依次对每个环节进行优化。从上图中可以看到,选择RAM还是PSRAM是两条不同的通道。(当然,RAM后可以接CPU,但是有DMA干嘛不用。另外DMA是只有RAM可以使用,在heap_caps_malloc()中设置MALLOC_CAP_DMA)。ESP32中RAM的问题就是容量太小,留给data用的只有320K,对于大屏会有明显刷屏感。PSRAM可以通过分配大内存,以空间换时间。但是对于大屏,第一张图的加载速度会较慢
2024-06-16 13:34:42
1044
原创 编程哲学——Ctrl C+V的弊端
Ctrl C+V”(即复制粘贴)是程序员在编写代码时常用的一种操作,它在某些情况下可以提高工作效率,但过度依赖复制粘贴也可能带来一些弊端。:很多程序员只知道Ctrl C+V的弊端,这样对于学习代码有什么好处和弊端。
2024-06-12 09:45:54
237
原创 一些智能音箱类的软硬件方案
硬件方面,主控是联发科MediaTek Helo P35(话说,就是2019年Oppo A7n的主控方案) 。2.3GHz八核处理器、IMG PowerVR ge8320级GPU,采用12nm设计。硬件方面,NSdisplay主控采用了采用了瑞芯微RK3566 ARM Cortex-A55 四核高性能处理器。RK3566搭载G52图形处理器 (没错,这个主控是奔着显示来的),支持双屏异显,且有着强大的视频解码能力并能高效并发处理多小图解析,最终实现8-10路1080P 30 H264/H265、HDR10
2024-06-03 11:40:18
230
原创 编程哲学——任务优先级 与 个人生活
在操作系统中,"用户态"和"内核态"是两种不同的执行级别或模式。进程和线程是用户态下的执行实体,而硬件中断处理则通常在内核态进行。这里的“三等公民”、“二等公民”和“一等公民”是形象地描述它们在资源访问权限和优先级上的不同。因此,在嵌入式框架中,我们往往也会采用 执行具体任务的线程是三等公民、app_task是二等公民、硬件中断是一等公民。在《Unix传奇》中有这样一句话,用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。掌握其他任务的生杀大权,它的时间流程是确定的。
2024-05-31 12:57:53
462
原创 CI/CD(基于ESP-IDF)
CI(Continuous Integration,持续集成)/CD(Continuous Delivery,持续交付/Continuous Deployment,持续部署)属于DevOps的概念,指将传统开发过程中的代码构建、测试、部署以及基础设施配置等一系列流程的人工干预转变为自动化。使用CI/CD,代码经由开发人员更改后,可进行自动化测试并完成交付和部署。恰当的CI/CD管道可使计算机停机时间最小化,从而更快发布代码。
2024-05-29 16:08:48
810
原创 WAV编码入门
WAVE文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav"。最基本的WAVE文件是PCM(脉冲编码调制)格式的,这种文件直接存储采样的声音数据没有经过任何的压缩,是声卡直接支持的数据格式,要让声卡正确播放其它被压缩的声音数据,就应该先把压缩的数据解压缩成PCM格式,然后再让声卡来播放。
2024-05-20 23:10:47
292
转载 数字音频接口入门(基于ESP-IDF)
本文主要介绍 I2S、PCM、TDM 、PDM四个接口的区别。这四个全是物理接口,有着不同的物理连接方式。
2024-05-16 10:56:54
137
原创 MP3解码入门(基于libhelix)
这个函数用于初始化MP3解码器,创建一个解码器实例,并返回一个句柄(HMP3Decoder),该句柄在后续的解码过程中被用来引用这个解码器实例。此函数用于释放先前通过MP3InitDecoder创建的MP3解码器实例。它接受解码器句柄作为参数,并释放与之关联的所有资源。这个函数是MP3解码的核心,它将MP3编码的数据(inbuf)解码成PCM格式的音频(outbuf)。inbuf是一个指向输入缓冲区的指针的指针,解码器会更新这个指针以指向未处理的输入数据。
2024-05-15 22:16:43
1011
转载 内存优化(基于ESP32)
操作系统分配给进程的内存空间中包含五种段:数据段、代码段、堆、栈。栈:存放程序中的临时的局部变量和函数的参数值。堆:存放进程运行中被动态分配的内存,其大小不固定。数据段:存放程序中的静态变量和已初始化且不为零的全局变量。代码段:存放可执行文件的操作指令,代码段是只读的,不可进行写操作。这部分的区域在运行前已知其大小。上图是ESP32内部存储器的布局,SRAM分为3个存储块SRAM0,SRAM1和SRAM2。(还有RTC快速和慢速存储器)按照功能,SRAM可以分为两种:虽然理论上,SRAM1可以用于
2024-05-09 16:18:40
1074
原创 指向函数的指针
typedef 在 C 语言中用于为类型创建别名,它使得程序员能够用新的名称来表示已有的类型,从而提高代码的可读性和可维护性。指向函数的指针是C语言中一个强大的特性,它允许你创建可以指向不同函数的变量。在这个例子中,FuncPtr 是一个可以指向接受两个 int 参数并返回 int 的函数的指针。在这个例子中,uint 变成了 unsigned int 的别名。这里,IntPtr 成为了指向 int 的指针的别名。我们可以按照函数的模样构建一个指向函数的指针。
2024-05-05 18:24:16
498
原创 SPI Flash and External SPI RAM(基于ESP32)
找到ESP32-S3的系统框图,可以看到ESP32支持QSPI的Flash和QSPI/OSPI的PSRAM。
2024-04-24 02:02:49
1163
原创 Arduino库制作
本文目标旨在介绍如何创建一个完整的Arduino库,让你可以通过Arduino IDE中的库管理工具下载自己写的库。Arduino库的根文件夹名称必须以基本字母(A-Z或a-z)或数字(0-9)开头,可以使用基本字母、数字、下划线(_)、点(.)和破折号(-)。文件夹名最大长度为63个字符。
2024-04-18 14:22:47
819
1
原创 AI-Agent入门
主要参考资料AI Agent(或者LLM Agent)深度讲解——组成、方法、案例及展望:产品经理研读:Agent的九种设计模式(图解+代码):特工宇宙与产品二姐的AI趋势分享:
2024-04-17 15:38:42
482
原创 ESP32系统监测(基于ESP-IDF)
查询系统剩余堆、最小堆大小的 API 位于 esp_system 组件中。剩余堆大小过小,会导致 malloc 申请内存失败,当剩余堆不够时,很多网络操作均会失败,这是由于网路操作内部涉及很多 malloc 操作。(1)查询系统剩余堆大小,返回值为 Byte(2)查询系统最小堆大小,返回值为 Byte示例:查询线程剩余栈大小方法一由于ESP32 IDF采用FreeRTOS,因此查询线程所使用的栈大小空间,可通过FreeRTOS API实现,函数原型如下:返回值为线程栈使用的高水位线,所谓高水位
2024-04-11 00:36:23
1013
原创 OTA入门(基于ESP32)
OTA:Over-the-Air Technology,即空中下载技术。OTA升级:通过OTA方式实现固件或软件的升级。只要是通过无线通信方式实现升级的,都可以叫OTA升级,比如网络/蓝牙。通过有线方式进行升级,叫本地升级,比如通过UART,USB或者SPI通信接口来升级设备固件。
2024-03-26 00:17:44
1062
原创 USB协议入门(基于ESP32)
主要参考资料USB协议详解第1讲(核心概念通俗理解): https://blog.csdn.net/weiaipan1314/article/details/112164416B站Up主hoop0《客制化机械键盘(四):白话USB协议》目录USB介绍USB主机方案介绍USB设备方案介绍USB介绍USB主机方案介绍USB设备方案介绍
2024-02-28 11:24:30
461
原创 提示工程(Prompt Engineering)、微调(Fine-tuning) 和 检索增强生成(RAG,Retrieval-Augmented Generation)
主要参考资料:还没搞懂嵌入(Embedding)、微调(Fine-tuning)和提示工程(Prompt Engineering)?B站Up主Nenly同学《60分钟速通LORA训练!
2024-02-23 14:24:16
1269
原创 CYUSB3065配置CMOS
按照OG02B10的时序电路,在通过SCCB配置CMOS之前,需要三个电源上电,Xshutdown高电平和配置时钟电路。找到手册的第6章SCCB(跟IIC很像),可以看到SCCB的地址与SID引脚有关,这个需要到硬件原理图上确认下。这是Cypress的一个支持MIPI和UVC的模块,有例程支持OV5640,现在要替换替换成OG02B10。寄存器参数需要找到厂家的FAE,由他们提供,OG02B10的资料已经上传。(2)参考得宏的电路,时钟由主控提供,目前程序未实现。这里有两个重要参数需要搞定,摄像头的。
2024-02-01 17:28:20
1166
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人