树莓派发射FM波——搭建私人小电台
树莓派的应用十分广泛,有很多奇思妙想的应用非常有趣,在这里我们想实现一个小电台的功能,但是在这里需要说明,私人架设电台是违法行为,所以本案只作为自我娱乐所用,不能发射大功率的信号干扰正常的FM频段。
这里需要用到一个开源的小软件PiFmRds" target="_blank">PiFmRds,这个小软件最早是由两位外国朋友Oliver Mattos and Oskar Weigl 开发的,后来,Richard Hirst把这个小软件改成由DMA实现,减少了CPU资源的占用。再后来Christophe Jacquet继续修改软件,添加了RDS数据生成器和调制器,发射器使用Raspberry Pi的PWM发生器产生VHF信号,该软件与Raspberry Pi 1、2和3都兼容。
该小软件依赖sndfile库,首先安装该库:
- sudo apt-get install libsndfile1-dev
接下来克隆小软件的源码:
然后进行编译:
- cd PiFmRds/src
- make clean
- make
编译完成后,输入以下命令运行程序
- sudo ./pi_fm_rds
此时就会在树莓派的GPIO 4 (40针P1接口的第7管脚)上产生FM发射波,默认频率107.9,这个辐射范围通常在100厘米左右,增加20cm的杜邦线,可以使得发射范围增加到100米。

在pi_fm_rds源码目录中有五个wav声音文件作为示例,可以执行如下命令播放音频。
- sudo ./pi_fm_rds -audio sound.wav -freq 100.6

此时就可以听到一段英文发音,这个时间非常短,只有4秒钟左右,重复执行就可以多次听到了。
pi_fm_rds更多的应用语法如下:
pi_fm_rds [-freq freq] [-audio file] [-ppm ppm_error] [-pi pi_code] [-ps ps_text] [-rt rt_text]
所有参数都是可选的:
- -freq指定载波频率(以MHz为单位)。例如:-freq 100.6。
- -audio指定一个音频文件作为音频播放。如果提供立体声文件,则Pi-FM-RDS将产生FM立体声信号。例如:-audio sound.wav。支持的格式取决于libsndfile。这包括WAV和Ogg / Vorbis(等),但不包括MP3。
- -pi指定RDS广播的PI代码。4个十六进制数字。例如:-pi FFFF。
- -ps指定RDS广播的电台名称(节目服务名称,PS)。限制:8个字符。例如:-ps RASP-PI。
- -rt指定要传输的无线文本(RT)。限制:64个字符。例如:-rt 'Hello, world!'。
- -ctl 指定一个命名管道(FIFO)作为控制通道在运行时改变PS和RT。
- -ppm 以百万分率(ppm)为单位指定树莓派的振荡器误差。
如果使用参数-audio -,注意,-audio 后面是一个短横线,Pi-FM-RDS将读取标准输入上的音频数据,这允许您将程序的输出传送到Pi-FM-RDS。他有什么作用呢,这就为我们播放MP3预留了接口,例如,这可以用于使用Sox读取MP3文件:
- sox -t mp3 Music.mp3 -t wav - | sudo ./pi_fm_rds -audio -
这个操作的意思是使用sox工具读取Music.mp3,转换成wav格式并输出到标准输出,同时使用pi_fm_rds来播放(发射)标准输入中的文件(流)。
或者将声卡的AUX输入传送到Pi-FM-RDS:
- sudo arecord -fS16_LE -r 44100 -c 2 - | sudo ./pi_fm_rds -audio -
- 超级容易卡死很用CPU
CPU使用情况如下:

添加音频时,CPU使用率显著增加,因为程序必须将输入音频文件的采样率采样到228 kHz,即其内部操作采样率,这一动作还是非常消耗CPU资源的。
通过以上操作,一个小小的私人电台就搭建好了,但是在此重申,搭建私人电台是违法行为,自己短时间,小范围的玩玩可以,不要干扰了正常的FM频段,否则后果很严重。
man sox
rec -c1 -r16000 xxx.wav可以录制音频 c指的是声道数 r值得是采样率
play xxx.wav播放
sox -V xxx.wav -n查看wav文件的详细参数
example:16k的音频降采样到8k
sox -r 16000 input.wav -r 8000 output.wav
多个单通道合并为多通道: sox 1.wav 2.wav 3.wav -t wavpcm -M 4.wav # 4.wav是3通道的
多个单通道融合为单通道: sox 1.wav 2.wav 3.wav -t wavpcm -m 4.wav # 4.wav是单通道的
sox input.wav -c1 output.wav mixer -l
mp3转wav
①安装sox:
sudo apt-get install lame
sudo apt-get install sox
sudo apt-get install libsox-fmt-mp3
②转换方法
mp3/wav等等格式转换成ogg格式:
打开终端,输入: sox 1.mp3 1.ogg
wav转换mp3格式:
打开终端,输入: sox 1.wav 1.mp3
链接:https://www.jianshu.com/p/9fb24dc60f29
转载于:https://jingyan.eeboard.com/article/76354#/prettyPhoto%5Bpp_gal%5D/0/
树莓派发射FM波——搭建私人小电台的更多相关文章
- 讲解开源项目:5分钟搭建私人Java博客系统
本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...
- 搭建私人的云笔记_使用webdav服务
搭建私人的云笔记_使用webdav服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-10-10. 手机上有很多云笔记app,大多支持云存储.可是把笔记放在别人的服务器上,总觉得不 ...
- 树莓派之web服务器搭建
树莓派之web服务器搭建 (一)使用ufw创建防火墙 设置目的:可以完全阻止对树莓派的访问也可以用来配置通过防火墙对特点程序的访问.使用防火墙更好的保护树莓派. 准备工作 1.带有5V电源的树莓派 2 ...
- SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04
摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...
- QT树莓派交叉编译开发环境搭建
QT树莓派交叉编译开发环境搭建 - JerryZone <Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2> <Qt for Em ...
- 搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务
搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-02-18. Radicale, Radicale (对cardd ...
- Spring框架——事务管理方式搭建一个小的项目
学习Spring框架,通过事务管理的方式搭建一个小的项目,该项目可以查询对数据库中的图书库存数量进行修改. 首先,使用MVC分层的设计模式思想搭建项目目录结构. 此部分代码源码之中都有相关注释,所以尽 ...
- 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器
简介 使用 sinopia 的好处是,node系的工程师,内部协作时,使用自有 npm 包,会非常方便:另外,sinopia,会缓存已经下载过的包,可以在相当程度上,加速 npm install 相关 ...
- 一个小时快速搭建微信小程序教程
「小程序」这个划时代的产品发布快一周了,互联网技术人都在摩拳擦掌,跃跃欲试.可是小程序目前还在内测,首批只发放了 200 个内测资格(泪流满面).本以为没有 AppID 这个月就与小程序无缘了,庆幸的 ...
随机推荐
- android权限permission大全(权限提醒)
1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...
- 机器大数据也离不开Hadoop
转自:http://gtstorageworld.blog.51cto.com/908359/1286758 根据数据来源划分,大数据主要包括三类:商业运作产生的数据.人类行为产生的数据和机器数据.目 ...
- Java之集合(二十七)其它集合
转载请注明源出处:http://www.cnblogs.com/lighten/p/7551368.html 1.前言 本章介绍剩余的3个集合类:ConcurrentSkipListSet.CopyO ...
- wap尝试调取app(网易新闻为例)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java读取Maven工程下的配置文件,工具类
Java开发中,经常需要在maven工程中读取src/main/resources下的配置文件: 思路如下: Class.getClassLoader() 返回类加载器ClassLoader,进而可以 ...
- kafka-spark streaming (一)
Kafka-spark streaming 1.安装包 kafka安装需要zookeeper.jdk. 官网下载最新的: https://kafka.apache.org/downloads http ...
- c#socket TCP同步网络通信
一.socket简介 socket就是套接字,它是引用网络连接的特殊文件描述符,由三个基本要素组成: 1: AddressFamily(网络类型) 2: SocketType(数据传输类型) 3:Pr ...
- [九省联考 2018]秘密袭击coat
Description 题库链接 给出一棵 \(n\) 个点的树,每个点有点权.求所有联通块的权值 \(k\) 大和,对 \(64123\) 取模. \(1\leq n,k\leq 1666\) So ...
- springboot 源码笔记
1.springAppication构造器 基于getSpringFactoriesInstances方法构造如下类(获取文件内容在META-INF/spring.factories文件中) 1.1 ...
- Hibernate中NoSession问题
今天在使用hibernate中 Note note = hibTem.load(Note.class, id); 报了一个could not initialize proxy [cn.entity.N ...