01.12.2023 tarihinde fotoğraf güncellemesi yapılmıştır. Çok yakında ek içerikler ve güncel kaynaklar da yayınlanacaktır!

Merhaba, bugün XBee’ler hakkında detaylı bir inceleme yapacağız.

Haydi başlayalım!

  1. ZigBee ve XBee nedir?
  2. ZigBee ile diğer kablosuz teknolojiler arasındaki farklar nelerdir?
  3. XBee modülllerini seçerken nelere dikkat etmeliyiz?
  4. XBee modüllerinin donanımsal özellikleri nedir?
  5. XBee modülleri ile ağ yapısı nasıl kurulur?
  6. XBee’nin donanım bağlantısı nasıl yapılır?
  7. XBee’nin yazılım bağlantısı nasıl yapılır?
  8. X-CTU programı nasıl kullanılır?
  9. XBee ile ilgili yapılmış örnek projeler
  10. XBee Soru & Cevap

1. ZigBee ve XBee nedir?

ZigBee bir kablosuz haberleşme teknolojisi, Xbee ise bu teknolojiyi kullanarak haberleşme yapan bir modüldür. Alıcı ve verici mantığıyla çalışmakla beraber, mesh (ağ) yapısı kurarak da haberleştirme yapabilirsiniz.

2. ZigBee ile diğer kablosuz teknolojiler arasındaki farklar nelerdir?

Buraya direkt bir tabloyu eklemek istiyorum. Tablonun asıl kaynağı için şuraya bakabilirsiniz. Ben tablonun gerekli yerlerini yorumlayarak sizleri bilgi karmaşıklığından kurtarmayı hedefliyorum.

Technology (Teknoloji): Teknolojileri gösteren hücredir.

Frequency (Frekans): Teknolojilerin çalışma frekanslarını gösteren hücredir.

Data Rate (Veri Hızı): Teknolojilerin veri hızlarını gösteren hücredir.

Range (Mesafe): Teknolojilerin veri akış mesafelerini gösteren hücredir.

Power Usage (Güç Tüketimi): Teknolojilerin tükettikleri güçlerin miktarlarını gösteren hücredir.

Cost (Maliyet): Teknolojilerin maliyetlerini gösteren hücredir.

Diğer teknolojiler arasından ZigBee teknolojisine bakacak olursak şunları söyleyebilirim;

Frekans olarak 2.4 GHz gündelik hayatta sıklıkla kullanılan bir frekanstır. FPV sistemlerinde 5 GHz kullanılmasına rağmen, ZigBee teknolojisinin en güncel frekansı maalesef 2.4 GHz olarak gözüküyor. Ama bu frekans Digi’nin kendi sitesinde 5 Ghz antenin monte edilmesi ve bir kaç komutun değiştirilmesiyle frekans değişiminin mevcut olduğunu söylüyorlar.

Veri hızı olarak 250 Kbps hızını birazcık mıncıklayalım 🙂

Kbps kavramı, “Kilo bit per second” kavramlarının baş harflerinin birleşiminden meydana gelmektedir. Bu da saniyedeki aktarılan veri miktarını gösterir. Peki bunun kaç bit olacağını hesaplamak istersek?

1 Kbps = 1000 bps’e eşittir. 250 Kbps ise 250.000 bps’e eşittir. Bu da 250 Kbps veri hızına sahip olan bir aygıtın, 1 saniyede 250.000 tane veri yollayabileceği anlamına gelmektedir.

Mesafe olarak 300 feet gibi bir sayı yazılmış. Buradaki mesafe birimini metre’ye çevirecek olursak, 91 metre civarında bir sayıyı bulmuş olacaksınız. Peki bu sayı doğru bir sayı mı? Doğru ama eksik bir sayı. Bu tablodaki bazı değerler minimum olarak belirlendiği için 91 metre değeri de ZigBee teknolojisini kullanan cihazlar arasında en az mesafeye sahip olan cihazın menzil uzunluğunu vermektedir. Yani sizler XBee PRO S2C’yi satın aldığınızda 91 metre civarında iletişim yapabileceği anlamına gelmez.

Güç tüketimi olarak low (düşük) yazması çok güzel bir değer. Güç tüketiminin oldukça az olduğunu gösterir. Bu da ZigBee teknolojisine sahip cihazların güç sisteminden oldukça az bir paya sahip olduğunu gösterir. Ne kadar güç harcadığı belirli bir şarta bağlandığı için herhangi bir güç değeri verilmemiş. Bu detaylı bilgiyi, bakmak istediğiniz modülün bilgi dosyasında görebilirsiniz.

Maliyet olarak medium (orta) yazması maliyetin orta seviyelerde seyredeceğini belirtir. Haberleşme sistemleri kurulurken, ZigBee teknolojisini kullanan cihazların maliyetleri düşünüldüğünde tekrar bir maliyet hesaplamaya girilmesinin mantıklı olacağını düşünüyorum. Bu sistemleri Türkiye’de kullanmak ve ağ yapısını kurmak maliyetli olabilir. Buradaki orta değeri Türkiye için geçerli olmayabilir 🙂

3. XBee modüllerini seçerken nelere dikkat etmeliyiz?

Arkadaşlar, bu konuyu çok çok derinlemesine incelemek isterdim ama sizi gereksiz ve fazla detaycı bilgiler ile sıkmak istemem. O yüzden bu konuyla ilgili bir kaç tane link paylaşacağım.

  1. https://en.wikipedia.org/wiki/XBee
  2. https://www.geeetech.com/wiki/index.php/XBee
  3. https://cdn-shop.adafruit.com/datasheets/chart_xbee_rf_features.pdf

Seriler

İlk olarak serilerden bahsedeceğim. Seri 1, 2 ve 3 olmak üzere toplam üç tane seri vardır. Bunun haricinde yine bir kaç seri daha var fakat bunları yukarıdaki verdiğim linkten okuyabilirsiniz. Ben en sık kullanılan ve ekonomik olanları anlatmayı tercih ediyorum 🙂

Çok basit olarak jenerasyon örneğini verebilirim, tıpkı işlemcilerdeki gibi. Her jenerasyon çıktıkça hız, performans ve maliyet artarken, önceki jenerasyon yada başka ürünler ile uyumsuzluk artıyor.

XBee ürünlerinde de her seri yükseldikçe fiyat artar, performans yükselir. Her seri kendisi ile uyumlu olurken, başka bir seri ile uyumlu değildir.

Antenler

  • Çip Anten: Üzerindeki çip, anten görevi görmektedir. Küçük boyutlarda olmasına rağmen hızlı aktarım sunan bir anten tipidir.
  • Kablo Anten: Özel yalıtımlı bir kablo, anten görevi görmektedir. Kolay kıvrılıp istediği yöne çevrilebilir fakat çok oynatıldığı zaman lehim noktasından kopabilir. Kablonun uzunluğu, kesit alanı ve tipine göre hız aktarımı değişebilir ama bu tip antenlerde oldukça iş görmektedir. Kablosunu iyi bir hesaplama yaptıktan sonra yenisi ile revize edebilirsiniz. Eğer anten hesabını yeterince bilmiyorsanız lütfen anten ile çok oynamayın 🙂
  • u.FL Anten: Kendi anteninizi montelemek için oluşturulmuş bir bağlantı yuvasına sahiptir. İster dışarıdan isterseniz kendi yaptığınız anteni bir konnektör ile montelemenizi sağlar. Bir kutu tasarımında antenin dış gövdeye bağlı bir yerde kalmasını isterseniz bu tip bağlantı yuvasına sahip modülü seçebilirsiniz.
  • RP-SMA Anten: Farklı güçlerdeki, hazır veya kendi yaptığınız antenleri montelemek için oluşturulmuş bir bağlantı yuvasına sahiptir. Fakat anteni kutudaki istediğiniz yere bağlamak yerine, modül üzerindeki konnektörün hizasına göre hareket etmeniz gerekmektedir. Bu da maalesef kutuda istediğiniz yere montelemenizi sağlamıyor.
  • PCB Anten: Kablo anten ile aynı performansı göstermektedir fakat bu da çip anten gibi baskı devre yöntemiyle çıkan yollar sayesinde anten görevi görür. Yollar üzerinde ufak bir deforme oluşması durumunda iletkenliğini kaybedecek ve aktarım hızlarında azalma olacaktır.

Özet olarak XBee modülü seçerken neye dikkat etmeliyiz?

Aslında projeler için dikkat etmemiz gereken ilk şey menzildir. Bu bağlamda menzil uzunluğu arttıkça maalesef modül fiyatları da artacaktır. Mesela XBee S1 modülü 242₺, XBee S2C modülü 236₺, XBee Pro S2C modülü 403₺ ve XBee Pro S3B ise 494₺ bandında bir fiyata sahiptir.

Burada gerçekten kaliteli ve güncel sürüme sahip olan bir modülü almak istiyorsak, S2 veya S3 serisi ile devam edebiliriz. S2 serisinde de normal ve pro olan seçenekler mevcuttur. Pro olan versiyonunu seçmek, daha hızlı bir veri aktarımı, daha uzun bir menzil ve daha da performans demektir.

Şunu söylemeden geçemeyeceğim. XBee serileri oldukça kalabalıktır. Bu serinin her bir üyesinin farklı farklı özellikleri bulunmaktadır. Eğer çok ciddi bir sistem kuracaksanız S6’ya kadar seri bulunmaktadır. Ben bu kısımlara hiç değinmeyeceğim. Eğer bu aileyi çok merak ediyorsanız size bununla ilgili bir aile tablosunu zevkle paylaşacağım. Sonra “vay efendim, buralar neden yok?” demeyin 🙂

XBee Modülleri Karşılaştırma Tablosu: https://cdn-shop.adafruit.com/datasheets/chart_xbee_rf_features.pdf

Geldik anten kısımlarına! Bu kısımda dikkat etmemiz gereken şey, modülün nerede duracağı, antenin gücü ve hangi konumda olacağı ile alakalıdır.

Antenin dışta kalmasını ve görünür olmasını istiyorsanız u.FL anten, içeride kalsın, estetik görünsün diyorsanız Çip yada PCB anten, bitirme projesinde kullanacağım, stant alanında olacak, anteni çok fazla yer kaplamasın ve dikkatli bir şekilde de koruyacağım diyorsanız Kablo anteni seçebilirsiniz.

Menzilin yüksek olmasını istiyorsanız RP-SMA veya u.FL konnektöre sahip bir modülü seçebilirsiniz. Bu tip konnektöre sahip modüllere, ister güçlü bir hazır anten, isterseniz kendi yapacağınız anteni monteleyebilirsiniz.

Anteni de seçtiğimize göre artık bir sonraki kısma geçebiliriz!

4. XBee modüllerinin donanımsal özellikleri nedir?

Bu sorunun cevabını en sık kullanılan “XBee PRO S2C” modülü ile vermek istiyorum.

Datasheet’in bazı yerlerinden aldığım ve sizlere lazım olacağını düşündüğüm çoğu bilgileri aşağıdaki hazırladığım tabloya ekledim. Asıl kaynak için şu linke tıklayarak gidebilirsiniz.

Yukarıda XBee Pro S2C’nin pin çıkışlarına göz atabilirsiniz.

XBee kendi başına bir mikro denetleyici özelliğine sahiptir. Bu yüzden üzerinde analog girişler, PWM çıkışları, VREF (Voltaj Referansı) pinleri gibi pinler bulunmaktadır.

Örneğin bir adet verici ve alıcı olmak üzere iki sistemimiz olsun. Verici sistemimize bir adet XBee PRO S2C ve buton ekleyelim. Alıcı sistemimize ise bir adet XBee PRO S2C ve led ekleyelim. Verici ve alıcı sistemine X-CTU programı ile atacağımız basit bir yazılım ile birbirleriyle mikro denetleyici veya mikro işlemci olmadan haberleştirebilmemizi sağlayabilir. Yani, tek başına hem iletişim hem de denetleyici özelliği görebilirler.

XBee’nin basit ve özet niteliğinde donanımsal özelliklerini gördük. Nasıl bağlanacağını ve kullanılacağını ilerleyen kısımlarda bahsedeceğim.

5. XBee modülleri ile ağ yapısı nasıl kurulur?

Bu bölümde ağ topolojilerinden, bir kaç kavramdan ve XBee yapılarından bahsedeceğim. Hemen devam edelim!

  • Topoloji: Ağa bağlı olan cihazların arasındaki ilişkiyi gösteren diyagramdır. Topolojileri iyi anlamakta fayda var çünkü bu topolojileri XBee modülleri ile birlikte bir ağ yapısı kurarken kullanacağız. Donanımsal özellikler kısmında bahsettiğim XBee Pro S2C modülünün desteklediği topolojileri görebilirsiniz fakat ben bu topolojiler haricindeki en sık kullanılan topolojileri de sizlere anlatmaya çalışacağım.

Şimdi yukarıdaki topolojileri açıklayalım.

  • Yıldız: Ortadaki merkez düğümün diğer düğümleri yönettiği bir topolojidir. Yalnızca ortadaki düğüm sayesinde diğer düğümlere mesaj giderek iletişim sağlanır. Yıldız veya kar şeklinde benzediği için bu adı almıştır. Merkez düğüme bağlı olan düğümlerden bir tanesinin kopması sistemi etkilemez ama merkez düğümün kopması tüm sistemi etkiler.
  • Ağ (Parça Bağlantı): Bir düğümün, bir kaç düğümle ve karışık bir biçimde iletişim sağladığı topolojidir. Örümcek ağının bir parçasını aldığı için bu adı almıştır. Bir düğümün kopması sistemi etkilemez. Bağlantılı olan düğümler iletişim kurmaya devam edecektir.
  • Ağ (Bütün Bağlantı): Her düğümün bir merkezi düğüm olduğu ve bütünsel iletişimin sağlandığı bir topolojidir. Örümcek ağının tümünü aldığı için bu adı almıştır. Bir düğümün kopması diğer düğümleri etkilemediği gibi, diğer düğümler kendi aralarında bütün bağlantı kurmaya çalışacaklardır.
  • Yol: Bir yol boyunca düğümlerin yola komşu olduğu ve iletişim kurduğu bir topolojidir. Bir yola benzediği ve bu yol boyunca düğümler ile iletişim kurduğu için bu adı almıştır. Yol boyunca düğümlerden birinin kopması sistemi etkilemez fakat yolun kopması tüm düğümlerin iletişim kurmamasını sağlayacaktır.
  • Doğrusal: Tek bir satır boyunca düğümlerin oluşturduğu ve bu satır boyunca iletişimin sağlandığı bir topolojidir. Doğrusal bir şekle sahip olduğu için bu adı almıştır. En uç düğümler hariç, bir düğümün kopması diğer tüm bağlantıyı koparacaktır. En uç düğümden, en uç düğüme gidecek bilgi tüm düğümlerden geçecektir ve bu da iletişim süresini artıracaktır.
  • Halka: Halka’ya bağlı düğümlerin oluşturduğu ve bu halka boyunca iletişimin sağlandığı bir topolojidir. Halka şekline benzediği için bu adı almıştır. Doğrusal topolojiden farklı olarak en uç düğüm gibi bir kavram olmaması bu topolojiyi öne çıkarmaktadır. Yine ortadaki bir düğümün diğer tarafta bulunan ortadaki düğüm ile iletişim kurması için bilginin tüm düğümlerden geçmesi gerekiyor.
  • Ağaç: En tepedeki düğümün en alttaki düğüm ile veya tersi şekilde iletişim kurmasını sağlayan bir topolojidir. Ana gövde ve dalların olduğu bir sisteme sahip olduğu için bu adı almıştır. Aile tablosuna benzer bir sistem olduğu için tasarımsal olarak mantıklı ve anlaşılabilir bir topolojiye benzemektedir. Fakat en üstteki birimden birinin kopması bir alttaki sırayı etkileyecektir.

Şimdi ise XBee ile alakalı bir kaç kavramdan ve kullanılması gereken topolojilerden bahsedelim.

  • Coordinator (Koordinatör): Ağı ve iletişimi yöneten en üst birimdir. Tüm iletişimin yönetimini bu birim sağlar. Veri gönderme, veri alma ve bunun kararını verebilen bir ana birimdir. Bilişim Dünya’sında efendi olarak adlandırılır.
  • Router (Yönlendirici): Ağı ve iletişimi yöneten en üst birimin yardımcısıdır. Koordinatör tarafından verilen komutları uygular ve son cihaz diye tanımlanan cihazları kontrol eder ve onlara komut verir.
  • End Device (Son Cihaz): Koordinatör’den veya yönlendirici’den gelen komutları uygular. Koordinatör ve yönlendirici haricindeki birimlere komut veremez. Bilişim Dünya’sında köle olarak adlandırılır.

Şimdi bu kavramları da öğrendiğimize göre ufak bir örnek uygulama yapalım. Bu kavramların ve topolojilerin ne işe yaradığını anlayalım.

Yukarıdaki tabloda bulunan şehirler arası iletişim de XBee kullanmak oldukça tuhaf kalacaktır ve yukarıdaki şemanın bir örnek olduğunu lütfen unutmayınız. Eğer böyle bir örnek, gerçekte yapılacaksa İnternet olmadığında ve mesafelerin çok uzun olmadığı durumlarda XBee modüllerini tercih etmekte fayda vardır.

Deprem sensörlerinden (Son cihazlardan) gelen deprem bilgileri, illerde bulunan cihazlara (yönlendiricilere) gönderilmektedir. Gün sonunda ise bu bilgilerin raporu ana merkeze (koordinatöre) gönderilir. Bunun sonucunda ise raporlar web sitesinde halk ile paylaşılır.

  • Koordinatör: Kandilli Rasathanesi
  • Yönlendirici: Adana, İzmir ve Samsun
  • Son Cihaz: Adana 1, Adana 2, Adana 3, İzmir 1, İzmir 2, İzmir 3, Samsun 1, Samsun 2 ve Samsun 3 cihazlarıdır.

Peki bu sistem hangi topolojiye benzemektedir?

Yıldız ve ağ topolojisine benzemektedir fakat ağ topolojisinde karışık bir iletişim söz konusu olduğu için daha çok yıldız topolojisine benzemektedir.

6. XBee’nin donanım bağlantısı nasıl yapılır?

İlk başta hangi malzemelere ihtiyaç duyabileceğimizi, daha sonra ise bağlantıların nasıl olduğunu anlatacağım. Daha sonra ise Arduino ve Raspberry Pi arasında nasıl bağlantı kurulacağını anlatacağım.

Donanım bağlantılarını kurarken nelere ihtiyacımız olabilir?

1. XBee Breadboard Adaptörü

Bu kartı breadboard üzerinde kullanmak için alabilirsiniz. Kart üzerinde sabitleme yapmak için delik bulunmaması bu kartın dezavantajıdır. Bu kartı satın aldıktan ve lehim yaptıktan sonra kullanabilirsiniz. Dış hatlarına 2 mm dişi header, iç taraflarına ise 2.54 mm header lehimlemelisiniz. 2 mm headerları lehim yaparken çok dikkatli olunuz, lehim sıvıları iç deliklere kaçabiliyor. Bu yüzden çok hızlı ve özlü bir şekilde yapmanız gerekiyor. 2.54 mm’lik headerları zaten lehimlemek daha basit olacaktır..

Pinlerini bükmek istemediğimiz için çıkarırken ve takarken dikkatli olmalıyız. Alıcı ve verici devre için iki adet alabilirsiniz, biz yedek almadığımız için bu konuda birazcık mağdur olduk. Bu yüzden yedek almayı ihmal etmeyiniz.

2. XBee için 2mm Erkek ve Dişi Header

Bu headerları XBee breadboard adaptöründe ve XBee modülünde kullanıyoruz. Hem erkek hem de dişi versiyonundan alabilirsiniz. Yine yedek almayı unutmayınız 🙂

Bu arkadaşların 10 pinli olanları ayrı bir şekilde satılıyor ve fiyatları oldukça pahalı. Sebebi yalnızca XBee için olması… Hatta biz onlardan sipariş etmiştik ve sipariş geldiğinde ufak bir özel kutuya koyduklarını görmüştüm. Güzel ama birazcık önemsiz detay sanki… Bu yüzden 2 mm ve 40 pinli olanları tercih etmenizde fayda var. Google’da aratırken bu şekilde aramanızda fayda var. Çünkü bu headerlar daha ucuz oluyor.

3. XBee Explorer USB ve Mini USB Tip B Kablosu

Bu modülü XBee’nin iletişimi için kullanıyoruz. Çoğu XBee’ye uyumlu şekildedir. Bu modülün üzerinde güç, filtre vs. devreleri bulunmaktadır. Bu yüzden modülünüz daha kararlı çalışacaktır. Artık 3.3V vermek yerine modül üzerindeki pinlerden 5V değerini rahatlıkla verebilirsiniz.

Genelde bu modülü sipariş ettiğinizde yanında kablo da beraberinde gelmektedir. Bu kablonun bir ucunu modüle, diğer ucunu ise bilgisayara bağladığınızda XBee’yi bilgisayara bağlamış olacaksınız. Modül üzerindeki GND, VCC, TX, RX ve RST (RESET) pinlerini kullanarak da, XBee’yi USB’siz ve breadboard adaptörsüz bir şekilde Arduino’ya, Raspberry Pi’ye vb. geliştirme kartlarına bağlayabilirsiniz.

Ayriyeten üzerindeki LED’ler sayesinde modül üzerinde hareketlilikleri görebiliyorsunuz. Mesaj gönderildiğinde veya alındığında üzerindeki LED’ler yanacaktır.

Breadboard adaptörü almak yerine bundan alıp kullanmak çok mantıklıdır.

4. XBee Arduino Shield

Bu kart, Arduino üzerine oturtularak XBee ve Arduino arasında iletişim kurmaya yarar. Bu arkadaşları projenizin daha güzel bir görüntüye sahip olmak için kullanabilirsiniz. Üzerindeki boşta kalan gruplaşmış yada ayrık pinleri de gerekli sensörlere kablo aracılığıyla bağlayabilirsiniz. Üzerinde reset, anahtar, güç ve filtre devresi bulunduran bu kartları tercih edebilirsiniz. Projenize göre bu seçimleri yapmanızda fayda var.

5. XBee Raspberry Pi Shield

Bu kart, Raspberry Pi üzerine oturtularak XBee ve Raspberry Pi arasında iletişim kurmaya yarar. Yine üzerinde bulunan butonlar sayesinden XBee’yi yönetebiliyorsunuz. Bu kart birazcık pahalı gelebilir, bu yüzden tercih yaparken dikkatli olmanızı öneririm.

Üzerinde XBee’yi USB yada pin olarak görünmesini sağlamak için bir sürgülü anahtar, resetleme yapmak ve kullanıcıların programlaması için bir buton, güç, sinyal seviyesi, alınan ve gönderilen veriler ve kullanıcıların programlaması için de bir LED bulunmaktadır.

Bu kart yerine XBee breadboard adaptörü alıp kablo ile iletişim kurabilirsiniz. Ben böyle yaptım ve oldukça sağlıklı bir yöntem oldu. Eğer profesyonel bir şey istiyorsanız bu modülleri tercih edebilirsiniz.

Bu modüller ile alacağınız performansı maalesef breadboard adaptörü ile alamazsınız. Bu konuda kıyaslama söz konusu bile değildir 🙂

Evet, kullanacak olduğumuz yada kullanmayı tercihinize bıraktığım donanımsal malzemeler bunlardı. Açıklamalarını okuyarak tercihinizi yapabilirsiniz. Şimdi devam edebiliriz.

XBee ile Arduino arasındaki donanım bağlantısı nasıl olur?

Hardware Serial: Mikrodenetleyici üzerindeki bağlantıyı kullanarak iletişim kurar. Kod yüklemeye çalışırken RX (0) ve TX (1) pinleri boş kalmalıdır, aksi takdirde kod Arduino’ya yüklenmeyecektir.

XBee’nin VCC pini, Arduino’nun 3.3V pinine,
XBee’nin GND pini, Arduino’nun GND pinine,
XBee’nin DIN (Data In – RX) pini, Arduino’nun TX pinine,
XBee’nin DOUT (Data Out – TX) pini, Arduino’nun RX pinine bağlanacaktır.

Software Serial: Arduino IDE üzerinden yazılımsal bağlantıyı başlatarak iletişim kurar. Kod yüklemeye çalışırken kullandığınız pinlerin boş kalmasına gerek yoktur. Bağlantılarını yaparken dikkatli olmanızda fayda var çünkü ters yada yanlış yere bağlamak mümkün olabiliyor.

XBee’nin VCC pini, Arduino’nun 3.3V pinine,
XBee’nin GND pini, Arduino’nun GND pinine,
XBee’nin DIN (Data In – RX) pini, Arduino’nun 9’uncu pinine,
XBee’nin DOUT (Data Out – TX) pini, Arduino’nun 10’uncu pinine bağlanacaktır.

Alışkanlık haline geldiği için donanımsal bağlantıyı kullanmayı tercih ettim. Bu yöntemin en kötü tarafı Arduino’ya kod atarken RX (0) ve TX (1) pinlerinin boş kalma zorunluluğunun olmasıdır. Bu yüzden siz hocanın dediğini yapın, yaptığını yapmayın 🙂

XBee ile Raspberry Pi arasındaki donanım bağlantısı nasıl olur?

Bu şekilde bağlayabileceğiniz gibi, USB portundan da bağlayabilirsiniz. Lütfen 5V gerilim vermeyin, modülünüz bozulacaktır 🙂

7. XBee’nin yazılım bağlantısı nasıl yapılır?

XBee ile Arduino arasındaki yazılım bağlantısı nasıl olur?

Bir adet potansiyometre ve LED olduğunu hayal edelim. Potansiyometre ve LED’i ayrı ayrı bir Arduino’ya bağlıyoruz. Potansiyometre kısmındaki sistemin koordinatör (coordinator), LED’in olduğu sisteme ise sonlanan cihaz (end device) olduğunu düşünerek devam ediyoruz.

Gönderen (Koordinatör) kısmındaki Arduino IDE kodları şu şekilde olacak;

#include <SoftwareSerial.h>
SoftwareSerial XBee (9, 10);

void setup() 
{
  XBee.begin(9600); 
}

void loop() 
{
  int potDegeri = analogRead(A0);
  potDegeri = map (potDegeri, 0, 1023, 0, 255);

  XBee.println(potDegeri);
}

Yukarıda yazılımsal bağlantıyı kullandık. Eğer donanımsal bağlantıyı kullanmak isterseniz, ilk olarak modülü RX ve TX pinlerine bağlamalıyız. Ardından 1 ve 2’nci satırları kaldırıp 6’ncı ve 14’üncü satırdaki “XBee” değerini “Serial” olarak değiştirmelisiniz.

9 ve 10’uncu pine bağlanan XBee modülü, A0 pininden okunan potansiyometre değerini, belirli bir değer aralığına (PWM aralığına) dönüştürüp potDegeri değişkenine aktarıyoruz. Ve en sonunda ise potDegeri değişkenini de karşı tarafa yolluyoruz. Karşı tarafa bir değer yollarken print() yada println() fonksiyonunu kullanabiliriz.

Alıcı (Sonlanan cihaz) kısmındaki Arduino IDE kodları şu şekilde olacak;

#include <SoftwareSerial.h>
SoftwareSerial XBee (9, 10);

#define LED 3

void setup() 
{
  XBee.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() 
{
  int gelenDeger = XBee.read();

  analogWrite(LED, gelenDeger);
}

Yukarıda yazılımsal bağlantıyı kullandık. Eğer donanımsal bağlantıyı kullanmak isterseniz, ilk olarak modülü RX ve TX pinlerine bağlamalıyız. Ardından 1 ve 2’nci satırları kaldırıp 8’inci ve 14’üncü satırdaki “XBee” değerini “Serial” olarak değiştirmelisiniz.

Gelen değerin sözel olduğu durumlarda “readString()” kullanmalısınız.

3 numaralı pine bağlı ve “LED” ismine sahip değişkene, XBee üzerinden okunan değeri, gelenDeger değişkenine aktarıyoruz. Aktarım işleminden sonra gelenDeger değerini LED’imizin güç kısmının olduğu yere yazıyoruz. Bu sayede gelen değere göre LED’in yanmasını sağlamış oluyoruz.

XBee ile Raspberry Pi arasındaki yazılım bağlantısı nasıl olur?

Bağlantıyı başarıyla kurduktan sonra yazılımı Python 3x IDLE üzerinden yazacağız. Bu kısıma gelirken bazı şeyleri yapmanız gerekiyor. Öncelikle bağlantıyı başarıyla kurduktan sonra sistemin bu aygıtı kabul etmesi ve tanıması gerekiyor. İlk olarak UART (Seri Haberleşme) ayarına izin vermemiz gerekiyor. Bunun için CMD ekranını açıyoruz ve sırasıyla kodları uyguluyoruz.

 sudo nano /boot/config.txt

Yukarıdaki kodu yazıyoruz ve açılan pencerede en alt kısma gelip bir alttaki kodu ekleyip kayıt ediyoruz.

enable_uart = 1

Kayıt ettikten sonra yapılan ayarların kontrolünü sağlamamız gerekiyor.

ls -l /dev

Yukarıdaki kod ile birlikte cihazın bilgilerini görmemiz gerekiyor. Eğer bu adımda cihaz görünmezse bağlantı yanlış olabilir veya UART ayarını aktifleştirmemişsiniz demektir.

Yukarıdaki kodu yazdıktan sonra ekrana bazı aygıtların bilgileri gelecektir. Bu kısımda “ttyS0”, “ttyAMA0” veya “ttyUSB0” değerine sahip aygıtlar gördüyseniz ana yazılıma geçebiliriz.

import serial, time
global XBee

XBee = serial.Serial('/dev/ttyAMA0', 9600, timeout = 1)

def veriGonder(veri):
    time.sleep(1)
    XBee.write(veri.encode())

def veriOku():
    alinanVeri = XBee.readline().strip().decode('UTF-8')
    
    if(alinanVeri != ""):
        print ("Gelen veri:", str(alinanVeri))

while True:
    veriOku()
    time.sleep(1)

Yukarıdaki yazılımda iki adet fonksiyon vardır. Birisi veri gönderir, birisi ise veri okur. Biz yalnızca veri okumasını istediğimiz için while döngüsünün içine “veriOku()” fonksiyonunu yazıyoruz ve kodu çalıştırıyoruz. Kod çalıştıktan sonra Arduino kısmındaki bilgilerin Raspberry Pi’ye geldiğini veya Raspberry Pi’nin Arduino’ya bilgi gönderdiğini görebilirsiniz.

import serial, time

Seri haberleşme için serial, zaman için ise time kütüphanesini programımıza aktardık.

global XBee

Değişkeni programın her yerine kullanacağım için XBee değişkenini global yaptım.

XBee = serial.Serial('/dev/ttyAMA0', 9600, timeout = 1)

UART’a bağlı değişkene 9600 baudrate hızında bağlanmaya çalışıyor, her yapacağı işlem arasında 1 sn gecikme süresi ekliyoruz. Bu hafızanın şişmemesini ve rahat çalışmasını sağlıyor fakat 1 saniye de gecikme oluyor.

Bu kısımdaki “ttyAMA0” ismini bulduğunuz aygıtın ismi ile değiştirmeniz gerekiyor. Bu konuda hata almanız oldukça mümkündür. Bu yüzden herhangi bir problem ile karşılaşırsanız lütfen soru sormayı unutmayınız 🙂

 time.sleep(1)

Bir saniye boyunca beklemesini sağlıyoruz.

 XBee.write(veri.encode())

Kullanıcıdan gelen verinin dönüştürülüp karşıya gönderilmesini sağlıyoruz.

alinanVeri = XBee.readline().strip().decode('UTF-8')

Gelen verideki boşlukları silip, dönüştürüp ve ardından UTF-8’e çevirip alinanVeri değişkenine aktarıyoruz.

 if (alinanVeri != ""):
        print ("Gelen veri:", str (alinanVeri))

Gelen verinin boş olmamak şartıyla metinsel bir değere çevirilip ekrana yazdırılmasını sağlıyoruz.

8. X-CTU programı nasıl kullanılır?

İlk olarak XBee’lerin güncellenmesi ve ayarlarının yapılması gerekiyor. Bu işlemleri yaptıktan sonra yazılımlarını yazıp devremizi kurabiliriz. Bunları yapmadan önce bir kaç şeye ihtiyacımız olacak. En güvenli ve mantıklı bir seçim yaptıktan sonra şu arkadaşlara ihtiyaç duyacaksınız.

Bu kısımda alacağınız parçalar çok önemli. Ucuza kaçayım diye bunları almayıp direkt olarak Arduino’ya bağlayıp X-CTU programında ayar yapmaya çalışmayın. Ufak bir hata ile XBee modülünü yakabilirsiniz, yanlış kabloyu, yanlış yere takıp kolaylıkla hata alabilirsiniz, tecrübe ile sabittir. Bu yüzden 20-25₺’lik bir programlayıcı modülü almamazlık etmeniz size pahalıya sebep olabilir 🙂

  • İlk olarak X-CTU programını buradan indirip normal bir şekilde kurunuz. İndirme yapmadan önce son versiyonu seçtiğinizden emin olunuz. Kurulumu yaptıktan sonra programı çalıştırınız.
  • Program açıldıktan ve kartın üzerindeki şekil ile modülün şeklinin oturduktan sonra, iki adet XBee Explorer USB’ye iki adet XBee modülümüzü takalım.
  • Modülleri bağladıktan sonra “Discover Devices” butonuna tıklıyoruz. Çıkan COM portları arasından XBee’lerimizin bağlı olduğu portu seçiyoruz. Eğer hangi port olduğundan emin değilseniz, “Aygıt Yöneticisi / Bağlantı Noktaları (COM & LPT)” kısmına göz atmanızı öneririm. Portu seçtikten sonra “Next” deyip ilerliyoruz. Karşımıza çıkan ayar menüsünden bağladığımız cihazın nasıl aranacağına dair ayarları yapacağız.
    • Baud Rate: 9600 olacak ama bazen bul(a)madığı için 115200 de yapılabilir.
    • Data Bits: 8
    • Parity: None
    • Stop Bits: 1
    • Flow Control: None
  • Bu ayarları da yaptıktan sonra “Next” deyip ilerliyoruz. Bu kısımdan sonra cihazımız bulunmaya başlıyor. Modülümüz veya modüllerimiz bulunduktan sonra “Add Selected Devices” diyerek modüllerimizi panelimize ekliyoruz. Eklenen modülleri ilk önce güncellemeli, ardından konfigürasyon edilmelidir.
  • Güncelleme yapacağımız modülün üzerine çift tıklayarak sağ panele özelliklerin gelmesini bekliyoruz. Sağ kısımdan ilk önce modülümüzü güncelleyeceğiz, bu yüzden “Update” butonuna basıyoruz. Çıkan ekrandaki ayarları şu şekilde yapabiliriz;
    • Product family: Kullandığınız XBEE modülünün model ismi. Örneğin, “XB24C”
    • Function set: Kullanacağız modülün yayın türüdür. Genelde XBee modülleri ZigBee teknolojisini kullanır fakat bu kısımdan farklı bir versiyon yüklemeyi veya güncellemeyi sağlayabilirsiniz. Bu kısımda “ZİGBEE TH Reg” seçeneğini seçip devam edebiliriz.
    • Firmware version: (Newest) olan versiyonu seçtikten sonra “Update” butonuna basıp bu kısmı bitiriyoruz.
  • Diğer modüllerimizi de bu şekilde güncelledikten sonra konfigürasyon kısmına geçebiliriz.
  • Şimdi program üzerindeki konfigürasyon ayarları şu şekilde olacak;
    • CH (Channel – Kanal): A, B, C, D gibi harfler verebilir. Ben genelde A ve B kullanıyorum. Diğer modüllerle kesinlikle aynı olmalıdır. Bu kısım çok önemlidir.
    • CE (Coordinator Enable – Koordinatör Modunu Aktifleştirme): Eğer ayarlarını yaptığınız cihazın koordinatör olmasını istiyorsanız bu kısmı bu kısmı “Enabled”, “End Device” olmasını istiyorsanız “Disabled” yapmalısınız.
    • ID (Identification – Kimlik): Diğer modüller ile haberleşmede kullanacağı kimlik veya şifredir. Bu kısıma ise örneğin, “2020, A1B2” değerler verebiliriz.
    • DH (Destination Address High – Maximum Hedef Aralığı): Karşıdaki modülün SH değeri olacaktır.
    • DL (Destination Address Low – Minimum Hedef Aralığı): Karşıdaki modülün SL değeri olacaktır.
    • NI (Node Identifier – İsim Kimliği): Modülümüz ismini belirler. Bu kısma modüle tanımlayıcı bir ad verilebilir.
  • Tüm ayarları yaptıktan ve tekrar kontrol ettikten sonra “Update” butonuna basıp ayarların modüle yüklenmesini bekliyoruz.
  • Evet, bu kısım da bitti. Şimdi daha detaylı bir örnek yaparak ayarların nasıl olacağını detaylı bir şekilde anlatmak istiyorum.

Örnek

Hayalimizde şunu canlandıralım. 3 tane potansiyometre, 1 tane RGB LED, 4 tane Arduino Nano ve 4 tane XBee PRO S2C modülümüz olsun. 3 tane Arduino Nano’ya birer tane potansiyometre ve XBee PRO S2C, 1 tane Arduino Nano’ya ise RGB LED ve ve XBee PRO S2C’yi bağlayalım. Şimdi bunların ağ yapısını kuralım.

R Modülü: Üzerinde bir adet potansiyometre barındıran ve koordinatörlük görevini üstlenen birimdir. Modüle bağlı potansiyometreden gelen değerler RGB İstasyonu’na gidecektir. R1 Modülü’nün ayarları şu şekilde olacaktır;

  • CH: B
  • CE: Enabled
  • ID: 2020
  • DH: RGB1’in SH değeri.
  • DL: RGB1’in SL değeri.
  • NI: R1

G Modülü: Üzerinde bir adet potansiyometre barındıran ve koordinatörlük görevini üstlenen birimdir. Modüle bağlı potansiyometreden gelen değerler RGB İstasyonu’na gidecektir. G1 Modülü’nün ayarları şu şekilde olacaktır;

  • CH: B
  • CE: Enabled
  • ID: 2020
  • DH: RGB1’in SH değeri.
  • DL: RGB1’in SL değeri.
  • NI: G1

B Modülü: Üzerinde bir adet potansiyometre barındıran ve koordinatörlük görevini üstlenen birimdir. Modüle bağlı potansiyometreden gelen değerler RGB İstasyonu’na gidecektir. B1 Modülü’nün ayarları şu şekilde olacaktır;

  • CH: B
  • CE: Enabled
  • ID: 2020
  • DH: RGB1’in SH değeri.
  • DL: RGB1’in SL değeri.
  • NI: B1

RGB İstasyonu: Üzerinde bir adet RGB LED barındıran ve son cihaz görevini üstlenen birimdir. R,G ve B modüllerinden gelen değerler RGB LED’e aktarılarak RGB LED’in istenildiği renkte yanması sağlanılacaktır. RGB1 İstasyonu’nun ayarları şu şekilde olacaktır;

  • CH: B
  • CE: Disabled
  • ID: 2020
  • NI: RGB1

9. XBee ile ilgili yapılmış örnek projeler

1. RC Kumanda

Bu proje Kickstarter tarafından fonlamaya açılan bir projeydi. XBee modüllerini kullanarak çeşitli şeylerin kontrolünü sağlıyordu.

2. Akıllı Koltuk

Bu proje Nissan tarafından geliştirilmiş akıllı koltuk projesiydi. Ben bu projeyi takip ederken video sırasında XBee modülünü gördüm ve sizinle paylaşmak istedim. Videoya tıkladığınızda veya 55’nci saniyesinde XBee modülünü görebilirsiniz.

3. Akıllı Ev Sistemi

Bu proje ise akıllı ev sisteminin mini bir hale çevrilmiş versiyonudur. Odalar arasında kullanılan XBee modülleri ile sıcaklık, pencere ve lamba gibi şeylerin kontrolünü sağlayabiliyorsunuz.

4. Electronics Hub Platformu

Projelerin sayfasına gitmek için şuraya tıklayınız.

5. Hackster Platformu

Projelerin sayfasına gitmek için şuraya tıklayınız.

10. XBee Soru & Cevap

Soru: XBee modülünü bilgisayar görmüyor, ne yapmalıyım?
Cevap: Eğer hazır bir kart aldıysanız veya kendiniz yaptıysanız lehimleri, tüm pinleri, soketleri ve kabloları kontrol ediniz. Eğer bu kısımlar doğruysa yazılımsal ayarları (baudrate hızını vs.) kontrol ediniz.

Halen cevap vermiyorsa donanımsal değişikliğe gidebilirsiniz. USB kabloyu, modülü veya diğer bileşenleri sırayla değiştirip denemekte fayda var. Bunun sonucunda yanmış bir XBee modülü ile karşılaşma ihtimaliniz yüksektir.


Soru: XBee modülü diğer modül ile iletişim kuramıyor, ne yapmalıyım?
Cevap: Modülün yuvaya tam olarak oturduğundan veya eksik oturmadığından, kabloların pinlere tam olarak oturduğundan, iletişim kurduğunuz kart ile doğru bir bağlantı yaptığınızdan ve pinleri yanlış bağlamadığınızdan, alıcı, verici veya diğer bileşenlerin yazılımsal ayarlarının (haberleşme ID’lerinin vs.) doğru olduğundan emin olunuz.

Halen cevap vermiyorsa donanımsal değişikliğe gidebilirsiniz. USB kabloyu, modülü veya diğer bileşenleri sırayla değiştirip denemekte fayda var. Bunun sonucunda yanmış bir XBee modülü ile karşılaşma ihtimaliniz yüksektir.

Yukarıdaki cevaplara özet olarak şunları söylemeliyim. XBee modüllerini yanlış bir güç ile yakmanız oldukça mümkün. Biz böyle bir şeyi maalesef yaşadık 🙂

Yanan bir şeyin ardından arızasının ne olduğunu bulmak zor. En sonunda yandığını anladığınızda çok tepki gösterebilirsiniz ama bu adıma gelebilmeniz için tüm kabloları, soketleri, yuvaları ve modülleri değiştirmekte ve detaylı kontrol etmekte fayda var. Bizler bir şeyi alırken birazcık ucuzuna kaçtığımız için bazen modüller iletişim kuramayabiliyor, bilgisayarımız göremeyebiliyor, alıcı veya verici modül diğer modülü göremeyebiliyor. Bu sorunları almamak için detaylıca araştırma yapıp en sonunda uygulamanız çok mantıklı olacaktır. Bu adımları yapmadan direkt olayın içine dalarsanız hata almanız olası olacaktır çünkü bu arkadaşlar oldukça hassas ve pahalı modüllerdir.

Çok detaylı olmasa da, bir blogu daha bitirmiş olduk. Bu blogu paylaşmanızı ve merak ettiğiniz soruları sormanızı sizden rica edebilirim.

Hepinize iyi çalışmalar dilerim!