我目前正在使用Arduino Uno,9DOF和XBee,我正在尝试创建一个结构,可以通过串行,逐字节发送,然后重新构造成结构.
到目前为止,我有以下代码:
struct AMG_ANGLES {
float yaw;
float pitch;
float roll;
};
int main() {
AMG_ANGLES struct_data;
struct_data.yaw = 87.96;
struct_data.pitch = -114.58;
struct_data.roll = 100.50;
char* data = new char[sizeof(struct_data)];
for(unsigned int i = 0; i<sizeof(struct_data); i++){
// cout << (char*)(&struct_data+i) << endl;
data[i] = (char*)(&struct_data+i); //Store the bytes of the struct to an array.
}
AMG_ANGLES* tmp = (AMG_ANGLES*)data; //Re-make the struct
cout << tmp.yaw; //Display the yaw to see if it's correct. …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序,通过Xbee API与Xbee模块进行通信.
目前我有一些工作,但它相当简单,并有很多限制.
Sub processPackets() ' this runs as its own thread
'remove data from serial buffer and format in to packet
'if IO response generated remotely, not requested put in IOQueue
'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
End Sub
Run Code Online (Sandbox Code Playgroud)
然后作为典型命令请求的示例将数据发送到串口Loop(带超时),检查CMDQueue是否有数据包,出队并检查是否匹配否则超时
现在很明显这个方法的潜在问题.特别是,由于Xbee模块可以睡眠,您可能需要等待相当长的时间来进行Ack.另外,它取决于订单等.
我想采取一种非阻塞的方法.在这种情况下,为了在大多数情况下对Ack /响应数据包采取行动,我需要知道响应时发送的原始数据包.
我正在考虑创建一些线程.SendPacket会发送数据包,加载发送的数据包,发送的时间和超时进入内存,还包括回调函数?(数组?)PacketProc将解析数据包,检查等待响应的数据包数组并调用回调函数.它还会检查是否有超时的等待数据包并调用回调来指示超时?
最终,我正在寻找能够将数据包发送到多个设备(可能以任何顺序响应)并根据这些响应采取行动或对超时采取行动的能力.
我不是特别熟悉.NET,任何人都可以评论这种方法或推荐更好的模式来查看吗?我应该注意的任何.Net方法?
我试图通过XBee Shield和XBee Explorer 启用Arduino的无线编程.我在网上看过两个教程,XBee无线电和ATmega168/ATmega328的无线启动,向您展示如何做到这一点.
但是,这两个教程都讨论了使用组件将接收器XBee连接到Arduino.那么XBee Shield处理接收器XBee和Arduino之间的通信,因此额外的组件不是必需的(或者是它们).他们谈论使用电容器或晶体管来无线复位Arduino.这是否已经可以使用XBee Shield,或者我可以对其进行一些修改以使其成为可能吗?
如何使用现有的Arduino IDE无线编程我的Arduino?
我正在编写一个必须与之通信的java应用程序,必须通过usb-cable与XBee无线电进行通信.为此,我使用xbee-java API(http://code.google.com/p/xbee -api /)
在我的旧32位机器上,一切正常.但是当我将项目导入到64位计算机时,它会立即抛出一个异常,上面写着:"无法在AMD 64位平台上加载IA 32位.dll".我不知道如何解决这个问题.
错误代码:
java.lang.UnsatisfiedLinkError: C:\Users\Tom\Documents\XbeeJava\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
Closing connection with local XBee
Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: C:\Users\Tom\Documents\XbeeJava\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
at com.rapplogic.xbee.RxTxSerialComm.openSerialPort(RxTxSerialComm.java:71)
at com.rapplogic.xbee.RxTxSerialComm.openSerialPort(RxTxSerialComm.java:61)
at com.rapplogic.xbee.api.XBee.open(XBee.java:140)
at me.server.HardwareCommunications.SensorListener.run(SensorListener.java:47)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
谢谢,汤姆
我想使用iPhone来监控使用XBee调制解调器(或其他低功耗无线设备)从远程源输出.理想情况下,iPhone可以定期轮询XBee以获取此信息,然后使用它来显示生成输出.
这与Nike + iPod的工作方式类似,我想但是我想知道是否可以不使用边缘连接器附件?
我有三个XBees.2x PROs和标准,所有系列2s.我在通道0和PAN 234上配置了一个PRO和一个标准作为路由器/端点(这是选择"XBP24-B"/"XB24-B"时的默认通道和PAN ID"ZNET2.5 ROUTER/END设备在"配置文件(两者的版本1247).
然而,我设置了"ZNET 2.5 COORDINATOR AT"配置文件的PRO有一个E通道(尽管如果我继续使用相同的配置文件闪烁设备,这会从12-F变化).
显然,如果协调员没有相同的频道,没有什么可行,但我看不到任何手动设置频道的方法..?
X-CTU中的CH设置是只读的,我可以看到任何其他UI元素来更改频道:
我甚至已进入终端并键入(括号中的单词是终端返回的内容):
+++(OK)ATCH(E)ATCH0(ERROR)ATCH 0(ERROR)ATCH00(ERROR)ATCH 00(ERROR)ATCH E(ERROR)ATCHE(ERROR)
我用Google搜索并用谷歌搜索无济于事.难以置信的沮丧,任何人都可以帮忙吗?!我让他们以前的工作作为一个侥幸的问题,因为我一直闪烁硬件,直到频道数匹配,但这显然是荒谬的!
这是我的情况:
我有一个由96个XBee S2B和S2C模块组成的网络.我的应用程序在ARM模块上运行,并有一个XBee S2C模块.所有模块(总共97个)都在同一个网络中,并且能够相互通信.
该软件启动并知道所有模块的64位地址.它将进行网络发现(Local AT - > ND)并等待响应.每次响应时,每个模块的16位地址都会更新.如果模块没有响应网络发现,它将每30秒再次发送(在大多数测试中,60秒后,将发现所有节点).
然后,在存储了所有64位和16位地址的情况下,应用程序将使用单播向每个节点发送消息.它不会在发送消息之间等待.我尝试使用36,42,78和96个节点.有36个节点,每个节点在3秒内收到消息(如预期的那样),42和78分别需要4到7秒才能到达每个节点.然而,96然后需要90秒(至少).
我无法检测到外部干扰,并且所有节点都可以到达(如果没有,则网络发现将失败).
我也尝试使用64位消息传递并忽略16位地址,使用此方法时需要更长时间.
我使用的是由attie制作的xbee3library(https://github.com/attie/libxbee3).
我的问题是:如何加快96个节点的通信时间(请记住,目标是能够处理更大的网络)以及为什么78和96个节点之间存在如此大的差异(为什么网络突然这么慢?)
如果有关于我的情况需要更多信息,我将很乐意提供.当我管理代码时,如果您需要更多信息,我可以执行测试.
ZigBee Mesh(系列 2)和 DigiMesh(系列 1)哪个更好?
我已经阅读了无线网状网络,ZigBee 与 DigiMesh(PDF 格式),但我注意到使用 DigiMesh 有很多优点,相反,我希望阅读系列 2 比系列 1 更好。
假设我正在尝试制作一个聊天程序,如 YouTube 视频XBee 基础知识 - 第 2 课 - AT 模式下两个 XBees 之间的简单聊天程序。
在这段视频中,他解释了一个 XBee 是一个发送器,它使用 Arduino 向另一个 XBee 发送“Hello world”。
但是,XBee能够同时发送和接收数据吗?路由器是否能够与协调器通信以及相反?
此外,我想编写自己的软件来接收和发送数据,而不是使用 Arduino 软件。有没有库和API?
文章或视频会很好。
我必须在IEEE 802.15.4设备上运行。问题是关于XBee-PRO 的。
Firmware: XBEE PRO 802.15.4 (Version: 10e6)
Hardware: XBEE (Version: 1744)
Run Code Online (Sandbox Code Playgroud)
两个设备都配置为相同的通道 (15) 和相同的 PAN id (0x1234)。它连接到我的机器COM 端口,当我将picocom连接到它时,它实际上可以传输数据。(它正确响应 AT 命令,并且可以通过 moltosenso 网络管理器进行完全配置 - 我使用的是Mac)。除串行波特率外,所有其他寄存器均采用默认值。
XBee端源地址为0x1,目标地址为0x2。现在,当我在 picocom 中输入ASCII字符时,这是我在以混杂模式运行的另一台设备上看到的接收到的内容:
-- Typing "a"
E 61 88 7E 34 12 2 0 1 0 2B 0 61 E1
E 61 88 7E 34 12 2 0 1 0 2B 0 61 E1
E 61 88 7E 34 12 2 0 1 …Run Code Online (Sandbox Code Playgroud)