百宝箱 IoT 如何控制智能灯具

简介: 本文介绍基于ESP32S3实现蚂蚁公仔与博联智能灯的BGM灯效联动方案,涵盖蓝牙配对、音频波幅控制指令发送等关键技术,结合服务端PCM流处理,打造沉浸式IoT互动体验。

背景

ESP32S3 为常见的 IoT 主控 MCU,集成了 BT5.0/BT 4.2 协议栈支持,我们可以基于 BT 协议栈与其他 IoT 设备做一些互动玩法。如下所示是我们蚂蚁公仔与博联智能灯 BGM 灯效:

此处为语雀视频卡片,点击链接查看:音乐播放_BGM氛围灯.mp4

本文用于介绍如何实现这样的 BGM 灯效。

完整源码请在 https://alipaytbox.yuque.com/sxs0ba/doc/tbox_open_iot#EV7PC 获取。

实现

整体流程

服务端

BGM 播放依赖服务端音乐播放,并串流到 tts 通道来实现。同时实时计算 PCM 流的波幅信息(做 0 -> 127 量化)。相关源码并不开源。可以入驻百宝箱开放平台 IoT 板块来使用。

ESP32 设备端

相关源码的职责介绍:

开启配对

wifi_station.OnConnected([this](const std::string& ssid) {
    ...
    if (Board::GetInstance().GetIBeacon() != nullptr) {
        Board::GetInstance().GetIBeacon()->StartPairing();
    }
});

注意:StartPairing() 函数涉及初始化蓝牙协议栈和与兼容的博联设备之间的专有协议协商、准备。每次与新的博联设备之间配对(归属到同一个家庭里)、或发送 BGM 音控指令前都必须调用。

发起音控

当收到服务端下发的伴随 tts 流(实际是串流的音乐)的波幅值时,发送蓝牙幅度控制指令给已配对的博联设备。

protocol_->OnIncomingJson([this, display, &board](const cJSON* root) {
    auto type = cJSON_GetObjectItem(root, "type");
    if (strcmp(type->valuestring, "music") == 0) { // music 类型为伴随服务端音乐串流的波幅值
        auto amplitude = cJSON_GetObjectItem(root, "amplitude");
        if (cJSON_IsNumber(amplitude)) {
            if (board.GetIBeacon() != nullptr) {
                board.GetIBeacon()->ControlPeerDevice(amplitude->valueint % 128, 1, 1);
            }
        } else {
            ESP_LOGW(TAG, "amplitude type is not a number");
        }
    }


✨ 亮点速览:

✅ 限时福利:即日起至12月31日,官网/扫码进群即可每月领取10亿 Tokens

✅ API/SDK全兼容:Java/Python…无缝集成,大模型/智能体能力快速接入

✅ 模型盲测排行榜:不同模型效果对比打分,完美匹配不同业务诉求

✅ 灵活授权管理:令牌验证权限和身份信息,保证数据和信息安全

🎁 立即行动:访问平台官网 https://www.tbox.cn/open/open-introduce,注册即享开发资源与Token优惠,加速您的AI应用落地!

➡️ 产品详情查看:https://alipaytbox.yuque.com/sxs0ba/doc/tbox_open_overview

相关文章
|
15天前
|
人工智能 自然语言处理 供应链
1688发布跨境电商AI智能体“遨虾”,打造“AI+供应链”新模式
11月21日,阿里巴巴1688推出首款跨境电商AI智能体“遨虾”,以AI技术重构跨境供应链。通过图像识别、链接解析和自然语言交互,实现智能选品、精准寻源、极简沟通,大幅降低创业门槛。用户可秒级匹配源头工厂,压缩信息差与成本,赋能全球创业者高效对接中国供应链。“遨虾”官网已限时免费开放,标志着“AI+供应链”新模式落地,推动跨境电商进入智能化时代。
|
缓存 Java 应用服务中间件
面试官:如何实现多级缓存?
面试官:如何实现多级缓存?
490 1
|
19天前
|
存储 Kubernetes 数据库
K3S ——轻量化K8S 入门指南
本文介绍轻量级Kubernetes发行版K3s,适用于边缘计算、IoT等场景。涵盖其架构、安装部署(单节点/高可用/离线)、核心组件、网络存储配置及生产建议,助力快速构建轻量化容器平台。
229 6
|
SQL 运维 监控
【巡检问题分析与最佳实践】MongoDB 磁盘IO高问题
阿里云数据库MongoDB的IOPS使用率是一个非常重要的监控指标,IOPS使用率达到或接近100%后容易引起业务响应缓慢,甚至导致业务不可用的情形。一般云数据库厂商为了避免宿主机出现IO争抢,会使用Cgroup等技术进行实例间的IO隔离和IOPS限制,即不同规格的实例配置对应不同的IOPS使用上限。
【巡检问题分析与最佳实践】MongoDB 磁盘IO高问题
|
24天前
|
安全 网络安全 KVM
Ansible多机部署KVM虚拟机——Ansible安全基线配置(二)
本教程介绍如何使用Ansible在多台宿主机上批量部署KVM虚拟机,结合Tailscale与NFS实现安全镜像共享和网络互联。涵盖用户配置、KVM环境初始化、动态创建/删除VM及自动化网络设置,助力构建高效、安全的虚拟化基础设施。(239字)
118 4
|
24天前
|
缓存 Rust 前端开发
深入理解 Webpack 与 Vite 的构建差异与性能边界
本文深入对比 Webpack 与 Vite 的构建原理与性能差异。Webpack 采用“打包优先”策略,功能强大但启动慢;Vite 基于原生 ESM 实现“按需编译”,显著提升开发效率,冷启动和 HMR 速度远超 Webpack。生产环境下 Vite 凭借 esbuild 和 Rollup 生成更小体积、更快构建。二者在生态、配置、资源消耗等方面各有优劣,适用于不同场景。新项目推荐优先考虑 Vite,追求极致开发体验;大型复杂项目仍可选用 Webpack。理解其核心差异是优化构建流程的关键。
193 1
|
24天前
|
JSON 数据挖掘 API
闲鱼商品列表API秘籍!轻松获取列表数据
闲鱼商品列表API(Goodfish.item_list)基于RESTful架构,支持GET请求,返回JSON格式数据,可获取商品标题、价格、图片、卖家信息等,适用于电商比价与数据分析,助力开发者高效集成闲鱼商品数据。
|
24天前
|
easyexcel Java 数据库连接
如何实现百万级数据从 Excel 导入到数据库?
本文介绍百万级Excel数据导入数据库的优化方案,涵盖内存溢出、性能瓶颈与错误处理三大问题。通过EasyExcel流式读取避免内存溢出,结合多线程并发读取多个sheet,并利用生产者-消费者模式提升处理效率。采用批量插入与事务管理提高数据库写入性能,同时设计数据校验、重试机制与日志记录保障容错性,确保大规模数据导入稳定高效。
117 0
|
canal 缓存 NoSQL
面试官,如何保证缓存与数据库的数据一致性
面试官,如何保证缓存与数据库的数据一致性
|
12月前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
4916 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)