欢迎大家访问我的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吗?那我要发好几个数并接收这几个数,是用那个接收无符号字节到列表(字节数)那个控件吗?

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

Appinventor 单片机 手机蓝牙通信实现相关推荐

  1. 入坑树莓派(2)——树莓派4B与手机蓝牙通信

    入坑树莓派(2)--树莓派4B与手机蓝牙通信 1.引言 2.步骤 2.1.蓝牙配对 2.2.蓝牙连接准备 2.3.蓝牙连接 3.参考网址 1.引言 在入坑树莓派(1)中已经搞掂了可视化问题.现在继续开 ...

  2. 快速实现单片机和手机蓝牙通信

    Core和手机通过Ble蓝牙进行通信 重磅更新! 一.实现功能 二.实现机制 三.完整代码 四.演示 重磅更新! shineblink.com 已推出免开发App,开发者无需做任何安卓或IOS开发,即 ...

  3. App inventor arduino 手机蓝牙通信实现

    写下这篇文章是为了记录我学习App inventor及制作蓝牙通信app的过程,接下来我会从零开始一步一步搭建这个app,本篇文章适用于刚刚接触app inventor的人. 第一步,首先点击屏幕右上 ...

  4. 单片机蓝牙模块与手机蓝牙通信(6)小结

    安卓版本不同,代码细节会不同,要耐心根据提示修改调试,必要看看官方文档和百度. 明明已经调试通过,版本不同就报错问题是学习者要克服的心理最大关.前面5篇是按照2022.3月下载版本,API17. 下面 ...

  5. 掌控板ESP32与手机蓝牙通信mind+ appinventor图形编程

  6. 树莓派蓝牙与手机APP通信

    文章目录 前言 一.树莓派的蓝牙基本配置 二.安装pybluez库 1.安装pybluez的必要编译环境 2.示例传输代码 3.运行文件 4.可能存在的问题 4.1 无法连接蓝牙 4.2 命令端口显示 ...

  7. HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC-05是一款主从一体化的蓝牙模块,因此其使用起来比较方便,只需要进行简单的配置即可. 本文就手把手的介绍小白入手模块后如何使用. 对于模块使用:1.蓝牙配置→2.手机与蓝牙的传输→3.手机通过蓝牙 ...

  8. Android Studio制作手机App:通过手机蓝牙(Bluetooth)与STM32上的低功耗蓝牙(HC-42)连接通信,实现手机端对单片机的控制。

    背景: 本文的内容是针对单片机蓝牙模块(HC-42)开发的手机App.在这之前,我想先声明一点,手机与手机间的蓝牙连接方式"与"手机与HC间的蓝牙连接方式"是不一样的.原 ...

  9. android 手机与单片机之间的蓝牙通信

    刚好碰到这蓝牙通信方面的项目,上网也看过其他人在蓝牙这方面写的博客,但大多都不全,给一些初触蓝牙的开发者造成一定的麻烦,自己当初也费了不少劲.所以把自己参考网上的一些资料用Android studio ...

最新文章

  1. 爬虫准备工作1-Java写入字符串到txt文档
  2. 喜报!清华社《晓肚知肠:肠菌的小心思》荣获“2018年度中国好书”奖
  3. Linux dmesg命令
  4. 砥志研思SVM(二) 拉格朗日乘子法与KKT条件
  5. 如何在DevSecOps道路上快速、安全地抵达终点
  6. 聚类算法 距离矩阵_谱聚类
  7. midl会议_2020年医学图像处理领域值得关注的期刊和会议
  8. 信息学奥赛一本通 1839:【05NOIP提高组】谁拿了最多奖学金 | OpenJudge NOI 1.9 04:谁拿了最多奖学金 | 洛谷 P1051 [NOIP2005 提高组] 谁拿了最多奖学金
  9. 软考信息安全工程师学习笔记汇总
  10. 微信封杀下的互联网江湖
  11. 【免费毕设】ASP.NET+SQL通用作业批改系统设计(源代码+论文)
  12. 使用Apache + knewcode,用传统C++构建Web网站
  13. advanced installer 使用常见问题整理
  14. linux(ubuntu)下安装postgresql+pgAdmin4
  15. 日本研发5nm取得重大进展,和美国远离EUV,ASML陷入众叛亲离境地
  16. 红黑树时间复杂度为什么是O(logn)?
  17. Material UI 带复选框表格获取选中值(索引)
  18. Centos7 常用的命令
  19. 如何管理和使用哪些命令操作MySQL数据库?(基本操作,SQL语言,DDL,DML,DQL,DCL,Windows字符和图形界面MySQL安装)
  20. mstar Android解锁,年轻人的新宠 当贝小投影C2解锁各种观影姿势

热门文章

  1. STM32F103xx / STM32F429VET6最小系统原理图
  2. 服务器相关的指标解释
  3. 来自程序员的浪漫(表白 秘密)
  4. 高深理论影响科学传播
  5. 小说分享《相互的感情》2
  6. 派单软件系统能为运营人提供什么功能服务
  7. 【数学】导数(Derivative)的定义、洛必达法则
  8. axios的使用与封装
  9. 劳务人员实名制中的二维码应用
  10. 秋天的怀念(让人精神重新复活的文章)