手机蓝牙与单片机的通信如何实现

手机蓝牙与单片机的通信如何实现,第1张

一、准备工作:

1一款带串口的单片机。

2USB转串口模块(自己焊接的,所以很丑,当然也可以用学习板上的串口部分)。

3蓝牙转串口模块。

4如果你的手机系统是Android的,下载个android蓝牙调试助手。

5电脑上安装一个串口调试助手。

6若干杜邦线等。

二、调试工作

万事俱备,只欠东风。

1调试蓝牙模块

用杜邦线连接USB转串口模块和蓝牙模块。

串口模块   蓝牙模块。

VCC--------->VCC。

TXD---------->RXD。

RXD<----------TXD。

GND--------->GND。

打开手机蓝牙助手,连接到该蓝牙模块,成功后随便输入一些字符,就会在电脑上看到串口助手上有显示该字符,前提是串口的波特率和蓝牙模块的波特率对应(默认是9600)。

2调试单片机的串口

还是用杜邦线连接USB转串口模块和单片机,在电脑上打开串口调试助手调试。

接线方式参考调试蓝牙模块。

单片机的程序就不说了,这里假设已经做好了。如果正常则会看到预期效果。

三、连接工作

把蓝牙模块和单片机模块连接起来,然后打开蓝牙调试助手,连接蓝牙模块发送数据。

这个时候,就好像你在电脑上用串口助手给单片机发送数据一样。

单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。

在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

//创建一个串口通讯

SerialPort CurrentPort = null;

CurrentPort = new SerialPort();

CurrentPortReadBufferSize = 128;

CurrentPortPortName = comName; //端口号

CurrentPortBaudRate = bandRate; //比特率

CurrentPortParity =parity;//奇偶校验

CurrentPortStopBits = stop;//停止位

CurrentPortDataBits = databit;//数据位

CurrentPortReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常

//绑定数据接收事件,因为发送是被动的,所以你无法主动去获取别人发送的代码,只能通过这个事件来处理

CurrentPortDataReceived += Sp_DataReceived;

CurrentPortOpen();

定义一个变量 byte[] receiveStr;

//绑定的事件处理函数

private static void Sp_DataReceived(object sender, SystemIOPortsSerialDataReceivedEventArgs e)

{

SerialPort sp = sender as SerialPort;

if (sp == null)

return;

byte[] readBuffer = new byte[spReadBufferSize];

spRead(readBuffer, 0, readBufferLength);

//赋值

receiveStr=readBuffer;//当然你可以通过转换将byte[]转换为字符串。

}

//你要求的按钮事件可以这么写

private void button1_Click(object sender, EventArgs e)

{

if(receiveStr!=null)

{

变量 xxx=receiveStr;

}

}

串口是蓝牙模块最常用的外围接口之一,用于数据传输或蓝牙模块的指令控制,为了方便直接嵌入用户产品中

用博陆科BLK-MD-BC04-B蓝牙模块举例说明下,蓝牙模块的串行口为 TTL电平(33V),提供4条引脚:UART_TXD,UART_RXD,UART_CTS,UART_RTS,可以与单片机的UART引脚直接相连,CTS、RTS不用时,可悬空处理。如需与PC的RS232串口相连,必须做TTL至232的电平转换,具体请参考RS232的引脚定义。

#include<reg52h>//声明头文件

#define uchar unsigned char//宏定义

#define uint unsigned int//宏定义

sbit deng=P2^0;//定义车灯的控制引脚

sbit z=P2^1;//定义左转向灯的控制引脚

sbit y=P2^2;//定义右转向灯的引脚

sbit BEEP=P2^3;//定义蜂鸣器的引脚

sbit zuo1=P0^0;//定义控制左边电机的单片机引脚

sbit zuo2=P0^1;//定义控制左边电机的单片机引脚

sbit you1=P0^2;//定义控制右边电机的单片机引脚

sbit you2=P0^3;//定义控制右边电机的单片机引脚

uchar a=0;//定义一个变量a,用来读取串口的数据

void delay(uint z)//一个带参数的延时程序

{

int i,j;//定义两个变量

for(i=10;i>0;i--)

for(j=z;j>0;j--);//将参数z赋值给j

}

void init()//初始化子程序

{

TMOD=0x20; //设置定时器T1为工作方式2

TH1=0xfd;

TL1=0xfd; //T1定时器装初值

TR1=1; //启动定时器T1

REN=1; //允许串口接收

SM0=0;

SM1=1; //设置串口工作方式1

EA=1; //开总中断

ES=1; //开串口中断

}

void go()//前进子程序

{

zuo1=0;

zuo2=1;//左边轮子正转

delay(25);//pwm有用值,越大左边方向的轮子越快

zuo1=1;//关闭左边轮子

you1=0;

you2=1; //右边轮子正转

delay(24);//pwm有用值,越大右边的轮子越快

you1=1;//关闭右边轮子

delay(100);//pwm无用值,越大,小车跑的越慢

z=1;

y=1;//关闭转向灯

}

void hui()//小车后退的子程序

{

zuo1=1;

zuo2=0;//左边轮子倒转

delay(25);//pwm有用值,越大左边方向的轮子越快

zuo2=1;//关闭左边轮子

you1=1;

you2=0; //右边轮子倒转

delay(24);//pwm有用值,越大右边的轮子越快

you2=1;//关闭右边轮子

delay(100);//pwm无用值,越大,小车跑的越慢

z=1;

y=1;//关闭转向灯

}

void turnleft()//小车左转弯子程序

{

zuo1=1;

zuo2=1;//左边轮子停止转动

you1=0;

you2=1; //右边轮子正转

delay(24);//pwm有用值,越大右边的轮子越快

you1=1;//右边轮子停止

delay(100);//pwm无用值,越大,小车跑的越慢

z=1;

y=1;//关闭转向灯

z=~z;//左转向灯打开

}

void turnright()//小车右转弯子程序

{

zuo1=0;

zuo2=1;//左边轮子正转

delay(25);//pwm有用值,越大左边方向的轮子越快

zuo1=1;//左边轮子停止

you1=1;

you2=1; //右边轮子停止

delay(100);//pwm无用值,越大,小车跑的越慢

z=1;

y=1;//关闭转向灯

y=~y;//右转向灯打开

}

void down()//停止子程序

{

zuo1=1;

zuo2=1;

you1=1;

you2=1; //左右轮全部停止

z=1;

y=1;//关闭转向灯

}

void onbeep()//蜂鸣器鸣响子程序

{

BEEP=0;

}

void offbeep()//蜂鸣器鸣响子程序

{

BEEP=1;

}

void main()//主程序

{

init();//调用初始化子程序

while(1)//死循环

{

switch(a)//判断a从串口读取到的数据

{

case 0x1f://如果是0x1f就前进

go();

break;

case 0x2f://如果是0x2f就后退

hui();

break;

case 0x3f://如果是0x3f就左转

turnleft();

break;

case 0x4f://如果是0x4f就右转

turnright();

break;

case 0x00://如果是0x00就停止

down();

break;

case 0xa0://如果是0xa0车灯打开

deng=0;

break;

case 0xb0://如果是0xb0车灯关闭

deng=1;

break;

case 0xc0://如果是0xc0蜂鸣器鸣响

onbeep();

break;

case 0xd0://如果是0xc0蜂鸣器鸣响

offbeep();

break;

}

}

}

void chuan() interrupt 4//串口中断服务程序

{

RI=0;//软件清除串口响应

a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据

}

你将Label6Caption:='COM'+IntToStr(COMMNumber);中的参数COMMNumber分别改成3到9试试。可能是我见识短,我还没见过系统支持这么大的串口号。

以上就是关于手机蓝牙与单片机的通信如何实现全部的内容,包括:手机蓝牙与单片机的通信如何实现、msp430f149连接蓝牙模块发送数据,但是用串口调试精灵接收不到数据,程序如下,求大神指导~、蓝牙模块串口的功能是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9690640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存