31| 0
|
[ESP8266/ESP32] K10 小智深度定制功能重磅开源 |
本帖最后由 岑剑伟 于 2025-8-17 18:26 编辑 K10 小智深度定制功能重磅开源 ![]() 一、传感器数据获取 (传感器数据采集成功案例) 完成了k10板载传感器的IDF编程环境的驱动库构建,特别针对小智运行环境及场景的优化提供数据获取回调函数,可以让传感器数据穿越各种层,后台自动更新,对小智主线程无干扰,可以增加数据平稳处理,减少数据波动。 (1)板载温湿度传感器数据采集 (2)光照强度传感器数据采集 (3)加速度传感器数据采集。 ![]() K10小智项目文件系统 [size=10.5000pt] 以AHT20为例,其他两个传感器的实现原理一致。特点在于深度融合小智,通过继承复用I2C通信功能,封装传感器命令与解析逻辑,接口简洁。利用定时器与回调机制解耦,支持灵活设置采集间隔,数据回调实现分层处理,实现AHT20温湿度传感器的周期性数据采集功能。 ![]() [size=11.0000pt] 1. Aht20Sensor构造函数 继承特性:通过初始化列表I2cDevice(i2c_bus, addr)调用父类构造函数,表明Aht20Sensor是I2cDevice的子类,复用 I2C 通信基础功能(如数据收发),减少代码冗余。 用于确保 Aht20 进入可工作状态,步骤如下: (1)发送初始化命令定义命令数组init_cmd(包含Aht20_CMD_INIT(0xBE)和参数 0x08),通过i2c_master_transmit发送; (2)检查校准状态读取状态寄存器(ReadReg(Aht20_CMD_STATUS)),通过Aht20_STATUS_CALIB位(0x08)判断是否校准完成,更新calibrated_变量; [size=14.6667px] [size=14.6667px] 3.数据读取核心逻辑 定时器是周期性采集的 “触发器”,基于硬件时钟实现固定间隔触发。代码中,StartReading通过esp_timer_start_periodic启动定时器,自动执行 “触发测量→等待→解析→传递数据” 全流程。相比轮询,定时器精度更高(微秒级),且仅在触发时占用资源,降低 CPU 空转损耗,实现 “一次配置,持续采集”。数据自动后台更新,用户无后顾之忧。 数据读取逻辑遵循 “触发 - 等待 - 校验 - 解析” 四步流程,保障可靠性与效率。先通过TriggerMeasurement发送标准命令帧(如0xAC,0x33,0x00),严格匹配传感器协议;等待阶段按手册设置 75ms 延迟,避免过早读取无效数据。读取后先校验状态位(AHT20_STATUS_BUSY),确保数据就绪再解析。采用位运算直接提取 20 位原始值,结合公式快速转换为物理量,兼顾精度与速度。 [size=14.6667px] (1)定时器回调函数(ReadTimerCallback) 作用:作为定时器与类非静态逻辑的 “桥梁”,因 ESP 定时器要求回调为静态 / 全局函数,需通过此函数中转。 逻辑:接收arg(传感器实例指针)→转换为Aht20Sensor*→调用OnReadTimer执行数据读取。 触发测量:调用TriggerMeasurement发送命令,失败则记录错误并退出。 等待结果:vTaskDelay(pdMS_TO_TICKS(50))延迟 50ms,等待传感器完成测量。 读取解析:调用ReadMeasurement读取 7 字节数据,解析为温度和湿度。 结果回调:若成功且注册了Aht20Sensor_callback_,则通过该回调传递数据给上层[size=11.0000pt]。[size=14.6667px] (3)数据读取与解析(ReadMeasurement 方法) 读取数据:通过ReadRegs获取 7 字节buffer(含状态和原始值)。 状态检查:通过buffer[0]的Aht20_STATUS_BUSY位判断传感器是否忙碌。 湿度解析:从buffer[1]-buffer[3]提取 20 位原始值→公式湿度 = 原始值 × 100 / 2²⁰。 温度解析:从buffer[3]-buffer[5]提取 20 位原始值→公式温度 = 原始值 × 200 / 2²⁰ - 50。 (1)数据格式约定:7 字节数据中,buffer[1]-3存湿度原始值,buffer[3]-5存温度原始值(均为 20 位)。 (2)位运算提取:通过移位和逻辑运算拼接 20 位原始值(如湿度:(buffer[1] << 12) | (buffer[2] << 4) | ((buffer[3] & 0xF0) >> 4))。 (3)物理量转换:按传感器手册公式将原始值映射为实际温湿度(0-100% 湿度,-40~85℃温度)。 通过 “静态回调中转” 消除模块依赖:定时器组件要求回调为静态 / 全局函数,而传感器逻辑在非静态方法中。代码中,静态函数ReadTimerCallback接收定时器触发,通过arg参数恢复传感器实例指针,再调用非静态方法OnReadTimer。此举让定时器与传感器逻辑独立维护,定时器无需知晓传感器细节,传感器也不依赖定时器实现,便于模块复用与修改。 [size=14.6667px] (1)两种回调的区别(定时器回调 vs 数据回调) 项目中容易搞混的两个回调函数,值得关注
(2)回调函数原理与 std::function 使用 回调本质:通过函数指针 / 对象传递函数,在特定事件(如数据就绪)时调用,实现模块解耦(传感器负责采集,上层负责处理)。 std::function 作用:C++11 的通用函数封装器,可存储函数指针、lambda、成员函数(需绑定this)等,比传统函数指针更灵活。
[size=10.5000pt] 完整学习地址:https://mp.weixin.qq.com/s/PugufTz_SdQluQlTYivc1Q 二、B站粉丝数监控 (B站粉丝查询最佳实现) [size=10.5000pt] 核心功能是通过调用B 站 API获取指定用户粉丝数,支持定时刷新、手动刷新及 Wi-Fi 连接状态变化时自动更新;关键技术包括使用板卡的CreateHttp() 函数创建 HTTP 客户端、解析 JSON 响应数据,以及通过Wi-Fi 事件处理(连接时启动 1 分钟定时器更新、断开时停止)保障稳定性。 深入讲解地址:https://mp.weixin.qq.com/s/bwqat4xvKx4Y6PFedjvcYA file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml11588/wps3.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml11588/wps4.jpg (1)可设置B站用户UID 注意:目前是设置的博主的B站账号,需要改成自已的,欢迎朋友们来B站交流。 (2)定时获取并更新粉丝数量 (3)提供粉丝数查询和手动刷新功能 (4)通过WiFi连接事件自动管理更新任务
retur {}; ![]() ![]() } [size=10.5000pt] 三、文本处理功能 (小智MCP制作经验提炼) (1)TTS复读功能:原样重复用户输入的文本 基于对小智mcp机制的深入理解,巧妙使用了小智对话功能,网友倾情奉献。 (2)翻译功能:提供中英文互译接口 金山词霸的每日一句,学习娱乐两不误。基于http定向数据获取及json数解析,必学必会,要考试的。
四、板载led控制(小智控制Led的典范) [size=10.5000pt] 该功能由df官方完成,它通过LedStripControl类管理一个圆形LED灯带,提供亮度调节、颜色控制和动画效果等功能。 主要功能包括: (1)亮度控制:支持0-8级亮度调节,使用指数映射算法实现自然的亮度变化 (2) 颜色控制:可单独设置每个LED或所有LED的颜色(RGB模式) (3) 动画效果:实现闪烁和跑马灯效果 (4) 配置保存:自动保存亮度设置到配置文件中 (5) 远程控制:通过MCP服务器提供API接口,支持外部命令控制 控灯功能完整版,学玩这个你也可以去ZB了。 另外,K10自带摄像头,看图识物也是标配,性能杠杠滴。 五、在线歌曲播放功能(小智高阶功能实现,难度系数?) [size=10.5000pt] 在这在线播放音乐的功能太精妙了,值得深入学习。 感谢功力深厚大佬开源:https://github.com/Maggotxy/xiaozhi-esp32-music 该项目日前升级到了1.8.5版本,1.7.6版本已不能正常播放,升级后需要到他们Q群用小智MAC 码获取授权。 需要进入[小智后台](https://xiaozhi.me/),找到对应设备,修改角色配置,替换音乐播放逻辑,如果想返回原来状态,删除对应内容即可。 - 选择 DeepSeekV3 大语言模型 - 在人物介绍中末尾加入 - 收到音乐相关的需求时,只使用 MPC tool `self.music.play_song` 工具,同时禁止使用 `search_music` 功能。 小智后台角色介绍添加: - 电台选择:根据用户需求从预设的电台列表中模糊搜索,如果找不到则随机选择一个电台播放。预设电台:80后音悦台(ID: 20207761)、流行音乐(ID: 4938)、清晨音乐(ID: 4915)、长沙城市之声(ID: 4237)、怀旧(ID: 1223)。 在线听歌听电台,太安逸了,是不是还可以做一个每天电台闹醒我呀。 注意事项: 该项目使用的是小智1.8.5版本,功能已很完善,本项目仅在该版本下进行测试,后续版本机制变化较大,并不完全适用。 提供学习源码:https://gitee.com/genvex/xiaozhi-esp32-music_185/tree/main/main/boards/df-k10 测试固件:固件也在该文件夹中。 文末提供测试固件,0x00偏移刷入。 有使用问题,欢迎提问。 |
2.58 MB, 下载次数: 1
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed