技术文档

安卓与单片机通信 单片机与安卓手机通过蓝牙串口模块利用JSON数据格式通信实例

小编 2024-10-11 技术文档 23 0

单片机与安卓手机通过蓝牙串口模块利用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上获取索要的数据,接下来就可以进行相关的数据处理。

单片机收发Json数据格式与安卓手机双向通信实例附简要代码

1.简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

JSON

因为现在服务器平台数据传输采用JSON协议,因此,硬件堆JSON的解析非常重要。传统的C JSON解析非常庞大,在微处理器中,这无疑是一个巨大的问题。因此,需要编写尽量简单的代码,灵思致远整理。

2.安卓端的代码编写:

安卓

2.1安卓生成json数据格式简要代码:

比如生成:

{

"name" : "jack",

"age" : 22

}

JSONObject tt= new JSONObject();//new一个JSONObject对象,命名为wangxiaoer

Object nullObj = null; //解决put中因二义性引起的编译错误

try{

tt.put("name","jack");

tt.put("age",22);

}catch(JSONException e){

e.printStackTrace();

}

2.2安卓解析json数据格式简要代码:

在安卓手机编写相关的代码,利用安卓蓝牙API编写代码,新建一个接受线程去接收蓝牙收到的数据,把接收到的数据用JSON数据的API进行解析,简要代码如下:

try {

JSONObject obj = new JSONObject(recStr);

info = Integer.parseInt(obj.getString("RR"), 16);

} catch (JSONException e) {

e.printStackTrace();

}

这样就可以在安卓手机APP上获取索要的数据,接下来就可以进行相关的数据处理。

3.单片机端的代码编写:

单片机

3.1 单片机生成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++;

}

}

3.2单片机解析json数据格式简要代码:

char json_check(char *str); //JSON 校验函数

char json_get_value(char *json,char *json_key , char *json_value); //JSON获取键值

char json_check_value(char *str1, char *str2); //JSON 键值对比函数

char json_check(char *str)

{

char str_length; //定义字符长度变量

str_length = strlen(str); //计算字符长度

if(str[0] == '{' && str[str_length-1] == '}') //通过首尾大括号判断是否为JSON

{

return 1; //如果字符串为合法JSON 返回1

}

else

{

return 0; //如果字符串为合法JSON 返回0

}

}

char json_get_value(char *json,char *json_key , char *json_value)

{

char *json_key_start; //定义键名开始的位置

char *json_key_end; //定义键名结束的位置

char json_key_length; //定义键名长度

char *json_value_start; //定义键值开始的位置

char *json_value_end; //定义键值结束的位置

char json_value_length; //定义键值长度

json_key_start = strstr(json,json_key); //获取键名开始的位置

json_key_length = strlen(json_key); //获取键名的长度

json_key_end = json_key_start + json_key_length; //获取键名结束的位置

if(json_key_start != 0 && *(json_key_start - 1) == '\"' && *(json_key_end) == '\"' && *(json_key_end + 1) ==

':' && *(json_key_end + 2) == '\"' )

{

json_value_start = json_key_end + 3; //获取键值开始的位置

json_value_end = strstr(json_value_start,"\""); //获取键值结束的位置

json_value_length = json_value_end - json_value_start; //获取键值的长度

strncpy(json_value,json_value_start,json_value_length); //将键值存入指针数组

json_value[json_value_length] = '\0'; //指针最后一位补字符串结束符 \0

return 1; //成功获取键值 返回1

}

else

{

json_value[0] = '\0';

return 0; //失败获取键值 返回0

}

}

char json_check_value(char *str1, char *str2)

{

if(strcmp(str1,str2) == 0)

{

return 1; //匹配成功返回1

}

else

{

return 0;

}

}

相关问答

android手机和 单片机 如何实现相互通讯?

1.串口对串口(不过一般普通用户不太容易连接到手机的串口)2.蓝牙:单片机+蓝牙模块-》手机蓝牙模块-》手机上应用程序3.红外:单片机+红外模块-》手机红外模块...

android手机怎么连外网-ZOL问答

单片机+wifi模块+编程,安卓APP(手机),初始化wifi连接路由器,在局域网内手机可以直接与WiFi+单片机通讯(手机与单片机传送数据),要通过外网连接单片机需要借助...

什么是 安卓单片机 编程?

1.什么事单片机编程:就是硬件是单片机,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分就是能过单片机编程来实现。单片机能识别的...

单片机 和ARM有什么区别?

欢迎大家关注狗哥,学习更多单片机干货1、单片机指单芯片上集成了控制器、存储器以及如定时器、SPI、IIC等外部设备于一体的片上系统,可以用来执行复杂的功能,...

用上位机控制 单片机 然后实现数据传输,学习哪种上位机好呢?

果确定要写上位机软件那么老董强烈推荐你使用C#因为国内有一位大神已经开源了一套组态软件的源码,这是一套完整的上位机软件,从底层通讯协议到网关再上层的...也...

单片机 、ARM、嵌入式开发、Android底层开发有什么关系?

这个说起关系的话应该是都要跟硬件层接触吧!我自身现在工作上是做嵌入式开发的。单片机开发相对于其他几个算是较为简单的,单片机种类有很多,从8位、16位、到...

51 单片机 上可以移植编写的windows程序么? 单片机 上可以接触...

另外,单片机可以做什么这个问题,你看看你生活中,除了电脑,其他的智能设备都是单片机系统,比如家里的全自动洗衣机,冰箱,汽车上的控制系统,安防监控,交通灯,智能...

熟悉C语言51 单片机 想在物联网嵌入式方面发展,需要再学习储备哪些知识?

...但是对于个人来说,搭建服务器,开发底层协议有很大的难度和不稳定性,因此可以用现有的云平台,我们只需要掌握API接口环境和协议,就可以访问站点的功能和资源...

单片机 程序前景一片渺茫吗?为什么?

单片机程序员前景非常好,现在的电子产品离不开单片机,所以单片机程序员必不可少。想要有更好的发展、拿到更高的工资,需要好好规划一下自己的未来。1.单片机...

现在 安卓 软件程序员还有怎样的前景?

谢谢邀请!作为一名IT行业的从业者,我来回答一下这个问题。首先,随着移动互联网增量红利的逐渐消退,安卓程序员的岗位需求未来很难再出现之前的爆发式增长,...

猜你喜欢