我正在为我的无线传感器网络项目编写一个软件。现在我关心将各种数据包注入网络。
我正在使用 MIB520 接口板和安装在 IRIS 微尘上的 TinyOS-2.1.2。我尝试了来自 sdk/c/sf 的各种实用程序,以及来自 net.tinyos.sf.* 和 net.tinyos.tools.* Java 包的工具。
到目前为止我尝试了什么:
我一直在使用我的mote上安装的apps/BaseStation和apps/BaseStation15.4,或者使用apps/test/TestSerial对其进行闪烁。我通过 USB 读取从 mote 发送的数据没有问题。我可以使用 net.tinyos.tools.SerialForwarder 或来自 sdk/c/f 或 net.tinyos.tools * 的实用程序很好地阅读它。
但是当谈到从 PC 向 mote 发送数据时,似乎没有任何效果。我使用了 net.tinyos.tools.Send、serialsend.c、sf.c 和 sfsend.c。 SerialForwarder会在一段时间后抛出错误消息,而 C 实用程序会抛出“no ack”错误。
在 TinyOS wiki 和 SO 上搜索答案后,我认为可能是 mote 发送“ack”消息的问题。按照这里的建议,我正在寻找一种生成合法数据包并将其发送到 mote 的方法。
在 wiki 上的文章之后,我找到了适当的 TEP 并使用了其中列出的位(“7e 40 09 00 be ef 05 7d 5d 06 01 02 03 04 05 7e”)。
我使用 Wireshark 嗅探 USB,我在 USB 上将数据发送到 mote,我看到发送到 mote 的相同位。我的理论是 mote 无法识别我发送的输入,或者我错误地使用了实用程序。无论如何,这个特定事件永远不会被触发:
event message_t* UartReceive.receive(message_t* bufPtr, void* payload, uint8_t len) {
call Leds.led0On();
return bufPtr;
}
我的问题是,我该如何从 PC 向 mote 发送数据?也许有一些我忽略的现成实用程序?我一直在按照 BaseStation15.4 中的说明进行操作,但我被卡住了。
编辑:
来自 BaseStation/README.txt “只有当消息成功排队以传递到无线电链路时,BaseStation 才会确认通过串行链路到达的消息。” 这将解释 serialsend.c 中的“no ack”和 SerialForwarder.java 中的“write failed”。
但是,UartReceive.receive() 事件仍然不会被触发,即使在清除它的主体(在 BaseStation 中)并且只留下 LED 切换之后也是如此。