---
layout: post
title: 用树莓派自制FM电台
tags: [树莓派, 电台, FM]
---

  无线电还挺有意思啊。<!--more-->    

# 起因
  其实我在很早以前就知道树莓派可以当广播电台了，但是我由于我作死的最早开始用的系统是[piCore](/2020/12/07/picore.html)，而且感觉它功能够用就再没换回成官方系统。然而树莓派很多有趣的项目都是基于官方系统而不是不知名的发行版制作的，所以实际上虽然我知道树莓派有能力成为电台但是从来没有试过。然后最近突然想试试看，所以就把Raspberry Pi OS lite又下载回来刷到卡里，想试试看做个电台怎么样。   

# 树莓派电台软件的选择
  一般从网上找教程的话好像推荐直接安装[rpitx](https://github.com/F5OEO/rpitx)，不过我看这个项目有段时间没有更新了，虽然功能好像更强大吧……不过我目前就只用的是FM电台的功能，我更希望它的电台功能更强大，所以我又看了看别的项目。我最先看的是[fm_transmitter](https://github.com/markondej/fm_transmitter)这个项目，根据文档所述的方法安装之后确实能用，不过在整这个项目的时候因为我没有杜邦线传输距离很短，大概信号范围也就1m左右吧。后来我又搜了一下找到了[PiFmAdv](https://github.com/miegl/PiFmAdv)这个项目，它看起来是基于[PiFmRds](https://github.com/ChristopheJacquet/PiFmRds)项目改编升级的，功能多了很多，但是我不知道这个作者是怎么想的，原来的项目还支持ARM64(aarch64)，结果改完之后反倒不支持了😓，最开始我怎么编译都不通过，后来看了一眼Makefile发现不太对劲，然后我就简单改了一下参数总算可以编译通过了。这一点我已经[提了issue](https://github.com/miegl/PiFmAdv/issues/93)，不知道作者会不会改，如果不会改的话大家要是想在64位的树莓派系统上运行需要注意改一下Makefile。

# PiFmAdv的体验
  用了一下PiFmAdv之后发现这个清晰度真的和项目描述一样音质比fm_transmitter好了很多，也没有杂音了。后来我又看了看文档，发现它最多支持同时通过3个GPIO接口发射信号，于是我试了试用以下命令启动：   
```shell
sox audio.mp3 -t wav - repeat - | sudo ./pi_fm_adv --audio - --freq 108.0 --power 7 --gpio 4 --gpio 20 --gpio 32 --rds 0
```
  信号也真的好了很多。这下一下就让我起了兴趣，于是就去淘宝上买了点杜邦线回来当天线。按照说明来看，这个程序只能在GPIO的4、20和32号口输出信号，貌似是用到了GPCLK的功能，所以只能用这些针脚。4号和20号口很容易找，具体位置可以看下面我打"x"的位置：    
```
,--------------------------------.
| ooooooooooooooooooxo J8     +====
| 1ooxoooooooooooooooo        | USB
|                             +====
|      Pi Model 3B  V1.2         |
|      +----+                 +====
| |D|  |SoC |                 | USB
| |S|  |    |                 +====
| |I|  +----+                    |
|                   |C|     +======
|                   |S|     |   Net
| pwr        |HDMI| |I||A|  +======
`-| |--------|    |----|V|-------'
```
  但是32号口我是怎么找都没找到，在网上各种查资料都没有找到32号GPIO口……可能它是走的板子内的某根线吧……   
  具体要接多长的天线呢？我看一般人推荐就接一节杜邦线就行了（大概10cm），当然这我肯定不会满足，我查了一下相关原理，好像说4号口理论上接1.5m长的天线可以最大化利用它的能力，所以我就直接买的公对母的线，接了2条大概1.4m的线，接到了4号和20号口，打开一试，信号真的一下就扩展到了将近1km的样子，我用手机的收音机功能测试在只有1道墙隔开的情况基本上1km没有任何问题，如果隔得墙多了大概只能到50m左右。不过这个发射信号的能力倒是比WiFi强了不少，估计是因为频率比较低吧。   
  这个程序不仅支持发射音频信号，还能发射RDS数据，不过很遗憾我没有接收RDS数据的设备，所以我也测不了……   

# 可能的风险与危害
  首先，个人发射无线电波在很多国家都是违法的，我搜了一下大多数国家在电台频段个人发射的功率限制基本上连1mW都不到，树莓派一个针脚最大发射电流是16mA，和电压3.3V相乘就要接近50mW了，所以要想玩的话要么就不要接天线，或者说不要接太长的天线，或者不要开时间太长，免得被别人搜到，还有就是不要占用有信号的频道，一是自己听着也乱，二是这样如果有人在用更容易被发现。另外不推荐设置超过87-108Mhz的频率，一是这样中国的收音机也接收不到，二是再往上就要到航空用频道，再往下就可能到军用频道的，那些频道占用的话还是挺危险的，所以一般给无线电爱好者分的频段好像都在300-400Mhz的样子，当然这样那就不是FM电台了，在那个频段的好像都是对讲机啥的。所以最终还是推荐别开时间太长，而且不推荐播小广告啥的，放音乐一般好像没人管，播广告那就是妥妥的“黑广播”了。   
  另外还有可能的危害比如说假如有人在飞机上在航空频段开广播，这个程序可是没有限制频率的，那可能真的可以让飞机驾驶舱播广播，这可就不是小问题了。严重的可能飞行员就只能迫降了，毕竟要是听不清塔台的信号那还是有大问题的。   

# 来点阴谋论
  综上所述，我觉得从权力机构的层面可能因此有限制无线电知识的情况。其实普通人想发射无线电是非常容易的事情，有电流通过的地方就有电磁波，这么说来那我觉得不只是树莓派这种连接虚拟与现实的设备能做得到发射无线电，但凡是有导线，能改变通电状态的设备理论上应该都可以。那我是不是用扬声器，USB线等能传输信号的设备都可以发射？这让我想起了Fabrice Bellard大神写的一个[用VGA显卡来发射DVB-T信号的程序](https://bellard.org/dvbt/)，那个程序应该说是非常厉害了，我觉得理论上我用扬声器发射FM信号这种事情应该是能做到的，就是不知道声卡能不能不解码直接向扬声器发射电流，另外还有个好处就是树莓派实际上是用PMW模拟的FM信号，而扬声器是可以调整电流大小的，理论上实现可能更简单吧……其实要是说呢以前的手机是支持当作FM电台的，现在就都不支持了，所以我觉得说不定不是大家做不出来这样的程序，而是做出来的人都消失了😂。希望能有大佬给点力吧，能把这种软件多开源点出来。

# 感想
  感觉无线电还挺有意思的，要不然回头学一学考个业余电台操作证书？我之前还看过一位大佬[用卫星和世界各地的人通信](https://blog.aoaoao.me/p/amateur-satellite/)，感觉真的非常厉害。不过在这里面有好多法律的限制还挺麻烦的……可能也就只能自己玩玩了吧。
