通过XBee模块将Raspberry Pi中的字符串发送到Arduino

时间:2015-12-05 13:18:59

标签: python arduino raspberry-pi xbee

<解决方案[已解决]问题出在我用来连接XBee模块和Pi的USB-TTL PL2303芯片上。它正在创造这个问题。它的驱动程序没有被RPi2正确支持。

我试图通过连接到它的XBee模块从我的Raspberry Pi2上的python脚本发送一个字符串(可能是一个数字)到Arduino Uno。发送的数据在Arduino端错误解释。当我在X-CTU上使用终端并发送字符串时,它在Arduino IDE的串行监视器上正确显示。

这是我正在使用的Python代码

import time
import serial
ser = serial.Serial("/dev/ttyUSB0",9600)
ser.isOpen()
x= '4'
ser.write(bytes(x, "ascii")) #writing as bytes
time.sleep(2)
ser.close()

这是我使用的Arduino代码

#include <SoftwareSerial.h>


SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Open serial communications
Serial.begin(9600);


// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
}

void loop() // run over and over
{ 
 int x;
 if (mySerial.available())
  {

    x = char(mySerial.read()) - '0'; 
   //reading data value from Software Serial port 
   //converting ASCII to int
   //and storing it as x
   Serial.print(x);

   }

2 个答案:

答案 0 :(得分:0)

我的猜测,如果你已经对char进行类型转换,则不需要减去'0',因为Serial.print()会将该值解释为ascii代码并打印相应的字符。所以,试试,char(Serial.read())并打印出来。

答案 1 :(得分:0)

嗯,你知道接收端的代码工作正常,因为你可以通过X-CTU终端发送数据来测试它。你是如何从X-CTU发送的?只需在窗口中键入数字4,或将其作为十六进制值(0x04)发送?

将Python脚本发送到X-CTU终端后会发生什么?你看到了什么?如果您在转换之前转储在Arduino端读取的字节值,该怎么办?比较X-CTU发送的内容与Python发送的内容。

您可以只指定bytes()并查看其作用,而不是使用x = b'4'转换您的Python字符串。