Хотелось бы продолжить серию постов на тему «что прикольного можно сделать с RTL-SDR». Поскольку в последний раз речь зашла об одном из протоколов любительского радио в лице APRS, давайте разовьем эту тему и научимся принимать CW (то есть, морзянку), SSB (общение голосом) и RTTY (текстовые чаты по радио). Заодно будет дан ответ на вопрос, будоражущий умы миллионов. А именно — живо ли любительское радио?

Automatic Packet Reporting System, или APRS — это система, придуманная коротковолновиками в 80-ые годы и чем-то напоминающая современные SMS. Оператор любительского радио посылает в эфир текстовое сообщение с информацией о своем местонахождении, используемых частотах, погодных условиях, и так далее. Благодаря репитерам и гейтвеям, эта информация доступна не только находящимся поблизости операторам. Она пересылается, в том числе через интернет, и может быть снова отправлена в совершенно другой точке Земли.

Как-то раз я прочитал на hackaday.com небольшую заметку об IceRadio. Это проект господина Eric Brombaugh, представляющий собой SDR на базе микроконтроллера STM32, FPGA производства Lattice серии Ultra или Ultra Plus, АЦП AD9203 или более дорогого ADC14C105, ЦАП CS4344 с интерфейсом I2S, а также тюнера R820T2, используемого в донглах RTL-SDR. Помимо прочего, проект интересен своей модульностью. Он состоит из четырех независимых плат, каждую из которых можно использовать повторно в других проектах. Особенно меня заинтересовал модуль на базе тюнера R820T2, о котором и пойдет речь в этом посте.

После прочтения книжки «The Hobbyist’s Guide to the RTL-SDR» мне особенно запомнился эксперимент с RTL-SDR и генератором шума. По сути, эксперимент этот описывает, как можно использовать RTL-SDR в качестве очень дешевого анализатора спектра. В этом режиме устройство может решать задачи вроде проверки фильтров или определения частоты, на которую рассчитана антенна. Соответствующая глава книги доступна онлайн в блоге rtl-sdr.com. Здесь я коротко перескажу идею и поделюсь своими личными впечатлениями от использования RTL-SDR таким образом. Также в посте вы найдете кое-какие ссылки на дополнительные материалы. Описанные действия с тем же успехом можно повторить для HackRF, LimeSDR и других Software Defined Radio.

Помните, как мы удаленно мигали светодиодом при помощи NRF24L01, а затем использовали этот же беспроводной модуль для управления гусеничным роботом? В этих заметках модуль мы использовали по принципу «подключаем к таким-то пинам, берем готовую библиотеку, пишем пару строк кода и все работает, магия». Так вот, мне не нравится магия. Я программист, а не колдун, и потому хочу знать точно, что там и в каком виде передается в эфире. К счастью, Software Defined Radio позволяет с легкостью это увидеть.

Один из способов развлечения с Software Defined Radio заключается в том, чтобы наблюдать за самолетами. В современных самолетах используется технология ADS-B. Суть ее заключается в том, что самолеты передают номер рейса, скорость, высоту полета, GSP-координаты, и прочую информацию о воздушном судне на частоте 1090 МГц, используя модуляцию DPSK. Передаваемая информация никак не шифруется, и при помощи RTL-SDR принять ее может любой желающий.

Некоторое время назад я сделал несколько несложных модификаций в имеющимся у меня RTL-SDR. В этой заметке я хотел бы вкратце рассказать об этих модификациях, и в чем заключается их практическая ценность. Описанные модификации крайне просты. Их может повторить за один вечер практически любой желающий.

В сети можно найти массу примеров использования радиомодулей на 433 МГц совместно с Arduino. Обычно эти примеры ограничиваются чем-то вроде «а давайте подключим библиотеку VirtualWire, воспользуемся парой процедур из нее, и опа, все магическим образом работает». Само собой разумеется, меня такое положение дел не устраивает, потому что я хочу знать точно, как эти модули общаются с Arduino, и что именно они передают в эфир. Давайте же во всем разберемся!

В этой заметке речь пойдет о Software Defined Radio, или SDR. SDR — это когда у вас есть некое специальное устройство для работы с радио-сигналами, подключенное к компьютеру, а софт на компьютере определяет, что именно это устройство будет принимать и передавать. В сущности, SDR — это отладчик для радио. С его помощью вы можете как отлаживать собственное железо, так и искать баги / уязвимости в чужом, а также реверсить закрытые беспроводные протоколы и притворяться приемником или передатчиком, работающим по определенному протоколу.