31浏览
查看: 31|回复: 0

[ESP8266/ESP32] K10 小智深度定制功能重磅开源

[复制链接]
本帖最后由 岑剑伟 于 2025-8-17 18:26 编辑

K10 小智深度定制功能重磅开源

   行空板 K10作为一款专为信息科技教学打造的开发板,凭借其丰富的功能特性与超高性价比,在编程学习和 AI 项目教学等场景中独领风骚。它的硬件资源高度集成,摄像头、2.8 寸彩色 LCD、、WiFi、蓝牙、RGB 指示灯以及温湿度、环境光、加速度等多种传感器一应俱全。 得益于麦克风及扬声器的集成,用其构建小智成为了通往现代化编程学习路径。 本项目在小智聊天机器人蓬勃发展之时,结合小智mcp机制及乐鑫IDF编程的强大功能与灵活性兼具特性,深度挖掘K10的潜能,完成了目前功能最完善K10- MCP综合体,开源内容极为精妙,值得深入学习。


K10 小智深度定制功能重磅开源图5


一、传感器数据获取 (传感器数据采集成功案例)

   完成了k10板载传感器的IDF编程环境的驱动库构建,特别针对小智运行环境及场景的优化提供数据获取回调函数,可以让传感器数据穿越各种层,后台自动更新,对小智主线程无干扰,可以增加数据平稳处理,减少数据波动。
(1)板载温湿度传感器数据采集
(2)光照强度传感器数据采集
(3)加速度传感器数据采集。

K10 小智深度定制功能重磅开源图2
file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml11588/wps1.jpg[size=10.5000pt]
K10小智项目文件系统
[size=10.5000pt]
    以AHT20为例,其他两个传感器的实现原理一致。特点在于深度融合小智,通过继承复用I2C通信功能,封装传感器命令与解析逻辑,接口简洁。利用定时器与回调机制解耦,支持灵活设置采集间隔,数据回调实现分层处理,实现AHT20温湿度传感器的周期性数据采集功能。

K10 小智深度定制功能重磅开源图3
file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml11588/wps2.jpg[size=10.5000pt]
[size=11.0000pt]
1. Aht20Sensor构造函数
   继承特性:通过初始化列表I2cDevice(i2c_bus, addr)调用父类构造函数,表明Aht20Sensor是I2cDevice的子类,复用 I2C 通信基础功能(如数据收发),减少代码冗余。

2.传感器初始化

用于确保 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执行数据读取。

2数据读取执行器(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。

4)Aht20 数据解码原理
(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℃温度)。

3.回调机制详解

   通过 “静态回调中转” 消除模块依赖:定时器组件要求回调为静态 / 全局函数,而传感器逻辑在非静态方法中。代码中,静态函数ReadTimerCallback接收定时器触发,通过arg参数恢复传感器实例指针,再调用非静态方法OnReadTimer。此举让定时器与传感器逻辑独立维护,定时器无需知晓传感器细节,传感器也不依赖定时器实现,便于模块复用与修改。
[size=14.6667px]
1两种回调的区别(定时器回调 vs 数据回调)

项目中容易搞混的两个回调函数,值得关注
[size=11.0000pt]维度
[size=11.0000pt]定时器回调(ReadTimerCallback)
[size=11.0000pt]数据回调([size=11.0000pt]Aht20[size=11.0000pt]Sensor_callback_)
触发者
系统定时器组件(定时到达时)
Aht20Sensor 类(数据读取成功后)
作用
驱动传感器周期性读取
向上层传递温湿度数据
调用时机
由定时器间隔决定(如 1 秒 / 次)
每次成功读取数据后


2回调函数原理与 std::function 使用
  回调本质:通过函数指针 / 对象传递函数,在特定事件(如数据就绪)时调用,实现模块解耦(传感器负责采集,上层负责处理)。

std::function 作用:C++11 的通用函数封装器,可存储函数指针、lambda、成员函数(需绑定this)等,比传统函数指针更灵活。

   4.Mcp实现
  1. <font face="Times New Roman">mcp_server.AddTool("self.get_temp_humid",
  2.                        "获取板载温湿度传感器数据",
  3.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  4.                        {
  5.                         auto &board = Board::GetInstance();
  6.                         return board.get_temp_humid_sensor(); });
  7.     mcp_server.AddTool("self.get_als_sensor",
  8.                        "获取板载光照强度传感器数据",
  9.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  10.                        {
  11.                         auto &board = Board::GetInstance();
  12.                         return board.get_als_sensor(); });</font>
复制代码

[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连接事件自动管理更新任务  


  1. mcp_server.AddTool("self.BilibiliFans.uid",
  2.                        "B站用户ID",
  3.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  4.                        { return uid_; });
  5.     mcp_server.AddTool("self.BilibiliFans.set_uid",
  6.                        "设置B站用户ID",
  7.                        PropertyList({Property("uid", kPropertyTypeString)}), [this](const PropertyList &properties) -> ReturnValue
  8.                        {
  9.             uid_ = properties["uid"].value<std::string>();
  10.             ESP_LOGI(TAG, "设置B站用户ID为: %s", uid_.c_str());
  11.             return true; });
  12.     mcp_server.AddTool("self.BilibiliFans.report_fansCount",
  13.                        "汇报粉丝数量",
  14.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  15.                        { return follower_count_; });
  16.     mcp_server.AddTool("self.BilibiliFans.flash_fansCount",
  17.                        "刷新粉丝数量",
  18.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  19.                        {
  20.         ESP_LOGI(TAG, "刷新B站粉丝数量");
  21.         UpdateFansCount();
  22.         return true; });
复制代码

  retur
{};K10 小智深度定制功能重磅开源图1

K10 小智深度定制功能重磅开源图4

}
[size=10.5000pt]

三、文本处理功能 (小智MCP制作经验提炼)
(1)TTS复读功能:原样重复用户输入的文本
   基于对小智mcp机制的深入理解,巧妙使用了小智对话功能,网友倾情奉献。

(2)翻译功能:提供中英文互译接口

   金山词霸的每日一句,学习娱乐两不误。基于http定向数据获取及json数解析,必学必会,要考试的。
  1. <font face="Times New Roman">
  2.     mcp_server.AddTool("self.get_hitokoto",
  3.                        "给我开心地随便说一句话,一言",
  4.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  5.                        {
  6.                         get_hitokoto();
  7.                            return hitokoto_; });
  8.     mcp_server.AddTool("self.hitokoto_source",
  9.                        "刚才随便说的那一句是出自哪里",
  10.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  11.                        { return from_; });
  12.     mcp_server.AddTool("self.get_note",
  13.                        "获取每日中英对照鸡汤文",
  14.                        PropertyList(), [this](const PropertyList &properties) -> ReturnValue
  15.                        {
  16.          get_note();
  17.                            return  everyday_soup_; });
  18. }
  19. </font>
复制代码

四、板载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偏移刷入。
有使用问题,欢迎提问。










MCP_firmware.zip

2.58 MB, 下载次数: 1

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail