一、材料

先放上图片
材料:树莓派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_ONprintf("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_ONprintf("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. 利用lakka将树莓派打造为一台万能游戏机

    最近发现个好玩的东西,lakka,是个什么呢?它是一个游戏模拟器,可不是那些简单的游戏模拟器,它能玩的游戏很多,街机游戏,红白机游戏,PS游戏等,算是集大成者. 给个官网的链接:Lakka官网 关于L ...

  2. 树莓派打造mini广播(FM)系统

    树莓派打造mini广播(FM)系统 注意相关法律限制功率大小和频段.,以下只能用于测试目的 github项目: https://github.com/miegl/PiFmAdv 安装: apt-get ...

  3. 树莓派4外置wifi天线_树莓派打造最强车载娱乐终端(1)音乐和WiFi

    开车跑长途的时候总觉得无聊,就会想起飞机上的娱乐终端,那么我们就来自己做一个吧! 这一系列文章里,我会按照功能划分,列出需要的软硬件,尽量做到互相独立,方便自由组合.今天我们先来实现最基本的音乐播放和 ...

  4. 用python画一条龙_树莓派打造北邮人种子下载机——下载、做种一条龙全站式教程...

    树莓派是一台电脑,只不过它非常小巧,是基于 Linux 的单片机电脑,不贵-但是它的玩法很多,比如你可以在里面使用 Python 编写游戏,搭建网站,邮件收发,HTTP 服务器,Git 服务器,种子资 ...

  5. 树莓派制作家用服务器,用树莓派打造自己的多媒体服务器

    缘起 今年树莓派3刚发售的时候就下单了树莓派3,,打算拿它来研究点东西. 最近买了一些学习的会员账号,下载了一些视频和音频的会员服务,想在家里学习一下.问题是,家里有好几个设备,PC.mac和手机,如 ...

  6. mc通用计算机,《我的世界》里打造一台计算机有多难?复旦大神花一年终于实现!...

    原标题:<我的世界>里打造一台计算机有多难?复旦大神花一年终于实现! 一块小小的CPU里有多少个晶体管?几十亿个. 单枪匹马造出一个CPU乃至完整的电脑需要多长时间?有位大牛在<我的 ...

  7. 树莓派打造一个适合音乐制作的系统(效果器部分)

    我打算挂载LV2插件将树莓派作为效果器使用,之前我们已经创建好了I2S二进二出声卡,请详见树莓派打造一个适合音乐制作的系统(声卡部分)_huanghaoAudio的博客-CSDN博客 1.下载安装LV ...

  8. 基于S905L智能机顶盒打造一台Linux生产力办公主机

    文章目录 前言 一.准备工作 二.制作TF卡引导盘 三.拆机取出PCB板.短接启动 四.体验ARM64系统 致谢 前言 随着ARM架构的不断发展,arm.arm64处理器的性能越来越强大,国内民用市场 ...

  9. ArozOS+树莓派打造随身NAS(避坑专用)

    ArozOS+树莓派打造随身NAS(避坑专用) 前情提要 为什么要写这么一篇文章 为什么选择树莓派 为什么选择ArozOS 话不多说开整 ArozOS简介 天才第一步,烧录装好库 第二步就是坑,我直呼 ...

最新文章

  1. TensorFlow学习笔记之五——源码分析之最近算法
  2. linux新内核的freeze框架以及意义
  3. asp单元格合并后宽度没有合并_ElementUI Table组件如何使用合并行或列功能深入解析...
  4. CodeForces - 1486D Max Median(二分+最长连续子段和)
  5. 科技部成立新一代人工智能发展研究中心
  6. 72年属鼠48岁有一灾2020_李半仙推算:1972年虚岁48岁属鼠人,2020年干什么最能发财??...
  7. 万立快速开发平台——软件制作大师
  8. 尚硅谷k8s安装文档_Kubernetes(k8s)中文文档 从零开始k8s_Kubernetes中文社区
  9. 剑指 Offer 51. 数组中的逆序对(归并排序做法)
  10. mysql排序优化_Mysql 排序优化
  11. 视觉SLAM十四讲学习记录 第三讲
  12. 使用Audition将PCM格式转Wav格式
  13. 高斯日记python实现
  14. linux内核驱动使用hugepages,使用HugePages优化内存性能
  15. 腾讯云大带宽云服务器20M性能评测
  16. JS 根据date日期格式返回周几
  17. 将社会工程学演绎成艺术---弗兰克·威廉·阿巴内尔的传奇故事--黑客博客
  18. 计算机画图调整画笔粗细,【2人回答】画图里画笔怎么加粗-3D溜溜网
  19. 苹果 iPhone4 ios7.0 无法下载应用程序 此时无法
  20. 数据中心22年基础架构演进史

热门文章

  1. unity学习———2D人物的移动
  2. 读《沃伦巴菲特》有感----成功是不可以复制的。
  3. rayleighchan实现瑞利多径衰落信
  4. 服务器usb驱动安装系统安装失败怎么办,Win7系统安装USB3.0驱动程序失败怎么办?Win7系统安装USB3.0驱动程序失败的解决方法...
  5. Settings.settings文件的用处
  6. 使用java8新特性stream流实现获取String集合中最长的元素
  7. Android 平板中 自定义键盘(popuwindow) 居于屏幕左下方 仿微信的密码输入界面
  8. Go1.20 arena新特性示例详解
  9. 手机网站支付(公钥证书方式)
  10. usb网卡在linux上能直接用吗,关于usb网卡如何在红旗linux6.0上使用的问题