C - 如何从设备端的串口接收(z1 mote)

时间:2016-03-25 13:25:51

标签: msp430 contiki

我正在尝试使用pyserial与直接连接到我的电脑的z1微尘进行通信。我要做的是写入微尘,并且在收到命令后,微尘应该回复当前的温度读数。

Python方面可以是这样的(iinm)

import serial
ser = serial.Serial(0)  
ser.write("hello")      # the mote will receive the message and do something 

但我不知道如何在使用C的z1 mote侧接收消息。是否有一种特殊的方法来接收命令或者我是否必须创建自己的命令?

非常感谢任何提示和提示。

1 个答案:

答案 0 :(得分:2)

如果您只想接收以换行符结尾的字符串,Contiki已经具备了该功能。只需等待protothread循环中的serial_line_event_message事件:

#include "contiki.h"
#include "dev/serial-line.h"

PROCESS(main_process, "main process");
AUTOSTART_PROCESSES(&main_process);

PROCESS_THREAD(main_process, ev, data)
{
    PROCESS_BEGIN();
    for(;;) {
        PROCESS_WAIT_EVENT();

        if (ev == serial_line_event_message && data != NULL) {
           printf("got input string: '%s'\n", (const char *) data);
        }
    }
    PROCESS_END();
}

另一方面,如果要自定义接收(例如,允许二进制数据,或使用自定义框架,或包含校验和),则需要在单个字符级别处理输入。在右侧UART上定义并设置UART回调(在Z1平台上,USB连接到UART 0,但该功能的编号和确切名称取决于平台)。一个示例串行输入处理函数:

static int serial_input_byte(unsigned char c)
{
    printf("got input byte: %d ('%c')\n", c, c);
}

然后将其放入初始化代码中:

uart0_set_input(serial_input_byte);