概述
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 🐝 整理。
扫码添加客服咨询