FM Transmitter. Use the Raspberry Pi as an FM transmitter. Works on every Raspberry Pi board.
 
 
Go to file
Marcin Kondej 2ba34dd293 Exception handling fix 2019-09-26 10:17:26 +02:00
.gitignore Added more clear description 2018-12-29 03:18:27 +01:00
README.md ReadMe update 2019-01-10 12:31:56 +01:00
acoustic_guitar_duet.wav Added more clear description 2018-12-29 03:18:27 +01:00
error_reporter.cpp Exception handling fix 2019-09-26 10:17:26 +02:00
error_reporter.hpp Exception handling fix 2019-09-26 10:17:26 +02:00
mailbox.c Fixed issue #34, #23 - added DMA support 2019-01-05 04:06:16 +01:00
mailbox.h Fixed issue #34, #23 - added DMA support 2019-01-05 04:06:16 +01:00
main.cpp C++11 Update 2019-09-25 02:22:48 +02:00
makefile C++11 Update 2019-09-25 02:22:48 +02:00
pcm_wave_header.hpp Fixed WAVE header elements type definitions 2019-09-25 02:45:49 +02:00
sample.cpp Appropriate pointer casting added 2019-09-25 14:14:20 +02:00
sample.hpp C++11 Update 2019-09-25 02:22:48 +02:00
transmitter.cpp Appropriate pointer casting added 2019-09-25 14:14:20 +02:00
transmitter.hpp C++11 Update 2019-09-25 02:22:48 +02:00
wave_reader.cpp Appropriate pointer casting added 2019-09-25 14:14:20 +02:00
wave_reader.hpp C++11 Update 2019-09-25 02:22:48 +02:00

README.md

fm_transmitter

Use Raspberry Pi as FM transmitter. Works on every Raspberry Pi board.

Just get an FM receiver, connect 20 - 40 cm plain wire to Raspberry Pi's GPIO4 (PIN 7 on GPIO header) to act as an antena, and You are ready for broadcasting.

This project uses the general clock output to produce frequency modulated radio communication. It is based on idea originally presented by Oliver Mattos and Oskar Weigl at PiFM project.

How to use it

To use this project You will have to build executable. First, clone this repository, then use "make" command as shown below:

git clone https://github.com/markondej/fm_transmitter
cd fm_transmitter
make

After successful build You can start transmitting by executing "fm_transmitter" program:

sudo ./fm_transmitter -f 102.0 acoustic_guitar_duet.wav

Where:

  • -f frequency - Specifies the frequency in MHz, 100.0 by default if not passed
  • acoustic_guitar_duet.wav - Sample WAVE file, You can use your own

Other options:

  • -d dma_channel - Specifies DMA channel to be used (0 by default), type 255 to disable DMA transfer, CPU will be used instead
  • -b bandwidth - Specifies the bandwidth in kHz, 100 by default
  • -r - Loops the playback

After transmission has begun, simply tune an FM receiver to chosen frequency, You should hear the playback.

Supported audio formats

You can transmitt uncompressed WAVE (.wav) files directly or read audio data from stdin, eg.:

sudo apt-get install sox
sox star_wars.wav -r 22050 -c 1 -b 16 -t wav - | sudo ./fm_transmitter -f 100.6 -

Please note only uncompressed WAVE files are supported. If You expire "corrupted data" error try converting file, eg. by using SoX:

sudo apt-get install sox libsox-fmt-mp3
sox my-audio.mp3 -r 22050 -c 1 -b 16 -t wav my-converted-audio.wav
sudo ./fm_transmitter -f 100.6 my-converted-audio.wav

USB microphone support

In order to use a USB microphone input use arecord command, eg.:

arecord -D hw:1,0 -c1 -d 0 -r 22050 -f S16_LE | sudo ./fm_transmitter -f 100.6 -

In case of performance drop down use plughw:1,0 instead of hw:1,0.

Please keep in mind that transmitting on certain frequencies without special permissions may be illegal in your country.

New features

  • DMA peripheral support
  • Allows custom frequency and bandwidth settings
  • works on every Raspberry Pi model
  • reads mono and stereo files
  • reads data from stdin

Included sample audio was created by graham_makes and published on freesound.org