单片机收发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;
}
}
用智能手机控制单片机,UI开发怎么做?
百分之九十以上的智能硬件都需要通过手机来操作,大都需要在手机上安装APP。除了用短信方式控制之外,其他的操作界面都用专门的开发工具来编程实现,这些工具都有哪些呢?今天蚁哥给大家推荐几个免费的开发工具。
1Eclipse
这个工具程序员最为熟悉不过了,它支持很多种语言编程。要使用它来编写APP,需要下载专门的SDK,安装过程也许会让新手经历一番波折。不过网上可以找到打包好的程序:ADT-Bundle,直接解压缩就可以使用了。
EClipse开发环境
2Android Studio
谷歌自家出的官方安卓软件集成开发工具 Android Studio,宣称“会让开发者更快、更具生产力”。它完全免费,跨平台支持 Win / Mac / Linux。它的界面和EClipse几乎一样,不过支持实时渲染。有能力的程序员朋友不妨试一试这个工具。
3APP INVENTER
这个工具很有意思,它是谷歌和MIT一起研发的图形化的编程工具。因为你不需要再编写代码了,只要拖拖拽拽就能够做出自己的APP了。不过用这个工具做出来的UI大多数是中规中矩,想要做出特别炫的效果来,还需要下点苦工啦。
App Inventor
4Html5
Html大家都不陌生,Html5是最新的版本,它具有新的元素,属性和行为,具有更大的技术集,允许更多样化和强大的网站和应用程序。通过H5可以直接用JS语言编写页面。通过WebSocket技术,H5可以跟服务器进行通信,进而控制带有WIFI功能的单片机。这就让我们可以不用安装APP,通过网页直接对单片机进行控制。不过手机上的浏览器必须支持Html5才行。
5微信小程序
最近火的不得了的微信小程序,也可以通过调用蓝牙接口或者通过WebSocket实现对单片机的控制,大家可以直接搜索微信开发者的官网,下载专门的开发工具,教程也比较齐全。
微信Web开发工具
希望我的分享对大家有所帮助,欢迎大家多评论,多交流!
相关问答
android 手机和 单片机 如何实现相互通讯?1.串口对串口(不过一般普通用户不太容易连接到手机的串口)2.蓝牙:单片机+蓝牙模块-》手机蓝牙模块-》手机上应用程序3.红外:单片机+红外模块-》手机红外模块...
在谷歌开的I/O大会上宣布用Kotlin语言作为首选语言,Java将面临何种处境?个人观点,现在就应该尽快开始学习kotlin语言了.这是8月份的信息.以后类似的需求会越来越多,所以现在开始还是多学习吧.而此次Kotlin,无疑是再一次的合作加...
单片机 程序前景一片渺茫吗?为什么?单片机程序员前景非常好,现在的电子产品离不开单片机,所以单片机程序员必不可少。想要有更好的发展、拿到更高的工资,需要好好规划一下自己的未来。1.单片机...
请问一下企达信息的 即时通信 支持linux的客户端吗?Tiny4412是一款高性能的四核Cortex-A9核心板,一般都是上系统的(Linux,Android等),单片机一般都是裸程序运行的企业即时通讯归属于即时通讯的一个分...
湖南软件职业学院开发过什么有名的软件? - 红网问答现在我们手机或者电脑上使用的办公软件、杀毒软件大部分都是专业的公司开发的。比如:腾讯公司就是做qq的,包括QQ电脑管家、QQ游戏等等。新浪Sina,...
可不可以用51 单片机 制作一个手机-ZOL问答可以,先买个手机模块,比如上海移远的M35,插上电话卡,用单片机控制它就可以打电...并配合操作系统如Android或iOS。如果你想入门电子产品开发,可以先从学习基础...
android 手机如何才能使所有的声音都通过蓝牙输出-ZOL问答直接连上蓝牙当然是完全适配的那种有的便宜的只能打电话不能听歌楼上答的非常完整!但非能解决问题!下面我来给你介绍一下,为什么不能放!首先...
嵌入式分向linux、 单片机 哪个好?嵌入式系统和单片机都是非常流行的电子开发平台,它们各有优缺点,选择哪个平台取决于你的需求和项目要求。嵌入式系统通常是一个完整的计算机系统,包括处理器...
该不该放弃嵌入式, 单片机 这条路?缺点等重点关注。做医疗类就关注医疗类...你做哪类产品,就要对哪类产品的相关认证要求、政策导向、同行产品优缺点等重点关注。做医疗类就关注医疗类产品,做变...
Android 驱动开发? android 开发还是iso开发好?[回答]公司方案设计水平真不错,技术过硬,我们跟他们合作过,项目开发非常负责,顺利帮我们完成了产品的量产。单片机是指一个集成在一块芯片上的完整计算机...