我正在为无线传感器网络上的项目编写一个软件。现在我关注的是将各种数据包注入网络。
我使用MIB520接口板和IRIS mote上安装的TinyOS-2.1.2。我尝试过sdk / c / sf中的各种实用程序,以及net.tinyos.sf。*和net.tinyos.tools。* Java包中的工具。
到目前为止我尝试了什么:
我一直在我的mote上安装app / BaseStation和apps / BaseStation15.4,或者使用apps / test / TestSerial闪存。读取mote通过USB发送的数据没有问题。我可以使用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"信息。我正在寻找一种方法来生成并发送合法数据包到建议here。
关于维基的文章后,我找到了合适的TEP,并使用了其中列出的位数(" 7e 40 09 00是ef 05 7d 5d 06 01 02 03 04 05 7e")。
我使用Wireshark来嗅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才会确认通过串行链路到达的消息。" 这可以解释" no ack"在serialsend.c和"写入失败"在SerialForwarder.java中。
但是,UartReceive.receive()事件永远不会被触发,即使在清除它的主体(在BaseStation中)并且只留下LED切换之后也是如此。
答案 0 :(得分:0)
结果我犯了一个简单的错误,就是使用错误的端口进行通信。
我在这里做了两次运行: 1.在两者上安装BaseStation应用程序
make iris install,1 mib520,/dev/ttyUSB0
make iris install,2 mib520,/dev/ttyUSB0
两个节点都在运行(包括一个使用MIB520连接到USB)启动SerialForwarder
java net.tinyos.sf.SerialForwarder -port 9002 -comm serial @ / dev / ttyUSB2:57600
这是我没有意识到的,串行@ / dev / ttyUSB2并不总是与motes通信的正确接口。因为UART使用2条USB线进行通信(一条用于写入微尘,另一条用于从微尘读取数据)。我做的是我尝试了其他几行,如/ ttyUSB1,/ ttyUSB3,/ ttyUSB4。其中一个通常有用,不知道是怎么发生的。
听串口@ / 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
我的env变量(我使用鱼壳)
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"
我希望这能节省一些人的时间。