2

我正在为我的无线传感器网络项目编写一个软件。现在我关心将各种数据包注入网络。

我正在使用 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 切换之后也是如此。

4

1 回答 1

0

原来我犯了一个简单的错误,即使用错误的端口进行通信。

这是我运行 2 个 mote 所做的: 1. 在它们两个上安装 BaseStation 应用程序

make iris install,1 mib520,/dev/ttyUSB0
make iris install,2 mib520,/dev/ttyUSB0
  1. 在两个节点都运行的情况下(包括一个使用 MIB520 连接到 USB 的节点)启动 SerialForwarder

    java net.tinyos.sf.SerialForwarder -port 9002 -comm serial@/dev/ttyUSB2:57600

这是我没有意识到的地方,serial@/dev/ttyUSB2 并不总是与微尘通信的正确接口。这是因为 UART 使用 2 条 USB 线进行通信(一条用于写入 mote,一条用于从 mote 读取数据)。我所做的是尝试了其他几行,例如 /ttyUSB1、/ttyUSB3、/ttyUSB4。其中一个通常有效,不知道这是怎么发生的。

  1. 准备好 SerialForwarder 后,您应该会看到一些消息:

监听串口@/dev/ttyUSB1:57600

在端口 9002 serial@/dev/ttyUSB1:57600 上侦听客户端连接:重新同步

现在您可以使用其他实用程序来发送和接收数据

java net.tinyos.tools.Send 00 FF FF 00 00 04 22 06 00 02 00 01

java net.tinyos.tools.Listen

关于我的配置的一些附加信息

OS: Linux kali 4.0.0-kali1-amd64 #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) x86_64 GNU/Linux

TinyOS release:  2010-01-20 20:00:48, TinyOs-2.1.2

我的环境变量(我使用的是鱼壳)

cat  ~/.config/fish/config.fish 
# Here we setup the environment variables needed by the tinyos make system

set -Ux "TOSROOT" "/opt/tinyos-release-tinyos-2_1_2"
set -Ux "TOSDIR" "$TOSROOT/tos"
set -Ux "CLASSPATH" "$TOSROOT/support/sdk/java"
set -Ux "MAKERULES" "$TOSROOT/support/make/Makerules"
set -Ux "PYTHONPATH" "$TOSROOT/support/sdk/python"

echo "setting up TinyOS on source path $TOSROOT"

我希望这会节省一些人的时间。

于 2015-12-22T19:09:57.880 回答