2016-03-25 56 views
1

我想通过使用pyserial直接与我的PC连接的z1 mote进行通信。我想要做的是写入微尘,并且在接收到命令后,微尘应当例如回复当前的温度读数。C - 如何从设备端的串行端口接收(z1 mote)

Python端可以是这样的(iinm)

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

,但我不知道如何使用C的Z1微尘侧接收该消息是否有特殊的方法来接收命令或我必须创建自己的?

任何提示和提示是不胜感激。

回答

2

如果你想只接受换行终止字符串,半自助旅游旅行社已经拥有的功能了点。只是等待serial_line_event_message事件在protothread的循环:

#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); 
+0

谢谢主席先生。我试图实现上面给出的解决方案,但似乎有问题。我认为这是因为我有另一个python代码,它定期从我需要写入的相同串行端口读取。所以当我使用其他代码(写入的代码)实现上述解决方案时,似乎停止了第一个(读取的)连接,并且我停止从z1 mote获取任何输入。他们基本上发生冲突。这是否意味着我需要实现多线程,或者我能做些什么来解决这个问题? –

+0

@ AhmedAl-haddad不,你不需要多线程。您需要向我们展示代码,以了解问题所在。但为此,你应该打开另一个问题。 – kfx

+0

http://stackoverflow.com/questions/36222823/clash-of-connection-between-serial-port-read-and-write-codes我在这里提出了另一个问题。我希望在解决其他问题后再次验证。 –

相关问题