项目简介
本项目利用 Raspberry Pi 实现 FM 发射器功能,适用于所有 Raspberry Pi 板。用户只需准备一个 FM 接收器,并连接一根 20 - 40 厘米的普通电线到 Raspberry Pi 的 GPIO4(GPIO 引脚的第 7 针)作为天线,就能进行广播。项目基于通用时钟输出实现调频无线电通信,核心思路源自 Oliver Mattos 和 Oskar Weigl 的 PiFM 项目。
项目的主要特性和功能
- 支持 DMA 外设,提升数据传输性能。
- 可自定义频率和带宽设置,满足不同需求。
- 兼容所有 Raspberry Pi 型号,适用性广泛。
- 能读取单声道和立体声文件,支持多种音频格式。
- 支持从标准输入读取音频数据,可接入麦克风实现实时音频输入。
安装使用步骤
安装
假设已下载项目源码文件,需先构建可执行文件,按以下步骤操作:
cd fm_transmitter
make
使用
构建成功后,执行 “fm_transmitter” 程序开始发射:
sudo ./fm_transmitter -f 102.0 acoustic_guitar_duet.wav
参数说明:
- -f frequency
:指定发射频率(MHz),未传入则默认为 100.0。
- acoustic_guitar_duet.wav
:示例 WAV 文件,可使用自己的文件。
其他可选参数:
- -d dma_channel
:指定要使用的 DMA 通道(默认为 0),输入 255 可禁用 DMA 传输,改用 CPU 传输。
- -b bandwidth
:指定带宽(kHz),默认为 100。
- -r
:循环播放。
发射开始后,将 FM 接收器调至所选频率,即可听到播放内容。
Raspberry Pi 4 特殊处理
在 Raspberry Pi 4 上,其他内置硬件可能干扰软件,导致无法在所有标准 FM 广播频率上发射。建议:
1. 使用以下命令编译可执行文件,以使用 GPIO21 而非 GPIO4(GPIO 引脚的第 40 针):
make GPIO21=1
2. 将 ARM 核心频率缩放调节器设置为 “performance”,或者将 ARM 最小和最大核心频率设置为恒定值(参考:https://www.raspberrypi.org/forums/viewtopic.php?t=152692 ):
echo "performance"| sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3. 发射时使用较低的 FM 广播频率(低于 93 MHz)。
支持的音频格式
可直接传输未压缩的 WAV(.wav)文件,也可从标准输入读取音频数据,例如:
sudo apt-get install sox
sox acoustic_guitar_duet.wav -r 22050 -c 1 -b 16 -t wav - | sudo ./fm_transmitter -f 100.6 -
仅支持未压缩的 WAV 文件。若收到 “corrupted data” 错误,可尝试转换文件,如使用 FFMPEG:
ffmpeg -i not_wav_song.webm -f wav -bitexact -acodec pcm_s16le -ar 22050 -ac 1 song.wav
sudo ./fm_transmitter -f 100.6 song.wav
也可使用 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
麦克风支持
若要使用麦克风进行实时输入,可使用 arecord
命令,例如:
arecord -D hw:1,0 -c1 -d 0 -r 22050 -f S16_LE | sudo ./fm_transmitter -f 100.6 -
若出现性能下降的情况,可将 hw:1,0
替换为 plughw:1,0
:
arecord -D plughw:1,0 -c1 -d 0 -r 22050 -f S16_LE | sudo ./fm_transmitter -f 100.6 -
法律注意事项
在某些国家,未经特殊许可在特定频率上进行发射可能违法,请留意相关法律规定。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】