基于蓝牙的手机与单片机通信讲解,附代码
应粉丝要求,今天就把基于蓝牙的手机与单片机通信的代码送给大家,喜欢就关注我吧,让我们一块讨论技术问题!
在进行单片机开发以及参加比赛时,由于蓝牙模块控制方便,手机附带蓝牙功能(作为主机),信号稳定,低功耗等天然条件,这也决定了蓝牙模块必火。
今天我们使用的蓝牙模块为HC06一共有四个引脚分别为VCC,GND,RXD,TXD 对应连接到单片机上的VCC,GND,TXD,RXD 一定要注意RXD与TXD在连接中是交叉相连的,否则不能正常使用。
HC06正面图
51单片机引脚图
连接好之后就是写程序了(文章后面会出程序),写好之后生成HEX文件烧录到板子中,这时我们从机部分就完成了,主机也就是手机需要下载一个蓝牙串口通信助手,没有的伙伴可以去网上下载一个,百度上都能找的到,下载好之后打开蓝牙串口通信助手然后与蓝牙模块HC06连接,第一次连接的时候可能会输入密码,一般默认为1234,连接成功之后,一般有实时发送模式和键盘发送模式,具体使用方法大家可以下载下来试用一下。
蓝牙串口调试助手
键盘模式
实时发送模式
程序
#include<reg52.h>
sbit LED=P1^1;
unsigned char rx;
int flag;
void init(void)
{
TMOD|=0x20;
SCON=0x50;
PCON&=0x7f;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
}
void serial(void)interrupt 4 using 1
{
RI=0;
rx=SBUF;
switch(rx)
{
case 'a':flag=0;
break;
case'b':flag=1;
break;
default:
break;
}
}
main()
{
init();
while(1)
{
if(flag==0)
LED=0;
if(flag==1)
LED=1;
}
}
在上述程序中a和b即为单片机所接受到的数据,如果接收到信号a那么就打开LED灯,接收到信号b就关闭LED,你也可以多加点比如c,d等等这是完全可以的,那么手机呢就需要发送a或b在实时模式直接输入发送即可,在键盘模式需要设置一下,设置的时候需要点手机菜单键,然后在出现界面设置即可,这里没有图片就不给大家展示了,主机从机都设置完以后就可以正常使用了,接下来的工作就是任由你开发了,祝你取得好的成绩。
PS:上述程序只适用于51系列单片机,晶振为11.0592MHZ。
单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),JSON 是轻量级的文本数据交换格式,JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。JSON 具有自我描述性,更易理解。
JSON的结构:(1) Name/Value Pairs(无序的):类似所熟知的Keyed list、 Hash table、Disctionary和Associative array。在Android平台中同时存在另外一个类 "Bundle",某种程度上具有相似的行为。(2) Array(有序的):一组有序的数据列表。
开发工具
本文简要介绍单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信,单片机采用51系列单片机用C51语言编写,通过sprintf构造JSON格式文件通过蓝牙串口模块发送到安卓手机,简要代码如下:
sprintf(msg,"{\"RR\":\"%02x\"}\0",(unsigned int )RRtemp);
Serial_print(msg);
这里涉及到Serial_print()函数如下:
void Serial_print(char *msg)
{
while (*msg != '\0') {
S2BUF = *msg;
while ((S2CON & S2TI) == 0);
S2CON &= ~S2TI;
msg++;
}
}
可以利用安卓自带的org.json.JSONArray、JSONObject对JSON数据进行解析,org.json中的JSONObject和JSONArray解析如下:
1、JSONObject是JSON对象的键值对,例如:{“name”:”bobo”, “age”:”10”}。 2、JSONArrays是JSON的数组,例如[“aa”, “bb”. {“name”:”bobo”, “age”:10}]。
在安卓手机编写相关的代码,利用安卓蓝牙API编写代码,新建一个接受线程去接收蓝牙收到的数据,把接收到的数据用JSON数据的API进行解析,简要代码如下:
try {
JSONObject obj = new JSONObject(recStr);
info = Integer.parseInt(obj.getString("RR"), 16);
} catch (JSONException e) {
e.printStackTrace();
}
这样就可以在安卓手机APP上获取索要的数据,接下来就可以进行相关的数据处理。
相关问答
串口 芯片是 单片机 吗?是。串口是单片机重要的片上资源,通过串口搭配不同的电平转换芯片,可以实现不同的通讯协议/接口,如RS232、RS485等,通过与模组的AT指令还可以实现蓝牙、wifi...
蓝牙 模块AT指令修改如何用 单片机 实现 - 懂得使用AT指令的时候,先使蓝牙模块进入AT模式,然后你就当蓝牙就是命令的接收端,单片机或者PC串口就是命令的发送端(就当蓝牙是独立的模块)。串口发送的...
【 单片机 的问题】“ 串口 ”和“串行接口”是一回事吗 - 懂得口语中的“串口”多数情况下是指RS232/TTL电平的UART接口,有时候也用来指计算机的COM口(RS232电平的UART接口)。“串行接口”这个概念就广泛的多了,...
如何用51 单片机蓝牙 模块向手机传送信息,数值是变化的?手机上装一个蓝牙串口调试软件,蓝牙模块与单片机连接好,并设置好透传的参数例如波特率重新上电,然后手机打开蓝牙调试软件连接蓝牙模块,连接成功后可以用单片...
单片机 怎样与手机通讯?1.串口对串口(不过一般普通用户不太容易连接到手机的串口)2.蓝牙:单片机+蓝牙模块-》手机蓝牙模块-》手机上应用程序3.红外:单片机+红外模块-》手机红外模块...
单片机 知道通信协议如何通信?假使你用单片机的串口进行通信的话,你只需要考虑蓝牙转串口和串口转蓝牙的过程就可以了,主要是二者在通信过程中的编码和解码,当然你具体处理的肯定是比特流,...
请问 单片机 用的 蓝牙 模块和无线模块的区别是什么?它们两个都是属于2.4GISM无线频段,传输距离也差不多,大概10m,HC-05嵌入式蓝牙串口通讯模块比nRF24L01无线模块多了蓝牙通讯协议硬件,如果你想传输大量数据或则...
soP8 单片机 有 串口 嘛?SOP8封装的51单片机有一个串口,复位时默认引脚定义在P3.0(RXD)和P3.1(TXD)。这个串口还可以通过程序配置到另外两个位置:以STC8G1K08-SOP8为例,第二个位...S...
hc06 蓝牙 模块该怎么连接到51 单片机 上?这是单片机用串口多机通讯的仿真实例,可以参考一下,如果是手机要控制单片机,只要单片机用串口连接蓝牙模块串口,手机需要用蓝牙APP蓝牙单片机蓝牙、发送控制...
单片机串口 多机通信电路如何接?首先需要明白两个概念,就是dte和dce。dte是指数据终端设备,典型的dte就是计算机和单片机。dce是指数据通信设备,典型的dce就是modem。rs232串口标准中的rxd和t...