树莓派Zero W电台

陈拓chentuo@ms.xab.ac.cn 2018.06.02/2018.06.21

0. 概述

使用树莓派可以自己制作一个无线电台,可以从1 MHz到250 MHz之间频段发送16比特立体声音频,可以用收音机或手机收音机app收听音乐。

1. 准备

1.1 硬件

  1. 树莓派Pi Zero W
  2. 杜邦线,将杜邦线插在Zero W的Pin7(GPIO4)上, 当fm的天线。
  3. 电脑(我用Windows 7)

1.2 连接

用putty连接电脑和Pi Zero W,看本文最后的参考文档“电脑连接树莓派Zero W”。Host Nameraspberrypi.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

  1. 安装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未来的发展:

警告!!!

如果对信号进行滤波和放大,树莓派可以制成一个强大的调频发射机。但是在大多数国家,使用一个没有正规执照的FM发射机是非法的。所以如果你违反了法律并被罚款,那是你自己的错!!但是只要你不给它安装大天线就可以了。

参考文档

  1. 树莓派介绍 树莓派介绍_树莓派介绍csdn-CSDN博客
  2. 电脑连接树莓派3B+ 电脑连接树莓派3B+_树莓派3b usb千兆网卡-CSDN博客
  3. 电脑连接树莓派Zero W 电脑连接树莓派Zero W_树莓派zeropython-CSDN博客
  4. 树莓派GPIO控制 树莓派GPIO控制_树莓pi gpio-CSDN博客
  5. 树莓派 Zero W+温度传感器DS18B20 树莓派+温度传感器DS18B20_设备树dtb中 温度传感器-CSDN博客
  6. 树莓派电台 https://www.cnblogs.com/zygoses2gether/p/4906844.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨之清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值