- 本地通信 (Arduino ↔ XBee):Arduino 和 XBee 模块通过串口进行点对点无线通信。
- 互联网连接 (XBee ↔ 互联网):其中一个 XBee 模块通过一个“网关”设备连接到互联网。
下面我将详细分解这个过程,包括核心概念、所需硬件、几种常见的实现方案以及一个简单的示例。
核心概念:两种 XBee 工作模式
要理解如何连接互联网,首先要明白 XBee 模块可以工作在两种模式下:
- 点对点 (Point-to-Point / AT 模式):最简单的模式,两个 XBee 模块直接配对,像一个“无线串口线”,一端发送,另一端接收,这种模式无法直接连接互联网,只能实现两个设备之间的无线通信。
- API 模式 (Application Programming Interface):功能强大的模式,XBee 模块不再简单地转发数据,而是将数据打包成结构化的“数据帧”,这个数据帧包含了源地址、目标地址、信号强度、数据本身等丰富信息,这种模式是连接互联网的基础,因为网关设备可以解析这些信息,知道数据是谁发来的。
要连接互联网,你的 XBee 模块必须工作在 API 模式下。

通过 XBee 互联网网关
这是最经典、最灵活的方案,它需要一个专门的硬件作为“翻译官”,将 XBee 的无线信号转换成互联网数据。
所需硬件
- Arduino (Arduino Uno)
- 2 个 XBee 模块 (XBee S2C)
- 2 个 XBee 开发板 (Adafruit XBee FeatherWing, 或简单的 XBee 适配器)
- XBee 互联网网关 (Digi International 的 XBee Cellular LTE-M/NB-IoT 网关 或 XBee Wi-Fi 网关)
- 传感器/执行器 (LED、温湿度传感器 DHT11、继电器等)
工作原理
[传感器] -> [Arduino] -> [XBee 模块 1 (API模式)] ---(无线)---> [XBee 互联网网关] ---(4G/WiFi)---> [互联网]
|
V
[云平台/服务器] (如 Digi Remote Manager, AWS, ThingsBoard)
|
V
[你的手机/电脑/网页]
连接步骤
-
配置 XBee 模块:
- 使用 Digi XLR Pro 或类似的软件,连接两个 XBee 模块。
- 将一个 XBee 模块(我们称之为“远程节点”)配置为 API 模式 (
AP=2),并设置一个唯一的MY(十六进制地址,如ACE1)。 - 将另一个 XBee 模块(我们称之为“网关节点”)也配置为 API 模式 (
AP=2),并将其MY地址设置与远程节点相同或设为广播地址 (0000),更重要的是,你需要配置网关节点的DL(Destination Address Low) 为远程节点的MY地址。 - 关键:确保两个 XBee 在相同的信道 (
CH) 和 PAN ID (ID) 下工作。
-
连接 Arduino 和 XBee 远程节点:
- 将 Arduino 的
TX(引脚 1) 连接到 XBee 模块的RX。 - 将 Arduino 的
RX(引脚 0) 连接到 XBee 模块的TX。 - 注意:如果使用 Arduino 的硬件串口 (0, 1),上传代码时需要断开 XBee 的连接,否则会冲突,更好的做法是使用软件串口 (SoftwareSerial) 连接到其他数字引脚 (如 2, 3),这样就不会冲突。
- 将 Arduino 的
-
连接 XBee 网关节点:

- 将 XBee 网关节点通过 USB 或串口连接到一台始终在线的计算机或单板计算机 (如 Raspberry Pi)。
- 这台计算机上需要运行 Digi 提供的网关软件,该软件会监听串口数据,将其打包成 TCP/IP 数据包,并通过互联网发送到 Digi 的云服务器 (Digi Remote Manager)。
-
配置云平台:
- 在 Digi Remote Manager (或其他云平台) 上创建一个账户。
- 添加你的 XBee 网关。
- 你会看到所有连接到该网关的 XBee 设备(即你的远程节点)。
- 你可以为这些设备设置数据流规则,当收到数据时,将其转发到你的 MQTT 服务器、HTTP API 或存储到数据库。
-
编写 Arduino 代码:
- Arduino 读取传感器数据。
- 使用
SoftwareSerial将数据通过 XBee 发送出去,在 API 模式下,发送数据需要特定的格式,通常包含帧类型、帧 ID、目标地址、数据等,Digi 的 XLR Pro 软件可以帮你生成发送 API 帧的代码。
使用 ESP8266/ESP32 作为“软”网关
如果你不想购买专用的 XBee 网关,可以使用功能强大的 ESP8266 或 ESP32 来实现一个更经济、更灵活的方案,ESP32 自带蓝牙,ESP8266 性价比极高。
所需硬件
- Arduino (负责传感器和逻辑)
- 1 个 XBee 模块 (工作在 API 模式)
- 1 个 ESP8266 或 ESP32 (作为网关)
- 传感器/执行器
工作原理
[传感器] -> [Arduino] -> [XBee 模块 (API模式)] ---(无线)---> [ESP32/ESP8266] ---(WiFi)---> [互联网]
|
V
[MQTT Broker/HTTP Server]
|
V
[你的手机/电脑/网页]
连接步骤
-
配置 XBee 模块:

- 只需要一个 XBee 模块,配置为 API 模式 (
AP=2),并设置一个唯一的MY地址。
- 只需要一个 XBee 模块,配置为 API 模式 (
-
连接 Arduino 和 XBee:
- 同样,推荐使用
SoftwareSerial将 Arduino 连接到 XBee。
- 同样,推荐使用
-
连接 XBee 和 ESP32/ESP8266:
- 将 XBee 的
TX连接到 ESP32/ESP8266 的RX(例如引脚 16)。 - 将 XBee 的
RX连接到 ESP32/ESP8266 的TX(例如引脚 17)。 - 注意:ESP32/ESP8266 也有两个硬件串口,可以使用其中一个,避免与
SoftwareSerial冲突。
- 将 XBee 的
-
编写 ESP32/ESP8266 代码:
- ESP32/ESP8266 的任务是:
a. 通过串口 (
Serial2或SoftwareSerial) 接收来自 XBee 的 API 数据帧。 b. 解析 API 数据帧,提取出原始数据和发送节点的地址 (MY)。 c. 连接到你的家庭 WiFi 网络。 d. 将解析后的数据通过 MQTT 协议发布到 MQTT Broker (如 Mosquitto, EMQ X, HiveMQ),或者通过 HTTP POST 请求发送到你自己的服务器。
- ESP32/ESP8266 的任务是:
a. 通过串口 (
-
设置服务器/云平台:
- MQTT 方式 (推荐):
- 搭建一个 MQTT Broker (可以在云服务器上,也可以使用免费的公共 Broker)。
- 在 ESP32 上,使用
PubSubClient库连接到 Broker,并发布数据到某个主题 (topic),devices/ace1/data。 - 你的客户端(手机 App、网页)订阅这个主题,就能实时收到数据。
- HTTP 方式:
- ESP32 使用
HTTPClient库,将数据打包成 JSON 格式,通过POST请求发送到你编写的 Web API。 - 你的 Web API 接收数据后,可以将其存入数据库,再通过网页或 App 展示。
- ESP32 使用
- MQTT 方式 (推荐):
简单代码示例 (方案二:ESP32 + XBee + MQTT)
这个例子展示了 ESP32 如何从 XBee 接收数据并发送到 MQTT Broker。
ESP32 代码
#include <WiFi.h> #include <PubSubClient.h> #include <SoftwareSerial.h> // --- WiFi 设置 --- const char* ssid = "Your_WiFi_SSID
