簡體   English   中英

將數據從Xbee Coordinator傳輸到Arduino Uno上的遠程XBee

[英]Transmitting Data from Xbee Coordinator to Remote XBee on Arduino Uno

我正在嘗試從連接到計算機的XBee Series 1設備(協調器)向遠程XBee Series 1設備(終端設備)發送數據串,以打開和關閉2個LED。

這是我用來將數據字符串從XBee協調器發送到XBee終端設備的Python代碼:

import serial
import time

arduino = serial.Serial('COM13', 9600, timeout=1)
#msg = arduino.readline()  # read everything in the input buffer

time.sleep(3)

ASCIIdata = '121210'

for i in range(len(ASCIIdata)):

    if ASCIIdata[i] == '1':
        strin = '1'
        arduino.write(strin.encode())
        print strin.encode()
        time.sleep(0.2)
        # print(ASCIIdata[i])
        try:
            print ("Message from arduino: ")
            print arduino.readline()
            raise
        except Exception as e:
            print ("Fail to send!")

    if ASCIIdata[i] == '2':
        strin = '2'
        arduino.write(strin.encode())
        time.sleep(0.2)
        # print(ASCIIdata[i])
        try:
            print ("Message from arduino: ")
            print arduino.readline()
        except:
            print "Fail to send!"

    if ASCIIdata[i] == '0':
         strin = '0'
         arduino.write(strin.encode())
         time.sleep(0.2)
         # print(ASCIIdata[i])
         try:
             print ("Message from arduino: ")
             print arduino.readline()
         except:
             print "Fail to send!"

strin = 'p'
arduino.write(strin.encode()) # tell arduino a phase shifter setting has been finished
strin = 's'
arduino.write(strin.encode())

arduino.close()
time.sleep(0.5) # waits for 2 s
print('Data to be transfered: %s'%ASCIIdata)

這是Arduino端上的代碼,遠程XBee終端設備連接到該端:

#define pins
int pinLED1 = 5;
int pinLED2 = 12;
char c;

void setup() {
pinMode(pinLED1, OUTPUT);
pinMode(pinLED2, OUTPUT);
Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    c = Serial.read();
    Serial.print(c);
    if (c == '1') {
      digitalWrite(pinLED1, HIGH);
      digitalWrite(pinLED2, LOW);
      Serial.print("1 ON, 2 OFF\n");
    }
    else if (c == '2') {
      digitalWrite(pinLED1, LOW);
      digitalWrite(pinLED2, HIGH);
      Serial.print("1 OFF, 2 ON\n");
    }
    else if (c == '0') {
      digitalWrite(pinLED1, LOW);
      digitalWrite(pinLED2, LOW);
      Serial.print("Both unlit.\n");
    }
  }
  else{
    Serial.print("Nope");
  }
}

正確的輸出應該是Arduino的2個LED交替切換然后打開,而Serial.print()輸出應該反映在Python終端上。

但是,當我運行Python腳本時,它不斷拋出異常“發送失敗!”,即Arduino和Python之間沒有通信。

我已經通過連接我的Arduino(Uno)的USB端口通信來測試以上兩個代碼,並且一切正常。

我嘗試以以下方式配置XBees:

  1. XBee(協調器)和XBee(終端設備)-都處於AT模式(禁用API)
  2. XBee(協調器)-API模式和XBee(終端設備)-AT模式,但未產生結果。

請問我哪里出問題了?

更新2018年2月15日:我不確定提供此信息是否有幫助,但是目前,這是我配置XBee Series 1模塊的方式:

XCTU配置。用於協調器和終端設備

我知道XBee無線電有很多固件,我想知道我面臨的問題是否是由於802.15.4協議的限制(盡管我認為情況並非如此)。

我認為您應該解決問題並從頭開始。 您是否嘗試過將Arduino連接到計算機串行監視器並觀察收到的內容? 如果沒有正確接收字符,請嘗試使用xbee軟件終端手動發送它們,以確保可以正確獲得它們並且xbee之間的連接正常。 然后,您可以開始調試代碼(如果問題尚未解決!)

我意識到我錯誤地設置了協調器和終端設備的地址〜協調器可以從終端設備接收消息,因為我將終端設備的地址配置為指向協調器,但是卻忘記了設置目標地址我的協調人必須與我的終端設備相同。

對於我的疏忽,我真的感到非常抱歉。

在2個單獨的設備上使用TeraTerm有助於解決我的問題,因為它消除了我的Arduino代碼的任何問題。

謝謝@TheEngineer!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM