2016-03-25 52 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我在這裏提出了另一個問題。我希望在解決其他問題後再次驗證。 –

相關問題