单片机学习物联网之家首页投稿(暂停使用,暂停投稿)

教菜鸟做蓝牙遥控小车——基于安卓平台和51单片机(开放源码)

2017-08-04  本文已影响1071人  W_Honor

准备

首先准备一下硬件材料:

小车套件

这里L298N驱动模块一个芯片原设计是驱动两个电机,制作过程中我实验了一下,驱动四个电机是没问题的,只不过散热片发热量比较大,基于模块的耐用性使用起来是没有妨碍的。

其次是软件平台的准备:

以上软件准备部分,除了第一个必备以外,其余的都是android开发的基础配置,也就是我开发过程的配置,没有基础的可以绕过,硬要自学的话也要大约一年的时间,后面我会给出全部的源码。


配置HC-05蓝牙模块

该模块有两种工作方式:命令响应模式和自动连接模式。

命令响应模式就是AT指令模式,用USB转TTL模块连接蓝牙与电脑串口,通过AT指令修改相关参数。蓝牙模块默认的波特率是9600,0校验位,0停止位。通电之前一定要按住模块上的复位按钮直到通电约2秒后松开,用这种方式进入命令响应模式后,在串口助手中发送AT之前务必要选择38400波特率,如此便可正常通信。

串口助手波特率设置

自动连接模式分为三种模式:被动连接、主动连接、回环连接。回环连接也属于被动连接,不同之处在于是否返回数据信息。

我用的都是默认参数,也就是9600波特率,被动模式。


设定通信协议

通信都有一定规则协议,要想实现上位机(安卓平台)和下位机(单片机)的同步,我们就要事先设定好我们这个系统的协议。

以下是我设定的协议:

命令 发送的字符 返回的字符
前进 1 1
后退 2 2
右转 3 3
左转 4 4
停止 0或任意字符 stop

安卓平台的APP会发送相应的字符到单片机中,之后会接收到单片机系统返回的字符信息,表明其成功接收。

APP中的每个控制按键按下的动作都会对应一个特定的字符,同时弹起的动作都对应“停止”的命令字符。(这里的介绍会涉及到些许的安卓开发的内容)


开发下位机程序

单片机的程序主要涉及到串口通信,一方面是串口接收字符或字符串,一方面是串口发送字符或字符串,内容相对简单。需要学习的知识主要是串口中断、串口控制寄存器、串口方式寄存器、定时/计数器等。

我在系统运用了STC89C52RC单片机的定时器2,让其作为波特率发生器,产生9600的波特率。如果在单片机系统中定时器够用的话,用定时器0或定时器1是绝对没问题的,因为我个人系统的冗余关系,其他定时器都被占用,所以用上了不常用的定时器2。其实还是推荐用定时器2作为波特率发生器的,由于它拥有16位寄存器,能装载更大的数字量,所以能够产生很高的波特率数值。它有自己独立的控制寄存器,用法与定时器0/1相同。

定时器2初使化:

   RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;//FOSC是预定义的晶振
   RCAP2L = (65536-(FOSC/32/BAUD));//BAUD是预定义的波特率
   TH2 = RCAP2H;//设置此处为16位自动重载
   TL2 = RCAP2L;
   T2CON = 0x34;
   T2MOD = 0;
   ES = 1;
   EA = 1;

蓝牙小车下位机系统中用到的串口程序主要有:

  1. 字符接收程序

    if(RI == 1)//当有字符传来时,机器自动接收并将接收标志位置1
    {
      RI = 0;
      RecData = SBUF;//接收一个字符
    }
    
  2. 字符发送程序:

       ES=0;//发送过程中避免干扰,关闭串口中断
       SBUF=dat;//随后发送一个字符
       while(!TI);//等待发送完
       TI=0;
       ES=1;
    
  3. 字符串发送程序:

        while(str[i] != '\0')//字符串以‘\0’为结尾,遍历每个字符
      {
        ES = 0;
        SBUF = str[i];
        while(!TI);
        TI = 0;
        i++;
        ES = 1;
       }
       i = 0;
    

在主程序中其实没什么东西,让系统一直等待,直到串口产生中断,接收或发送协议内容。


上位机程序

主要是蓝牙API的运用,关于运行机制那就是看需求而定了。

我编写的程序已经绑定好蓝牙模块的MAC地址,打开APP之前需打开设备的蓝牙功能并且配对成功,然后才可进入工作台,这样做方便了以后的运用。不更换模块还好,如果换作其它蓝牙模块的话就显的臃肿了,由于MAC地址变了,所以软件绑定的地址要重新改写,我并没有将这个操作提升到UI行为,只能在源代码中修改。源代码的核心部分是相同的,主体是建立连接发送字符流的行为,其运行机制每个人可以按需而定。

这是我设计的app的UI:

app~UI

最后,概览整个系统,安卓app等于领导,蓝牙属于传话的介质,单片机属于员工,只要领导下达指令,经过信息送达给员工,那么员工就可以依据工作了。

github源码地址

上一篇下一篇

猜你喜欢

热点阅读