使用树莓派打造一台收音机

一、材料

先放上图片
在这里插入图片描述材料:树莓派3b+、tea5767模块(收音机模块)和4根杜邦线。

树莓派3b+大约200元,tea5767模块大约25元吧,杜邦线不值钱。
顺便说一下,tea5767芯片更便宜,但需要自己做PCB.我动手能力比较差,所以直接买了。

树莓派淘宝直接搜就行,tea5767模块放个我买的的链接。
https://m.tb.cn/h.eNmGD2h

二、连接

现在开始接线。首先通过资料我们可以知道,tea5767模块与外部是SPI通信,接下来就简单了。我们需要找到树莓派的SPI口,将其与tea5767连接起来就可以了。

在这里插入图片描述这个是树莓派的引脚图,左边这一排SDA.1和SCL.1就是SPI通信口,SCL属于时钟线,SDA属于数据线。
此时查看购买的tea5767模块的背面,背面图如下

在这里插入图片描述我们可以看到它有4个引脚,5V接树莓派上的任意一个5v引脚,gnd也是一样,SDA接树莓派的SDA.1,SCL接树莓派的SCL.1,连接的话使用材料的4根杜邦线,于此同时,把耳机和收音机的天线接上。注意了,这两个孔形状一样,别接错了,接错的时候耳机应该不会有沙沙的声音。怎么区分喇叭和天线的孔呢?看上面这张图,模块的背面画了喇叭和天线,什么意思我就不说了。

编程

现在到了最欢乐的coding时刻。
Python
如果你习惯Python开发,请参照https://www.jianshu.com/p/104457f30b94文章的内容(感谢)。这篇文章不是我的,
评论者是我,我就是那个把喇叭和耳机接反的人。。。还要提醒一句,树莓派3b+检测出来的是I2C-1,直接运行作者的代码,很提示错误。所以安装smbus后,需要解包,然后根据Python提示的错误,修改smbus的代码才能正常运行。我测试过,没有问题,但没有深入了解代码。

C++
如果你习惯C++开发,那我们志同道合。首先还是参照https://www.jianshu.com/p/104457f30b94(感谢)文章,安装i2c-tools ,同时打开树莓派configure的I2C口(默认关闭),这几步是关键的。操作不明白的问度娘和google,如果也出现了和Python一样的错误,请修改smbus的代码。我们需要打开I2C设备,此时还需要下载wiringpi库。

wiringpi安装请参照https://blog.csdn.net/qq_16775293/article/details/80785520(感谢)。

一切OK,此时我们需要了解wiringpi操作I2C的接口

wiringPiI2CSetup(int <从机地址>);
打开i2c设备。
输入的是7位的从机地址,不需要输入i2c设备节点路径。
返回的是linux标准的设备文件描述符。
实际的处理过程是这样的:
wiringPi自动检测i2c设备文件路径(/dev/i2c-0或/dev/i2c-1);
然后打开文件,获取到了标准文件描述符;
然后通过ioctl设置从机地址。

int wiringPiI2CWrite(int fd,int data);
往从机写一个字节。
也就是从机地址后的一个字节,通常是command。
<起始> + <从机地址W> + + <结束>

int wiringPiI2CWriteReg8(int fd, int reg, int data);
往从机指定的reg写入1个字节。
<起始> + <从机地址W> + + + <结束>

int wiringPiI2CWriteReg16(int fd, int reg, int data);
往从机指定的reg写2个字节,先传输低8位,后传输高8位。
<起始> + <从机地址W> + + <data低8位> + <data高8位> + <结束>

int wiringPiI2CRead(int fd);
从从机直接读取一个字节,不写入任何cmd。
<起始> + <从机地址R> + <读1个字节> + <结束>

int wiringPiI2CReadReg8(int fd, int reg);
读取从机指定reg的一个字节。
<起始> + <从机地址W> + + <起始> + <从机地址R> + <读1个字节> + <结束>

int wiringPiI2CReadReg16(int fd, int reg);
读取从机指定reg的两个字节,先传输低8位,后传输高8位。
<起始> + <从机地址W> + + <起始> + <从机地址R> + <读低8位> + <读高8位> + <结束>

以上一大段介绍是我从https://blog.csdn.net/nicekwell/article/details/78623967 (感谢)copy的。
实际上我们只需要使用wiringPiI2CSetup这一个接口就够了,其他的读写IO的函数我使用过,不知道为什么一直不行。所以我直接使用了最基本的read和write函数。控制tea5767的代码是我搬移的,本来原作者的代码是服务于tea5767模块和单片机的C代码,我将它移植到了树莓派上,同时改成c++代码,增加了一些必要的功能,比如将搜索信息保存到文件,再次启动就不需要重新搜台了。

初始化

bool LocalFm::Initialize()
{
    wiringPiSetup();
    if (false == TEA5767_Initialize()) {
        printf("FM Device Init Failed\n");
        return false;
    }
    return true;
}

bool LocalFm::TEA5767_Initialize()
{
    int fd = wiringPiI2CSetup(SLAVE_ADDRESS);
    if (fd < 0) {
        printf("I2C Device Init Failed\n");
        return false;
    }
    m_dwDevFd = fd;
     
    return true;
}

首先调用wiringPiSetup(),这个函数在使用wiringpi前必须调用,然后再调用wiringPiI2CSetup(SLAVE_ADDRESS),SLAVE_ADDRESS是tea5767模块的从机地址0x60。在树莓派终端输入sudo i2cdetect -y 1就可以看出:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – -- – -- – -- – -- – -- – -- –
10: – -- – -- – -- – -- – -- – -- – -- – --
20: – -- – -- – -- – -- – -- – -- – -- – --
30: – -- – -- – -- – -- – -- – -- – -- – --
40: – -- – -- – -- – -- – -- – -- – -- – --
50: – -- – -- – -- – -- – -- – -- – -- – --
60: 60 – -- – -- – -- – -- – -- – -- – -- –
70: – -- – -- – -- – --

I2C读写
读操作

void LocalFm::TEA5767_Read(unsigned char *data)
{
    read(m_dwDevFd, data, 5);
#ifdef DEBUG_ON
    printf("Read Data:");
    for(int i = 0; i < 5; i++) {
        printf("0X%02X ", data[i]);
    }
    printf("\n");
#endif
}

m_dwDevFd是wiringPiI2CSetup函数返回的指向I2C设备节点的指针,data是你要写入的数据,5是写入数据的字节数。tea5767模块一次需要写入5个控制字节。

写操作

void LocalFm::TEA5767_Write(unsigned char *data)
{
    write(m_dwDevFd, data, 5);
#ifdef DEBUG_ON
    printf("Write Data:");
    for(int i = 0; i < 5; i++) {
        printf("0X%02X ", data[i]);
    }
    printf("\n");
#endif
} 

写操作和读操作类似,也是5个字节的写入。

总结

关于自动搜台、Preset Up、Preset Down等等功能请参照我的资源
https://download.csdn.net/download/qq_26654257/11828292

资源5个积分,谢谢支持。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
关于这个项目 您可以通过一个小小的盒子在互联网上收听数千个免费电台。 互联网上有成千上万的免费电台,通过这个项目,你可以从一个小小的盒子里听到所有的电台。所以,让我们使用Raspberry Pi,扬声器和几个简单易用的软件轻松构建我们的流媒体收音机。 硬件组件: 树莓派2型号B× 1 扬声器:0.25W,8欧姆× 1 项目概况: 电缆的连接: 连接到22和27 步骤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。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_26654257

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

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

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

打赏作者

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

抵扣说明:

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

余额充值