树莓派zero 2w i2c操作 rda5807收音机芯片记录(电台差转站点远程监听可行性探讨)

—文章于2022年3月18日0:54重新修改—

  • 哈楼,大家好,我又来弄收音机啦,没办法,从事广播技术行业就只能弄这个。

  • 本人在地级市电视台工作,主要从事广播传输及发射有关方面的技术工作,我们县区站点较多,因为资金上的问题一直没有一套远程监控及监听的系统,闲(mo)暇(yu)之(shi)余(jian),我就在想能不能自己弄一个简单的监听设备,最开始想通过51来实现,后来发现51可能不行,果断放弃,接着又把目光放到了stm32上,但是因本人水平有限,最终还是不了了之。偶然间看到了树莓派,看介绍,这不就是我想要的baby吗,果断开整。

  • 从最开始的c51到后面的stm32,今年在芯片飞涨的时候狠心从js手里买了块树莓派zero 2W,双100网口扩展卡+16g tf卡,一共花了290大洋,闲话不多说了,上干货。

  • 以下是我自己业余时间弄的一些简单记录: 项目完整资源地址->点我啦(略微挣点积分)有兴趣的可以看看。

  • 思路:5807解调电台后, ffmpeg通过声卡采集并推送到流媒体服务器(树莓派自己就行),远程通过vlc或者web网页播放并控制(tea5767在github上有前辈已经弄好了,我也是参照前辈的一些思路,具体项目地址->https://github.com/LinuxCircle/tea5767

  • 需要的东西:树莓派1个(型号随意,带网口就行),rda5807(某宝2-3块钱一大堆,102bc板子和tea5767通用,tea5767输出只有80mv,需要加放大,而且本身就略贵,最便宜的6块多,rda5807可以直接驱动一般的耳机,像苹果手机的有线耳机实测完全没问题,比较划算),usb声卡10来快钱,或者用ti的pcm2902(2902好像停产了,我在网上买的usb声卡就是2902,怪不得便宜)自己做

  • 准备工作:1,我用的python,下载pycharm社区版(这个是免费的!虽然功能不多,够用了),建议在ubuntu下使用,ubuntu软件中心可以直接安装python社区版,win下pip安装模块问题太多。2,树莓派系统安装,进入系统开启i2c,这个一搜一大堆,就不赘述了。3,将5807与树莓派连接好。

  • 树莓派:安装ffmpeg,参照->http://relyn.cn/share/47。安装srs,参照->https://blog.csdn.net/weixin_34197488/article/details/91460318。在这里感谢两位前辈。

  • i2c地址确定:首先安装i2c-tools(这个也是一搜一大堆),通过i2cdetect -y 1,惊喜来了,3个地址…在这里插入图片描述dump一下,只有0x11有数据在这里插入图片描述就是他了。

  • python:使用的python3.8(本人第一次用python,在b站上2倍速一口气看了播放量最高的那个教程200多集,粗略了解了下,够用了,不涉及高端,有不足的地方欢迎大家指正),pip安装smbus2(i2c用的)和tornado(用到websocket,也可以开启http),或者在pycharm设置里为项目安装。

  • 程序设计:导入smbus2,自带了i2c操作相关方法,注意rda5807是16位的寄存器,官方手册上说的是在读取和写入过程中寄存器地址不可见,通过内部自增控制,实测可以直接通过寄存器地址进行读写操作,在读取和写入的时候都是高8位在前,低8位在后

import smbus2
import time


class Rda5807:

    def __init__(self):
        self.add = 0x11
        self.band = 870  #为便于计算,python3的浮点数计算有点奇怪的问题
        self.bus = smbus2.SMBus(1)
        self.mute_flag = 0
        self.on_flag = 0
        self.ready_flag = 0

    def i2c_read(self, reg_add):
        """
        read 2 bytes High byte Low byte
        :param reg_add: reg address
        :return: 16bit
        """
        result = self.bus.read_word_data(self.add, reg_add)
        result_l = result >> 8  # Low byte
        result_h = (result & 0x00ff) << 8  # High byte
        result = result_h + result_l
        return result

    def i2c_write(self, reg_add, data):
        """
        write 2 bytes High byte Low byte
        :param reg_add: reg address
        :param data: 16bit
        """
        data_l = data >> 8  # Low byte
        data_h = (data & 0x00ff) << 8  # High byte
        data = data_h + data_l
        self.bus
关于这个项目 您可以通过一个小小的盒子在互联网上收听数千个免费电台。 互联网上有成千上万的免费电台,通过这个项目,你可以从一个小小的盒子里听到所有的电台。所以,让我们使用Raspberry Pi,扬声器和几个简单易用的软件轻松构建我们的流媒体收音机。 硬件组件: 树莓派2型号B× 1 扬声器:0.25W,8欧姆× 1 项目概况: 电缆的连接: 连接到2227 步骤1 首先,我们需要准备我们的Pi。使用Raspbian和Pi连接到互联网,打开一个终端并切换到root用户: sudo su 并更新您的软件包列表,然后将您的Pi升级到最新的软件: apt-get update && apt-get upgrade -y 第2步 安装一些额外的包。 我们需要安装Python包来访问GPIO。在以root身份登录的终端中,输入以下内容: apt-get install python-rpi.gpio 现在安装MPlayer,这将播放我们的音频。 apt-get install mplayer 第3步 我们创建了一个txt文件:wpa,它保存了我们的热点地址和密码。 步骤4 我们需要使用网址来使用网络收音机。我们使用https://www.internet-radio.com/ 。随着开关的变化。 [在URL中,应该下载一个pls文件并输入到我们的地址栏中。] 第5步 将收音机配置为在引导时启动。 在终端中,以root用户身份导航到/etc/init.d/,然后使用nano创建一个名为radio的文件。 nano radio 在该文件中,输入以下内容: #! /bin/bash modprobe snd_bcm2835 amixer cset numid=3 1 python /home/pi/radio.py 这会加载声卡的内核模块; Amixer设置扬声器的输出。 第6步 我们在服务上编写我们的代码; 当操作系统启动服务时,这将是工作。在etc / init.d中,我们定义了我们的服务。在这个目录中,我们定义了基于kill和start(使用nano)的服务。同样在我们的代码中,我们使用GPIO的pull_up_down。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值