【问题标题】:C - How to receive from the serial port for the device side (z1 mote)C - 如何从设备端(z1 mote)的串行端口接收
【发布时间】:2016-03-25 13:25:51
【问题描述】:

我正在尝试使用pyserial 与直接连接到我的 PC 的 z1 mote 进行通信。我要做的是写信给mote,在收到命令后,mote应该回复当前的温度读数,例如。

Python 端可以是这样的 (iinm)

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

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

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

【问题讨论】:

    标签: msp430 contiki


    【解决方案1】:

    如果您只想接收以换行符结尾的字符串,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);
    

    【讨论】:

    • 谢谢先生。我试图实现上面给定的解决方案,但似乎有问题。我认为这是因为我有另一个 python 代码定期从我需要写入的同一个串行端口读取。因此,当我使用其他代码(写入的代码)实现上述解决方案时,似乎它停止了第一个代码(读取的代码)的连接,并且我停止从 z1 mote 获取任何输入。他们基本上是冲突的。这是否意味着我需要实现多线程或者我可以做些什么来解决这个问题?
    • @AhmedAl-haddad 不,您不需要多线程。您需要向我们展示代码以了解问题所在。但为此,您应该提出另一个问题。
    • stackoverflow.com/questions/36222823/… 我把另一个问题放在这里。希望其他问题解决后,我会再次验证这一点。
    • 我通过使用多线程解决了连接冲突的问题。但是,当我实现您的方法时,我没有从 z1 mote (它应该打印字符串的第一个)中得到任何东西。我正在使用 unicast-receiver.c 代码,我只是添加了 if 语句,如图所示。
    • 我刚刚尝试了字节方法并且它有效。至少我现在可以发送信号来触发 z1 mote 中的功能。谢谢先生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2014-10-10
    • 2011-05-10
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多