C - 如何从设备端的串口接收(z1 mote)
C - How to receive from the serial port for the device side (z1 mote)
我正在尝试使用 pyserial
与直接连接到我的 PC 的 z1 mote 进行通信。我要做的是写入微尘,在收到命令后,微尘应该回复当前的温度读数,例如。
Python 边可以是这样的 (iinm)
import serial
ser = serial.Serial(0)
ser.write("hello") # the mote will receive the message and do something
但我不知道如何在使用 C 的 z1 mote 端接收消息。是否有特殊的方法来接收命令,或者我是否必须创建自己的方法?
非常感谢任何提示和提示。
如果您只想接收以换行符结尾的字符串,Contiki 已经具有相应的功能。只需等待原线程循环中的 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);
我正在尝试使用 pyserial
与直接连接到我的 PC 的 z1 mote 进行通信。我要做的是写入微尘,在收到命令后,微尘应该回复当前的温度读数,例如。
Python 边可以是这样的 (iinm)
import serial
ser = serial.Serial(0)
ser.write("hello") # the mote will receive the message and do something
但我不知道如何在使用 C 的 z1 mote 端接收消息。是否有特殊的方法来接收命令,或者我是否必须创建自己的方法?
非常感谢任何提示和提示。
如果您只想接收以换行符结尾的字符串,Contiki 已经具有相应的功能。只需等待原线程循环中的 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);