App Inventor 2 JDY-34双模蓝牙模块配置与通信教程

« 返回首页

概述

JDY-34是一款低成本双模蓝牙模块(支持经典蓝牙+BLE),广泛用于物联网项目。本文补充JDY-34在App Inventor中的具体配置。

已有文档bluetooth_remote.md 介绍了蓝牙遥控通用方案。本文聚焦JDY-34模块。

JDY-34规格

参数
蓝牙版本 5.0双模(SPP + BLE)
工作电压 3.3V(IO口3.3V)
通信接口 UART串口
波特率 默认9600
传输距离 约30米(开放环境)
默认名称 JDY-34
BLE广播名 JDY-34-XXXX

引脚定义

引脚 说明
VCC 电源3.3V
GND
TX 串口发送 → 连接MCU RX
RX 串口接收 → 连接MCU TX
EN 使能(高电平有效)
STATE 连接状态指示

模式选择

JDY-34有两种工作模式:

SPP模式(经典蓝牙透传)

  • 使用 BluetoothClient 组件
  • 配对后像串口一样收发数据
  • 适合大数据量传输

BLE模式(低功耗蓝牙)

  • 使用 BluetoothLE 扩展
  • 通过Service/Characteristic读写
  • 适合低功耗场景

AT指令配置

通过串口发送AT指令配置模块(需要在未连接状态发送):

指令 功能 示例
AT 测试连接 返回 OK
AT+VERSION 查询版本 返回版本号
AT+NAME 设置BLE广播名 AT+NAME=MyDevice
AT+BAUD 设置波特率 AT+BAUD=4(9600)
AT+PIN 设置配对码 AT+PIN=1234
AT+ROLE 设置主从模式 AT+ROLE=0(从机)

波特率对照

波特率
1 1200
2 2400
3 4800
4 9600(默认)
5 19200
6 38400
7 57600
8 115200

SPP模式通信(经典蓝牙)

硬件接线

JDY-34 TX → Arduino/MCU RX (注意电平匹配,可能需要分压)
JDY-34 RX → Arduino/MCU TX
JDY-34 VCC → 3.3V
JDY-34 GND → GND

App Inventor积木块

当 按钮_扫描.被点击
  设 BluetoothClient1.安全连接 = true
  调用 BluetoothClient1.扫描并连接(10)  ' 扫描10秒

当 BluetoothClient1.连接完成(设备名, 设备地址)
  如果 设备名 包含 "JDY"
    标签_状态.文本 = "✅ 已连接:" & 设备名
    设 Clock_接收.启用计时器 = true
  否则
    标签_状态.文本 = "❌ 连接失败"

' 发送数据
当 按钮_发送.被点击
  设 数据 = 输入框_指令.文本 & "\n"
  调用 BluetoothClient1.发送文本(数据)

' 接收数据
设 接收缓冲 = ""

当 Clock_接收.计时
  如果 BluetoothClient1.可用字节 > 0
    设 新数据 = 调用 BluetoothClient1.接收文本(BluetoothClient1.可用字节, "UTF-8")
    设 接收缓冲 = 接收缓冲 & 新数据
    如果 新数据 包含 "\n"
      设 完整行 = 文本开始到(接收缓冲, 第一次出现("\n"))
      标签_接收.文本 = 完整行
      设 接收缓冲 = 替换文本(接收缓冲, 完整行 & "\n", "")

BLE模式通信

JDY-34 BLE服务和特征

JDY-34在BLE模式下提供标准串口透传服务:

UUID 类型 说明
0000FFE0-0000-1000-8000-00805F9B34FB Service 串口透传服务
0000FFE1-0000-1000-8000-00805F9B34FB Characteristic 数据读写
0000FFE2-0000-1000-8000-00805F9B34FB Characteristic 数据通知

App Inventor积木块(BLE扩展)

设 JDY34_SERVICE = "0000FFE0-0000-1000-8000-00805F9B34FB"
设 JDY34_CHAR_WRITE = "0000FFE1-0000-1000-8000-00805F9B34FB"

当 按钮_扫描BLE.被点击
  设 BluetoothLE1.扫描时长 = 10000
  调用 BluetoothLE1.开始扫描()

当 BluetoothLE1.发现设备(设备名, 设备地址, 信号强度)
  如果 设备名 包含 "JDY"
    调用 BluetoothLE1.停止扫描()
    调用 BluetoothLE1.连接(设备地址, false)
    标签_状态.文本 = "连接中:" & 设备名

当 BluetoothLE1.连接完成(状态)
  如果 状态 = true
    标签_状态.文本 = "✅ BLE已连接"
    调用 BluetoothLE1.发现服务(JDY34_SERVICE)
    ' 订阅通知
    调用 BluetoothLE1.注册通知(JDY34_SERVICE, JDY34_CHAR_WRITE, true)

当 按钮_BLE发送.被点击
  设 数据 = 文本转十六进制(输入框_指令.文本)
  调用 BluetoothLE1.写入字符串(JDY34_SERVICE, JDY34_CHAR_WRITE, 输入框_指令.文本, "UTF-8")

当 BluetoothLE1.收到通知(服务UUID, 特征UUID, 数据)
  标签_接收.文本 = 数据

实战案例:JDY-34控制LED

Arduino端代码

// Arduino端接收JDY-34数据控制LED
#include <SoftwareSerial.h>
SoftwareSerial btSerial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600);
  btSerial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if (btSerial.available()) {
    char c = btSerial.read();
    if (c == '1') digitalWrite(13, HIGH);  // 开灯
    if (c == '0') digitalWrite(13, LOW);   // 关灯
    btSerial.print("LED:"); btSerial.println(c);
  }
}

App Inventon积木块

当 按钮_开灯.被点击
  调用 BluetoothClient1.发送文本("1")
  标签_状态.文本 = "💡 灯已开"

当 按钮_关灯.被点击
  调用 BluetoothClient1.发送文本("0")
  标签_状态.文本 = "⚫ 灯已关"

常见问题

Q1: 无法扫描到JDY-34?

  • 确认模块已上电(LED闪烁=未连接,常亮=已连接)
  • SPP模式需要在手机蓝牙设置中先配对
  • BLE模式直接在App中扫描

Q2: 连接后马上断开?

  • 检查供电是否稳定(3.3V,峰值电流需要足够)
  • 检查TX/RX是否接反
  • 尝试降低波特率

Q3: BLE写入数据无反应?

  • 确认使用了正确的Service和Characteristic UUID
  • 确认Characteristic支持Write操作
  • 尝试使用WriteWithResponse模式

总结

模式 组件 适合 数据量
SPP透传 BluetoothClient 大数据传输
BLE模式 BluetoothLE 低功耗场景

版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。

文档反馈