3. Zigbee数据透明传输实现

任务目标

本案例使用两个 Zigbee 模块(如 EBYTE E18-MS1PA2-PCB 或兼容的 TI CC2530/CC2538 方案),通过串口连接 PC 或开发板,实现一端串口收到的数据经 Zigbee 无线链路发送,另一端收到后从串口原样输出,完成点对点透明传输。

环境与依赖

  • 硬件:2× Zigbee 模块(AT 固件,支持透明传输模式)、USB-TTL 转换器 2 个、PC 1 台
  • 软件:串口调试助手(或 minicom/PuTTY),模块默认波特率 115200,8N1
  • 模块配置:两个模块均需设置为相同的 PAN ID 和信道,一个为协调器,一个为路由器/终端

模块配置(AT 指令)

以下指令通过串口发送,每条指令以回车换行结尾(\r\n)。模块 A 配置为协调器,模块 B 配置为终端,两者 PAN ID 设为 0x1234,信道设为 15。

// 模块 A(协调器)
AT+ROLE=1        // 设为协调器
AT+PANID=1234    // 设置 PAN ID
AT+CH=15         // 设置信道
AT+TRAN=1        // 开启透明传输模式
AT+Z             // 保存并重启

// 模块 B(终端)
AT+ROLE=3        // 设为终端设备
AT+PANID=1234
AT+CH=15
AT+TRAN=1
AT+Z

透明传输验证代码

以下 Python 脚本用于自动化测试:向模块 A 的串口发送数据,然后从模块 B 的串口读取,验证数据是否一致。需安装 pyserial:pip install pyserial。

import serial
import time
import random
import string

PORT_A = 'COM3'   # 模块 A 所在串口
PORT_B = 'COM4'   # 模块 B 所在串口
BAUD = 115200

def test_transparent():
    ser_a = serial.Serial(PORT_A, BAUD, timeout=2)
    ser_b = serial.Serial(PORT_B, BAUD, timeout=2)
    time.sleep(0.5)  # 等待模块就绪

    # 生成随机测试数据(含 ASCII 可打印字符)
    test_data = ''.join(random.choices(string.ascii_letters + string.digits, k=64))
    print(f"发送数据: {test_data}")

    # 从 A 发送
    ser_a.write(test_data.encode())
    time.sleep(0.5)  # 等待无线传输完成

    # 从 B 接收
    received = ser_b.read(len(test_data))
    received_str = received.decode(errors='replace')
    print(f"接收数据: {received_str}")

    ser_a.close()
    ser_b.close()

    if received_str == test_data:
        print("测试通过:数据完全一致")
        return True
    else:
        print("测试失败:数据不一致")
        return False

if __name__ == '__main__':
    test_transparent()

运行与验证

  1. 按上述 AT 指令分别配置两个模块,确认返回 OK。
  2. 将模块 A 连接 PC 串口 COM3,模块 B 连接 COM4(按实际端口修改脚本)。
  3. 运行脚本:python test_transparent.py
  4. 观察输出:若打印“测试通过:数据完全一致”,说明透明传输链路正常。

手动测试方法

若不用脚本,可打开两个串口调试助手:在连接模块 A 的串口发送任意字符串(如 Hello Zigbee),应在连接模块 B 的串口收到完全相同的字符串。反向发送同样验证。

常见问题

  • 收不到数据:检查两模块 PAN ID、信道是否一致;确认模块 B 已成功入网(观察模块 LED 状态或发送 AT+NETWORK? 查询)。
  • 数据乱码:确认两端串口波特率一致(默认 115200),且模块未处于 AT 指令模式(透明传输模式下直接透传数据)。
  • 传输延迟:Zigbee 每次发送前有信道检测机制,短数据建议间隔 100ms 以上再发下一条。