- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试让多个 XBees 作为传感器和输出设备运行,以将它们的样本发送到如下连接的协调器 XBee,并在收到指示时打开和关闭这些远程 XBees。我的这个“接收数据”问题似乎类似于 Stack Overflow 问题 pySerial and reading binary data ,但我不认为该问题及其解决方案可以解决这个问题。
那么什么步骤会重现问题?
使用 python-xbee(版本 2.1.0 或 2.0.0),pySerial 最新版本 2.6.0,Python 2.7.3 on Raspberry Pi运行 Debian Wheezy (7.0).
运行下面的脚本
所有 XBees 都是 XB24-Z7-WIT-004 系列 2。协调器处于 API2 模式。我在 AT 和 API1 或 API2 模式下尝试了我的双传感器 XBee,没有任何区别(关于固件版本的注释反射(reflect)在附加的 .py 脚本中的注释中)
预期的输出是什么?我看到了什么?
我希望收到的地址是脚本的结果,或者是 Minicom 的输出是正确的“source_addr_long”,即 x13\xa2\x00\x40\x79\xe6\x5f,但我收到的是\x00\x13\xa2\x00@y\xe6。 'source_addr' 返回\xe3+。 (“源地址”相关的东西由 python_XBee 库处理/完成。)这是我的脚本:
#!/usr/bin/env python2.7
# NOTE - Not my own code - Abrie Willemse
# NOTE - I am not a programmer - Abrie Willemse
# I am using XBee XB24-Z7 WIT-004 for all devices
# Coordinator is running API
# SENSOR_1 and SENSOR_2 are Sensor Routers running AT (firmware XB24ZB 22A7) (I have tried API firmware XB24ZB 23A7) too)
import serial
from xbee import ZigBee
import time, sys, datetime
serial_port = serial.Serial('/dev/ttyAMA0', 9600)
zb = ZigBee(serial_port)
while True:
try:
data = zb.wait_read_frame() #Get data for later use
print data # To check what comes in before processing / parsing (already buggered up)
addr = repr(data ['source_addr_long']) # Working sort of, but with @y... issue in results
file = open('/media/log/senslog.txt','a')
value = float(((data['samples'])[0])['adc-0'])
num = (value * 3.0) / 1023.0
file.write(datetime.datetime.now().strftime('%d-%m-%Y %H:%M:%S') + ' ' + str(addr) + ' ' + str(value) + ' ' + str(num) + '\n')
print str(datetime.datetime.now().strftime('%d-%m-%Y %H:%M:%S') + ' ' + str(addr) + ' ' + str(value) + ' ' + str(num) + '\n')
file.close()
except KeyboardInterrupt:
break
serial_port.close()
这是输出:
{'source_addr_long': '\x00\x13\xa2\x00@y\xe6_', 'source_addr': '\xe3+', 'id': 'rx_io_data_long_addr', 'samples': [{'adc-0': 516, 'adc-3': 519, 'dio-6': False}], 'options': '\x01'}
18-06-2013 14:32:15 '\x00\x13\xa2\x00@y\xe6_' 516.0 1.51319648094
请注意输出中从上面的 @y 开始的问题。请注意接收到的正确数据,当我将同一个协调器连接到 Windows PC 时(这是从远程 XBee 接收到的整个数据包):
我使用的是什么版本?在什么操作系统上?
在运行 Debian Wheezy (7.0) 的 Raspberry Pi Model B 上使用 python-xbee(版本 2.1.0 或 2.0.0)、PySerial 最新版本 2.6.0、Python 2.7.3(最近升级到最新版本,在试图解决这个问题。
注意事项:
当我使用 ZigBee Operator 软件(基于 Windows,通过老式 COM 端口)时,地址和整个消息都可以正确发送和接收。最后,很可能 pySerial 没有任何问题,我可能只是在代码中乱搞,尽管那没有解释为什么 Miniterm已经显示错误了。此外,已检查所有串口参数,XBee 在 Vcc 和接地引脚之间仔细去耦或过滤等。
更新,经过进一步调查,看来问题可能与 pySerial 库有关,而不是与 python-XBee 库有关。我基于以下几点(指的是我帖子前面部分列出的预期结果,以及上面也列出的实际结果:
x40 = ascii @ and
x79 = ascii y and
xe6 = seems undefined in [ASCII][7], therefore seems to be coming through OK as xe6 and then finally,
x5f = ascii underscore (_)
因此,我的理论是,出于某种原因,pySerial 停止处理\x00\x13\x2A\x00 中最后一个 x00 之后的流/字符串(或任何正确的技术术语),然后开始添加等效的 ASCII 字符改为十六进制字符/值。使用依赖于 pySerial 库 (Miniterm) 的终端程序,在 Raspberry Pi 上,我已经收到了错误的数据。这是我的脚本之前。 (作为后来发现的结果,请参阅对此帖子的评论。)
正确接收“硬件地址”对我来说很重要,因为 XBee 中的 MY 地址可以动态更改(我认为协调器会动态分配它)。当向特定 XBee 模块发送特定命令时,这将是一个问题,显然要考虑非常特定的结果。我该如何解决这个问题?
最佳答案
事实上 @
是 \x40
。 y
是 \x79
。所以“值(value)观”是正确的...
>>> '\x13\xa2\x00\x40\x79\xe6\x5f' == '\x13\xa2\x00@y\xe6_'
True
如果只是格式问题,您可以使用类似的东西来漂亮地显示您的地址:
>>> value = '\x13\xa2\x00@y\xe6_'
>>> pretty_value = ':'.join("{:02X}".format(ord(c)) for c in value)
>>> print(pretty_value)
13:A2:00:40:79:E6:5F
另一方面,在我看来,您在访问地址时偏离了一个字节:
Expected: \x13\xa2\x00\x40\x79\xe6\x5f
Actual value: \x00\x13\xa2\x00\x40\x79\xe6
一个可能的原因是您忽略了在 API 2 模式下某些字符可能被转义的事实。所以改变数据帧中各个字段的实际偏移量。由于您使用的是库,您确定它能正确处理 API 2 模式吗?它的配置是否正确?
关于你的框架:
7E 00 16 92 00 13 A2 00 40 79 E6 5FDF 13 01 01 00 40 09 00 40 02 04 0207 2E
只解码头部的第一个字段:
关于python - 从 XBee 接收到的 pySerial 数据未正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240918/
如何让多个节点在不丢失数据的情况下与协调器通信? 当更多的 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(考虑传感
我是一名优秀的程序员,十分优秀!