陈拓chentuo@ms.xab.ac.cn 2018.06.02/2018.06.21
0. 概述
使用树莓派可以自己制作一个无线电台,可以从1 MHz到250 MHz之间频段发送16比特立体声音频,可以用收音机或手机收音机app收听音乐。
1. 准备
1.1 硬件
- 树莓派Pi Zero W
- 杜邦线,将杜邦线插在Zero W的Pin7(GPIO4)上, 当fm的天线。
- 电脑(我用Windows 7)
1.2 连接
用putty连接电脑和Pi Zero W,看本文最后的参考文档“电脑连接树莓派Zero W”。Host Name填raspberrypi.local,端口22,用户名pi,密码raspberry。
2. 安装软件
- 下载PiFMPlayer
pi@raspberrypi:~ $ wget https://github.com/Mikael-Jakhelln/PiFMPlay/archive/master.zip
- 解压到/home/pi
看看当前位置:
pi@raspberrypi:~ $ unzip master.zip
解压完成:
pi@raspberrypi:~ $ ls -l
pi@raspberrypi:~ $ ls -l PiFMPlay-master
pi@raspberrypi:~ $ ls -l PiFMPlay-master/pifmplay
■ left_right.wav - 声音样本".wav"文件
■ Moby - Porcelain(Atlantic Connection Remix).mp3 - 音乐样本mp3文件
■ Pifm - 编译好的pifm模块
■ pifm.c - pifm C语言源代码
■ pifmplay
■ PiFm.py - pifm的Python代码
■ PiFm.pyc - Python语言pifm的字节代码
■ README
■ starwars.wav - 音乐样本wav文件
- 为Pifm和pifmplay添加可执行权限
pi@raspberrypi:~ $ sudo chmod +x PiFMPlay-master/pifmplay/pifm PiFMPlay-master/pifmplay/pifmplay
3. 解决Raspberry Pi的GPIO冲突
Raspberry Pi Zero W提供了40个插针,用来连接外围设备,其中有些插针是功能复用的。Pin7(GPIO4)有GPCLK0(General purpose Clock 0)的功能, 1-wire的DS18B20功能和PiFM功能,这种功能复用的引脚可能会产生冲突。
为了解决这个问题,我在《树莓派 Zero W+温度传感器DS18B20》一文中已经将1-wire功能从GPIO4调整到了GPIO17,请参考。
4. 播放
4.1 修改配置
如果你要启用树莓派的音频的话,在里面添加一行audio=on即可。
pi@raspberrypi:~ $ sudo nano /boot/config.txt
看看相关的设置:
默认已经有了。如果修改了config.txt需要重启树莓派。
BCM2835是一种低成本,全高清多媒体应用处理器,包括对数字音频的处理。
4.2 播放
- 在Pin-7,就是GPIO4上插一根大约30cm的杜邦线当天线。
- 进入pifmplay目录:
pi@raspberrypi:~ $ cd PiFMPlay-master/pifmplay
- 播放
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ sudo ./pifm starwars.wav 100.0
按下“Ctrl+C”就能停止播放。
调频广播是以调频方式进行音频信号传输的,调频波的载波频率随着音频调制信号的变化而在载波中心频率(未调制以前的中心频率)两边变化,每秒钟的频偏变化次数和音频信号的调制频率一致,如音频信号的频率为1KHZ,则载波的频偏变化次数也为每秒1K次。频偏的大小是随音频信号的振幅大小而定。
在调频发射机中允许将最大频偏限制在75KHZ。我国的调频频率规定范围为87--108MHZ。学校一般规定在70--87MHZ之间,一般调频收音机接收不到信号。
树莓派电台工作的频率为1MHz-250MHz,我们现在用100MHz。虽然你可以在1MHz-250MHz范围内改变工作频率,但考虑到我国的调频广播使用范围是87.5-108MHz,这也是我们的接受设备的频率搜索范围,所以发射频率也要在这个范围内。
声音文件必须是16位单声道wav格式。
4.3 收听
在手机上打开FM收音机,插上耳机,调整频率为100.0,按下面中间的电源按钮开始收听。
4.4 新特性
- 立体声
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ sudo ./pifm left_right.wav 103.3 22050 stereo
left_right.wav是22050立体声音频文件。
- 播放MP3
需要安装SoX和ffmpeg,请看下一小节。
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ ffmpeg -i Moby - Porcelain(Atlantic Connection Remix).mp3 -f s16le -ar 22.05k -ac 1 - | sudo ./pifm
- 从USB麦克风广播 (看arecord命令手册的配置config)
arecord -d0 -c2 -f S16_LE -r 22050 -twav -D copy | sudo ./pifm – 103.3
4.5 用Python播放
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ sudo python
>>> import PiFm
>>> PiFm.play_sound("starwars.wav")
将FM收音机的频率调到103.3Mhz,这是默认频率。
5. 播放其他格式的音频文件
PiFMPlay是一个用于树莓派(发送FM音频程序)的PiFM插件。PiFMPlay使得播放音乐和控制FM广播变得更容易。
查看PiFMPlay的README.md
pi@raspberrypi:~/PiFMPlay-master $ cat README.md
PiFM是由[Icrobotics] (http://www.icrobotics.co.uk/wiki/index.php)编写的。
pifmplay是Mikael Jakhelln写的,是一个shell脚本,可以用文本编辑器打开。看看pifmplay脚本就知道,需要安装SoX和ffmpeg
5.1 安装SoX和ffmpeg
- 安装SoX - 声音转换:http://sox.sourceforge.net/
SoX是一个跨平台(Windows,Linux,MacOS X等)命令行工具,可以将各种格式的计算机音频文件转换为其他格式,可以用来记录,转换,编辑声音,还可以对这些声音文件应用各种效果,比如,可以为声音文件加上回音效果。另外,SoX可以在大多数平台上播放和录制音频文件。SoX不仅可以做音频的合并、分割,也能做混音和音量调节。
直接安装SoX:
pi@raspberrypi:~ $ sudo apt-get install sox libsox-fmt-all
测试:pi@raspberrypi:~ $ sox
可以在http://www.linuxfocus.org/common/src/article178/和http://home.sprynet.com/~cbagwell/sox.html找到有关于sox更多的信息。
- 安装ffmpeg
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。ffmpeg使用sox程序对MP3音频进行解码,就可以播放MP3类型的了。将FFmpeg+PiFM结合起来=PiFMPlayer,这样其他格式的声音文件就可以转换成wav格式,然后用你选好的电台频率播放出来。
安装ffmpeg:
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ sudo apt-get install ffmpeg
错误:
是因为某些软件包冲突导致,试试自己编译。看看这篇文章:
http://www.jeffreythompson.org/blog/2014/11/13/installing-ffmpeg-for-raspberry-pi/
■ 下载ffmpeg源码
git clone https://github.com/FFmpeg/FFmpeg.git
-bash: git: command not found
git没找到,安装一个:
pi@raspberrypi:~ $ sudo apt-get install git –y
出错了:
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
按照提示,加上--fix-missing参数试试:
pi@raspberrypi:~ $ sudo apt-get install git --fix-missing
git安装成功:
再下载ffmpeg源码
再下载:
下载多次才成功。
编译安装FFmpeg:
pi@raspberrypi:~ $ cd FFmpeg/
■ 配置编译参数
pi@raspberrypi:~/FFmpeg $ sudo ./configure --arch=armel --target-os=linux --enable-gpl --enable-nonfree
要很长时间才能看到这个画面,耐心等待哦。
■ 编译
pi@raspberrypi:~/FFmpeg $ make
很长时间,等待……
■ 安装
pi@raspberrypi:~/FFmpeg $ sudo make install
■ 测试
- 将ffmpeg源码保存到电脑上
这么费劲下载的东西当然要保存好。
■ 压缩打包:
pi@raspberrypi:~ $ tar -zcvf FFmpeg.tar.gz FFmpeg
■ 在PC上安装一个文件传输工具
我用FileZilla,软件 下载地址:https://filezilla-project.org/download.php
下载,安装,运行FileZilla:
主机sftp://raspberrypi.local、用户名pi、密码raspberry,端口空着。注意主机前面的sftp://一定要加!
文件传输操作你应该看看就会啦。
5.2 播放不同格式的音频文件
- 播放所有音频文件
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ sudo sh pifmplay . 91.3
91.3是默认频率,如果有干扰可以换其他频率。
用不同格式的文件播放:
- 播放指定的音频文件
pi@raspberrypi:~/PiFMPlay-master/pifmplay $ sudo sh pifmplay "Moby - Porcelain(Atlantic Connection Remix).mp3" 96.8
这将用pifm播放音频文件。
- 从一个管道播放文件
$ cat /path/to/file | sudo pifmplay PIPE
播放本地文件(在这里cat命令只是一个例子)。
$ cat <audio file> | ssh pi@raspberrypi 'cat - | sudo /home/pi/pifmplay/pifmplay PIPE'
在本地电脑上通过ssh播放树莓派上的文件。
- 播放文件夹
$ sudo sh pifmplay "/path/to/folder" 101.5
- 暂停/停止播放和跳过歌曲
打开另一个终端。
$ sudo sh pifmplay pause
$ sudo sh pifmplay resume
$ sudo sh pifmplay stop
$ sudo sh pifmplay next
也可以从同一个终端控制pifmplay,在后台运行pifm,在命令尾部加 &
$ sudo sh pifmplay "/path/to/folder" &
6. pifm更新
检查这里看是否有pifm的更新: [icrobotics.co.uk](Site Unavailable | Imperial College Union)
PIFMPLY未来的发展:
- 重定向所有声音输出到PIFMPLAY(重定向alsa声音输出)
- Youtube流(可能用[youtubedl] (http://www.raspberrypi.org/phpBB3/viewtopic.php?p=97710))
- di.fm/soundcloud/spotify/pandora 流
警告!!!
如果对信号进行滤波和放大,树莓派可以制成一个强大的调频发射机。但是在大多数国家,使用一个没有正规执照的FM发射机是非法的。所以如果你违反了法律并被罚款,那是你自己的错!!但是只要你不给它安装大天线就可以了。
参考文档
- 树莓派介绍 树莓派介绍_树莓派介绍csdn-CSDN博客
- 电脑连接树莓派3B+ 电脑连接树莓派3B+_树莓派3b usb千兆网卡-CSDN博客
- 电脑连接树莓派Zero W 电脑连接树莓派Zero W_树莓派zeropython-CSDN博客
- 树莓派GPIO控制 树莓派GPIO控制_树莓pi gpio-CSDN博客
- 树莓派 Zero W+温度传感器DS18B20 树莓派+温度传感器DS18B20_设备树dtb中 温度传感器-CSDN博客
- 树莓派电台 https://www.cnblogs.com/zygoses2gether/p/4906844.html