- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有 2 个 XBee S1 模块配置为 API 模式 1。XBee 模块 1 是信号发射器,XBee 模块 2 是信号接收器。问题是接收器没有从发射器接收到任何东西(或者看起来是这样)。
发射器配置是这样的:
AP 1
MY 1
ID 1984
DL 2
CH C
其他一切都保持默认。变送器连接到 XBee Explorer。 XBee Explorer 通过 USB 连接到 PC。
以下代码每 1 秒发送一次信号:
public class Main {
private Main() {
XBee xbee = new XBee();
try {
xbee.open("/dev/ttyUSB0", 9600);
final XBeeRequest request = new TxRequest16(new XBeeAddress16(0, 2), new int[] { 1 });
//noinspection InfiniteLoopStatement
while (true) {
xbee.sendSynchronous(request);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
xbee.close();
}
}
public static void main(String[] args) {
new Main();
}
}
使用了 Java XBee API 库:https://code.google.com/p/xbee-api/我看到 TX LED 每秒都在闪烁。
接收器配置是这样的:
AP 1
MY 2
ID 1984
DL 1
CH C
其他一切都保持默认。使用以下接收器接线:
接收器通过 XBee Explorer 连接到面包板。连续性测试表明,电流在 XBee RX 和 mbed P27 之间以及 XBee TX 和 mbed P28 之间流动良好。
mbed (LPC1768) 上的以下代码运行以接收数据包:
Serial terminal(USBTX, USBRX);
while(1) {
terminal.puts("Reading packet...\r\n");
xbee.readPacketUntilAvailable();
terminal.puts("Packet available\r\n");
XBeeResponse response = xbee.getResponse();
if (response.isAvailable()) {
char tmp[20];
sprintf(tmp, "0x%02X", response.getApiId());
terminal.puts("Response available at API: ");
terminal.puts(tmp);
terminal.puts("\r\n");
uint8_t api = response.getApiId();
if (api == RX_16_RESPONSE) {
Rx16Response rx16 = Rx16Response();
response.getRx16Response(rx16);
uint8_t len = rx16.getDataLength();
char l[20];
sprintf(l, "%d", len);
terminal.puts("We have data: ");
terminal.puts(l);
terminal.puts("\r\n");
}
}
wait(1);
}
使用了用于 XBee API 模式的流行 Arduino/mbed 库。来源位于此处:http://mbed.org/users/okini3939/code/XBee/
控制台的输出始终是:Reading packet...
。接收器上的 RX LED 不闪烁。
最佳答案
问题很复杂(由几个较小的问题组成)。按照@tomlogic 的建议从两端转储请求和响应帧非常有帮助。
为了解决这些问题,我首先确保硬件部分正常工作。
XBee Explorer 有 4 个 LED。一个是电源,通电时应始终呈红色。其他 3 个,取决于您拥有的浏览器,可能称为 rx, tx, rssi
或 din, dout, rssi
。
传输代码运行时,首先要保证rx
和tx
每秒同时闪烁。 IE。信号每秒发送一次。
当接收代码运行并调用readPacketUntilAvailable
时,接收XBee explorer 上的LED 应如下发光:rssi
持续发光,tx
或dout
应该闪烁。
既然我们知道硬件没问题,我们就可以调试软件部分了。
我的问题是接收代码。当我们设置接收 XBee 时,我们需要确保我们做了两件事。首先,我们调用 xbee.begin(baudRate)
。其次,我们应该重置模块。
reset = 0;
wait_ms(100);
reset = 1;
wait_ms(100);
最后但同样重要的是,readPacketUntilAvailable
方法将不重置响应。我们在循环中调用这个函数。无论发射器发送什么其他数据,我们得到的第一个响应都会被重复。
在我的例子中,接收者得到的第一个响应是 MODEM_STATUS_RESPONSE
(0x8A,十六进制)。并且未读取后续数据包。 readPacket
必须改为调用,因为该方法将重置先前的响应。
我的接收代码现在是这样的:
XBee xbee(p28, p27);
DigitalOut reset(p11);
DigitalOut mbed_led1(LED1);
int main() {
Serial terminal(USBTX, USBRX);
while(!terminal.readable()) {
wait_ms(10);
}
terminal.getc();
mbed_led1 = 1;
xbee.begin(9600);
reset = 0;
wait_ms(100);
reset = 1;
wait_ms(100);
while(1) {
terminal.puts("Reading packet...\r\n");
xbee.readPacket(500);
XBeeResponse response = xbee.getResponse();
if (response.isAvailable()) {
terminal.puts("Packet available\r\n");
XBeeResponse response = xbee.getResponse();
char tmp[20];
sprintf(tmp, "0x%02X", response.getApiId());
terminal.puts("Response available at API: ");
terminal.puts(tmp);
terminal.puts("\r\n");
uint8_t api = response.getApiId();
if (api == RX_16_RESPONSE) {
Rx16Response rx16 = Rx16Response();
response.getRx16Response(rx16);
uint8_t len = rx16.getDataLength();
char l[20];
sprintf(l, "%d", len);
terminal.puts("We have data of length ");
terminal.puts(l);
terminal.puts("\r\n");
}
}
wait(1);
}
}
关于java - XBee S1 通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865973/
如何让多个节点在不丢失数据的情况下与协调器通信? 当更多的 XBee 节点同时向同一个 XBee 协调器发送它们的数据时,是否会出现拥塞问题?据我所知,这是肯定的。 在这种情况下,如何避免这种拥堵?另
为每个终端设备获取 RSSI 的正确方法是什么? 场景:在 XBee 系列 2 radio 模块上使用 ZigBee 固件,API 模式,我有一个协调器和多个终端设备。每隔几秒,每个终端设备都会向协调
我已将协调器 xbee 连接到 beaglebone 的串行端口,即beaglebone 的 tx 和 rx。我的路由器的 D0 引脚连接到继电器。我想远程禁用或启用 D0 引脚。为此,我正在使用 p
我用三个 XBee Series 1 模块设置了一个 NonBeacon(w/Coordinator)网络。一个被配置为协调器。另外两个配置为终端设备。固件版本和配置如下。 公司 Modem: XB
我正在尝试通过 XBee Shield 启用 Arduino 的无线编程和 XBee Explorer。我在网上看过两个教程, XBee radios 和 Wireless Bootloading f
我已将一台 xbee pro 配置为协调器(API 模式),另一台配置为路由器(API 模式)。我尝试使用 xbee java api 将数据从协调器发送到路由器,但在路由器代码中我不断收到 null
路由器 AT 配置中的 Xbee 系列 2 具有连接到 XBee 的引脚 20 AD0 的电位计抽头输出,应该每 100 毫秒发送一次模拟数据。它是用 ATD02 和 ATIR64 设置的。 Coor
我正在将代码从 Python XBee 库移动到 Digi 的 Python XBee 库,我无法在文档中找到有关如何将 API 帧发送到远程 XBee 的语法。我正在使用 S1 和 S1 Pro 设
以下代码中使用 node-serialport 和 node-xbee 从路由器 AT 配置中的 XBee 系列 2 读取传入的 XBee 帧。电位计连接到 XBee 的引脚 20 AD0 模拟输入引
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我必须 IEEE 802.15.4运行的设备。问题是关于 XBee-PRO . Firmware: XBEE PRO 802.15.4 (Version: 10e6) Hardware: XBEE (
我有一个简单的 xbee 网络,其中有一群远程操作的从站,并且所有从站都与连接到服务器计算机的一个主站进行通信。这没问题。 从站都将其 ID 作为数据包的一部分发送,我想让主站在延迟后故意发送 Ack
我尝试测试系统,但不确定问题出在 xbee、传输代码还是接收代码上。在我发布我的代码之前,我将解释我们对这些信号做了什么。我们有三个模拟信号,它们将使用 arduino 和 xbee 扩展板通过一个
我一直致力于使用 Digi Xbee 系列 2 (ZigBee) 模块的项目。我有一个 python 脚本,它在我的协调器设备上接收数据并将其保存到数据库中。该脚本一直在返回数据中寻找并解析“samp
我有两个 XBee 网络。第一个连接到 BeagleBone Black第二个连接到我的电脑。 BeagleBone Black 定期向 PC 发送传感器值,每秒 10 次等。但是当我从我的 PC 向
我需要询问 xbee 数据包大小。 API数据包是否有最小尺寸? 我正在使用 Xbee S2 API 模式 AP1,但是当我从路由器向协调器发送以下帧时,数据包无法到达。数据包:uint8_t有效负载
我正在使用 XBee DigiMesh 2.4 API-2 和 Raspberry Pi。我将一个帧从一个节点广播到另一个节点。 要传输的帧:7e 0 12 10 1 0 0 0 0 0 0 ff f
我有 4 个具有温度、湿度和二氧化碳的 arduino 模块。他们通过 xbee 将这些数据作为单行发送。树莓派通过 xbee 读取这些行。这是我在树莓派级别得到的输出: 节点 2 57.4 21.9
我有一个使用 Xbees 运行的网状网络。我必须计算网络中所有可能的节点(即 20 个)及其地址。我想创建一个脚本来告诉我哪些节点处于打开状态(以防某些节点出于某种原因关闭)。 我该怎么做。 我正在使
我想使用 lm35 温度传感器和 xbee 传感器计算远程位置的实际温度。我从传感器获得模拟输入,但无法计算温度。下面给出了完整的场景。 场景: 我已将 LM35 温度传感器连接到 XBee(考虑传感
我是一名优秀的程序员,十分优秀!