文 老道 | 版 workbuddy
一、任务与目标
任务:APP通过蓝牙通信进行 RGB灯调光。
任务目标:使用app-inventor制作一个可以配合单片机、低功耗蓝牙模块(HC08)、ws2812彩灯模块等进行RGB灯调光的app。
二、App制作
App的制作主要分为以下几个步骤:制作网站地址、创建新项目并导入扩展、Screen1组件设置、Screen2组件设置,各部分详细内容如下。
(一)制作网站地址
制作网站地址:http://code2.appinventor.mit.edu

图 1:App Inventor 制作网站入口
(二)创建新项目并导入扩展
创建新项目RGB,点击“外部扩展”-“导入扩展”,导入edu.mit.appinventor.ble-20230728(1).aix低功耗蓝牙模块插件,并添加如下组件。
Screen1:

图 2:Screen1 设计界面

图 3:Screen1 组件树
Screen2:

图 4:Screen2 设计界面
(三)Screen1组件设置
组件 | 所属面板 | 布局 | 命名 | 属性 | 属性值 |
Screen | Screen1 | 水平对齐 | 居中 | ||
按钮 | 用户界面 | Screen1 | 连接蓝牙 | 文本 | 连接蓝牙 |
标签 | 用户界面 | Screen1 | 连接提示 | 文本 | 连接提示 |
文本输入框 | 用户界面 | Screen1 | 接收文本框 | ||
表格布局 | 界面布局 | Screen1 | 表格布局 1 | 宽度 | 充满 |
列数 | 3 | ||||
行数 | 3 | ||||
标签 | 用户界面 | 表格布局 1 | 标签 1 | 背景颜色 | 红色 |
文本 | R | ||||
高度 | 5 比例 | ||||
宽度 | 12 比例 | ||||
标签 | 用户界面 | 表格布局 1 | 标签 2 | 背景颜色 | 绿色 |
文本 | G | ||||
高度 | 5 比例 | ||||
宽度 | 12 比例 | ||||
标签 | 用户界面 | 表格布局 1 | 标签 3 | 背景颜色 | 蓝色 |
文本 | B | ||||
高度 | 5 比例 | ||||
宽度 | 12 比例 | ||||
滑动条 | 用户界面 | 表格布局 1 | 滑动条 1 | 宽度 | 60 比例 |
最大值 | 100 | ||||
最小值 | 0 | ||||
滑动条 | 用户界面 | 表格布局 1 | 滑动条 2 | 宽度 | 60 比例 |
最大值 | 100 | ||||
最小值 | 0 | ||||
滑动条 | 用户界面 | 表格布局 1 | 滑动条 3 | 宽度 | 60 比例 |
最大值 | 100 | ||||
最小值 | 0 | ||||
按钮 | 用户界面 | 表格布局 1 | 开灯 | 文本 | 开灯 |
按钮 | 用户界面 | 表格布局 1 | 关灯 | 文本 | 关灯 |
BluetoothLE | 外部扩展 | Screen1 | BluetoothLE1 | ||
计时器 | 传感器 | Screen1 | 计时器 1 | 一直计时 | 勾选 |
启用计时 | 不勾选 | ||||
计时间隔 | 1000 |
(四)Screen2组件设置
组件 | 所属面板 | 布局 | 命名 | 属性 | 属性值 |
按钮 | 用户界面 | Screen2 | 再次扫描 | 文本 | 再次扫描 |
宽度 | 充满 | ||||
列表显示框 | 用户界面 | Screen2 | 扫描列表 | 高度 | 50 比例 |
BluetoothLE | 外部扩展 | Screen1 | BluetoothLE1 |
三、逻辑设计
Screen1 逻辑设计:

图 5:初始化与按钮点击事件

图 6:连接成功与计时器事件

图 7:发送数据与滑动条事件

图 8:开灯/关灯事件
四、Arduino / STC15 单片机编程
arduino米思齐编程或stc15单片机编程(二选一均可)。
(一)arduino程序

图 9:Arduino 程序
接线:arduino和蓝牙模块进行连接,Arduino与WS2812彩灯模块连线如下表。(同行代表连接)
Arduino 开发板 | 蓝牙模块 | WS2812 彩灯模块 |
5V | VCC | 5V |
GND | GND | GND |
1 或 TX | RXD | |
0 或 RX | TXD | |
2 | IN( 或 DIN) |
(二)STC15F2K60S2单片机参考程序
main.c程序:
#include<stc15f2k60s2.h>#include<ws2812b.h>unsigned char RGB_DATA[3]={0,0,0};unsigned char JS;bit st=0;bit ys=0;char res_cnt=0;void UartInit(void)//9600bps@11.0592MHz{SCON = 0x50;//8位数据,可变波特率AUXR |= 0x40;//定时器1时钟为Fosc,即1TAUXR &= 0xFE;//串口1选择定时器1为波特率发生器TMOD &= 0x0F;//设定定时器1为16位自动重装方式TL1 = 0xE0;//设定定时初值TH1 = 0xFE;//设定定时初值ET1 = 0;//禁止定时器1中断TR1 = 1;//启动定时器1EA=1;ES=1;}void main(){UartInit();WS2812B_Set_Color_Light(1,50, 50, 0,10);WS2812B_Send_All();while(1){if(ys){WS2812B_Set_Color_Light(1,RGB_DATA[1],RGB_DATA[0], RGB_DATA[2],10);WS2812B_Send_All();}}}void tongxi() interrupt 4{if(TI) TI=0;if(RI){RI=0;JS=SBUF;if(st){RGB_DATA[res_cnt]=SBUF;res_cnt++;if(res_cnt==3){ys=1;res_cnt=0;st=0;}}if(JS==0XFF){st=1;}}}
ws2812b.c和ws2812b.h文件,可以使用库文件,将两个文件添加进去即可。
库文件下载链接:
https://pan.baidu.com/s/1EzEJqTLtNoMZ2nE1kExH4g?pwd=6p9t 提取码: 6p9t
接线:STC15开发板和蓝牙模块进行连接
Arduino 开发板 | 蓝牙模块( HC08 ) | 流水灯 |
5V | VCC | |
GND | GND | |
P3.1 | RXD | |
P3.0 | TXD | |
P0.0 | 1 |
五、操作说明
手机把蓝牙打开,打开app,点击“扫描设备”,如有弹出权限请求,点击允许,找到HC-08点击连接。连接成功后效果如下:

图 10:连接成功后效果
点击拖动滑块或点击开关灯按钮即可控制小灯。
六、思考和改进
1. 增加控制RGB灯数量。
2. 配合数据库将RGB灯的设置状态保存,下次打开app还原该状态。
附录:HC08蓝牙模块怎么修改配对名称?
蓝牙模块在不连接蓝牙的情况下为AT模式,可通过下面AT指令设置。
(1)USB转串口模块与hc08直接连接(不需要单片机),发送指令:AT+NAME=XXX
XXX为要修改的新名称,结尾无需添加回车换行符。
(2)发送指令:AT+RX 查看模块各项信息。
夜雨聆风