本文主要介绍了针对android的蓝牙串口上位机开发。

程序下载地址:点击打开链接

一、帧定义

androidclient依照一定的数据帧格式通过蓝牙串口发送数据到连接到MCU的蓝牙从机。MCU接收到数据后。依照帧格式的定义,接收数据帧。并解析数据帧,得到须要的数据。

androidclient依照下面帧格式来发送和接收数据。

1.1client发送的数据帧内容

发送频率:10Hz

帧校验的和是从帧长開始到帧校验前全部数据的和对256取余。

即sum%256。

pitch roll yaw数据各16位,由高低8位组成。MCU接收数据时须要将其再复合成一个16位数据。

0x5A:帧头

14:针长度

0xA1:帧功能,标明这帧数据是pitch yaw roll内容。

pitch_set_H:pitch高8位

pitch_set_L:pitch低8位

...

...

帧校验:(帧长+帧功能+数据)%256

0xA5:帧尾。

(注:帧是这么定义的,但实际上编写接收程序的时候。我将帧尾0xA5当作了一帧数据的帧头。

这样帧头就变成了 0xA5 0x5A。此时就不存在帧尾了)

以下是androidclient发送字节信息的程序:

<span style="white-space:pre">  </span>b[0] = (byte)0XA5;  //帧头b[1] = (byte)14;     //帧长b[2] = (byte)0xA1;   //帧功能b[3] = (byte)(pitchSet>>8);     //数据b[4] = (byte)(pitchSet);b[5] = (byte)(rollSet>>8);b[6] = (byte)(rollSet);b[7] = (byte)(yawSet>>8);b[8] = (byte)(yawSet);b[9] = (byte)0;b[10] = (byte)0;b[11] = (byte)0;b[12] = (byte)0;int temp = 0;for(int j=1;j<13;j++){temp = temp+b[j];}b[13] = (byte)(temp%256);  //校验     b[14] = (byte)0x5A;     //帧结束

1.2MCU接收帧数据

因为串口是依照一个一个字节的格式发送数据,所以MCU接收数据时,要依照client发送的帧格式的定义。找到一帧数据的開始与结束,确认一帧数据接收无误后,再将当中的数据解析出来。

使用一个为来标志(状态机)接收程序对一阵数据的接收状态。

编写的DSP2808接收程序例如以下:

定义数据类型

typedef struct
{int status;   //data statusint Rx_Data;     //the receivced dataint data[15];  //int rx_buf[13];int buf_index;int sum;int yawSet;int pitchSet;int rollSet;
}Sci_Data;
Sci_Data sci_data;
interrupt void SCIB_RX_ISR()          //以中断的方式接收数据
{
//接收程序sci_data.Rx_Data = ScibRegs.SCIRXBUF.all;        ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1;  //clear overflow flagScibRegs.SCIFFRX.bit.RXFFINTCLR = 1;   //clear the interrupt flagPieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;  //enable more interrupt from PIE group 9Decode_Frame(sci_data.Rx_Data);          //数据帧解码
}void Decode_Frame(int rx_data)
{if(sci_data.status==0 && rx_data == 0x5A)   //推断帧尾 假设找到帧尾,status=1{sci_data.status = 1;}else if(sci_data.status == 1 &&rx_data == 0xA5)      //帧尾下一个字符是帧头。status=2{sci_data.status = 2;}else if(sci_data.status ==2) //帧头后是13个字节数据 从帧长到帧校验{if(sci_data.buf_index<13){sci_data.rx_buf[sci_data.buf_index] = rx_data;        //  0-12 to save data length function data... sum      if(sci_data.buf_index<12) //求取校验和{sci_data.sum += sci_data.rx_buf[sci_data.buf_index];}sci_data.buf_index++;}if(sci_data.buf_index >= 13){if(sci_data.rx_buf[12] == sci_data.sum%256){int j=0;for(j=0;j<10;j++){sci_data.data[j] = sci_data.rx_buf[j+2];    //save data to the data buf}sci_data.pitchSet = sci_data.data[0]<<8|sci_data.data[1];}sci_data.buf_index = 0;sci_data.status = 0;sci_data.sum = 0;}}else {sci_data.buf_index = 0;sci_data.status = 0;sci_data.sum = 0;}
}

这样DSP2808就接收到了从client发送来的数据。保存在sci_data.pitchSet、sci_data.rollSet、sci_data.yawSet三个变量中。

二、androidclient开发流程

问题:检測蓝牙的连接状态

android蓝牙串口程序状态机

在程序中,通过broadcast来检測蓝牙的连接状态,根绝蓝牙的连接状态来决定操作。

打开蓝牙---扫描设备---选择设备---连接设备---连接正常---发送数据---

转载于:https://www.cnblogs.com/clnchanpin/p/7060216.html

Android蓝牙串口程序开发相关推荐

  1. android 蓝牙串口数据格式,Android 蓝牙串口调试程序开发

    前言:本次项目需要为智能设备开发一个 App 于是就开始学习 Android 的蓝牙串口通信方面的知识,现在 App 已经写完了,当初学的时候走了不少弯路和尝试,现作为一名初学者和大家分享一下经验,以 ...

  2. stm32f103HC05蓝牙串口程序和自制手机APP

    我最近用stm32的蓝牙串口功能,写了这篇文章分享,有不足之处欢迎指正. 一.准备 功能:用APP控制STM32F103单片机上的部件如:LED小灯. 硬件:蓝牙模块.STM32F103mini(或其 ...

  3. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

  4. 关于Android蓝牙串口通信那点破事

    Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...

  5. android 蓝牙锁应用开发实例(三)蓝牙相关功能实现【第一部分】

    本人水平有限,文章中如果出现什么不正确或者模糊的地方,还请各位小伙伴留下评论,多多指教 : ) 正式开始前的话 蓝牙开发梳理 整体思路 核心API BlueToothAdapter 简介 getDef ...

  6. Linux 串口编程三 使用termios与API进行串口程序开发

    在 termios 结构体以及内部终端控制标志中,并非所有的参数对于实际的物理串口都是有效的,在使用过程中也不需要对于所有标志的作用都有所理解.事实上,快速掌握一项技术的核心点也是一种学习能力.对于使 ...

  7. Android 蓝牙串口通信工具类 SeriaPortUtil 2.0.+

    原文地址:https://www.shanya.world/archives/2fd981ea.html SerialPortUtil 提示 最新版本 3.0.+ 已发布,其对比 2.0.+ 版本,A ...

  8. 基于android的串口开发板,210开发板Android系统串口程序

    最近由于项目需要,花了两天时间在Android平台下编写了一个串口助手软件.硬件平台是友善之臂的tiny210开发板.起初的想法是首先基于Linux驱动做一些修改,然后自行编写HAL层代码,最后编写A ...

  9. 基于html5+的nativejs实现android蓝牙串口通讯

    ##开发工具 基于hbuilder打包的webapp. ##所需知识 了解基本的html,css,js,vue.js 了解原生android的开发 了解android蓝牙的开发 了解hbuilder的 ...

最新文章

  1. 为什么 CTO、技术总监、架构师都不写代码,还这么牛?
  2. backboneJs 导图
  3. 什么是僵尸进程与孤儿进程
  4. batch insert 1 million datas into mysql
  5. 语言语法糖_【c#】几种常用语法糖
  6. 关于CDN加速服务器的几个问题
  7. 【ENVI二次开发】关于批处理(Batch)模式与ENVI_DOIT的使用
  8. 携号转网全面启动后,新诈骗套路也跟上了!一招教你识别!
  9. BZOJ 1024: [SCOI2009]生日快乐
  10. c语言随机数 单片机32,自己用C语言写PIC32单片机的serial bootloader
  11. 三维空间数据建模——Smart3D的安装
  12. 文件被后台程序占用无法删除_Windows系统中,教你彻底删除C盘的顽固文件,瞬间多出10个G...
  13. 红米k40pro一键root教程
  14. 国家集训队论文分类整理(转)
  15. Android Studio实现简单计算器
  16. win10服务器密码怎么修改,教你windows10密码更改
  17. 【题解】Luogu P5405 [CTS2019]氪金手游
  18. html表格字符分散,如何实现Word表格文字分散对齐?
  19. 20221221英语学习
  20. 【拓扑学知识】1.拓扑空间与度量拓扑

热门文章

  1. go语言初体验(流程控制、range遍历、函数、结构体、面向对象)
  2. 'Lock wait timeout exceeded; try restarting transaction'问题
  3. Solr-5.3.0学习笔记(三)Manage Core
  4. querySelector用法改进
  5. API 2.0Switching Basemaps
  6. 浏览网页需要登录的解决办法
  7. Windows用管理员方式启动cmd (全面)
  8. jdk官方版 v1.7+安装教程
  9. photoshop(ps) cs6中文版
  10. java lList Map Set总结