用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏
  • TA的每日心情
    开心
    2018-5-24 12:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    手机如何传输数据给arduino
    一.前言
    很多时候会想要用手机来控制一些传感器,或者手机控制风扇,空调,窗帘等等等。在这种情况下,我们可以使用APPinventory来编写一个简单的APP,然后通过APP向arduino主板发送控制信号,从而实现离线控制。本次重点讲解如何快速编写APP,并在arduino端编写信号接收程序。
    二.预备知识
    1.APPinventor简介
    定义:APPinventor是一款图形化Android手机APP编写工具具有网页版和离线版
    功能:制作APP
    使用方法:打开官网注册即可使用,一般使用广州市教研信息中心的服务器,不用翻墙
    链接:http://app.gzjkw.net/login/
    注意事项:制作的APP仅能在Android系统手机运行
    2.Serial.read()
    使用这个函数一次就会从缓冲区读取一次数据,如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节。
    如果数据缓冲区没有数据,将返回-1。
    3.蓝牙模块接收及存储信息特性
    当hc-05蓝牙模块接收到手机发送的数据后会存储在串行数据缓冲区,arduino从串行数据缓冲区读一个字节数据,那么缓存中就会立刻删除一个数据,断电后缓存口数据清零,这是使用蓝牙模块进行数据传输的关键所在。
    举个例子;
    手机通过APP给蓝牙发先后送了2个数据,34,54
    缓存区就像一个羽毛球筒一样,数据从筒上面按顺序放进来,先放进来的球在下面当使用Serial.read()从默认串口(0,1)读取一次时,就会从下面开始拿出球,之前先放进来的球就会先从下面拿出来,也就是会读取34,这个时候54还在球筒里面。
    三.APPinventor端设置
    APP端比较简单,需要注意的是在发送时要以单字节发送,否则arduino会把双字节拆成2个单字节分别存储在缓冲区。还有一个细节就是在发送时要选择发送文本框的文本,不要选择仅发送数字,这样的话会出现编码错误导致发送失败。
    2app to arduino app程序界面设计.png
    1  APP组件设置
    2app to arduino app程序设计.png
    2  APP程序设计
    四.arduino端程序
    Arduino程序部分唯一需要注意的就是在判断接收到标识码“1”之后,一点要延时一会,因为此时主板是在从串口读数据的状态,而运算部分在进行条件判断,从在缓存区开始读数据到完成比较运算之间这段时间一直在从缓存区读数据,如果没有延时的话可能会导致数据从缓存区拿出来了,但是程序正忙着进行上一个数据的比较运算而没有时间接收这个数据,所以这个数据就丢失了。就像打开了羽毛球筒下面的开关,手把第一个球接住然后送到盒子去的过程,第二个球出来了,由于手在忙着送第一个球,所以第二个球就掉地上了,当手再回来时接收到的就是第三个球了。
    附:arduino程序如下(如果需要控制灯,开关等直接加一个if语句控制继电器开关即可实现)
    /*
    *app端发送2个数值给arduinoarduino分别用2个变量存储
    * 唯一需要注意的是在识别到信息发送标识符1之后一定要延时,
    * 否则读取会出错。
    */
    int a;
    int b;
    void setup() {
    Serial.begin(9600);
    }
    void loop() {
       if(Serial.read()>0){
       delay(50);//延时一定要有,至少2Ms,推荐50Ms,最适合值可自己测试
       a=Serial.read();
       b=Serial.read();
       Serial.print(a);
       Serial.print('\n');
       Serial.print(b);
       Serial.print('\n');
       }  
    }

    打赏作者鼓励一下!
    我做的接收有延时,是什么问题啊?跟波特率有关吗?我设置了115200
    kejuncaho2013 发表于 2018-5-7 14:45
    我做的接收有延时,是什么问题啊?跟波特率有关吗?我设置了115200

    波特率我没有试过其他的,你可以换一下看可不可以,APPinventor如果一次发射出的数据个数较多,可以试试用多个计时器嵌套,保持在一个计时间隔只发送两个变量数据。
    打赏作者鼓励一下!
    APPinventor是免费软件吗
    gongwenquan 发表于 2018-5-18 10:11
    APPinventor是免费软件吗

    嗯是的,可以直接百度搜索在线版,广州有个服务器,可以用qq号登陆
    打赏作者鼓励一下!
    Rico_chen 发表于 2018-5-18 22:05
    嗯是的,可以直接百度搜索在线版,广州有个服务器,可以用qq号登陆

    谢谢~我想试一下,玩一玩~
    发新帖
    发表评论
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  
    关闭

    推荐主题 上一条 /2 下一条