打印
[应用相关]

手机蓝牙控制开关

[复制链接]
楼主: 是你的乱码
手机看帖
扫描二维码
随时随地手机跟帖
21
是你的乱码|  楼主 | 2023-6-29 14:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
.继电器(1路继电器模块带光耦隔离 支持高低电平触发 5V 一路) 我的台灯是usb接口的电压挺小的,大家也用这种台灯做这个吧。附上博主买的地址

https://s.click.taobao.com/t?e=m%3D2%26s%3DXHEpqAhkLN0cQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67vIXkCidw5j8Buky%2F0Sep%2BFMVPdbt3fgwWT400sgLOAr5yw7SOOxWj33gRJpVZU6CBJv5lTqaGlY88T0Kqszwju%2BrJEQg3xQGYHYFIyN9t40GseKnlMOipY%3D&pvid=10_183.39.58.9_6879_1558880691417

使用特权

评论回复
22
是你的乱码|  楼主 | 2023-6-29 14:25 | 只看该作者
蓝牙模块(HC-05 主从机一体蓝牙模块 无线蓝牙串口透传模块 无线模块) 附上博主买的地址

https://s.click.taobao.com/t?e=m%3D2%26s%3D4sZwMIIdBd8cQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67nBoGrJUNUrSu6Vvho8Zh8BMVPdbt3fgwWT400sgLOAr5yw7SOOxWj33gRJpVZU6CBJv5lTqaGlY4jXVaulmfG%2Bg1L7XvuNuZdt1sQVgCqdt5wealhvKxmk%3D&pvid=10_183.39.58.9_2829_1558880799406

哈哈 先给大家看一看单片机方面的代码 大家看了之后肯定就会有动力写了!

#include <reg52.h>
unsigned char flage,temp;
sbit p33=P3^3;//单片机P3.3口

void main()
{
TMOD=0x20;//设置定时器1为工作方式2
// 波特率=9600时定时初值为FDH
TH1=0xfd;//装载TH1
TL1=0xfd;//装载TL1
TR1=1;//启动T1(定时器1),开始计数
REN=1;//允许串行接收
//SM0=0 SM1=1 为工作方式2
SM0=0;
SM1=1;
EA=1;//开启总中断
ES=1;//允许串口产生中断

使用特权

评论回复
23
是你的乱码|  楼主 | 2023-6-29 14:25 | 只看该作者
while(1)
{
        if(flage==1)
        {
                ES=0;//不允许串口产生中断 保证此次操作安全
            flage=0;
                SBUF=temp;//发送数据
                while(!TI);
                TI=0;//取消此次中断申请
                ES=1;//允许串口产生中断
        }
}

使用特权

评论回复
24
是你的乱码|  楼主 | 2023-6-29 14:25 | 只看该作者
}

void interrupt4() interrupt 4//4号中断 处理函数
{
RI=0;//取消此次中断申请
if(SBUF0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF0x00)//关闭
p33=0;//单片机P33口置为低电平
temp=SBUF;
flage=1;
}

是不是看起来感觉挺少挺简单的,没错这就是单片机方面的所有代码。个人感觉单片机方面代码其实问题不是很大的,主要是硬件方面的问题,所以代码先放一放,我们先来说说具体器件的问题。

使用特权

评论回复
25
是你的乱码|  楼主 | 2023-6-29 14:25 | 只看该作者
51单片机

图一是单片机开发板,其中开发板中间那个长方形就是51单片机,图二就是单个的51单片机,图三是51单片机的引脚图。引脚就是单片机裸露在外面的银色导体,引脚可以输出高电压(等价于逻辑“1”)也可以输出低电压(等价于逻辑“0”)。补充一下电平信号的概念,TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V等价于逻辑“0”,这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。个人认为单片机最重要的一个特性就是我们可以往单片机中写入自己的程序(C++/C/汇编 这个过程也叫做烧写程序),通过自己的程序控制单片机各个引脚的输出电压,然后在通过引脚的输出电压来控制相应的外接模块。外接模块就是将单片机的引脚和模块的引脚连接起来,单片机引脚的输出电压当做模块引脚的输入电压。如果之前没有接触过单片机开发的,博主强烈建议去看看“郭天祥十天学会单片机的视频教程”。如果你去淘宝买了单片机开发板到时会有一张光盘里面有很多的资料 教学视频 开发工具 以及配套开发板的结构图,郭天祥十天学会单片机的视频教程光盘里也有的。博主我将单片机有关的资料全部打包上传了 http://pan.baidu.com/s/1hrYwv1U
                          图一                                                                                         图二                                                                             图三

使用特权

评论回复
26
是你的乱码|  楼主 | 2023-6-29 14:25 | 只看该作者
2.HC-05主从一体蓝牙模块

HC-05主从一体蓝牙模块一共有6个引脚,我们只需要关注VCC,GND,TXD,RXD 这四个引脚。VCC:电源端,接单片机的VCC(高电平)。GND:接地端,接接单片机的GND端(低电平)。TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD(我的单片机P30口是RX端)。RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD(我的单片机P31口是TX端)。led指示蓝牙连接状态,快闪表示没有蓝牙连接,慢闪表示进入AT模式,双闪表示蓝牙已连接并打开了端口。注意! 不要将电源接到信号脚上,会直接烧坏。有可能你们的单片机RXD端,TXD端和我的不一样,这个就要去看光盘里的开发板结构图了,里面有画出来的。这里我想提醒一下大家,单片机烧写程序也是通过RXD端和TXD端。所以在烧写的时候要确保RXD端和TXD端没有外接其他模块,如果你接了蓝牙就会烧写失败。

使用特权

评论回复
27
是你的乱码|  楼主 | 2023-6-29 14:26 | 只看该作者
蓝牙模块的编程本质上就是串口编程,串口编程大家可以去看看“郭天祥十天学会单片机的视频教程”里面有相应的教学。在这里我稍微解释一下波特率,波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。为了在彼此之间通讯,蓝牙收发端必须使用相同的波特率进行操作。如果将接收方的波特率设置为高于发送方的波特率,则接收数据时会出现错误。 hc-05可以用指令调节波特率,我们就用默认的9600bps。。在单片机代码中,我们要通过设置单片机的计数器将将单片机的波特率也调成9600,同时打开中断开关,这部分的代码如下。

使用特权

评论回复
28
是你的乱码|  楼主 | 2023-6-29 14:26 | 只看该作者
TMOD=0x20;//设置定时器1为工作方式2
// 波特率=9600时定时初值为FDH
TH1=0xfd;//装载TH1
TL1=0xfd;//装载TL1
TR1=1;//启动T1(定时器1),开始计数
REN=1;//允许串行接收
//SM0=0 SM1=1 为工作方式2
SM0=0;
SM1=1;
EA=1;//开启总中断
ES=1;//允许串口产生中断



蓝牙模块收到数据会触发4号中断,程序进入4号中断处理函数。我们只要重写中断函数如下。51单片机有两个物理上独立的接收 发送缓冲器SBUF,它们占用同一地址99H。 在中断处理函数中通SBUF存储着蓝牙模块接收到的数据。将其和我们自己定义的‘开’和‘关’进行比较,如果接收到的数据是0xff就将pP33口置为高电平(打开台灯),反之接收到的数据是0x00就将pP33口置为低电平(关闭台灯)。单片机的P33口又和继电器的控制端口连接(这个我们之后会具体分析的)。

使用特权

评论回复
29
是你的乱码|  楼主 | 2023-6-29 14:26 | 只看该作者
void interrupt4() interrupt 4//4号中断 处理函数
{
RI=0;//取消此次中断申请
if(SBUF0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF0x00)//关闭
p33=0;//单片机P33口置为低电平
temp=SBUF;
flage=1;
}

使用特权

评论回复
30
是你的乱码|  楼主 | 2023-6-29 14:26 | 只看该作者
在中断函数中,处理完所有操作之后都会将flage置为1。在main函数中有一个无限循环,其中如果flage=1的话 就通过SBUF发送数据给手机端的蓝牙。发送的temp就是收到之前接收到的数据,还记得在之前分析Android端BluetoothTool的接收函数的时候,有说到如果手机成功发送了一个开灯命令给单片机,单片机收到之后成功控制继电器将台灯打开之后,单片机会回发一个消息0xff给手机。因此手机端只要收到0xff这个消息,就知道台灯打开成功了。具体发送过程就是在下面的代码中完成的,至于代码中ES TI这些都是和串口编程有关的,个人建议去看看视频教学比较好。

使用特权

评论回复
31
是你的乱码|  楼主 | 2023-6-29 14:27 | 只看该作者
while(1)
{
if(flage==1)
{
ES=0;//不允许串口产生中断 保证此次操作安全
flage=0;
SBUF=temp;//发送数据
while(!TI);
TI=0;//取消此次中断申请
ES=1;//允许串口产生中断
}
}

使用特权

评论回复
32
是你的乱码|  楼主 | 2023-6-29 14:27 | 只看该作者
.继电器(1路继电器模块带光耦隔离 支持高低电平触发 5V 一路)

继电器模块接口有1、DC+:接电源正极(电压按继电器要求,有5V.9V.12V和24V选择)2、DC-:接电源负极3、IN:可以高或低电平控制继电器吸合。 IN端是用来控制继电器公共端是和常闭端连接还是和常开端连接用的,如果IN端是高电平那么继电器的公共端就和常闭端连接,反之公共端和常开端连接。我是将IN端和单片机的P33口连接,通过改变单片机P33端上的电平,从而改变继电器IN端的电平,达到控制继电器开合的效果。这里非常有必要说明一点,就是继电器的IN端和单片机的哪个口连的问题。不是所有的端口都可以连得,要接有上拉电阻的端口才可以,因为如果没有接上拉电阻的端口就算在代码中将该端口置为1,实际中该端口电压达不到高电压,只有接有外接电阻端口的电压才能达到高电压。至于怎么判断单片机端口是不是有接外接电阻有两种方法,一看单片机(开发板)的结构图找到接有外接电阻的端口,二是自己一个一个试过去。如代码所示,打开台灯的时候将P33口置为1(1是高电平 0是低电平)。

使用特权

评论回复
33
是你的乱码|  楼主 | 2023-6-29 14:27 | 只看该作者
继电器输出端:1、NO: 继电器常开接口,继电器吸合前悬空,吸合后与COM短接 2、COM:继电器公用接口 3、NC: 继电器常闭接口,继电器吸合前与COM短接,吸合后悬空
if(SBUF==0xff)//开灯
        p33=1;//单片机P33口置为高电平
else if(SBUF==0x00)//关闭
        p33=0;//单片机P33口置为低电平

使用特权

评论回复
34
是你的乱码|  楼主 | 2023-6-29 14:30 | 只看该作者
台灯

台灯方面主要就是将台灯的一根导线(零线或者火线)弄断,然后两端分别继电器的NO(继电器常开接口) COM(继电器公用接口)连接就好。这里要注意,台灯要是那种USB接口的,USB接口的有降压器会将220V降下来的。千万不要用那种不是USB的,那种电压太高太危险了,而且继电器也承受不了这么大的电压,要买相应的继电器。 切记!

使用特权

评论回复
35
是你的乱码|  楼主 | 2023-6-29 14:31 | 只看该作者
单片机代码

#include <reg52.h>
unsigned char flage,temp;
sbit p33=P3^3;//单片机P3.3口

void main()
{
TMOD=0x20;//设置定时器1为工作方式2
// 波特率=9600时定时初值为FDH
TH1=0xfd;//装载TH1
TL1=0xfd;//装载TL1
TR1=1;//启动T1(定时器1),开始计数
REN=1;//允许串行接收
//SM0=0 SM1=1 为工作方式2
SM0=0;
SM1=1;
EA=1;//开启总中断
ES=1;//允许串口产生中断

使用特权

评论回复
36
是你的乱码|  楼主 | 2023-6-29 14:31 | 只看该作者
while(1)
{
        if(flage==1)
        {
                ES=0;//不允许串口产生中断 保证此次操作安全
            flage=0;
                SBUF=temp;//发送数据
                while(!TI);
                TI=0;//取消此次中断申请
                ES=1;//允许串口产生中断
        }
}

使用特权

评论回复
37
是你的乱码|  楼主 | 2023-6-29 14:31 | 只看该作者
}

void interrupt4() interrupt 4//4号中断 处理函数
{
RI=0;//取消此次中断申请
if(SBUF0xff)//开灯
p33=1;//单片机P33口置为高电平
else if(SBUF0x00)//关闭
p33=0;//单片机P33口置为低电平
temp=SBUF;
flage=1;
}

到这里手机控制台灯的开关有关内容都已经介绍完毕,大家不妨自己动手做一个,挺有趣的。

Android端项目github地址:https://github.com/973927190/TableLamp

单片机端项目:http://pan.baidu.com/s/1i4P87dj

单片机有关的资料: http://pan.baidu.com/s/1hrYwv1U

使用特权

评论回复
38
是你的乱码|  楼主 | 2023-6-29 14:32 | 只看该作者

使用特权

评论回复
39
是你的乱码|  楼主 | 2023-6-29 14:32 | 只看该作者
合理的创建标题,有助于目录的生成

使用特权

评论回复
40
是你的乱码|  楼主 | 2023-6-29 14:32 | 只看该作者
如何改变文本的样式
强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

使用特权

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

本版积分规则