Appinventor 单片机 手机蓝牙通信实现

     欢迎大家访问我的github:https://github.com/Iamttp 有问题一起讨论呀!

简介

不会java的小白,在使用的单片机的蓝牙功能时难道只能上百度下载别人的蓝牙app软件吗?幸运的是一个基于云端开发app的网站来了。
 App Inventor 原是Google实验室(Google Lab)的一个子计划,由一群Google工程师和勇于挑战的Google使用者共同参与设计完成。Google App Inventor是一个完全在线开发的Android编程环境,抛弃复杂的程式代码而使用积木式的堆叠法来完成您的Android程式。除此之外它也正式支持乐高NXT机器人,对于Android初学者或是机器人开发者来说是一大福音。因为对于想要用手机控制机器人的使用者而言,他们不大需要太华丽的界面,只要使用基本元件例如按钮、文字输入输出即可。(百度百科)
 因为网上这方面的资料比较少,而自己又在这方面踩了不少坑,所以将单片机、手机常用的app蓝牙通信分享出来,希望一起学习呀!

手机发送数据到单片机实现


 首先进入其网站,这需要 _ _ (你懂的),当然也可以用App Inventor广州服务器。这里可以参考其他文章。进入后可以看到Appinventor分为界面设计(Designer)以及代码逻辑块(Blocks),可以在右上角切换中英文。

    

 

  1. 首先是界面设计,不用太华丽,当然也不要像我这样难看。利用左栏的布局(Layout),可以整理按钮(Button)和标签(Label)的位置。如果要使用蓝牙还要在连接(Connectivity)里面加入蓝牙客户端(BluetoothClient)。
  2. 之后是逻辑块设计,首先是选择蓝牙以及断开蓝牙的列表选择框以及按钮逻辑设计,思路就是在手机app启动时,列表选择框(选择蓝牙)的启用为真,按钮(断开)的启用为假。选择蓝牙时将蓝牙客户端的地址及名称显示出来供用户选择。

    这样基本的蓝牙通信界面就出来了(先不要喷呀!)做到这里请先试试效果,程序不可能在你写好每个功能后,一运行,然后简直完美。程序需要逐渐壮大,一个功能一个功能的测试,这应该也是软件工程的一个基本思想。

    在整个界面的上面有一个连接(Connect)选项,推荐使用AI伴侣,要求手机下载一个Appinventor的app,然后手机和电脑在同一个局域网下,扫描二维码就可以在线调试看效果了。是不是有点小激动呀!

    上面没有错误后只需加入这类的简单代码块就可以控制单片机了(发送数据)。记得配合单片机的串口通信代码(外加蓝牙)。

单片机发送数据到手机实现

    但是万一我们需要单片机发送给手机呢?这里我踩了好多坑,网上这方面的教程几乎找不到。这也是这篇文章的重点,首先我们考虑一下如果我们一直执行数据接收,数据一定会乱套的。这样我们需要先用app发送一个数据,然后手机app方面开始执行接收数据程序,单片机则根据接收到的数据发送相应的数据。这样就可以一起配合完成数据通信了,并且不会乱套。

    而假如要一直更新某个数据怎么办呢?单片机方面可以在while(1)里面循环判断接收的数据,然后确认是否发送某个变量的值。而手机app则可以通过定时器在间隔指定时间执行指定函数,发送数据(相当于控制码,控制要接收什么数据),然后接收单片机的数据。(没错,我自己也迷糊了,可以看下面的代码块,一目了然)

  1. 在组件里面加入定时器,然后设置定时间隔单位ms,这样每隔500ms就会执行计时器计时函数块。

    2.在代码逻辑块中加入如下图代码块,具体原理上面已经解释。

    更新1(之前没注意这个问题):

    问题:这里因为定时器设置的启用定时(启用定时指一开始就定时,一直定时是指不止定时执行一次),所以会在还没有连接蓝牙客户端时就开始运行上面的代码块。

    解决方案:所以需要在”当Screen,初始化“那个代码块下添加设置定时器启用假,相应的在“当列表选择框1选择完成”那个代码快下添加设置定时器启用真。

    更新2: 这里省略了全局变量的定义块,大家自己找找这个块吧!然后省略了设置标签值为全局变量的代码块,有了这个就可以显示出全局变量了。

 

    3.之后是根据手机app编写单片机的串口通信程序,如果按照上面的代码块,则单片机的程序应该为:

while(1)
{
    if(接收为1)
    {
        发送指定变量值;
    }
    if(接收为0)
    {
        发送另一个指定变量值;
    }
}

    到了这步就可以下载试试了。文采不好,有什么问题一起交流。

 


 

2020.5.20:

找到之前的一个麦克拉姆轮小车的蓝牙APP程序 (只有发送数据到单片机上的功能):

 

 

 

 

大家评论我都看了,大部分问题集中在App Inventor的配置与前期使用上,而这篇文章初衷是希望解决单片机发送数据到APP这个关键问题上。

同时因为作者已经很久没有接触App Inventor了,原因详见https://blog.csdn.net/qq_40515692/article/details/100639331,所以也不会再更新App Inventor的入门使用。/ w \

所以希望读者通过评论和网上其他资料解决入门问题。当然如果没有解决,作者还是很欢迎大家继续评论讨论!

 

常见问题汇总:

1. 打开连接控制端后是一整块黑屏 ?

在手机设置->蓝牙里面,有一个不常用类型设备可以与买来的蓝牙模块配对,密码一般是1234,配好了再重新打开弄好的app就可以与蓝牙连接了。 总之就是需要根据你手机的蓝牙设置匹配一下,这样APP才能够检测到。

实在没有成功,你可以网上随便下一个蓝牙APP,根据你手机的蓝牙设置匹配一下,然后用下的那个APP确认连接(连接成功,蓝牙模块的指示灯闪烁速度会发生变化),确认可以正常连接后(硬件基本没问题),就再自己参考参考别人的教程或上面的教程写appinventor的程序,然后用自己写的APP连接,测试程序。

 

2. 507 错误?

如果是和HC05通信,HC05没有修改主从模式,应该不会出现这个问题。

出现这个问题,我现在推测的原因是手机-手机,手机-电脑等可能的连接方式时,因为蓝牙连接只能在服务器与客户端之间连接,所以会出现507错误。

 

3. 一次多个数据的发送接受?

详见评论:

接收单字节无符号数是:比如我下位机发个0x1D7(471),APP就接收个471吗?那我要发好几个数并接收这几个数,是用那个接收无符号字节到列表(字节数)那个控件吗?

经过我的测试接收无符号字节到列表(字节数)可以用来接收下位机发来多个数据,我那个是用多个传感器采集数据正好可以用那个控件。

 

  • 79
    点赞
  • 566
    收藏
    觉得还不错? 一键收藏
  • 64
    评论
App Inventor 2是一款用于创建移动应用程序的图形化编程环境,它也支持与蓝牙设备进行通信蓝牙是一种无线通信技术,可以使手机或其他电子设备与其他蓝牙设备进行数据传输。 在App Inventor 2中,我们可以使用“蓝牙客户端”和“蓝牙服务器”组件来实现蓝牙设备的通信。通过这些组件,我们可以通过蓝牙发送和接收数据。 首先,我们需要在App Inventor 2中添加蓝牙组件。然后,我们可以使用“蓝牙客户端”组件来连接到其他蓝牙设备,并使用“发送文本”块来发送数据。类似地,我们可以使用“蓝牙服务器”组件来创建自己的蓝牙设备,并使用“接收文本”块来接收其他设备发送的数据。 在连接到蓝牙设备时,我们需要先搜索并配对设备。一旦成功连接,我们就可以开始进行数据传输。我们可以发送字符串、数字、字节等类型的数据。当收到数据时,我们可以使用“当接收到文本”事件块来处理它。 通过使用App Inventor 2的蓝牙功能,我们可以创建许多有趣和实用的应用程序。例如,我们可以创建一个应用程序,通过蓝牙连接到智能家居设备,控制灯光、温度等设备。我们还可以创建一个用于远程控制机器人或车辆的应用程序。 总的来说,App Inventor 2的蓝牙功能非常强大且易于使用。它使我们能够轻松实现蓝牙设备的通信,为我们提供了创造各种移动应用程序的机会。无论是用于娱乐、教育还是工业领域,蓝牙功能都能为我们提供许多便利和创新的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值