如何从Arduino Xbee发送数据并从C#接收数据

时间:2013-09-02 04:37:12

标签: c# arduino port xbee

我有一个Arduino XBee shield,我有一个Sparkfun XBee USB浏览器。我想发送来自Ardunio XBee的数据(温度传感器)并在我的C#程序中接收它。

现在,假设我想将45,100发送给我的C#程序。

我没有收到任何来自XBee盾牌的数据。我错过了代码吗?

以下代码是Arduino XBee盾牌的发件人:

SoftwareSerial mySerial(4,5);
void setup()
{
    mySerial.begin(9600);
}


void loop()
{
    if (mySerial.available() > 0)
    {
        mySerial.write(45);
        mySerial.write(',');
        mySerial.write(100);
        mySerial.write('\n');
    }
}

C#中USB XBee资源管理器的接收器代码:

SerialPort port = new SerialPort();

public Form1()
{
    try
        {
            port.PortName = "COM8";
            port.BaudRate = 9600;
            port.DataBits = 8;
            port.Parity = Parity.None;
            port.StopBits = StopBits.One;
            port.Open();
            Console.WriteLine("Opened");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Sorry! " + ex);
        }

        // Handler for receiving data
        port.DataReceived += serialPort1_DataReceived;
    }

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        if (port.IsOpen == true)
        {
            string RxString = port.ReadLine();
            Console.WriteLine(RxString);
        }
    }

XBee配置:

  • 一个XBee是:协调器AT模式 - 连接到USB Sparkfun Explorer
  • 另一个XBee是:路由器AT模式 - 连接到Arduino shield

由于tomlogic在Stack Overflow问题 XBee two-way communication (sender and receiver) at the same time 中回答了我的问题。

2 个答案:

答案 0 :(得分:1)

我得到了它的工作。问题来自我的void loop()方法。 mySerial应该像

mySerial.println(temperature);
  • 但是,您必须检查mySerial Rx,Tx引脚是否正确

答案 1 :(得分:0)

您的XBee屏蔽使用Arduino上的引脚0和1。不需要Softwareserial,只需使用:

Serial.begin(9600); // In void setup() routine

要发送温度,请在函数loop

中使用此功能
Serial.print(temperature); // Need a variable 'temperature' of course...

使用Arduino IDE中的内置终端测试Arduino代码,看看端口是否实际可以接收和发送(首先删除XBee屏蔽)。在此之后,测试XBee通信。