- 博客(128)
- 收藏
- 关注
原创 LVGL 入门第三课:按钮为什么没有文字?一文搞懂 `lv_button`
学完lv_obj和lv_label之后,我们终于可以开始做一个真正能交互的控件了。最常见的交互控件,就是按钮。确认取消返回开始保存设置连接设备lv_button我明明创建了一个按钮,为什么按钮上没有文字?按钮本身只是一个可以点击的对象。它不会自动帮我们显示文字。如果想让按钮显示文字,需要在按钮里面再创建一个lv_label。lv_obj:提供大小、位置、样式、事件等基础能力。lv_label:负责在按钮里面显示文字。lv_button:提供按钮语义和默认按钮行为。
2026-06-09 23:30:00
180
原创 LVGL 入门第二课:文字是怎么显示出来的?一文搞懂 `lv_label`
上一篇我们讲了lv_obj。也就是 LVGL 里最基础的对象。理解了lv_obj之后,就知道 LVGL 里面很多控件并不是完全孤立的东西,它们本质上都建立在对象系统之上。但是只有一个空对象,界面还是很单调。接下来最常用的控件,就是文字控件。页面标题按钮文字状态提示温度数值设备名称错误信息lv_label显示文字。不过,新手第一次使用lv_label英文能显示,中文显示不了。设置了变量,但数值没有更新。文字太长,超出了屏幕。想让文字换行,不知道该怎么写。
2026-06-08 21:49:50
254
原创 从一个设备控制面板开始,系统学习 LVGL 界面开发
这次用 LVGL 画的是一个设备控制面板。顶部状态栏数据指标卡片传感器趋势图LED 开关屏幕亮度滑条风扇转速圆弧系统音量条快捷功能按钮底部导航栏从表面看,它是一个完整界面。从 LVGL 学习角度看,它是一组知识点的集合。每一个模块背后,都对应着后面要讲的一篇文章。所以这一篇先不急着讲 API。先把整体画面放在脑子里。这个界面到底是怎么用 LVGL 画出来的。
2026-06-04 21:42:10
255
原创 T113-S3 最小系统硬件设计:时钟、复位一次讲清
本文主要记录了 T113-S3 最小系统中时钟电路和复位电路的绘制过程。时钟部分主要包括24MHz主晶振和32.768kHz低速晶振。主晶振为芯片提供基础运行时钟,低速晶振通常与 RTC、低功耗计时等功能相关。晶振电路虽然看起来简单,但匹配电容、晶振频偏、PCB 走线和寄生电容都会影响最终效果。复位部分主要由上拉电阻、复位电容、复位按键和 ESD 防护器件组成。本设计中使用10KΩ上拉电阻和100nFC5 的作用主要是上电复位延时、滤除短毛刺和辅助按键去抖。
2026-04-29 08:56:51
465
原创 ESP-IDF开发:用乐鑫组件库,三分钟搞定按键驱动!
在学ESP32开发的过程中,遇到一个让我特别爽的东西——乐鑫组件库(Espressif Component Registry)。事情是这样的:我想给板子上的按键加个单击检测功能。按照以前的思路,我得自己写GPIO中断、做消抖、搞状态机……一套下来少说也得折腾半天。然后我发现乐鑫竟然有个官方组件库,里面有现成的button组件,两行命令就能装好,几行代码就跑起来了。早知道有这东西,我之前造的那些轮子是图啥?今天就来记录一下我从认识组件库到跑通按键驱动的完整过程,希望能帮到同样在学ESP-IDF的朋友。
2026-03-24 22:55:12
547
原创 ESP32-S3 蓝牙 BLE 从零到一:广播、服务、特征,用一个智能灯的例子全讲透
iBeacon 是苹果推出的基于 BLE 广播的定位协议。本质就是一个不停向外发送数据的蓝牙设备,不需要连接,任何人都能收到。商场定位、门店推送、资产追踪……都靠它。iBeacon 是苹果定义的格式,如果不需要兼容 iBeacon 协议,完全可以自定义广播内容。初始化 NVS↓释放经典蓝牙内存(省内存)↓初始化蓝牙控制器 → 启用 BLE 模式↓初始化 Bluedroid → 启用↓注册 GAP 回调(管广播和连接)注册 GATTS 回调(管服务和数据)↓。
2026-03-19 22:36:03
642
原创 ESP32-S3 OTA 空中升级:不拆机不拔线,通过网络给设备刷固件
NVS(存储)↓SPIFFS(文件系统)↓分区表(Flash 空间规划)↓SmartConfig(Wi-Fi 配网)↓HTTP/HTTPS(网络通信)↓MQTT(实时通信,上云)↓OTA(远程升级) ← 本篇到这里,一个物联网设备从开发到产品化需要的核心技术栈就基本齐了。
2026-03-13 19:36:27
639
原创 OpenClaw 安装与免费千问模型配置教程
OpenClaw 真正难的不是“怎么安装”,而是“装完以后如何选一个稳定、低门槛、可立即使用的模型”。免费的千问方案,正好适合作为第一步:不用先折腾复杂 API 计费,也不用上来就背一堆提供商差异。你只需要记住一条主线:先装 OpenClaw,再启用 qwen-portal-auth,登录 Qwen,最后把默认模型切到 qwen-portal/coder-model。走通这条线,OpenClaw 基本就能真正开始用了。
2026-03-13 11:13:20
3187
原创 OpenClaw 安装与免费千问模型配置教程
OpenClaw 真正难的不是“怎么安装”,而是“装完以后如何选一个稳定、低门槛、可立即使用的模型”。免费的千问方案,正好适合作为第一步:不用先折腾复杂 API 计费,也不用上来就背一堆提供商差异。你只需要记住一条主线:先装 OpenClaw,再启用 qwen-portal-auth,登录 Qwen,最后把默认模型切到 qwen-portal/coder-model。走通这条线,OpenClaw 基本就能真正开始用了。
2026-03-10 13:35:58
4567
1
原创 ESP32-S3 真正“上云“:从零实现 MQTT 客户端,连接涂鸦云平台
上一篇搞定了 HTTP 请求,ESP32-S3 已经能跟服务器一问一答了。但我很快发现一个问题——HTTP 是"你问我才答"的模式。设备想知道有没有新指令?发个请求问一下。过一秒再问一下。再过一秒再问……这就是所谓的轮询,既浪费流量又浪费电。服务器有新消息,能主动推送给设备。这正是 MQTT 干的事。MQTT 是一种基于发布/订阅模式的轻量级协议,专门为物联网场景设计。设备订阅一个主题,有人往这个主题发消息,所有订阅者都能实时收到。就像微信群——你进了群就能收到所有消息,不需要反复去刷。
2026-03-09 23:18:22
715
1
原创 让 ESP32-S3 真正联网:一次完整的 HTTP/HTTPS 实战
上一篇搞定了 SmartConfig 配网,ESP32-S3 终于能连上我家 Wi-Fi 了。看着串口打印出来的 IP 地址,我心里想的第一件事就是——能不能访问个网页?说到底,物联网设备联网的意义就是跟服务器通信。传感器数据要上传、控制指令要下发、OTA 固件要下载……这些全都离不开 HTTP。今天就来记录一下,我在 ESP32-S3 上实现 HTTP/HTTPS 请求的全过程。从最简单的 GET 请求开始,到 POST 提交数据,再到 HTTPS 加密通信,一步步来。NVS(存配网信息)↓。
2026-03-03 09:11:49
783
原创 ESP32-S3 部署 MimicLaw 完整教程:从零到成功调用 DeepSeek
📦 准备硬件(ESP32-S3 + USB数据线)↓🔧 安装 ESP-IDF v5.5.2↓🔑 获取 DeepSeek API Key↓🧪 curl 测试 API 是否可用↓↓📝 配置 mimi_secrets.h↓✏️ 修改 llm_proxy.c(Host + Path)↓↓↓↓🎉 成功运行!装环境— ESP-IDF拿 Key改两行代码— Host 和 Path编译烧录一块几十块钱的开发板,就能跑通一个完整的硬件 + 大模型链路。
2026-02-26 10:36:08
5277
7
原创 没有屏幕没有键盘,ESP32-S3 怎么连上我家 Wi-Fi?SmartConfig 配网实战
配网的本质就是把路由器的 SSID 和密码传给设备,不同方式只是"传递管道"不同SmartConfig 的原理是 ESP32 在混杂模式下监听 UDP 广播,手机把密码编码后广播出去事件驱动模型是 ESP-IDF Wi-Fi 编程的核心,所有状态变化都通过事件回调处理配网信息会自动存到 NVS就能读出来。
2026-02-26 00:20:04
955
原创 ESP32-S3 自定义分区表:从看懂到会改,一篇就够
在工程根目录下创建一个我在原来的基础上加了一行user_nvs,也是 NVS 类型,大小 24KB。这样我就有了一个独立的 NVS 分区,可以把自己的业务数据和系统 NVS 分开存放。// ★ 改动1:指定我们自己的分区名// ★ 改动2:初始化指定分区(不再是默认的 nvs_flash_init)ESP_LOGI(TAG, "打开非易失性存储 (NVS) 句柄...");// ★ 改动3:从指定分区打开命名空间if (err!
2026-02-14 16:44:46
955
原创 ESP32-S3 上居然能像电脑一样读写文件?SPIFFS 文件系统实战
创建分区表 → 配置 menuconfig → 注册挂载 → 获取信息 → 一致性检查 → 读写文件 → 卸载几个关键点:分区表是前提— 没有分区,文件系统无处安放首次格式化会卡 10 秒— 别以为程序挂了用的是标准 C 文件操作fopenfprintffgets,零学习成本是神器— 可以把电脑上的文件直接烧进去三种文件系统套路相同— 学会 SPIFFS,LittleFS 和 FATFS 很容易迁移ESP32-S3 远比我想象中强大。
2026-02-13 11:12:33
1059
原创 ESP32 的 NVS,并不是你以为的“Flash 存数据”
一开始接触 NVS(Non-Volatile Storage)的时候,我对它的理解非常简单:“不就是往 Flash 里存点数据吗?结果在真实项目里用起来之后才发现,而是一个。这篇文章,我就完全基于我在 ESP32 / ESP32-S3 项目里用 NVS 的真实经验,把它讲清楚。
2026-02-11 16:25:05
921
原创 ESP32-S3 ADC 我是这样真正用顺的:从 SAR ADC 原理到一次完整的电压采集实战
ESP32-S3 集成了,共支持但在真正上手之前,有一个非常容易被忽略的问题。ESP32-S3 的。
2026-02-02 09:12:02
1160
原创 ESP32-S3 的 SPI,真的不只是“连个屏幕那么简单
以 ST7789 这类 SPI 屏为例,看起来只是:SPI + GPIO + 刷图异形屏(物理分辨率 ≠ 驱动分辨率)显存偏移DC / CS / RST 多控制线DMA 对齐问题刷屏撕裂。
2026-02-02 09:01:15
826
原创 ESP32‑S3 串口:从“能打印日志”到真正用在业务里
UART 是一个非常“基础”的外设,但在 ESP32‑S3 + FreeRTOS 的体系里,它绝对不是“玩具”。用任务拆收发用缓冲区抗抖动用队列解耦 ISR 和业务串口已经不只是调试工具,而是一个标准、可靠的通信通道。
2026-01-23 10:37:13
803
原创 ESP32-S3 的 I²C:从“能连设备”到“工程上用得顺”
在刚开始接触 ESP32-S3 的时候,我对 I²C 的理解其实非常简单:两根线,能连传感器,能点亮 OLED。如果你只是“会用”,问题不大;但如果你想,I²C 的设计逻辑一定要想清楚。
2026-01-20 21:40:52
774
原创 ESP32-S3 的 PWM(LEDC),我是怎么真正“用明白”的
LED 调光呼吸灯电机调速蜂鸣器编码器 / 反馈系统甚至是一些“伪 DAC”场景而且LEDC 天然就适合和 FreeRTOS 任务配合一个任务调占空比一个任务管业务逻辑硬件 PWM 自己跑,不占 CPU。
2026-01-19 20:51:30
904
原创 ESP32-S3 定时器详解:esp_timer 与 GPTimer 的工程级选择
GPIO 是感觉器官任务是执行单元队列是神经系统定时器,是整个系统的节奏控制器理解定时器,并不是为了多记几个 API,而是为了让系统——什么时候该醒、什么时候该动、什么时候该停,都在你的掌控之中。当你开始认真对待定时器的时候,其实你已经从“写功能”,走向了“设计系统”。
2026-01-15 21:41:11
829
原创 从任务到队列:我在 ESP32-S3 上理解 FreeRTOS 的一次完整实践
这篇文章并不是在“教你怎么用 FreeRTOS”,而是记录了我在 ESP32-S3 项目中,从能跑,到开始在意结构是否正确的一个过程。FreeRTOS API 都见过但不知道什么时候该用任务、什么时候该用队列那编码器这个例子,可能会是一个不错的切入点。FreeRTOS 用得好,是能让人写代码写得更安心的。
2026-01-14 20:35:29
760
原创 任务看门狗(Task Watchdog)——ESP32 为什么这么“容易重启”?
如果你在 ESP-IDF 项目中频繁遇到 watchdog 错误,
2026-01-12 21:02:24
648
原创 从点亮一颗 LED 开始:ESP32-S3 GPIO 输出的正确学习方式
如何从芯片 → 原理图 → 示例 → API一步步拆解一个 ESP-IDF 外设功能后续无论是 UART、I2C、SPI,学习路径完全一致。只要你坚持用这种方式,ESP32 的外设并不会“越来越难”,只会“越来越熟”。
2026-01-08 21:53:40
1451
原创 跑通 Hello World 之后,我第一次真正用懂了 ESP32 的 menuconfig 和日志系统
hello_world 刚跑通开始写自己的最小工程串口日志越来越多开始意识到“不太对劲”menuconfig 和日志系统,不是高级内容,而是入门必经之路。日志不是随便打的行为不是只由代码决定的menuconfig 是工程的一部分。
2026-01-07 21:16:42
801
原创 我是如何从零开始,把 ESP32-S3 跑起来的
日常生活中,说起ESP32时,我们一般说的是下方形态的模组。但准确点来说,ESP32其实不是一款芯片,而是一个系列的芯片,这个和STM32有点类型,STM32有L系列、F系列、H系列,ESP32也有不同的系列。如果你和我一样,也是刚开始接触 ESP32-S3,希望这篇文章能让你少一点焦虑。不用急着“学很多”,先把第一步走稳,比什么都重要。后续我也会继续以一个刚入门的时候的视角,记录 ESP32-S3 的学习和踩坑过程。如果你也在入门阶段,欢迎一起交流。
2026-01-06 23:42:57
2279
1
原创 LVGL-01从零搭建 LVGL 工程(Linux + CMake)
LVGL 是一套跨平台图形库,可用于 MCU、Linux、RTOS 等多种系统。虽然官方提供示例工程,但要在自己的系统里建立一个干净、可复用、可维护的 LVGL 开发环境,许多人会碰到头文件路径错乱、CMake 找不到配置、版本冲突等问题。本文记录了我在搭建 LVGL 桌面版实验环境中的完整流程,既是经验总结,也是今后移植到嵌入式 Linux/Qt/SDL 等环境的基础。LVGL 源码独立SDK 层抽象输出 include + lib应用工程简单清晰完整 CMake 构建流程全面踩坑记录。
2025-12-10 15:04:37
1373
1
原创 从 sysfs 到 libgpiod ——Linux GPIO 控制的两种方式详解
在嵌入式 Linux 开发中,控制 GPIO 引脚是再常见不过的需求。无论是点亮一个 LED,还是检测一个按键,都离不开对 GPIO 的操作。本文带你从最传统的接口入门,再到现代的libgpiod接口。两者对比之后,你将清楚地知道:哪种方式适合快速调试?哪种方式适合正式产品开发?GPIO(General Purpose Input/Output)是“通用输入输出口”的缩写。输出高低电平(控制 LED、继电器等)读取电平状态(检测按键、传感器信号等)
2025-10-31 12:35:18
1586
原创 一文读懂 Linux 的 I/O 函数:`open/read/write/lseek` 与 `fopen/fread/fwrite` 的区别与联系
open():打开一个文件,返回文件描述符(fd)。read():从文件中读取数据到用户缓冲区。write():将用户缓冲区的数据写入文件。lseek():移动文件读写位置。close():关闭文件描述符。这些函数操作的核心是文件描述符(file descriptor),是内核为每个打开的文件分配的一个整数索引。这些函数操作的核心是FILE 指针一个文件描述符(来自系统调用)一个用户态缓冲区文件读写位置、状态标志等函数刷新层级参数类型说明fflush()
2025-10-12 21:21:54
812
原创 Linux碎碎念:网络抓包利器:tcpdump 使用与分析入门
tcpdump是 Linux/Unix 系统上最常用的网络抓包工具之一。它能够捕获经过指定网络接口的数据包,并以人类可读的方式显示,或者保存为文件(pcap 格式),方便后续分析。相比 Wireshark 这种图形化工具,tcpdump更轻量级,适合在服务器或嵌入式设备上使用。
2025-10-12 20:40:23
370
原创 C++ Qt 基础教程:信号与槽机制详解及 QPushButton 实战
信号与槽是 Qt 对象间通信的机制,用于替代传统的事件回调函数。类型安全:编译器会检查参数类型松耦合:发送者不需要知道接收者是谁可复用:一个信号可连接多个槽,一个槽可响应多个信号// 在自定义类头文件中Q_OBJECTpublic:signals:// 自定义信号// 在主窗口类中});信号与槽机制是 Qt 框架的灵魂,它不仅简化了事件处理,还提供了强大的灵活性。理解信号与槽的基本原理掌握 QPushButton 的多种连接方式熟练创建和使用自定义信号与槽。
2025-07-05 17:14:46
759
原创 C++ 基础进阶必备!解锁 STL 宝藏库,深度剖析提升编程效率秘籍
STL 是 C++ 标准库的重要组成部分,它包含了六大组件:容器(Containers)、算法(Algorithms)、迭代器(Iterators)、仿函数(Functors)、适配器(Adapters)和空间配置器(Allocators)。其中,容器是用于存储数据的对象,算法是对数据进行操作的方法,迭代器则用于在容器和算法之间建立联系。STL 是 C++ 编程中不可或缺的工具,它提供了丰富的容器、算法和迭代器等组件,使得开发者能够更加高效地编写代码。通过本文的介绍,我们对vectorlistset和。
2025-06-22 20:35:27
765
原创 C++ 友元:打破封装边界的“特殊权限”
在 C++ 的面向对象编程中,封装(Encapsulation)是三大核心特性之一,它通过将数据和操作数据的函数绑定在一起,并限制外部对内部数据的直接访问,来保证数据的安全性和程序的健壮性。然而,在某些情况下,我们需要在不破坏封装性的前提下,允许特定的外部类或函数访问类的私有(private)或保护(protected)成员。这时,C++ 提供的友元(Friend)机制就派上了用场。友元是 C++ 中一种特殊的机制,它允许一个类或函数访问另一个类的私有成员和保护成员。
2025-06-22 20:34:39
691
1
原创 C++ 基础进阶必备!解锁 STL 宝藏库,深度剖析提升编程效率秘籍
在 C++ 的编程世界里,标准模板库(STL)无疑是一座巨大的宝藏。它为开发者提供了一套高效、通用且可重用的组件,极大地提升了开发效率和代码质量。今天,就让我们一同深入探索 STL 的核心内容,包括容器、vectorlistset和map等。STL 是 C++ 标准库的重要组成部分,它包含了六大组件:容器(Containers)、算法(Algorithms)、迭代器(Iterators)、仿函数(Functors)、适配器(Adapters)和空间配置器(Allocators)。
2025-06-22 18:12:57
998
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅