清泛IT社区App Inventor 2 中文社区

搜索

扫码访问移动社区 移动社区,您的掌上技术专家

关注我,精彩不错过! 关注我,精彩不错过!

扫码安装最新版AI伴侣 最新版AI伴侣v2.76

Aia StoreApp上架指南 .aia 源码一站式解决方案 发布日志AI2连接测试ai2Starter模拟器

AppInventor2离线版中文教育版接入DeepSeek VIP会员 享专有教程,免费赠送基础版*技术支持服务! AI2入门必读中文文档AI2拓展IoT专题

查看: 10|回复: 0
打印 上一主题 下一主题

[经验分享] 我帮儿子用App Inventor 2给遥控车装了"蓝牙大脑",手机一划车就动 ...

  • TA的每日心情
    开心
    昨天 06:39
  • 签到天数: 869 天

    [LV.10]以坛为家III

    1228

    主题

    2042

    帖子

    5万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    58231

    AI2中文网VIP弹球达人接水果达人撸猫达人

    跳转到指定楼层
    楼主
    发表于 昨天 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    周五晚上,儿子抱着他那辆吃灰半年的遥控车跑来问我:"爸爸,能不能让手机控制它?我想躺在床上就能让它跑。"看着他期待的眼神,我决定用App Inventor 2的蓝牙组件试试。没想到两小时就搞定了,而且连接稳定性和操控体验远超预期。

    需求分析

    儿子想要的是:手机屏幕上显示方向键,手指滑动时遥控车前进、后退、左右转。听起来简单,但拆解一下核心难点:

    1. 双向通信:手机要发送指令给车,车上的单片机要能接收并解析
    2. 实时响应:方向盘操作不能有可见延迟
    3. 连接稳定:不能玩着玩着就断连
    4. 低成本:已有的遥控车不想大拆大改

    蓝牙经典串口(SPP)方案最合适——硬件端用HC-05蓝牙模块(十几块钱),手机端用App Inventor 2的蓝牙客户端组件,串口透传,开箱即用。

    技术方案

    硬件端
    - 遥控车原有电路不动,额外并联一个HC-05蓝牙模块
    - HC-05的TX/RX接Arduino Nano的RX/TX(注意交叉)
    - Arduino读取蓝牙数据后,通过MOS管驱动原有遥控车的电机控制信号

    软件端(App Inventor 2)
    核心组件清单:
    - BluetoothClient — 蓝牙连接与数据收发
    - Canvas + Ball — 模拟方向盘
    - Clock(定时器) — 方向盘位置到指令的轮询转换
    - ListPicker — 显示已配对蓝牙设备列表

    关键实现

    第一步:蓝牙连接

    当 Screen1.初始化
      执行 ListPicker1.元素列表 设为 BluetoothClient1.地址及名称

    用户点击ListPicker选择设备后:

    当 ListPicker1.选择完成
      执行 BluetoothClient1.连接(ListPicker1.选中项)

    连接成功后,Clock定时器每100ms读取方向盘位置并发送指令。

    第二步:方向盘交互

    在Canvas上画一个十字参考线,Ball组件作为操纵杆。当用户在Canvas上拖动时,限制Ball的移动范围并计算偏移方向:

    当 Canvas1.触屏拖动(起始x, 起始y, 当前x, 当前y, 触控点id)
      执行 如果 当前位置_半径 > 50
            则 将Ball限制在圆内
          否则 将Ball位置设为(当前x, 当前y)

    第三步:指令编码

    我自定义了一个简单的通信协议——4字节指令包:

    字节 | 含义 | 值范围
    0x01 | 前进速度 | 0到100
    0x02 | 转向角度 | 左-50到右50
    0x03 | 校验位 | 前两字节异或
    0x04 | 帧尾 | 0xFF

    发送代码:

    当 Clock1.计时
      执行 调用 BluetoothClient1.发送字节数组(合并列表(
            列表(从Ball的Y偏移计算的速度值)
            列表(从Ball的X偏移计算的转向值)
            列表(校验值)
            列表(255)
          ))

    第四步:Arduino端解析

    Arduino收到数据后:

    if (Serial.available() >= 4) {
      byte speed = Serial.read();
      byte steer = Serial.read();
      byte checksum = Serial.read();
      byte footer = Serial.read();
      if (footer == 0xFF && (speed ^ steer) == checksum) {
        analogWrite(motorPin, speed);
        servoWrite(steerPin, map(steer, -50, 50, 0, 180));
      }
    }

    踩过的坑

    坑1:蓝牙连接后发不出数据
    检查了半小时发现——HC-05默认波特率是9600,而Arduino代码里写的是115200。改成9600后瞬间连通。

    坑2:指令多了车会卡顿
    一开始每10ms发一次指令,结果Arduino缓冲区溢出。把发射间隔调到100ms,同时接收端加了个简单的滑动平均滤波,操控丝滑了。

    坑3:BluetoothClient没有"收到数据时"事件
    App Inventor 2自带的蓝牙客户端组件没有接收到数据自动触发的事件,必须用Clock定时器轮询。这在双向通信场景下比较麻烦,好在我的场景主要是手机单向发送指令,问题不大。

    最终效果

    成果超出预期:
    - 手机放在沙发上,20米内流畅控制(HC-05标称10米,实测无遮挡30米都可控)
    - 方向盘实时映射,没有肉眼可见的延迟
    - 儿子现在每天放学玩半小时,遥控车再也没吃灰

    复盘感悟

    这次实践让我深刻体会到App Inventor 2在IoT原型验证中的价值。从想法到可玩的原型,只用了两小时。蓝牙组件虽然功能上不如专业的SPP库强大,但对于80%的消费级蓝牙通信场景完全够用。

    如果你想深入了解蓝牙组件的详细属性、方法列表,可以查阅 App Inventor 2 中文网蓝牙客户端文档。需要进阶功能(比如BLE低功耗蓝牙),网站上也提供了完善的拓展方案。

    给新手朋友的建议:先跑通demo再改自己的项目!蓝牙SPP Demo 下载后直接打开就能用,把通信机制跑通了,再往自己的App里移植会少走很多弯路。
    App Inventor 2 中文网 - MIT同步更新的中文本土化平台!v2.76 支持Android 15 & iOS 更新日志
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    © 2026 tsingfun.com, Inc.  沪ICP备2020034476号-1  沪公网安备31011702000040号

    GMT+8, 2026-07-18 06:41 , Processed in 0.015733 second(s), 30 queries .