Oscilloscope的这个例子包括了PC与串口的接发送消息,很值得研究一番。
大体的思想是传感器节点采集数据,每采集十个数据发送一个数据包给另外一个Base节点,然后Base节点把数据转发给PC端。PC端有一个java程序收集数据并且显示。所以运行这个例子要两个节点,一个烧录Oscilloscope,一个烧录Base节点,还需要一台PC,连接Base节点,运行java程序。但是在运行java程序之前要启动SerialForward工具,这样PC和Base节点才能通信。具体命令不详细描述。
在这个例子中,我觉得很有意思的是那个java程序。
可以看到主要包括上面几个文件
Node是对节点处理,Data是对所有的数据整合,Graph是画图,windows是对系统处理,Oscilloscope.java是最
重要的函数,它包含启动函数run,数据接收和发送的方法。在这个文件中,有对数据采集频率时间的修改,有messageReceived方法,这个方法可以接收来自节点的串口信息。
/* Broadcast a version+interval message. */
void sendInterval() {
OscilloscopeMsg omsg = new OscilloscopeMsg();
omsg.set_version(version);
omsg.set_interval(interval);
try {
mote.send(MoteIF.TOS_BCAST_ADDR, omsg);
}
catch (IOException e) {
window.error("Cannot send message to mote");
}
}
这个是sendInterval方法,这个方法有一个mote.send的调用,就是把PC信息发给串口的方法。mote.send(MoteIF.TOS_BCAST_ADDR, omsg);是把omsg类发给串口。在Base中的uart.receive会接收这个方法发出
的消息。如果想做串口通信的话,可以把重点研究messageReceive这个方法和mote.send这个方法,其他都可以去掉。
在这里必须要说一下Oscilloscope.h这个头文件,里面定义了Oscilloscope_t这个结构,在java文件中运行make可以看到有一个OscilloscopeMsg.java的文件,那个就是头文件定义的结构的java类,通过里面的方法,可以控制Oscilloscope对象。如果我们需要修改某个对象用来数据传输,需要修改那个头文件,当然修改对应的phthon也是有必要的。笔者在利用这个例子作数据通信时把头文件和和python也都做了处理以免发生不必要的错误。
以上就是这个例子的大致解析。