SDR Mesh Network چیست؟ (مبتدی)
با اتصال چند RTL-SDR به یک Raspberry Pi (یا چند RPi در شبکه)، میتوان یک شبکه گوشدهنده طیف ساخت که همزمان چند باند مختلف را مانیتور کند. این برای مانیتورینگ سیگنالهای LoRa، ADS-B، و تلهمتری UGV/UAV در چند فرکانس همزمان بسیار مفید است.
کتابخانه SoapySDR یک لایه abstraction است که به نرمافزار اجازه میدهد با هر نوع SDR (RTL-SDR، HackRF، USRP) با یک API یکسان کار کند. با SoapyRemote میتوان SDRهای فیزیکی متصل به RPi را از یک کامپیوتر مرکزی از طریق شبکه کنترل کرد.
هدف این راهنما
راهاندازی ۳ RTL-SDR روی یک RPi برای مانیتور همزمان LoRa 433MHz، ADS-B 1090MHz، و FM 88-108MHz.
- هزینه: ۳ × ۱۵ دلار RTL-SDR + RPi4
- نرمافزار: رایگان (SoapySDR، Dump1090)
نصب SoapySDR روی Raspberry Pi
# نصب SoapySDR + RTL-SDR پلاگین:
sudo apt update
sudo apt install -y soapysdr-tools soapysdr-module-rtlsdr rtl-sdr
# سریالسازی هر RTL-SDR (مهم برای شناخت!):
rtl_eeprom -d 0 -s 00000001 # دانگل اول
rtl_eeprom -d 1 -s 00000002 # دانگل دوم
rtl_eeprom -d 2 -s 00000003 # دانگل سوم
# تست شناسایی:
SoapySDRUtil --find="driver=rtlsdr"
# راهاندازی SoapyRemote (دسترسی از شبکه):
sudo apt install -y soapysdr-server
SoapySDRServer --bind="0.0.0.0:55132"
# از کامپیوتر دیگر:
SoapySDRUtil --find="driver=remote,remote=192.168.1.10:55132"
اسکریپت Python — مانیتورینگ همزمان
import SoapySDR
import numpy as np
import threading
def scan_band(serial, freq_mhz, label):
sdr = SoapySDR.Device({"driver":"rtlsdr","serial":serial})
sdr.setSampleRate(SoapySDR.SOAPY_SDR_RX, 0, 2.4e6)
sdr.setFrequency(SoapySDR.SOAPY_SDR_RX, 0, freq_mhz*1e6)
sdr.setGain(SoapySDR.SOAPY_SDR_RX, 0, 35)
rx = sdr.setupStream(SoapySDR.SOAPY_SDR_RX, SoapySDR.SOAPY_SDR_CF32)
sdr.activateStream(rx)
buff = np.zeros(1024, dtype=np.complex64)
while True:
sr = sdr.readStream(rx, [buff], 1024)
power = 10*np.log10(np.mean(np.abs(buff)**2)+1e-12)
print(f"[{label}] {freq_mhz}MHz power={power:.1f}dB")
threads = [
threading.Thread(target=scan_band, args=("00000001",433.92,"LoRa")),
threading.Thread(target=scan_band, args=("00000002",1090.0,"ADS-B")),
]
for t in threads: t.daemon=True; t.start()
input("Enter برای توقف...")
چکلیست راهاندازی
| بررسی | وضعیت |
|---|---|
| هر RTL-SDR سریال منحصربهفرد دارد؟ | ☐ rtl_test -d 0 |
| USB Hub با آداپتور برق جداگانه؟ | ☐ ضروری برای ۳+ SDR |
| SoapySDRUtil هر ۳ دانگل را پیدا میکند؟ | ☐ |
| دمای RPi زیر ۷۰°C؟ | ☐ vcgencmd measure_temp |