TinyOS PC 到微尘通讯

TinyOS PC to mote communication

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

我正在使用 MIB520 接口板,在 IRIS mote 上安装了 TinyOS-2.1.2。我尝试了 sdk/c/sf 中的各种实用程序,以及 net.tinyos.sf.* 和 net.tinyos.tools.* Java 包中的工具。

到目前为止我尝试了什么:

我一直在使用 apps/BaseStation 和 apps/BaseStation15.4 安装在我的 mote 上,或者用 apps/test/TestSerial 刷​​写它。我对通过 USB 读取从 mote 发送的数据没有任何问题。我可以使用 net.tinyos.tools.SerialForwarder 或 sdk/c/f 或 net.tinyos.tools *.

中的实用程序来阅读它

但是当涉及到从 PC 向 mote 发送数据时,work.I 似乎没有使用 net.tinyos.tools。发送、serialsend.c、sf.c 和 sfsend.c . SerialForwarder 会在一段时间后抛出错误消息,而 C 实用程序会抛出 "no ack" 错误。

在 TinyOS wiki 和 SO 上搜索答案后,我认为 mote 发送 "ack" 消息可能是一个问题。我一直在寻找一种方法来按照建议生成合法数据包并将其发送到 mote here

我在 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 acknowledges a message arriving over the serial link only if that message was successfully enqueued for delivery to the radio link." 这可以解释 serialsend.c 中的 "no ack" 和 SerialForwarder.java 中的 "write failed"。

但是,UartReceive.receive() 事件永远不会被触发,即使在清除它的主体(在 BaseStation 中)并且只留下 LED 切换之后也是如此。

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

这是我对 运行 2 个微粒所做的: 1. 在两者上安装 BaseStation 应用程序

make iris install,1 mib520,/dev/ttyUSB0
make iris install,2 mib520,/dev/ttyUSB0
  1. 两个微尘 运行ning(包括一个使用 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 后,您应该会看到一些消息:

Listening to serial@/dev/ttyUSB1:57600

Listening for client connections on port 9002 serial@/dev/ttyUSB1:57600: resynchronising

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

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

我的环境变量(我使用的是 fish shell)

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"

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