- Bahan yang Dibutuhkan
- Menghubungkan Raspberry Pi dengan LoRa
- Menghubungkan Arduino dengan LoRa
- pyLoRa untuk Raspberry Pi
- Mengonfigurasi modul Raspberry Pi untuk LoRa
- Pemrograman Raspberry Pi untuk LoRa
- Kode Arduino untuk LoRa untuk berkomunikasi dengan Raspberry Pi
- Menguji Komunikasi LoRa antara Raspberry Pi dan Arduino
LoRa semakin populer dengan munculnya IoT, Connected Cars, M2M, Industri 4.0, dll. Karena kemampuannya untuk berkomunikasi dalam jarak jauh dengan daya yang sangat kecil, LoRa lebih disukai digunakan oleh desainer untuk mengirim / menerima data dari Thing bertenaga baterai. Kami telah membahas dasar-dasar LoRa dan cara menggunakan LoRa dengan Arduino. Meskipun teknologi ini awalnya ditujukan untuk LoRa Node untuk berkomunikasi dengan gateway LoRa, ada banyak skenario di mana LoRa Node harus berkomunikasi dengan LoRa Node lain untuk bertukar informasi melalui jarak jauh. Jadi, dalam tutorial ini kita akan belajar cara menggunakan modul LoRa SX1278 dengan Raspberry piuntuk berkomunikasi dengan SX1278 lain yang terhubung ke mikrokontroler seperti Arduino. Metode ini dapat berguna di banyak tempat karena Arduino dapat bertindak sebagai Server untuk mengambil data dari sensor dan mengirimkannya ke Pi melalui jarak jauh melalui LoRa dan kemudian Pi yang bertindak sebagai Klien dapat menerima informasi ini dan mengunggahnya ke bisa karena memiliki akses ke internet. Kedengarannya menarik bukan? Jadi, mari kita mulai.
Bahan yang Dibutuhkan
- SX1278 433MHz LoRa Module - 2 Nos
- Antena LoRa 433MHz - 2Nos
- Arduino UNO- atau versi lain
- Raspberry Pi 3
Diasumsikan bahwa Raspberry Pi Anda sudah di-flash dengan sistem operasi dan sudah bisa terkoneksi ke internet. Jika tidak, ikuti tutorial Memulai Raspberry Pi sebelum melanjutkan. Di sini kami menggunakan Rasbian Jessie yang diinstal Raspberry Pi 3.
Peringatan: Selalu gunakan modul SX1278 LoRa Anda dengan antena 433 MHz; jika tidak, modul mungkin rusak.
Menghubungkan Raspberry Pi dengan LoRa
Sebelum kita masuk ke paket perangkat lunak, mari kita siapkan perangkat kerasnya. The SX1278 adalah 16-pin Lora modul yang berkomunikasi menggunakan SPI pada 3.3V Logic. Raspberry pi juga beroperasi pada level logika 3.3V dan juga memiliki port SPI built-in dan regulator 3.3V. Jadi kita bisa langsung menghubungkan modul LoRa dengan Raspberry Pi. Tabel koneksi ditunjukkan di bawah iniRaspberry Pi | Modul Lora - SX1278 |
3.3V | 3.3V |
Tanah | Tanah |
GPIO 10 | MOSI |
GPIO 9 | SUP KEDELAI JEPANG |
GPIO 11 | SCK |
GPIO 8 | Nss / Aktifkan |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Anda juga dapat menggunakan diagram sirkuit di bawah ini untuk referensi. Perhatikan bahwa diagram rangkaian dibuat menggunakan modul RFM9x yang sangat mirip dengan modul SX1278, maka tampilannya mungkin berbeda pada gambar di bawah ini.
Koneksinya cukup mudah, satu-satunya masalah yang mungkin Anda hadapi adalah bahwa SX1278 tidak kompatibel dengan papan tempat memotong roti sehingga Anda harus menggunakan kabel penghubung langsung untuk membuat sambungan atau menggunakan dua papan tempat memotong roti kecil seperti yang ditunjukkan di bawah ini. Juga beberapa orang menyarankan untuk memberi daya pada modul LoRa dengan rel daya 3.3V yang terpisah karena Pi mungkin tidak dapat mendapatkan arus yang cukup. Namun Lora sebagai modul daya rendah harus bekerja pada rel 3.3V Pi, saya menguji hal yang sama dan menemukannya berfungsi tanpa masalah. Tapi, tetap konsumsi dengan sedikit garam. Pengaturan koneksi LoRa saya dengan Raspberry pi terlihat seperti ini di bawah
Menghubungkan Arduino dengan LoRa
Koneksi untuk modul Arduino tetap sama dengan yang kami gunakan di tutorial sebelumnya. Satu-satunya perbedaan adalah alih-alih menggunakan perpustakaan dari Sandeep Mistry kita akan menggunakan perpustakaan Rspreal berdasarkan kepala Radio yang akan kita bahas nanti dalam proyek ini. Sirkuit diberikan di bawah ini
Sekali lagi Anda dapat menggunakan pin 3.3V pada Arduino Uno atau menggunakan regulator 3.3V yang terpisah. Dalam proyek ini saya telah menggunakan regulator tegangan on-board. Tabel koneksi pin diberikan di bawah ini untuk membantu Anda membuat koneksi dengan mudah.
Modul LoRa SX1278 | Dewan Arduino UNO |
3.3V | 3.3V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
SUP KEDELAI JEPANG | D12 |
MOSI | D11 |
RST | D9 |
Karena modul tidak cocok dengan papan tempat memotong roti, saya telah menggunakan kabel penghubung langsung untuk membuat sambungan. Setelah koneksi dibuat, pengaturan Arduino LoRa akan terlihat seperti ini di bawah ini
pyLoRa untuk Raspberry Pi
Ada banyak paket python yang dapat Anda gunakan dengan LoRa. Juga umumnya Raspberry Pi digunakan sebagai LoRaWAN untuk mendapatkan data dari beberapa node LoRa. Tapi, dalam proyek ini tujuan kami untuk melakukan komunikasi Peer to Peer antara dua modul Raspberry Pi atau antara Raspberry Pi dan Arduino. Jadi, saya memutuskan untuk menggunakan paket pyLoRa. Ini memiliki modul rpsreal LoRa Arduino dan rpsreal LoRa Raspberry pi yang dapat digunakan pada Arduino dan lingkungan Raspberry Pi. Untuk saat ini, mari fokus pada lingkungan Raspberry Pi.
Mengonfigurasi modul Raspberry Pi untuk LoRa
Seperti yang diceritakan sebelumnya, modul LoRa bekerja dengan komunikasi SPI, jadi kita harus mengaktifkan SPI di Pi dan kemudian menginstal paket pylora . Ikuti langkah-langkah di bawah ini untuk melakukan hal yang sama, setelah membuka jendela terminal Pi. Sekali lagi, saya menggunakan dempul untuk terhubung ke Pi saya, Anda dapat menggunakan metode nyaman Anda.
Langkah 1: Masuk ke jendela konfigurasi menggunakan perintah berikut. Untuk mendapatkan jendela di bawah ini
sudo raspi-config
Langkah 2: Arahkan ke opsi antarmuka dan aktifkan SPI seperti yang ditunjukkan pada gambar di bawah ini. Kita harus mengaktifkan antarmuka SPI karena seperti yang kita diskusikan, LCD dan PI berkomunikasi melalui protokol SPI
Langkah 3: Simpan perubahan dan kembali ke jendela terminal. Pastikan pip dan python diperbarui dan kemudian instal paket RPi.GPIO menggunakan perintah berikut.
pip instal RPi.GPIO
Kelas paket ini akan membantu kami mengontrol pin GPIO di Pi. Jika berhasil dipasang layar Anda akan terlihat seperti ini
Langkah 4: Demikian pula, lanjutkan dengan menginstal paket spidev menggunakan perintah berikut. Spidev adalah pengikat python untuk Linux yang dapat digunakan untuk melakukan komunikasi SPI pada Raspberry Pi.
pip instal spidev
Jika penginstalan berhasil, terminal akan terlihat seperti ini di bawah.
Langkah 5: Selanjutnya, instal paket pyLoRa menggunakan perintah pip berikut. Paket ini menginstal model Radio yang terkait dengan LoRa.
pip instal pyLoRa
Jika penginstalan berhasil, Anda akan melihat layar berikut.
Paket PyLoRa juga mendukung komunikasi terenkripsi yang dapat digunakan dengan Arduino dan Raspberry Pi secara mulus. Ini akan meningkatkan keamanan data dalam komunikasi Anda. Tetapi Anda harus menginstal paket terpisah setelah langkah ini yang tidak saya lakukan karena enkripsi tidak termasuk dalam cakupan tutorial ini. Anda dapat mengikuti tautan github di atas untuk lebih jelasnya.
Setelah, langkah ini Anda dapat menambahkan informasi jalur paket ke pi dan mencoba dengan program python yang diberikan di akhir. Tetapi saya tidak dapat menambahkan jalur dengan sukses dan karenanya harus mengunduh perpustakaan secara manual dan menggunakannya secara langsung untuk program saya. Jadi saya harus melanjutkan dengan langkah-langkah berikut
Langkah 6: Unduh dan instal paket python-rpi.gpio dan paket spidev menggunakan perintah di bawah ini.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
Jendela terminal akan menampilkan sesuatu seperti ini setelah kedua instalasi.
Langkah 7: Juga instal git dan kemudian gunakan untuk mengkloning direktori python untuk Raspberry Pi kami. Anda dapat melakukannya dengan menggunakan perintah berikut.
sudo apt-get install git sudo git clone
Setelah langkah ini selesai Anda harus menemukan sub direktori SX127x di folder home Raspberry Pi. Ini akan memiliki semua file yang diperlukan yang terkait dengan perpustakaan.
Pemrograman Raspberry Pi untuk LoRa
Dalam komunikasi peer to peer LoRa, modul yang mengirimkan informasi disebut server dan modul yang menerima informasi disebut klien. Dalam kebanyakan kasus, Arduino akan digunakan di lapangan dengan sensor untuk mengukur data dan Pi akan digunakan untuk menerima data tersebut. Jadi, saya memutuskan untuk menggunakan Raspberry Pi sebagai klien dan Arduino sebagai server dalam tutorial ini. The program klien Raspberry Pi lengkap dapat ditemukan di bagian bawah halaman ini. Di sini saya akan mencoba menjelaskan baris-baris penting dalam program.
Perhatian: Pastikan file program berada di direktori yang sama di mana folder perpustakaan SX127x ada. Anda dapat menyalin folder ini dan menggunakannya di mana saja jika Anda ingin memindahkan proyek.
Programnya cukup sederhana, kita harus mengatur modul LoRa untuk bekerja pada 433Mhz dan kemudian mendengarkan paket yang masuk. Jika kami menerima sesuatu, kami hanya mencetaknya di konsol. Seperti biasa, kami memulai program dengan mengimpor pustaka python yang diperlukan.
dari waktu tidur impor dari SX127x.LoRa impor * dari SX127x.board_config import BOARD BOARD.setup ()
Dalam hal ini paket waktu digunakan untuk membuat penundaan, paket Lora digunakan untuk komunikasi LoRa dan board_config digunakan untuk mengatur parameter papan dan LoRa. Kami juga mengatur papan menggunakan fungsi BOARD.setup () .
Selanjutnya kita buat kelas python LoRa dengan tiga definisi. Karena kita hanya indentasi untuk membuat program berfungsi sebagai klien raspberry, kelas hanya memiliki tiga fungsi yaitu kelas init, kelas mulai, dan kelas on_rx_done . Kelas init menginisialisasi modul LoRa pada 433MHz dengan bandwidth 125kHz sebagaimana diatur dalam metode set_pa_config . Kemudian modul ini juga berada dalam mode tidur untuk menghemat konsumsi daya.
# Default Rentang Menengah setelah init adalah 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128chips / simbol, CRC pada 13 dBm lora.set_pa_config (pa_select = 1) def __init __ (self, verbose = False): super (LoRaRcvCont, self).__ init __ (verbose) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Fungsi start adalah tempat kita mengkonfigurasi modul sebagai penerima dan mendapatkan seperti RSSI (Indikator kekuatan sinyal penerima), status, frekuensi operasi, dll. Kami mengatur modul agar bekerja dalam mode penerima berkelanjutan (RXCONT) dari mode tidur dan kemudian menggunakan loop sementara untuk membaca nilai seperti RSSI dan status modem. Kami juga membuang data di buffer serial ke terminal.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) sedangkan True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Akhirnya fungsi on_rx_done dijalankan setelah paket masuk dibaca. Dalam fungsi ini nilai yang diterima dipindahkan ke variabel yang disebut payload dari buffer Rx setelah menyetel flag penerima tinggi. Kemudian nilai yang diterima diterjemahkan dengan utf-8 untuk mencetak data yang dapat dibaca pengguna pada shell. Kami juga mengembalikan modul ke mode tidur sampai nilai lain diterima.
def on_rx_done (self): print ("\ nReceived:") self.clear_irq_flags (RxDone = 1) payload = self.read_payload (nocheck = True) print (byte (payload).decode ("utf-8", 'abaikan')) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Bagian yang tersisa dari program ini hanya untuk mencetak nilai yang diterima di konsol dan menghentikan program menggunakan interupsi keyboard. Kami sekali lagi mengatur papan dalam mode tidur bahkan setelah penghentian program untuk menghemat daya.
coba: lora.start () kecuali KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") akhirnya: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Kode Arduino untuk LoRa untuk berkomunikasi dengan Raspberry Pi
Seperti yang saya sebutkan sebelumnya, kode rpsreal mendukung Arduino dan Pi dan karenanya komunikasi antara Arduino dan Pi dimungkinkan. Ia bekerja berdasarkan Perpustakaan Radiohead dari AirSpayce. Jadi Anda harus menginstal perpustakaan kepala radio terlebih dahulu ke Arduino IDE Anda.
Untuk melakukan itu kunjungi halaman Github dan unduh perpustakaan di folder ZIP. Kemudian letakkan di folder perpustakaan Arduino IDE Anda. Sekarang, restart Arduino IDE dan Anda akan menemukan file contoh untuk perpustakaan kepala Radio. Di sini kami akan memprogram Arduino untuk bekerja sebagai server LoRa untuk mengirim paket pengujian seperti 0 hingga 9. Kode Lengkap untuk melakukan hal yang sama dapat ditemukan di bagian bawah halaman ini seperti biasa. Di sini, saya akan menjelaskan beberapa baris penting dalam program ini.
Kami memulai program dengan mengimpor perpustakaan SPI (diinstal secara default) untuk menggunakan protokol SPI dan kemudian perpustakaan RH_RF95 dari kepala Radio untuk melakukan komunikasi LoRa. Kemudian kita tentukan pin Arduino mana yang telah kita hubungkan dengan pin Chip select (CS), Reset (RST) dan Interrupt (INT) dari LoRa dengan Arduino. Terakhir, kami juga menetapkan bahwa modul harus bekerja pada Frekuensi 434MHz dan menginisialisasi modul LoRa.
#include
Di dalam fungsi pengaturan kami akan mengatur ulang modul LoRa dengan menarik pin reset ke rendah selama 10 mili detik untuk memulai dari awal. Kemudian kita inisialisasi dengan modul yang telah kita buat sebelumnya dengan menggunakan Radio head library. Kemudian, kami mengatur frekuensi dan daya transmisi untuk server LoRa. Semakin tinggi transmisi, semakin jauh paket Anda akan melakukan perjalanan tetapi akan menghabiskan lebih banyak daya.
void setup () { // Inisialisasi Serial Monitor Serial.begin (9600); // Setel ulang PinMode Modul LoRa (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); penundaan (10); digitalWrite (RFM95_RST, HIGH); penundaan (10); // Inisialisasi Modul LoRa while (! Rf95.init ()) { Serial.println ("Init radio LoRa gagal"); sementara (1); } // Setel frekuensi default 434.0MHz if (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency gagal"); sementara (1); } rf95.setTxPower (18); // Kekuatan transmisi Modul Lora }
Di dalam fungsi infinite loop , kita hanya perlu mengirim paket data melalui modul LoRa. Data ini dapat berupa apa saja seperti nilai sensor dari perintah pengguna. Tetapi untuk kesederhanaan kita akan mengirim nilai char 0 sampai 9 untuk setiap interval 1 detik dan kemudian menginisialisasi nilainya kembali ke 0 setelah mencapai 9. Perhatikan bahwa nilai hanya dapat dikirim dalam format array karakter dan jenis datanya harus unit8_t itu adalah 1 byte sekaligus. Kode untuk melakukan hal yang sama ditunjukkan di bawah ini
void loop () { Serial.print ("Send:"); char radiopacket = char (nilai)}; rf95.send ((uint8_t *) radiopacket, 1); penundaan (1000); nilai ++; jika (nilai> '9') nilai = 48; }
Menguji Komunikasi LoRa antara Raspberry Pi dan Arduino
Sekarang, setelah perangkat keras dan program kami siap, kami hanya perlu mengunggah kode Arduino ke papan UNO dan sketsa python harus diluncurkan pada pi. Pengaturan pengujian saya dengan kedua perangkat keras terhubung, terlihat seperti ini di bawah
Setelah sketsa klien python diluncurkan di Pi (hanya gunakan python 3), jika semuanya berfungsi dengan baik, Anda akan melihat paket Arduino diterima dalam pi melalui jendela shell. Anda harus melihat "Diterima: 0" hingga 9 seperti yang ditunjukkan pada gambar di bawah.
Kode Raspberry pi lengkap dengan semua perpustakaan yang diperlukan dapat diunduh dari sini.
Anda sekarang dapat memindahkan server Arduino dan memeriksa jangkauan modul; juga memungkinkan untuk menampilkan nilai RSSI pada shell jika diperlukan. Pekerjaan lengkap proyek dapat ditemukan di video yang ditautkan di bawah ini. Sekarang, setelah kita mengetahui cara membangun komunikasi LoRa jarak jauh berdaya rendah antara Arduino dan Raspberry pi, kita dapat melanjutkan dengan menambahkan sensor pada sisi Arduino dan platform cloud di sisi Pi untuk membuat paket IoT yang lengkap.
Harap Anda memahami proyek tersebut dan menikmati membangunnya. Jika Anda memiliki masalah dalam membuatnya berfungsi, gunakan bagian komentar di bawah ini atau forum untuk pertanyaan teknis lainnya.