我有一台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)。
答案 0 :(得分:0)
您是否有可能卡在TI侧的Serial.print()
上,可能是因为您为该端口启用了硬件握手并且它正在等待CTS / RTS?
如果您注释掉这些行,该程序是否有效?您可以使用策略性的digitalWrite()
来电来确定loop()
的内容。
此外,我发现您正在将"Sending command to the XBee"
打印到Serial3
,因此您也应该在Python端看到它。
最后,您可能希望将if
更改为while
,因此循环函数会处理所有入站字节,然后在循环的每次传递中陷入两个一秒延迟(每两秒限制一个字符的吞吐量)。