Soru:
İki XBee ve Arduino ile seri iletişim
nathpilland
2014-04-19 08:16:31 UTC
view on stackexchange narkive permalink

İki Arduino Uno kartına bağlı iki XBee'm var (her XBee için bir tane). Her XBee'yi X-CTU yazılımına bağladım ve aşağıdakileri ayarladım:

XBee 1

Pan ID = 4270 DL = 10 MY = 20

XBee 2

Kaydırma Kimliği = 4270 DL = 20 MY = 10

İkisi

DD = 10000 IC = FF IR = 32

Bu nedenle, aynı ağ ve birbirinizi her birinin konuştuğu 'diğer kişi' olarak görün. Seri port üzerinden iletişim kurmak için arduino ve XBee'nin TX ve RX pinlerini kullanıyorum.

Her birinin diğerini duyup duymadığını test ederken, şu kodla bir arduino yükledim:

  #include <SPI.h>void setup () {// bir kez çalıştırmak için kurulum kodunuzu buraya koyun: Serial.begin (9600);} void loop () {// çalıştırmak için ana kodunuzu buraya koyun tekrar tekrar: Serial.print ('x'); delay (1000);}  

Sonra şununla başka bir tane:

  #include <SPI.h>void setup () {// kurulum kodunuzu buraya koyun, bir kez çalıştır: Serial.begin (9600); pinMode (7, ÇIKIŞ); digitalWrite (7, LOW);} void loop () {// tekrar tekrar çalıştırmak için ana kodunuzu buraya koyun: if (Serial.available ()) {char getData = Serial.read (); eğer (getData == 'x') {digitalWrite (7, HIGH); gecikme (500); digitalWrite (7, DÜŞÜK); gecikme (500); } Seri.print (getData); getData = ''; }}  

Bu mükemmel çalışıyor. Doğru arduino üzerinde yarım saniye aralıklarla bir LED yanacaktır. Ancak ikisini de aynı anda birbirleriyle iletişim kurmaya çalıştığımda hiçbir şey olmuyor. Hiçbir LED yanmayacaktır. Her iki arduino'nun kodu şöyledir:

  #include <SPI.h>void setup () {// bir kez çalıştırmak için kurulum kodunuzu buraya koyun: Serial.begin (9600); pinMode (7, ÇIKIŞ); digitalWrite (7, LOW);} void loop () {// tekrar tekrar çalıştırmak için ana kodunuzu buraya koyun: Serial.print ('x'); gecikme (1000); eğer (Serial.available ()) {char getData = Serial.read (); eğer (getData == 'y') {
digitalWrite (7, YÜKSEK); gecikme (500); digitalWrite (7, DÜŞÜK); gecikme (500); } Seri.print (getData); getData = ''; }}  

Ancak bir arduino için kodu Serial.print ('y') ve if (getData == 'x') olarak değiştiriyorum diğerini dinlemek için. Ayrıca göndermeyi ve almayı dengelemek için kurulumda bir arduino'yu bir saniye geciktirmeyi denedim, ancak bu da yardımcı olmuyor.

Dinleyebilmeleri ve birbirleriyle konuşabilmeleri için onlara ihtiyacım var, belki hatta bu örnek gibi aynı zamanda. İçinde bir yakınlık sensörü oluşturmaya çalışıyorum, diyelim ki 'arka', alan 'ön' alanla iletişim kuruyor ve bir ivmeölçer ve 'önden' iki anahtar 'arka' ile iletişim kuruyor.

Bu sorunun üstesinden gelmek için X-CTU'da baud hızı veya yeniden gönderilen paketlerin miktarı gibi değiştirebileceğim ayarlar var mı? Yoksa bu sadece bir kod sorunu mu?

Arduino'nun 3,3V pinine bağlı güç var ve arduino'dan çıkış pinleri için voltaj bölücü olarak 470/220 Ohm direnç kullanıyorum XBee için, bu yüzden voltajın burada bir sorun olduğunu düşünmüyorum.

Ayrıca, arduino'nun bilgisayarla bağlantısını kestim. USB-A - USB-B kablosuyla -> 13000 mAh 5V DC şarj edilebilir pil ile güç sağlıyorum, bu nedenle seri veri hatlarında herhangi bir parazit olmamalıdır. XBee'nin 2 numaralı pini (RX) arduino'nun D0 (RX) pinine ve XBee'nin 3 numaralı pini (TX) arduino'nun D1 (TX) pinine bağlıdır.

Teşekkürler yardımınız.

SoftwareSerial kitaplığını içeren birkaç gönderi gördüm. Bu yardımcı olabilir mi?
Bir modülden diğerine bir şey gönderip gönderemeyeceğinizi görmek için modülleri X-CTU'nun terminaliyle test ettiniz mi? Bu, bir donanım sorununuz, bir yapılandırma sorununuz veya bir yazılım sorununuz olup olmadığını belirlemenize yardımcı olur.
Bir cevap:
dax
2014-04-26 18:28:50 UTC
view on stackexchange narkive permalink

Modüllerinizden birini koordinatör moduna mı ayarladınız? Her xBee ağının bir koordinatöre ihtiyacı vardır. Bu nedenle, X-CTU'daki "Fonksiyon Seti" açılır kutusunu kullanarak Xbee modüllerinizden birini koordinatör moduna geçirmeniz gerekir. Koordinatörün 0 sabit adresi vardır, bu nedenle diğer modülün DL ve HL adres bölümlerini 0'a ayarlamanız gerekir. Koordinatörünüzde, DL'yi FFFF'ye ve HL'yi yayın adresi olan 0'a ayarlayabilirsiniz.

Softserial size yardımcı olmayacak. Bu, pinlerden bazılarını ek bir seri bağlantı noktası olarak kullanmanın bir yoludur. Bir donanım seri bağlantı noktası kullanabiliyorsanız bunu kullanmayın.

Yönlendiricilerle ilgili yanlış bilgileri kaldırdım.
Evet bunu denedim, sadece bellenimi fabrika ayarlarına sıfırladım ve yalnızca pan kimliğini değiştirdim. Bazı nedenlerden dolayı işe yaradı, sanırım tek yapmam gereken bu .. Cevabınız için yine de teşekkürler.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...