AS的APP接收HC-06蓝牙模块数据

总体思路

这是我的一次课程设计,要求是下位机端用阅读器、单片机读出高频卡的卡号,上位机端通过HC-06蓝牙模块进行数据的接收,并做成小型的图书馆系统,具有借书、还书、注册登录、查询等功能。

下位机端

虽然我是物联网的学生,但是无奈硬件知识很垃圾,使用的是51单片机和RC522阅读器,进行刷卡,显示卡号,首先要确保在串口上有正确的卡号输出,这样下位机才算完成。
上位机端的代码其实就是51单片机的代码,用的是KEIL软件编写的,其实是复制粘贴的,代码很好用,我会上传上来的。具体操作就是编译生成二进制文件(.hex),利用串口调试助手下载到单片机上,再打开串口,会发现接收到:+12f34e37.
+12f34e37.
+12f34e37.
其中(12f34e37)为高频卡的卡号,每一张卡都是不一样的,我在输出中添加了+.是为了传到上位机后,来作为识别一串卡号的标志,当然其它标志或其他方法都是可以的。

上位机端

关于使用的软件:
这学期课程有Android Studio的学习,所以用这个软件进行APP的设计开发,另外其带有轻量级的数据库,所以就没有使用MYSQL、SQL,还下载了SQLiteStudio,以方便的进行数据库的建立与表的动态操作。
关于设计思路

1.首先接收下位机端传来的数据,即读到的卡号,这里采用了蓝牙模块,因此上位机端要设置蓝牙适配器,获得已配对的设备,从设备中找到要连接的设备建立连接并获取输入流。
以下为java的代码,布局文件先不贴了

public class Library extends Activity {private BluetoothAdapter mBtAdapter;private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");private Button bt_dk;private TextView rl_error;InputStream inStream = null;    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_library);bt_dk = (Button) findViewById(R.id.bt_dk);rl_error = (TextView) findViewById(R.id.rl_error);//取得蓝牙适配器mBtAdapter = BluetoothAdapter.getDefaultAdapter();if (mBtAdapter != null) {if (!mBtAdapter.isEnabled()) {Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivity(intent);}}// 获得已经配对的设备Set<BluetoothDevice> pairedDevices = mBtAdapter.getBondedDevices();BluetoothSocket socket = null;if (pairedDevices.size() > 0) {for (BluetoothDevice device : pairedDevices) {// 从已经配对的设备中找到要连接的设备,在测试时将hello改成自己的蓝牙模块的名字if ("hello".equals(device.getName())) {rl_error.append(device.getName() + "\n" + device.getAddress() + "\n");try {//和已经配对的要连接的设备建立连接socket = device.createRfcommSocketToServiceRecord(MY_UUID);socket.connect();} catch (IOException e) {rl_error.append("创建或连接异常!\n");if (socket != null) {try {socket.close();} catch (IOException e1) {rl_error.append("关闭异常!\n");}}}rl_error.append("创建成功!\n");try {// 获取输入inStream = socket.getInputStream();} catch (IOException e) {rl_error.append("获取流异常!\n");}rl_error.append("获取流成功!\n");}}}bt_dk.setOnClickListener(new View.OnClickListener() {//点击读卡按钮,对获取的流进行读操作@Overridepublic void onClick(View v) {StringBuffer str=new StringBuffer();try{for(int i=1;i<=13;i++) {str.append("" + (char) (inStream.read()));//不断的读并转化为char型}int begin=(str.toString()).indexOf("+");//这里就是对下位机的标志的使用int end=(str.toString()).indexOf(".",begin);String newStr=str.substring(begin+1,end);//得到一串正确的卡号rl_et.setText(newStr);}catch (IOException e) {rl_error.append("传输失败!\n");}}});
  1. 读到的卡号进行数据库操作,数据库中有三张表,book:book_id(text),book_name(text),book_author(text),book_public(text),book_date(Date);
    user:user_id(text),user_name(text),money(double);lend:user_id(text),book_id(text),book_jdate(date),book_hdate(date);读到的卡号可以代表读者进行注册,也就是把卡号和读者姓名放进数据库中的user表里。
class MyHelper extends SQLiteOpenHelper{//创建该类用以数据库的创建public MyHelper(Context context){super(context,"mydb.db",null,1);}@Overridepublic void onCreate(SQLiteDatabase db) {//在创建库的时候第一次调用,而后不再调用db.execSQL("CREATE TABLE user(user_id varchar(30) primary key autoincrement,user_name varchar(20))");db.execSQL("CREATE TABLE book(book_id text primary key autoincrement,book_name text,book_author text,book_date Date,book_public text)");db.execSQL("CREATE TABLE lend(book_id text,user_id text,book_jdate Date,book_hdate Date)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){}
}
//在代码中使用MyHelper myhelper=new MyHelper();即表示创建了数据库的其三张表,以后可利用myhelper的相关操作进行数据库的打开
//这是数据库的插入操作
SQLiteDatabase db=myhelper.getWritableDatabase();
ContentValues values=new ContentValues();//用来放插入值得values对象
values.put("user_id",id);//i为卡号字符串,user_id是要插入的列的名
values.put("user_name",name);
values.put("money",new Double(10));
db.insert("user",null,values);
Toast.makeText(registerLibrary.this,"信息添加成功",Toast.LENGTH_LONG).show();
db.close();
//也可以使用execSQL("insert into user values(id,name,10.00)");这样使用SQL语句也比较方便
//查询操作
public int find(String id,String name){int result=0;SQLiteDatabase db=myhelper.getReadableDatabase();Cursor cursor=db.query("user",null,"user_name=?",new String[]{name},null,null,null);if(cursor.moveToNext()){result=1;//表示在user表中查到了user_name=name的一条记录}cursor=db.query("user",null,"user_id=?",new String[]{id},null,null,null);if(cursor.moveToNext()){result=2;//表示在user表中查到了user_id=id的一条记录      }    cursor.close();db.close();return result;}
}
//删除操作
SQLiteDatabase db=myhelper.getReadableDatabase();
db.delete("lend","user_id=? and book_id=?",new String[]{uid,newStr});
db.close();
//修改操作,建立于查操作之上
cur=db.query("user",null,"user_id=?",new String[]{uid},null,null,null);
cur.moveToFirst();
double mon=cur.getDouble(2);//要修改的列是第三列money,注意下标从0开始
ContentValues values=new ContentValues();
values.put("money",new Double(mon-0.1*Math.abs(days)));
db.update("user",values,"user_id=?",new String[]{uid});

接下来数据库的查看,我使用的是SQLiteStudio,它需要一些配置,不过很简单了,百度一你就知道了,打开后一定要运行着手机上的软件,或者虚拟机的软件,这样才能查看数据库,很方便的,也可以修改等等。
SQLiteStudio的安装配置: https://blog.csdn.net/ware00/article/details/80595496.
代码我会等下上传到码云并给出链接,有很多不足的地方还需要改进,欢迎大家指点。
上位机和下位机的链接:https://gitee.com/w9z7/codes

AS的APP接收HC-06蓝牙模块数据相关推荐

  1. C51编程23-应用篇(HC 06蓝牙模块)

    现在的手机,平板,笔记本电脑都会自带蓝牙.本文将会介绍51单片机使用HC 06 蓝牙模块实现手机与笔记本电脑的通讯.   HC 06 模块 购买HC 06模块后需要检测蓝牙模块是否是好的,使用串口线与 ...

  2. 蓝牙APP接收数据并显示图像

    最近在项目中需要用到手机APP接收单片机通过蓝牙发送的数据,并显示数据的图像.所幸就自己写了一个. 利用App Inventor可以快捷方便的实现该功能. 组件设计如下: 逻辑设计如下: APP效果展 ...

  3. STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

    前言 不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD.TXD.VCC(5V).GND. HC-05的使用 1.HC-05有6个引脚,但是我们只用到4个. 2. ...

  4. 蓝牙模块选型及基础知识介绍

    目录 前言 一.蓝牙基础知识 1.蓝牙发展 2.苹果MFI认证 3.蓝牙协议 4.蓝牙与单片机通信方式 5.蓝牙单模 6.蓝牙双模 7.iBeacon 二.蓝牙模块选型 1.HC蓝牙模块 2.首选HC ...

  5. android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出

    通过手机进行通信是可以实现很多遥控功能,虽然距离是比较短,一般是10米,但对于我这种新手做测试,比起买一个几百块的多通道遥控器成本要低很多. 实验目的:用Android实现蓝牙连接通过Arduino串 ...

  6. ATK-HC05蓝牙模块的详细说明

    前段时间买了个ATK的HC05蓝牙模块.HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手.说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了 ...

  7. Android蓝牙遥控器(通过手机蓝牙与蓝牙模块通信)

    前些天学弟让我给他整理之前一起做项目时的与下位机通信的部分代码.当时使用蓝牙编程,Android端通过蓝牙发送指令到蓝牙模块,硬件那里通过蓝牙模块读取到指令,并执行相应操作.由于那段代码时在工程里的, ...

  8. Arduino驱动HC-05蓝牙模块

    HC-05模块概述 HC-05是一个蓝牙模块,连接到微控制器的串行端口,允许微控制器通过蓝牙连接与其他设备通信.模块本身可以在主模式和从模式下运行,并且可以用于各种应用,例如,智能家居应用,远程控制, ...

  9. 【TL8266】APP接收蓝牙模块发送过来的消息

    前一篇文章讲述了如何向蓝牙模块发送数据,这一篇讲述如何接收数据,点击开关按钮发送AT指令,模块会返回OK 先做一个广播接收器,按Ctrl+F关注mBluetoothLeService的操作 publi ...

最新文章

  1. 更改SQL 2005登录时的默认数据库
  2. 预警数据一键升级工具_重磅 | 教务管理全新升级,“章鱼校长”助力机构实现轻松管理...
  3. 【CodeForces - 745B】Hongcow Solves A Puzzle (思维,乱搞,字符串)
  4. golang,接口的demo01
  5. 大数据_Hbase-(数据读取流程_hbase读取效率比较慢的原因)---Hbase工作笔记0008
  6. php中crypt怎么还原,PHP crypt() 函数 - PHP 教程 - 菜鸟学堂-脚本之家
  7. UIImageView 加入子UIImageView 导致内存泄露的问题
  8. xuperchain 区块最大大小 区块容量 maxblocksize
  9. lamp环境搭建之配置apache与fpm方式的php
  10. 拒绝搜索引擎抓取页面
  11. 汉邦监控录像数据恢复软件---蓝梦软件BestRecoveryForHBMS
  12. Hutool拼音工具的使用
  13. ArrayList扩容机制
  14. VSCode配置Python教程
  15. 搭建静态的响应式个人官网
  16. Office系列函数之Left函数的使用
  17. FATAL: License file expired:金仓数据库过期了...
  18. ECMAScript 是什么?
  19. 代理模式相关简单论述
  20. RAKE(快速自动关键字抽取)算法原理与实现

热门文章

  1. 算法竞赛入门经典第二版课后习题答案第二章
  2. c语言软件市场价,[转载]KMV模型中求解资产市场价值和资产价值波动性(C语言)...
  3. 火狐浏览器网络连接慢
  4. 什么是-Xmx和-Xms?
  5. 大数据与云计算概论5
  6. Centos7.6 mvn -verson 、mvn package 报错
  7. [数学建模]最大最小化模型多目标规划问题
  8. RTKLIB使用教程
  9. 操作系统——实验二 进程管理
  10. 同城本地信息发布系统