- Gerekli malzemeler
- Raspberry Pi'yi LoRa ile Bağlama
- Arduino'yu LoRa ile Bağlama
- Raspberry Pi için pyLoRa
- Raspberry Pi'yi LoRa modülü için yapılandırma
- LoRa için Raspberry Pi Programlama
- Raspberry Pi ile iletişim kurmak için LoRa için Arduino Kodu
- Raspberry Pi ve Arduino arasındaki LoRa İletişimini Test Etme
LoRa, IoT'nin, Bağlantılı Arabaların, M2M'nin, Endüstri 4.0'ın ortaya çıkmasıyla giderek daha popüler hale geliyor. Çok daha az güçle uzun mesafelere iletişim kurabilme yeteneği nedeniyle, tasarımcılar tarafından pille çalışan bir Şeyden veri göndermek / almak için tercihen kullanılıyor. LoRa'nın temellerini ve LoRa'nın Arduino ile nasıl kullanılacağını zaten tartışmıştık. Teknolojinin başlangıçta bir LoRa Düğümünün bir LoRa ağ geçidi ile iletişim kurması amaçlanmasına rağmen, bir LoRa Düğümünün uzun mesafeli bilgi alışverişi için başka bir LoRa Düğümü ile iletişim kurması gereken birçok senaryo vardır. Bu eğitimde , Raspberry pi ile bir LoRa modülü SX1278'in nasıl kullanılacağını öğreneceğiz Arduino gibi bir mikrodenetleyiciye bağlı başka bir SX1278 ile iletişim kurmak için. Bu yöntem, Arduino'nun sensörlerden veri almak ve LoRa aracılığıyla uzun bir mesafeden Pi'ye göndermek için bir Sunucu olarak hareket edebilmesi ve ardından Müşteri olarak hareket eden Pi'nin bu bilgileri alıp cihaza yükleyebilmesi nedeniyle birçok yerde kullanışlı olabilir. İnternet erişimi olduğundan beri olabilir. İlginç değil mi? Öyleyse başlayalım.
Gerekli malzemeler
- SX1278 433MHz LoRa Modülü - 2 Adet
- 433MHz LoRa anteni - 2Nos
- Arduino UNO- veya diğer versiyon
- Ahududu Pi 3
Raspberry Pi'nizin zaten bir işletim sistemi ile yanıp söndüğü ve internete bağlanabildiği varsayılmaktadır. Değilse, devam etmeden önce Raspberry Pi ile Başlarken öğreticisini izleyin. Burada Rasbian Jessie yüklü Raspberry Pi 3 kullanıyoruz.
Uyarı: SX1278 LoRa modülünüzü her zaman 433 MHz antenlerle kullanın; aksi takdirde modül hasar görebilir.
Raspberry Pi'yi LoRa ile Bağlama
Yazılım paketlerine girmeden önce donanımı hazırlayalım. SX1278 16-pin Lora modülü 3.3V Mantık SPI kullanarak iletişime geçmesi. Raspberry pi ayrıca 3.3V mantık seviyesinde çalışır ve ayrıca yerleşik SPI portu ve 3.3V regülatörüne sahiptir. Böylece LoRa modülünü doğrudan Raspberry Pi ile bağlayabiliriz. Bağlantı tablosu aşağıda gösterilmiştirAhududu Pi | Lora - SX1278 Modülü |
3.3V | 3.3V |
Zemin | Zemin |
GPIO 10 | MOSI |
GPIO 9 | MİSO |
GPIO 11 | SCK |
GPIO 8 | Nss / Etkinleştir |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Referans için aşağıdaki devre şemasını da kullanabilirsiniz. Devre şeması kullanılarak oluşturuldu Not RFM9x modülü çok benzer SX1278 modülü, dolayısıyla görünüş aşağıdaki resimde farklı olabilir.
Bağlantılar oldukça basittir, karşılaşabileceğiniz tek sorun SX1278'in devre tahtası uyumlu olmamasıdır, bu nedenle bağlantıları yapmak için doğrudan bağlantı kablolarını kullanmanız veya aşağıda gösterildiği gibi iki küçük devre tahtası kullanmanız gerekir. Pi yeterli akım sağlayamayabileceğinden, çok az kişi LoRa modülüne ayrı bir 3.3V güç rayı ile güç sağlamayı önerir. Ancak düşük güçlü bir modül olan Lora, Pi'nin 3.3V rayında çalışmalı, ben de aynı şeyi test ettim ve sorunsuz çalıştığını gördüm. Ama yine de bir tutam tuzla al. Ahududu pi ile LoRa bağlantı kurulumum aşağıdaki gibi görünüyor
Arduino'yu LoRa ile Bağlama
Arduino modülü bağlantısı, önceki eğitimimizde kullandığımızla aynı kalır. Tek fark, Sandeep Mistry'deki kütüphaneyi kullanmak yerine, bu projede daha sonra tartışacağımız Radio head'e dayalı Rspreal kütüphanesini kullanacağız. Devre aşağıda verilmiştir
Yine Arduino Uno üzerinde 3.3V pin kullanabilir veya ayrı bir 3.3V regülatör kullanabilirsiniz. Bu projede yerleşik voltaj regülatörünü kullandım. Bağlantıları kolayca yapmanıza yardımcı olmak için pin bağlantı tablosu aşağıda verilmiştir.
LoRa SX1278 Modülü | Arduino UNO Kurulu |
3.3V | 3.3V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MİSO | D12 |
MOSI | D11 |
RST | D9 |
Modül bir devre tahtasına sığmadığından, bağlantıları yapmak için doğrudan bağlantı tellerini kullandım. Bağlantı kurulduktan sonra Arduino LoRa kurulumu aşağıdaki gibi görünecektir.
Raspberry Pi için pyLoRa
LoRa ile kullanabileceğiniz birçok python paketi vardır. Ayrıca Raspberry Pi, birden fazla LoRa düğümünden veri almak için LoRaWAN olarak kullanılır. Ancak bu projede amacımız, iki Raspberry Pi modülü arasında veya bir Raspberry Pi ile Arduino arasında Eşler Arası iletişim kurmayı hedefliyoruz. Bu yüzden pyLoRa paketini kullanmaya karar verdim. Arduino ve Raspberry Pi ortamında kullanılabilen rpsreal LoRa Arduino ve rpsreal LoRa Raspberry pi modüllerine sahiptir. Şimdilik Raspberry Pi ortamına odaklanalım.
Raspberry Pi'yi LoRa modülü için yapılandırma
Daha önce de belirtildiği gibi, LoRa modülü SPI iletişimiyle çalışır, bu nedenle Pi üzerinde SPI'yi etkinleştirmeli ve ardından pilora paketini yüklemeliyiz. Pi'nin terminal penceresini açtıktan sonra aynısını yapmak için aşağıdaki adımları izleyin. Yine macun kullanıyorum Pi'ime bağlanmak için uygun yönteminizi kullanabilirsiniz.
Adım 1: içine alın yapılandırma penceresinde aşağıdaki komutu kullanarak. Aşağıdaki pencereyi görmek için
sudo raspi-config
Adım 2: Aşağıdaki resimde gösterildiği gibi arabirim seçeneklerine gidin ve SPI'yi etkinleştirin. Biz zorundayız SPI arayüzü etkinleştirmek biz SPI protokolü aracılığıyla LCD ve PI iletişim kurar tartışıldığı gibi çünkü
Adım 3: Değişiklikleri kaydedin ve terminal penceresine geri dönün. Pip ve python'un güncellendiğinden emin olun ve ardından aşağıdaki komutu kullanarak RPi.GPIO paketini kurun .
pip yükleme RPi.GPIO
Bu paket sınıfı, Pi'deki GPIO pinini kontrol etmemize yardımcı olacaktır. Başarıyla yüklediyseniz, ekranınız şöyle görünecektir
Adım 4: Benzer şekilde aşağıdaki komutu kullanarak spidev paketini kurmaya devam edin. Spidev, Raspberry Pi üzerinde SPI iletişimi gerçekleştirmek için kullanılabilen Linux için bir python bağlamasıdır.
pip kurulum spidev
Kurulum başarılı olursa, terminal aşağıdaki gibi görünmelidir.
Adım 5: Ardından aşağıdaki pip komutunu kullanarak pyLoRa paketini kuralım. Bu paket, LoRa ile ilişkili Radyo modellerini yükler.
pip kurulum pyLoRa
Kurulum başarılı olursa aşağıdaki ekranı göreceksiniz.
PyLoRa paketi, Arduino ve Raspberry Pi ile sorunsuz bir şekilde kullanılabilen şifreli iletişimi de destekler. Bu, iletişiminizdeki veri güvenliğini artıracaktır. Ancak, şifreleme bu eğitimin kapsamında olmadığı için yapmadığım bu adımdan sonra ayrı bir paket kurmanız gerekiyor. Daha fazla ayrıntı için yukarıdaki github bağlantılarını takip edebilirsiniz.
Bu adımdan sonra paket yol bilgisini pi'ye ekleyebilir ve sonunda verilen python programı ile deneyebilirsiniz. Ancak yolu başarılı bir şekilde ekleyemedim ve bu nedenle kitaplığı manuel olarak indirmem ve programlarım için aynısını doğrudan kullanmam gerekti. Bu yüzden aşağıdaki adımlarla ilerlemek zorunda kaldım
Adım 6: İndirme ve piton-rpi.gpio paketi ve spidev paketini yüklemek komuta altında kullanarak.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
Her iki kurulumdan sonra terminal penceresi böyle bir şey göstermelidir.
Adım 7: Ayrıca git'i kurun ve ardından Raspberry Pi'miz için python dizinini klonlamak için kullanın. Bunu aşağıdaki komutları kullanarak yapabilirsiniz.
sudo apt-get install git sudo git klon
Bu adım tamamlandığında , Raspberry Pi ana klasöründe SX127x alt dizinini bulmalısınız. Bu, kütüphaneyle ilişkili tüm gerekli dosyalara sahip olacaktır.
LoRa için Raspberry Pi Programlama
Eşler arası bir LoRa iletişiminde, bilgiyi ileten modüle bir sunucu, bilgiyi alan modüle ise bir istemci adı verilir. Çoğu durumda Arduino, verileri ölçmek için bir sensörle sahada kullanılacak ve bu verileri almak için Pi kullanılacaktır. Bu nedenle, bu eğitimde Raspberry Pi'yi istemci ve Arduino'yu sunucu olarak kullanmaya karar verdim. Tam Ahududu Pi istemci programı bu sayfanın alt kısmında bulunabilir. Burada programdaki önemli satırları açıklamaya çalışacağım.
Dikkat: Program dosyasının SX127x kitaplık klasörünün bulunduğu dizinde olduğundan emin olun. Bu klasörü kopyalayabilir ve projeyi taşımak isterseniz her yerde kullanabilirsiniz.
Program oldukça basit , LoRa modülünü 433Mhz'de çalışacak şekilde ayarlamalı ve ardından gelen paketleri dinlemeliyiz. Herhangi bir şey alırsak, bunları konsola yazdırırız. Her zaman olduğu gibi, gerekli python kitaplıklarını içe aktararak programa başlıyoruz.
zamandan SX127x.LoRa'dan uyku içe aktar * SX127x.board_config'den içe aktarma BOARD BOARD.setup ()
Bu durumda zaman paket, Lora paket Lora iletişim için kullanılan gecikmeler oluşturmak için kullanılır ve board_config kuruluna ve Lora parametrelerini ayarlamak için kullanılır. Kartı ayrıca BOARD.setup () işlevini kullanarak kurarız .
Daha sonra üç tanımlı python LoRa sınıfını oluşturuyoruz. Programın ahududu istemcisi olarak çalışmasını sağlamak için yalnızca girinti yaptığımızdan, sınıfın yalnızca üç işlevi vardır: init sınıfı, başlangıç sınıfı ve on_rx_done sınıfı. İnit sınıfı, set_pa_config yönteminde ayarlandığı gibi LoRa modülünü 433MHz'de 125kHz bant genişliğiyle başlatır . Ardından , güç tüketiminden tasarruf etmek için modülü uyku moduna geçirir.
# Başlangıçtan sonraki Orta Aralık Varsayılanları 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 yonga / simge, 13 dBm üzerinde CRC lora.set_pa_config (pa_select = 1) def __init __ (öz, ayrıntılı = Yanlış): süper (LoRaRcvCont, self).__ init __ (ayrıntılı) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Başlatma işlevi, modülü alıcı olarak yapılandırdığımız ve RSSI (Alma sinyali gücü Göstergesi), durum, çalışma frekansı vb. Modülü uyku modundan sürekli alıcı modunda (RXCONT) çalışacak şekilde ayarladık ve ardından RSSI ve modem durumu gibi değerleri okumak için bir while döngüsü kullanıyoruz. Ayrıca seri arabellekteki verileri terminale de akıtırız.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) while True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Son olarak, gelen paket okunduktan sonra on_rx_done işlevi çalıştırılır. Bu işlevde, alınan değerler, alıcı bayrağı yüksek ayarlandıktan sonra Rx tamponundan yük adı verilen bir değişkene taşınır. Ardından, kullanıcı tarafından okunabilir bir veriyi kabuk üzerine yazdırmak için alınan değerlerin kodu utf-8 ile çözülür. Ayrıca, başka bir değer alınana kadar modülü tekrar uyku moduna geçiririz.
def on_rx_done (self): print ("\ nAlınan:") self.clear_irq_flags (RxDone = 1) payload = self.read_payload (nocheck = True) print (byte (payload).decode ("utf-8", 'ignore'))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Programın geri kalan kısmı sadece alınan değerleri konsola yazdırmak ve bir klavye kesmesi kullanarak programı sonlandırmaktır. Güçten tasarruf etmek için programı sonlandırdıktan sonra bile kartı tekrar uyku moduna getirdik.
deneyin: lora.start () KeyboardInterrupt hariç: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") son olarak: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Raspberry Pi ile iletişim kurmak için LoRa için Arduino Kodu
Daha önce de bahsettiğim gibi rpsreal kodu hem Arduino hem de Pi'yi destekler ve dolayısıyla Arduino ve Pi arasında iletişim mümkündür. AirSpayce'nin Radiohead Kitaplığı temelinde çalışır. Bu yüzden önce radyo kafa kitaplığını Arduino IDE'nize kurmanız gerekir.
Bunu yapmak için Github sayfasını ziyaret edin ve kütüphaneyi ZIP klasörüne indirin. Ardından bunu Arduino IDE'nizin kitaplık klasörüne yerleştirin. Şimdi, Arduino IDE'yi yeniden başlatın ve Radio kafa kitaplığı için örnek dosyalar bulacaksınız. Burada Arduino'yu 0'dan 9'a kadar test paketleri göndermek için bir LoRa sunucusu olarak çalışacak şekilde programlayacağız. Aynısını yapmak için Tam kod her zaman olduğu gibi bu sayfanın alt kısmında bulunabilir. Burada programdaki birkaç önemli satırı açıklayacağım.
Programa, SPI protokolünü kullanmak için SPI kitaplığını (varsayılan olarak yüklenir) ve ardından LoRa iletişimini gerçekleştirmek için Radyo kafasından RH_RF95 kitaplığını içe aktararak başlıyoruz. Ardından LoRa'nın Chip select (CS), Reset (RST) ve Interrupt (INT) pinlerini Arduino ile Arduino'nun hangi pinine bağladığımızı tanımlıyoruz. Son olarak, modülün 434MHz Frekansta çalışması ve LoRa modülünü başlatması gerektiğini de tanımlıyoruz.
#Dahil etmek
Kurulum işlevinin içinde, yeni başlamak için LoRa modülünü sıfırlama pimini 10 milisaniye için aşağıya çekerek sıfırlayacağız. Daha sonra Radio kafa kitaplığını kullanarak daha önce oluşturduğumuz modül ile başlatıyoruz. Ardından LoRa sunucusu için frekans ve iletim gücünü ayarlıyoruz. İletim ne kadar yüksekse paketleriniz o kadar fazla mesafe kat edecek ancak daha fazla güç tüketecektir.
void setup () { // Serial Monitor Serial.begin'ı başlatın (9600); // LoRa Modülünü sıfırlayın pinMode (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, DÜŞÜK); gecikme (10); digitalWrite (RFM95_RST, YÜKSEK); gecikme (10); // LoRa Modülünü başlatırken (! Rf95.init ()) { Serial.println ("LoRa radyo başlatılamadı"); while (1); } // Varsayılan frekansı 434.0MHz olarak ayarlayın if (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency başarısız"); while (1); } rf95.setTxPower (18); // Lora Modülünün iletim gücü }
Sonsuz döngü işlevinin içinde, veri paketini LoRa modülü aracılığıyla göndermemiz yeterlidir. Bu veriler, kullanıcı komutunun sensör değeri gibi herhangi bir şey olabilir. Ancak basitleştirmek amacıyla, her 1 saniyelik aralık için 0'dan 9'a char değeri göndereceğiz ve ardından değeri 9'a ulaştıktan sonra 0'a geri göndereceğiz. Değerlerin yalnızca bir char dizisi biçiminde gönderilebileceğini ve veri türünün unit8_t bir seferde 1 bayttır. Aynısını yapmak için kod aşağıda gösterilmiştir
void döngü () { Serial.print ("Gönder:"); char radiopacket = char (değer)}; rf95.send ((uint8_t *) radiopacket, 1); gecikme (1000); değer ++; eğer (değer> '9') değer = 48; }
Raspberry Pi ve Arduino arasındaki LoRa İletişimini Test Etme
Şimdi, hem donanımımızı hem de programımızı hazırladığımıza göre, Arduino kodunu UNO kartına yüklememiz ve python taslağının pi üzerinde başlatılması gerekiyor. Her iki donanımın bağlı olduğu test kurulumum aşağıdaki gibi görünüyor
Python istemci çizimi Pi'de başlatıldığında (yalnızca python 3 kullanın), her şey düzgün çalışıyorsa, kabuk penceresinden pi'de alınan Arduino paketlerini görmelisiniz. Aşağıdaki resimde gösterildiği gibi "Received: 0" ila 9'a dikkat etmelisiniz.
Tüm gerekli kitaplıkları içeren eksiksiz Raspberry pi kodu buradan indirilebilir.
Artık Arduino sunucusunu hareket ettirebilir ve modülün menzilini kontrol edebilirsiniz; gerekirse RSSI değerini kabukta görüntülemek de mümkündür. Projenin tam çalışması aşağıda bağlantısı verilen videoda bulunabilir. Artık Arduino ve Raspberry pi arasında uzun mesafeli düşük güçlü LoRa iletişimini nasıl kuracağımızı bildiğimize göre, eksiksiz bir IoT paketi oluşturmak için Arduino tarafında sensör ve Pi tarafında bulut platformu ekleyerek devam edebiliriz.
Umarım projeyi anladınız ve inşa etmekten keyif aldınız. Çalışmasını sağlamakta sorun yaşıyorsanız, diğer teknik sorular için aşağıdaki yorum bölümünü veya forumları kullanın.