SDR
How to configure your RaspberryPI (or PC, or a similar hardware) to use "Remote RTL_UDP" Android App by MichelinoK https://dl.dropboxusercontent.com/u/32778565/Remote%20RTL_UDP.zip RTLSDR AM демодулятор, поддержка нескольких каналов на ключ, предназначен для x86 и Raspberry Pi Прием ИК сигналов с RTL-SDR https://medium.com/@rxseger/receiving-ir-signals-with-rtl-sdr-dongles-5a8658a44b90 Чтобы решить эту дилемму, сначала я изменил rtl_tcp для включения прослушивания ИК с “
-I port_ir” flag:
rtl_tcp -I 1235 будет слушать порт 1235 для ИК, в дополнение к стандартному порту 1234 для RF.
Установите полный драйвер DVB ( не librtlsdr SDR-only драйвер):
sudo modprobe dvb_usb_rtl28xxu Проверьте протоколы с `
ir-keytable` , позволяет им все
sudo ir-keytable -p unknown -p other -p lirc -p rc-5 -p jvc -p sony -p nec -p sanyo -p rc-6 -p sharp -p xmp The only supposedly-supported protocol I couldn’t enable was “mce-kbd”, unclear why (fails with: /sys/class/rc/rc0//protocols: Invalid argument, but all the other protocols can be enabled without error).
Слушать IR события:
ir-keytable -s rc0 -t Нажмите несколько кнопок на пульте и посмотреть, что происходит...
#
broadcast FM radio stereo rtl_fm -Mwbfm -f100.2M -g30 -p87 -s192k -r192k | play -r96k -traw -es -b16 -c2 -V1 -v1 - rtl_fm -Mwbfm -f103.9M -g40 -p87 -s192k -r192k | aplay -r96000 -fS16_LE -traw -c2 rtl_fm -Mwbfm -g40 -f103.9M -p87 -s192k -r192k | play -r48k -traw -es -b32 -c2 -V3 -v1 -
#
broadcast FM radio mono rtl_fm -Mwbfm -f100.2M -g30 -p87 -s176400 -r176400 | play -r88200 -traw -es -b32 -c1 -V1 - rtl_fm -Mwbfm -f103.9M -g40 -p87 -s176400 -r88200 | aplay -r88200 -traw -fS16_LE -traw -c1 #
scanner rtl_fm -p87 -E -f145.4M -f145.275M -f153.65M -f151.95M -s 12k -g40 -l70 -o4 | play -r 12k -traw -es -b16 -c1 -V1 - #
NFM radio mono rtl_fm -f145.45M -l90 -g40 -p87 | play -q -r24000 -traw -es -b16 -c1 -V1 -v1 - sinc 100-4.2k заикаится rtl_fm -f145.45M -l90 -g40 -p-40 | play -q -r24000 -traw -es -b16 -c1 -V1 -v1 - sinc 100-4.2k #
airband scanner rtl_fm -Mam -f 118M:137M:25k -s 12k -g 49.2 -l 280 | play -r 12k -traw -es -b16 -c1 -V1 - #
pager decoder rtl_fm -N -E -f 929.77M -s 22.5k -o 4 -g 11.5 -l 250 | multimon -t raw /dev/stdin Network StreamingВозможно, у вас плохое качество связи Wi-Fi и вы не хотите отправлять полный поток данных со скоростью 1 мс / с. Вот как сделать быстрый и грязный mp3-поток, который будет в среднем 4-8 КБ / сек для голосовых каналов. При желании можно заменить другие кодеки.
On the dongle side: rtl_fm -Mwbfm -f103.9M -g30 -p87 -s192k -r96k | sox -traw -r48000 -q -es -b16 -c2 -v2 - -togg - | socat -u - TCP-LISTEN:8080 On the loudspeaker side: netcat 127.0.0.1 8080 | play -togg - rtl_fm -Mwbfm -f100.2M -g30 -p-40 -s192k -r96k | sox -traw -r48000 -q -es -b16 -c2 -v2 - -togg - | socat -u - TCP-LISTEN:8080 TX ./rtl_fm -Mwbfm -f100.2M -g30 -p87 -s192k -r192k - | netcat -l -p8080 RX netcat 192.168.137.137 8080 | aplay -r48000 -traw -c2 -fS32_LE ./rtl_fm -f433.9M -g40 -p-40 -Mam - | lame -r -s24 -mm -b64 --cbr - - | ezstream -c /etc/ezstream.xml ./rtl_fm -f433.9M -g40 -p-40 -Mam - | oggenc -C1 -R24000 -b64 -q5 - -o - | ezstream -c /etc/ezstream.xml rtl_433 на Raspberry Pi сделан пуленепробиваемым
Как я уже упоминал ранее, я использую
rtl_433 на моем Raspberry Pi, чтобы получать данные о температуре и влажности снаружи от датчика моей маленькой метеостанции и сохранять значения в базе данных
RRDtool . После этого я использую собранные данные для построения графиков за разные периоды в прошлом.


В целом, это работает очень хорошо, но то и дело, через месяц или даже через пару месяцев, что-то в RTL-SDR начинает зависать, предположительно сам USB-контроллер, и вы можете только запустить его. снова физически отключив и снова подключив флешку. По крайней мере, я был не очень доволен этим обстоятельством, тем более что я пробовал разные палки, всегда с одним и тем же неутешительным результатом. Но, как всегда, по крайней мере, кто-то еще сталкивался с этой проблемой раньше и, к счастью, уже нашел для нее решение. Название решения -
usbreset.c , небольшая программа на языке C, которую можно
собрать и использовать всего за несколько секунд.
Я использую небольшой сценарий Bash, чтобы определить, где находится RTL-USB на шине, с помощью
lsusb и затем вызвать исполняемый файл usbreset.
#!/bin/bash
USBNAME=RTL2838
LSUSB=$(lsusb | grep --ignore-case $USBNAME)
DEVICE="/dev/bus/usb/"$(echo $LSUSB | cut --delimiter=' ' --fields='2')"/"$(echo $LSUSB | cut --delimiter=' ' --fields='4' | tr --delete ":")
usbreset $DEVICE 2>&1 >/dev/null
pi@raspberrypi ~ $ nano
usbreset.cВставьте в этот файл следующий исходный код.
-------------------------------------------------------------------------------------------------------------------------------------------
/* usbreset -- send a USB port reset to a USB device */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
int main(int argc,char **argv)
{
const char *filename;
int fd;
int rc;
if(argc != 2)
{
fprintf(stderr,"Usage: usbreset device-filename\n");
return 1;
}
filename = argv[1];
fd = open(filename,O_WRONLY);
if(fd < 0)
{
perror("Error opening output file");
return 1;
}
printf("Resetting USB device %s\n",filename);
rc = ioctl(fd,USBDEVFS_RESET,0);
if(rc < 0)
{
perror("Error in ioctl");
return 1;
}
printf("Reset successful\n");
close(fd);
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------------
После сохранения файла вы можете скомпилировать исходный код с помощью gcc.
pi@raspberrypi ~ $
gcc usbreset.c -o usbresetТеперь переместите сгенерированный двоичный файл в каталог
/usr/local/sbinpi@raspberrypi ~ $
sudo mv usbreset /usr/local/sbin/Затем вы должны настроить владельца программного файла и права доступа следующим образом.
pi@raspberrypi ~ $
sudo chown root:root /usr/local/sbin/usbresetpi@raspberrypi ~ $
sudo chmod 0755 /usr/local/sbin/usbresetПри вызове usbreset вам нужно только указать порт USB, к которому подключено устройство USB.
pi@raspberrypi ~ $
sudo usbreset /dev/bus/usb/001/006Resetting USB device /dev/bus/usb/001/006
Reset successful
Dieser Eintrag wurde am 27.08.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.
Ниже приведен сценарий Python, который я использую для вызова rtl_433. Если с вызовом все прошло нормально, я записываю полученные значения в базу данных, в противном случае я вызываю сценарий Bash сверху, чтобы принудительно выполнить USB-сброс RTL-SDR (вместо физического повторного подключения).
#!/usr/bin/python import sys
import os
import rrdtool
# read the current weather data
process = os.popen('rtl_433 -g 42.1 -f 868250000 -q -R 8 -T 65')
str = process.read()
process.close()
if not str:
os.system('sudo ./reset_rtlsdr.sh')
sys.exit(1)
str = str.strip()
str = str.replace('\t', '')
str = str.replace('\n', ' ')
data = str.split(' ')
# check the order of the two messages and act accordingly
if data[6] == 'Temperature:' and data[15] == 'Humidity:':
update = 'N:' + data[7] + ':' + data[16]
# insert data into database
rrdtool.update("%s/weather.rrd" % (os.path.dirname(os.path.abspath(__file__))), update)
elif data[6] == 'Humidity:' and data[15] == 'Temperature:':
update = 'N:' + data[16] + ':' + data[7]
# insert data into database
rrdtool.update("%s/weather.rrd" % (os.path.dirname(os.path.abspath(__file__))), update)
#!/usr/bin/env python3import sys, os
import subprocess
import fcntl
USBDEVFS_RESET = ord('U') < & 1 > / dev / null
for line in subprocess.check_output(["lsusb"]).decode().split('\n'):
if USBNAME in line: break
usbbus = line.split(' ')[1]
usbdevice = line.split(' ')[3].strip(':')
device = '/dev/bus/usb/{}/{}'.format(usbbus, usbdevice)
return device
try:
filename = find_rtl433_usb()
fd = os.open(filename, os.O_WRONLY)
fcntl.ioctl(fd, USBDEVFS_RESET, 0)
os.close(fd)
except Exception as err:
sys.stderr.write('{}\n'.format(err))
exit(1)
exit(0)
Содержание