当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]欢迎来到我的新项目,将Spotify Web API与我们的W5100S-EVB-Pico 2结合在CircuitPython上。这个项目显示您的用户名和您的Spotify网络播放器上的当前歌曲名称到使用I2C协议与板连接的LCD屏幕上。

欢迎来到我的新项目,将Spotify Web API与我们的W5100S-EVB-Pico 2结合在CircuitPython上。这个项目显示您的用户名和您的Spotify网络播放器上的当前歌曲名称到使用I2C协议与板连接的LCD屏幕上。

最初,这个项目是一个本地控制器,你可以通过选择这个程序提供的功能来控制Spotify Web应用程序播放器,但是由于音乐暂停/恢复API需要Spotify Premium工作,当前的程序只允许打印你的名字。在这个程序中,跳过歌曲和暂停歌曲的模板已经实现。

组件和电路python设置

对于硬件部分,您需要:

1. W5100S-EVB-Pico 2

2. 1602液晶显示屏(I2C接口)

3. 摇杆模块(Controller Knob模块)

对于软件部分,您需要:

1. CircuitPython

2. Spotify Web API

在开始项目之前,请确保按照本指南设置电路板。

按如下方式连接组件。

Spotify Web API设置

去Spotify的Web API网站注册成为一名开发者。

要使用Spotify Web API,您首先需要转到仪表板页面并创建新应用程序。

1. 你可以根据你的喜好来命名你的应用。

2. 对于重定向URI,您需要使用以下URI才能使程序工作。

3. 选中Web API框

4. 保存应用程序。

现在您已经创建了应用程序。接下来让我们获取客户端凭据。

进入仪表板上的应用程序后,你应该去设置查看你的ID和秘密。

微控制器的lib文件夹中创建一个secrets.py文件,并插入以下JSON

CircuitPython库设置

在编写项目代码之前,从CircuitPython网站下载库包,并将这些库导入到lib文件夹中。

1. adafruit_wiznet5k

2. adafruit_connection_manager

3. adafruit_requests

接下来,从我的GitHub页面下载hd44780库。这是Bernhard Bablok对library的修改,因为我遇到了一些错误,我对library的write功能做了一些修改。

在下一节中,我将从我的Youtube频道中跟随我在Spotify名称显示器上的系列来解释代码,因此将有三个部分

1. 在CircuitPython上使用Spotify API

2在CircuitPython上使用162lcd

3. Spotify歌曲名称显示器主要功能

1. Spotify API与CircuitPython

首先,将这些库导入到CircuitPython上的程序中。

接下来,我们检查secrets.py是否包含在lib文件夹中。

之后,使用以下代码设置互联网连接。

我们的设备现在可以连网了。让我们从Spotify API获取授权码开始。

我们首先将客户端信息和重定向URI导入到本地变量。

接下来,定义一个包含将在程序中使用的作用域的列表。

您可以参考Spotify Web API作用域页面来阅读更多关于不同作用域使用的信息。

要显示我们的名称,显示当前歌曲名称,并修改Spotify播放器,我们将需要使用以下作用域。

1. user-read-private

2. user-read-currently-playing

3. user-modify-playback-state

参考Spotify API页面,您需要访问授权端点并重定向到特定页面以获取代码。

在这个项目中,我们将授权url打印到编辑器的串行中,并通过web浏览器访问它。

在页面上,它为发出请求提供了一个明确的框架。

然而,由于我们不使用JS和express框架,我们需要了解代码是如何工作的。

重定向调用只是重定向URL输入。对于我们的程序,我们将打印URL到串行,并手动单击它来授权我们的设备并获取代码。

字串。stringify使用默认连接器“&”连接JSON字典数据。

因此,我们可以创建要在串行上打印的手动URL。

在作用域中,我使用%20来连接作用域,因为它表示空白的URL编码。

之后,运行程序一次并点击链接。你应该到达下面的页面,上面有你自己的应用程序名称。

按下同意按钮,您应该被重定向到包含您的授权码信息的http bin org链接。

复制授权代码,我们现在可以使用它来交换授权令牌。

要交换令牌,我们首先需要参考Spotify OAuth页面。

如您所见,我们将需要body参数和头参数来进行请求调用。

首先,让我们创建body参数。将验证代码从HTTP BIN Org粘贴到一个变量中,并在程序中创建以下字典。

这是请求调用的主体。接下来,让我们创建header参数。

如上图所示,我们需要在base64中制作我们的身份验证细节。

为此,我们需要首先导入binascii库,以UTF-8格式编码凭证详细信息,然后使用binascii的b2a_base64函数将其更改为base64格式。

但是由于该函数返回的是字节字符串对象而不是base64字符串,因此我们需要将字节字符串解码回UTF-8并删除末尾的结束字符。

之后,将编码凭据和内容类型都包含到headers参数中。

最后,使用参数发出HTTP请求以交换令牌。

令牌现在应该被打印到代码编辑器上的序列上。复制令牌并将其粘贴到lib文件夹中auth_token密钥下的secrets.py文件中。

请注意,令牌只持续一个小时,如果您完成了on过程,您应该注释令牌交换部分,以允许程序运行其余部分。

我们现在已经完成了Spotify Web API的授权过程。您可以通过尝试使用以下代码打印您的帐户名来测试令牌

2. 1602液晶显示屏(I2C接口)

接下来,让我们讨论一下如何使用CircuitPython在W5100S-EVB-Pico2上具有I2C接口的1602LCD模块。

在我们的板中,它支持两个I2C接口,供用户使用I2C设备。

I2C设备连接示意图

该模块有四个端口,分别是Voltage, Ground, SCL和SDA。连接电压端口到VBus为5V,并连接接地端口。接下来,我将GP2用于SDA端口,GP3用于SCL端口。

之后,让我们将引脚制作成I2C对象。

在CircuitPython中,为了使引脚与I2C设备连接,我们需要使用以下代码。

根据这个页面,在连接完程序中的端口后,我们需要检查我们的设备是否被锁定,是否与我们的板通信。为此,我们需要调用下面的while循环。

接下来,我们需要搜索I2C设备地址,以便我们的程序与之交互。使用i2c.sacn()函数查找地址,并用十六进制对其进行编码,以将字符串转换为十六进制。

要检查地址是否正确,您可以参考设备的数据表。对于162lcd模块,地址应该是0x27。这将用作HD44780对象的初始化地址。

现在,我们可以在程序中使用HD44780库。让我们谈谈我对原始文件所做的更改。

我们对库使用的导入进行了更改。

原件:

改变:

首先,我改变了对象的初始化,因为我在使用adafruit总线设备时遇到了错误。

原件:

改变:

接下来,我用更长的延迟和不同的方法更改了_write_to_i2c函数,以便将数据写入I2C设备,因为我们不再使用adafruit总线设备。我参考了I2C教程页面将字节数据写入地址。

原件:

改变:

我还增加了_strobe函数内的延迟。

原件:

改变:

最后,我改变了写函数的工作方式。在原始函数中,如果字符串超过16个字符,我们应该写入的行将不显示剩余的字符。因此,我改变了库的工作方式,这样它就可以显示每个字符,因为歌曲的名字通常很长。

首先,我检查单词是否超过16个字符。如果没有超出,则在将字符写入模块时保持原始代码。

接下来,我计算了歌曲中所有角色所需的最短台词。

我用了数学。将字符串的长度除以16得到所需的行数。

我还初始化了一个filled_line变量,该变量存储了我们已经为lcd屏幕填充的行数。

start和end变量指向当前正在打印的字符串的位置。

之后,我使用for循环打印所需的行。

每次迭代时,我将行数增加1,并检查行数是否大于2。

如果大于2,我将在LCD行上的每个字符中写入空格。将字符写入LCD屏幕的方法是首先将要打印的行地址写入设备,然后我们将所需的字符写入行。空格的ASCII码为32。

之后,我们就可以开始打印字符了。

我首先找出(I %2) + 1要打印的行,这样行可能的值是1和2。

然后,我们按照原始代码从GitHub逐字打印字符串。

最后,我们更新要在下一次迭代中打印到屏幕上的字符的开始和结束位置。

下面是原始代码和更新后的代码的整个write函数。

原件:

改变:

然后,让我们回到code.py文件。

首先使用库设置显示对象,并从secrets py文件中读取验证令牌。使用地址0x27或从I2C.scan()函数打印的地址。

接下来,用任何字符串测试写函数,或者您可以使用我们之前获得的Spotify用户名,因为我们将Spotify用户名存储在my_name变量中

现在,我们可以开始获取当前歌曲名称以及如何使用控制器旋钮来控制这个设备的部分。

3. Spotify歌曲名称显示的主要功能

对于本节,我们将分为两个部分,一个是打印歌曲名称的主要功能,另一个是列出设备中可用功能的中断功能。

在分开这两个部分之前,我们可以先初始化这两个部分中要使用的变量。

将模拟杆设置为控制器旋钮的纵轴,将CountIO设置为控制器模块上的按钮。

与DigitalIO不同,CountIO存储按钮按下的变化次数,而不是按钮的当前状态。

你可以在这个网站上了解更多。在我们的程序中,当按钮的初始状态为高而按下状态为低时,我们计算下降边的数量。

接下来,我们设置要打印到LCD屏幕的可用函数、一个电源变量和一个刷新计时器变量,它们类似于发送请求和刷新LCD屏幕的倒计时计时器。另外,设置一个常数204,它表示一个空响应的状态码。

我们现在可以开始从Spotify Web Player获取歌曲名称。

从一个while循环开始,将power变量作为继续while循环的条件。然后,我们调用中断函数,稍后我们将对其进行编码。

在while循环中,我们现在可以发送获取当前歌曲名称的请求。

首先,让我们参考URL端点上的Spotify页面及其所需的参数。

从Spotify API页面上获取当前歌曲选项卡,它显示了端点和HTTP方法以及所需的标头。

我们首先用授权令牌设置GET请求的报头。

然后,我们将检查我们的倒计时计时器。

如果倒计时计时器小于0,那么我们将开始发出请求。

如果没有,显示将不会改变,我们将定时器减少1。

在请求部分,我们首先将倒计时计时器设置为5并清除显示。然后,我们可以开始使用URL端点和授权头发出请求。

通常,如果你打开了Spotify网络播放器,你应该会收到一个非空的回复。在这种情况下,您应该成功地从请求中获取JSON。

但是,如果您没有打开Web Player并向该端点发出请求,您将收到一个空响应,并且您的程序将在读取从GET请求获得的JSON时出错。

因此,我们需要首先检查响应是否为空。

从这个页面,你可以得到Spotify API空响应的状态码,它是在我们的初始化部分定义的204。

如果状态码不是204,我们将从响应中读取JSON。

在我的程序中,我只会在Spotify Web Player播放歌曲时显示名称。因此,我需要JSON中的当前播放状态和歌曲名称。

如果播放状态为True,则显示歌曲名称。

如果播放状态为False,那么我们在程序中向用户显示设备暂停或关闭。

对于状态码为204的情况,意味着Spotify播放器已关闭,我们显示Spotify断开连接的消息并关闭机器。

接下来,我们可以创建中断函数

首先,我将power变量、操纵杆模块按钮的pressed_count变量和refresh_timer变量设置为全局变量,因为这些值将在此函数中更改。

此外,我们初始化了另一个计时器变量,用于模拟一个倒计时计时器,如果用户在函数页上闲置太长时间,它可以帮助返回到主函数,并初始化了用户选择在此函数页中使用的函数选择。

之后,我们检查用户是否在操纵杆模块上执行了任何按压。

可以从pressed_count中读取该值。计数变量,如果值不为0,那么我们将启动中断函数。

如果变量为0,则忽略中断函数并返回到主显示代码。

然后,我们将主代码的计时器重置为-1,并将按钮按下的计数重置为0,因为我们需要检查用户是否通过按下按钮从本页选择了任何功能。

清空LCD屏幕,显示功能页面的第一个选项,即暂停功能。

接下来,我们编写一个while循环来检查用户空闲时间是否过长。在while循环结束时,我们将中断计时器的值减少1,并将按钮按下计数重置为0。

在while循环中,我们首先设置更改选项的阈值。

我将上限阈值设置为55000,下限阈值设置为5000。如果操纵杆达到这两个值,选项将分别转到功能列表中的下一个功能或上一个功能。

对于每个更改,我们清除显示并将新选择打印到LCD屏幕上。

接下来,我们可以检查用户在选择功能的动作中是否按下了按钮。如果count变量不为0,则表示用户按下了操纵杆模块。在这种情况下,我们立即将中断定时器设置为其下限,重置计数变量并执行所请求的功能。如果不是,我们简单地继续中断定时器的循环,直到它达到下限。

正如介绍中所描述的,目前唯一支持的选项是退出设备,但我也检查了Spotify API页面并制作了暂停播放器的代码。如果您有Spotify Premium,您可以测试和验证代码。

对于退出设备的选项,我们只需将power变量设置为False,设备将在返回主显示代码后退出。

对于暂停设备的选项,我们可以参考Spotify API网页,查看请求示例和响应示例。

如网页所述,我们需要使用HTTP PUT方法来暂停播放器。

虽然Spotify API网站的报头只包括授权令牌,但在CircuitPython中,为了执行PUT请求,我们还需要包括内容类型和内容长度。

将这两个参数分别设置为“application/json”和“0”,因为我们不会将任何数据放入API端点。

接下来,我们调用暂停API端点。如果成功,请求将返回一个空响应。如果失败,它将返回一个包含错误原因的响应。

因此,我们可以用下面的代码发出暂停请求。

类似地,根据Spotify API页面,跳过函数的工作原理与暂停函数相同,但使用不同的API端点。

至于Start/Resume回放功能,我没有实现示例,因为需要额外的主体参数。

在我的程序中,我决定忽略这两个函数,并简单地将返回主菜单字符串打印到串行。

总之,这是我的程序的中断函数。

最后,当电源设置为False后,我清除了显示,并在LCD屏幕上写了一条关机消息,通知用户设备已关机。

结论

这就是Spotify名称显示器的项目。我希望通过这个项目,你学会了如何在CircuirPython上使用W5100S-EVB-Pico 2操作I2C设备,将W5100S-EVB-Pico 2连接到Spotify Web API,并自己为Spotify制作本地控制器。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭