python和TI

时间:2016-04-27 21:43:38

标签: python serial-port uart xbee

我有一台XBee(S2C)连接到我的Mac,另一台XBee连接到TI微控制器(TIVA-C129)相互通信 - Mac作为协调器,TI作为路由器。

我可以在它们之间进行通信,但在TI方面,我无法读取串行端口中的确切数据。

在Mac上,我运行的是python代码,它通过XBee读取传入的串行数据并写入确认。

#!/usr/bin/python
import serial

ser = serial.Serial('/dev/tty.usbserial-A104IC2U', 9600)
ack='A'

while True:
    incoming = ser.readline().strip()
    if incoming != 'A':
        print '%s' % incoming
        ser.write('%s\n' % ack)

在TI方面,我有以下代码

int incomingByte = 0;   

void setup()
{
  Serial3.begin(9600); //UART3 has XBee connection
  pinMode(LED, OUTPUT);    
}

void loop()
{
  Serial3.println("Sending command to the XBee");
  delay(1000);
  Serial3.println("I am R1");
  delay(1000);

  if (Serial3.available() > 0) {
                // read the incoming byte from UART3
                incomingByte = Serial3.read();

                // say what you got, print at the usb serial console
                Serial.print("I received: ");   
                Serial.println(incomingByte, DEC);

        }

}

运行此操作时,在python控制台中打印“我是R1”后,XBee通信停止。我确定 Serial3.available()> 0 正在工作,当我用下面的闪烁代码替换它时,它工作,XBee通信继续工作。

if (Serial3.available() > 0) {

                digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
                delay(1000);               // wait for a second
                digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
                delay(1000);               // wait for a second
        }

看起来问题出现在

incomingByte = Serial3.read();

从python,我发送一个带有ser.write('%s\n' % ack)的字符串(%s)。 Serial3.read() ack 字符串的正确读取机制吗?还有什么吗?

仅供参考:我通过在控制台中编写内容并且serial.read()可以读取和打印它来测试serial.read()仅与TI(不涉及python)。

1 个答案:

答案 0 :(得分:0)

您是否有可能卡在TI侧的Serial.print()上,可能是因为您为该端口启用了硬件握手并且它正在等待CTS / RTS?

如果您注释掉这些行,该程序是否有效?您可以使用策略性的digitalWrite()来电来确定loop()的内容。

此外,我发现您正在将"Sending command to the XBee"打印到Serial3,因此您也应该在Python端看到它。

最后,您可能希望将if更改为while,因此循环函数会处理所有入站字节,然后在循环的每次传递中陷入两个一秒延迟(每两秒限制一个字符的吞吐量)。