欢迎大家访问我的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),可以在右上角切换中英文。
这样基本的蓝牙通信界面就出来了(先不要喷呀!)做到这里请先试试效果,程序不可能在你写好每个功能后,一运行,然后简直完美。程序需要逐渐壮大,一个功能一个功能的测试,这应该也是软件工程的一个基本思想。
在整个界面的上面有一个连接(Connect)选项,推荐使用AI伴侣,要求手机下载一个Appinventor的app,然后手机和电脑在同一个局域网下,扫描二维码就可以在线调试看效果了。是不是有点小激动呀!
上面没有错误后只需加入这类的简单代码块就可以控制单片机了(发送数据)。记得配合单片机的串口通信代码(外加蓝牙)。
但是万一我们需要单片机发送给手机呢?这里我踩了好多坑,网上这方面的教程几乎找不到。这也是这篇文章的重点,首先我们考虑一下如果我们一直执行数据接收,数据一定会乱套的。这样我们需要先用app发送一个数据,然后手机app方面开始执行接收数据程序,单片机则根据接收到的数据发送相应的数据。这样就可以一起配合完成数据通信了,并且不会乱套。
而假如要一直更新某个数据怎么办呢?单片机方面可以在while(1)里面循环判断接收的数据,然后确认是否发送某个变量的值。而手机app则可以通过定时器在间隔指定时间执行指定函数,发送数据(相当于控制码,控制要接收什么数据),然后接收单片机的数据。(没错,我自己也迷糊了,可以看下面的代码块,一目了然)
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 \
所以希望读者通过评论和网上其他资料解决入门问题。当然如果没有解决,作者还是很欢迎大家继续评论讨论!
在手机设置->蓝牙里面,有一个不常用类型设备可以与买来的蓝牙模块配对,密码一般是1234,配好了再重新打开弄好的app就可以与蓝牙连接了。 总之就是需要根据你手机的蓝牙设置匹配一下,这样APP才能够检测到。
实在没有成功,你可以网上随便下一个蓝牙APP,根据你手机的蓝牙设置匹配一下,然后用下的那个APP确认连接(连接成功,蓝牙模块的指示灯闪烁速度会发生变化),确认可以正常连接后(硬件基本没问题),就再自己参考参考别人的教程或上面的教程写appinventor的程序,然后用自己写的APP连接,测试程序。
如果是和HC05通信,HC05没有修改主从模式,应该不会出现这个问题。
出现这个问题,我现在推测的原因是手机-手机,手机-电脑等可能的连接方式时,因为蓝牙连接只能在服务器与客户端之间连接,所以会出现507错误。
详见评论:
接收单字节无符号数是:比如我下位机发个0x1D7(471),APP就接收个471吗?那我要发好几个数并接收这几个数,是用那个接收无符号字节到列表(字节数)那个控件吗?
经过我的测试接收无符号字节到列表(字节数)可以用来接收下位机发来多个数据,我那个是用多个传感器采集数据正好可以用那个控件。