# ESP32_LED_Serverless **Repository Path**: chenqinglang/esp32_led_serverless ## Basic Information - **Project Name**: ESP32_LED_Serverless - **Description**: 腾讯《小程序云开发挑战赛》参赛作品。 - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 4 - **Created**: 2020-08-23 - **Last Updated**: 2025-08-07 ## Categories & Tags **Categories**: weixin-lapp **Tags**: None ## README ![输入图片说明](https://images.gitee.com/uploads/images/2020/0827/231518_a9cad3ac_5394126.png 'lononiot_led_logo.png') # ESP32_LED_Serverless #### 介绍 用户通过小程序,远程给 ESP32 开发的 LED 屏幕下发轮播文本、广播的音频。初步设想用于面向一些商铺门面的 LED 广告,商户可以定时更改 LED 轮播的内容和播放的音频,实现门前语音播报,远程调整。在商铺打样时段,关闭 LED 低功耗待机。 #### 软件架构 1. 小程序开发采用 **Taro 3.0 React** 版本, 主要开发语言 **TypeScript** 。 2. MCU 开发采用乐鑫 **ESP32** 模块,ESP-IDF **v4.2** 版本, 主要开发语言 **C**。 3. 设备通讯采用 **腾讯云物联网** 平台。 4. 消息协议为 **MQTT**,数据结构采用 **JSON** 格式。 5. 客户端向腾讯云物联网 API 请求的消息均通过 **云开发中的云函数** 实现。 6. 客户端及设备数据全部储存在 **云开发中的数据库** 中。 #### 安装教程 1. ```bash # 小程序开发 git clone https://gitee.com/junlan2013/esp32_led_serverless.git # 克隆工程 cd esp32_led_serverless/WeChatMiniProgram/app # 进入Taro工程目录 npm i npm run dev:weapp # 开发 Go... ``` 2. ```bash # ESP32 开发 # 部署 esp-idf # 参考 https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#id2 ``` #### Topic 权限 | 序号 | Topic | 操作权限 | 说明 | | ---- | ----------------------------- | -------- | ------------ | | 1 | ${产品ID}/${deviceName}/text | 订阅 | 下发轮播信息 | | 2 | ${产品ID}/${deviceName}/speak | 订阅 | 下发音频信息 | #### 数据库设计 | 序号 | 集合名 | 说明 | 权限设置 | | ---- | ----------- | ---------------- | ---------------- | | 1 | DeviceGroup | 设备分组 | 自定义 | | 2 | DeviceList | 设备列表 | 自定义 | | 3 | DeviceMode | 设备 Mode | 所有用户可读 | | 4 | LedLogs | LED 信息下方日志 | 仅创建者可读写 | | 5 | LedTask | LED 任务列表 | 自定义 | | 6 | WeappConfig | 配置信息 | 所有用户不可读写 | #### 数据库自定义安全规则 - DeviceGroup ```json { "read": "doc._openid == auth.openid || auth.openid in get(`database.DeviceGroup.${doc._id}`).members", "write": "doc._openid == auth.openid" } ``` - DeviceList 和 LedLogs ```json { "read": "auth.openid in get(`database.DeviceGroup.${doc.groupId}`).members || auth.openid == get(`database.DeviceGroup.${doc.groupId}`)._openid", "write": "auth.openid in get(`database.DeviceGroup.${doc.groupId}`).members || auth.openid == get(`database.DeviceGroup.${doc.groupId}`)._openid" } ``` #### 关于 WeappConfig 集合 ``` _id:SecretId value: "${腾讯云SecretId}" _id:SecretKey value: "${腾讯云SecretKey}" _id:ProductId value: "${腾讯云-物联网-ProductId}" ``` #### 云函数API * 编译 TS 的 WeMqttApi 云函数 ```bash cd WeChatMiniProgram/app/cloud/TaroCloudSrc/WeMqttApi npm i gulp ``` * 然后可以到 WeChatMiniProgram/app/cloud/functions 上传 #### 小程序相关图片 ![主页-以及设备列表](https://images.gitee.com/uploads/images/2020/0916/225730_b8478a4e_5394126.jpeg "590bf13e441a28e2e16f90dfd0c0cbc.jpg") ![设备分组](https://images.gitee.com/uploads/images/2020/0916/225748_c30aa618_5394126.jpeg "7178461c3121f2d3c204c9c0531ebd8.jpg") ![设备信息](https://images.gitee.com/uploads/images/2020/0916/225832_3882294c_5394126.jpeg "0bcea50d8e6b585744cf39dbc1597e0.jpg") ![添加设备前](https://images.gitee.com/uploads/images/2020/0916/225855_162b0644_5394126.jpeg "4ac71e889f0eae0932c3ad16e5bf7cc.jpg") ![添加设备时](https://images.gitee.com/uploads/images/2020/0916/225920_bc75d767_5394126.jpeg "5d5a62b3e4079594ac6ca8f406a6c26.jpg") ![设备文本下发](https://images.gitee.com/uploads/images/2020/0916/225938_44c1b967_5394126.jpeg "adec8930ef5f4a98034e6ed98173183.jpg") ![设备文本定时下发](https://images.gitee.com/uploads/images/2020/0916/225957_360e9fbf_5394126.jpeg "73db39568bc33635511619b9672a48d.jpg") ![小程序介绍](https://images.gitee.com/uploads/images/2020/0916/230020_062b48b9_5394126.jpeg "e5a18d8b3ae129d524446d18954d546.jpg")