[STM32]

不用你开发APP,手机控制LED灯你也可以实现

[复制链接]
1754|5
手机看帖
扫描二维码
随时随地手机跟帖
XLazyDog|  楼主 | 2019-8-16 17:35 | 显示全部楼层 |阅读模式
1240.jpg


这次带来一个通过 蓝牙调试器 点亮LED灯的教程。要使用手机点亮LED灯,你的工作分两部分。

手机点灯

一、单片机端要做的工作
1.1硬件连接
首先确定连接方式:

1240.jpg


LED灯有一长一短两个引脚,是分正极和负极的,比较长的那一个脚是正极,另一个是负极。当负极接地(GND 0V),正极接高电平电压时,LED灯会被点亮。如图中的“IO”引脚,是本次控制LED的引脚,这里我使用了PA6。当此引脚为高电平时,LED发光。关于蓝牙模块的连接细节我已在这里说明了,按照图中方式连接即可。
1.2LED控制代码编写
由于STM32性能高,成本低且使用者多,因此采用STM32作为示例。首先要初始化一个IO口,这里初始化了PA6作为推挽输出。
void initLED(){  
GPIO_InitTypeDef GPIO_InitStructure;   /* GPIOA  clock enable */   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
然后定义一个函数setLED,用来设置LED的状态。其实就是改变PA6的状态。当on为1时,PA6脚为高电平。
void setLED(unsigned char on){          GPIO_WriteBit(GPIOA,GPIO_Pin_6,on);}
1.3数据包收发代码编写1.3.1配置数据包参数
首先是在valuepack.h文件中配置通信数据包结构(文件在**末尾给出)。
/// 3.指定接收数据包的结构-----------------------------------------------------------------------------------//    根据实际需要的变量,定义数据包中 bool byte short int float 五种类型的数目
#define RX_BOOL_NUM  1
#define RX_BYTE_NUM  0
#define RX_SHORT_NUM 0
#define RX_INT_NUM   0
#define RX_FLOAT_NUM 0
由于只是控制亮一个灯,因此配置一个Bool类型的开关量即可。
然后在main.c文件中操作。
1.3.2创建接收数据包
RxPack rxpack;
因为不需要向手机回传状态,因此只需要创建一个RxPack即可。
1.3.3初始化ValuePack
initLED();
initValuePack(115200);
同时把LED也初始化了,注意这里的115200不一定是你蓝牙模块的串口波特率,需要做相应修改。
1.3.4读取数据包
// 接收数据
if(readValuePack(&rxpack))
setLED(rxpack.bools[0]);
如果读取到数据包,则将数据包中的bool量赋给IO口,逻辑非常简单。五行代码搞定一切。
二、手机端要做的工作2.1建立工程并配置数据
打开应用后,点击下方的“专业调试”图标,进入调试工程列表。然后点击“+”按钮添加一个工程。如图,我已经建立了“开关灯”这个工程。
1240.jpg


然后点击开关灯工程(注意不要点三角),然后进入“通信设置”界面:
1240.jpg


发送数据包结构应与单片机端的接收数据包结构一致,在单片机中只定义了一个bool类型的变量,因此这里也只添加一个bool类型的变量,并命名为“灯”。至此数据包的结构就配置完成了,是不是很简单?
2.2编辑控件
在调试工程列表(主界面)中,点击“编辑控件”进入控件编辑界面,此时界面中没有任何控件:
1240.jpg


点击上方的“+”,添加一个开关控件,此时弹出一个数据链接的界面
1240.jpg


我们依次选择发送、bool。。点击图中的“不链接”,会发现还有“灯”这个选项,这正是我们刚才添加的变量。点击“灯”完成链接,然后点击灰色区域进入下一步。
1240.jpg


1240.jpg


此时要求你设置开关的开与关两种状态下,其链接的变量所对应的数值,开关不仅可以链接bool型变量,还可以链接其它如float、short之类的变量,我们可以通过这个对话框自由设置不同的值。这里由于链接的是bool类型的值,取值只有0或1,因此我们不做改动,点击OK按钮即可。然后你会发现一只开关孤零零地躺在面板上。
1240.jpg


为了让它好受一点,我们把它放大,点击右上方的 框形的缩放按钮,然后手指在屏幕上滑动即可调整这个开关的大小。
1240.jpg


如上图,控件的编辑基本就完成了。
然后去运行吧。
2.3运行
确保将单片机的程序下载成功,且单片机串口波特率与蓝牙串口模块的波特率相同后,开始运行。
首先点击屏幕下方的“设备连接”按钮,进入设备选择界面,如果界面中为空的话,则点击界面下方的圆形按钮进行扫描。
1240.jpg


等待扫描结果,如图,出现了lazydog这个设备,其名称是我改的,一般没有改动的蓝牙模块名称都是其型号的名称,如HC-05等。点击设备右边的“+”按钮,进行连接。如果提示配对就输入配对码配对,配对完了再次点击“+”进行连接。
连接成功后,进入“专业调试”界面,在列表中找到我们刚创建的调试工程,然后点击右方的运行按钮(三角),即可进入调试。至此,你就完成了所有的工作。相信整个过程不会超过半个小时,你就能学会这门魔法。
最后附上单片机代码
控制LED灯.zip (5.23 KB)

使用特权

评论回复

相关帖子

chineseboyzxy| | 2019-8-17 08:24 | 显示全部楼层
这不是一个更大的APP么?。。。哪里有这样的软件?

使用特权

评论回复
XLazyDog|  楼主 | 2019-8-17 23:07 | 显示全部楼层
chineseboyzxy 发表于 2019-8-17 08:24
这不是一个更大的APP么?。。。哪里有这样的软件?

扫上面的码就可以下载,想要啥界面,想要啥功能,想要传什么数据都可以自定义。

使用特权

评论回复
airwill| | 2019-8-18 21:03 | 显示全部楼层
这个思路不错, 值得鼓励一下,  不过 app 还是需要的, 如果简化 APP 应该是大有可为啊

使用特权

评论回复
zchunhua25| | 2019-8-19 12:15 | 显示全部楼层
就是蓝牙模块自带的APP嘛

使用特权

评论回复
aerwa| | 2019-8-19 12:53 | 显示全部楼层
现在蓝牙模块都带IO口了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝