www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 工業(yè)控制 > 電路設(shè)計項目集錦
[導(dǎo)讀]歡迎來到我的新項目,將Spotify Web API與我們的W5100S-EVB-Pico 2結(jié)合在CircuitPython上。這個項目顯示您的用戶名和您的Spotify網(wǎng)絡(luò)播放器上的當(dāng)前歌曲名稱到使用I2C協(xié)議與板連接的LCD屏幕上。

歡迎來到我的新項目,將Spotify Web API與我們的W5100S-EVB-Pico 2結(jié)合在CircuitPython上。這個項目顯示您的用戶名和您的Spotify網(wǎng)絡(luò)播放器上的當(dāng)前歌曲名稱到使用I2C協(xié)議與板連接的LCD屏幕上。

最初,這個項目是一個本地控制器,你可以通過選擇這個程序提供的功能來控制Spotify Web應(yīng)用程序播放器,但是由于音樂暫停/恢復(fù)API需要Spotify Premium工作,當(dāng)前的程序只允許打印你的名字。在這個程序中,跳過歌曲和暫停歌曲的模板已經(jīng)實(shí)現(xiàn)。

組件和電路python設(shè)置

對于硬件部分,您需要:

1. W5100S-EVB-Pico 2

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

3. 搖桿模塊(Controller Knob模塊)

對于軟件部分,您需要:

1. CircuitPython

2. Spotify Web API

在開始項目之前,請確保按照本指南設(shè)置電路板。

按如下方式連接組件。

Spotify Web API設(shè)置

去Spotify的Web API網(wǎng)站注冊成為一名開發(fā)者。

要使用Spotify Web API,您首先需要轉(zhuǎn)到儀表板頁面并創(chuàng)建新應(yīng)用程序。

1. 你可以根據(jù)你的喜好來命名你的應(yīng)用。

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

3. 選中Web API框

4. 保存應(yīng)用程序。

現(xiàn)在您已經(jīng)創(chuàng)建了應(yīng)用程序。接下來讓我們獲取客戶端憑據(jù)。

進(jìn)入儀表板上的應(yīng)用程序后,你應(yīng)該去設(shè)置查看你的ID和秘密。

微控制器的lib文件夾中創(chuàng)建一個secrets.py文件,并插入以下JSON

CircuitPython庫設(shè)置

在編寫項目代碼之前,從CircuitPython網(wǎng)站下載庫包,并將這些庫導(dǎo)入到lib文件夾中。

1. adafruit_wiznet5k

2. adafruit_connection_manager

3. adafruit_requests

接下來,從我的GitHub頁面下載hd44780庫。這是Bernhard Bablok對library的修改,因?yàn)槲矣龅搅艘恍╁e誤,我對library的write功能做了一些修改。

在下一節(jié)中,我將從我的Youtube頻道中跟隨我在Spotify名稱顯示器上的系列來解釋代碼,因此將有三個部分

1. 在CircuitPython上使用Spotify API

2在CircuitPython上使用162lcd

3. Spotify歌曲名稱顯示器主要功能

1. Spotify API與CircuitPython

首先,將這些庫導(dǎo)入到CircuitPython上的程序中。

接下來,我們檢查secrets.py是否包含在lib文件夾中。

之后,使用以下代碼設(shè)置互聯(lián)網(wǎng)連接。

我們的設(shè)備現(xiàn)在可以連網(wǎng)了。讓我們從Spotify API獲取授權(quán)碼開始。

我們首先將客戶端信息和重定向URI導(dǎo)入到本地變量。

接下來,定義一個包含將在程序中使用的作用域的列表。

您可以參考Spotify Web API作用域頁面來閱讀更多關(guān)于不同作用域使用的信息。

要顯示我們的名稱,顯示當(dāng)前歌曲名稱,并修改Spotify播放器,我們將需要使用以下作用域。

1. user-read-private

2. user-read-currently-playing

3. user-modify-playback-state

參考Spotify API頁面,您需要訪問授權(quán)端點(diǎn)并重定向到特定頁面以獲取代碼。

在這個項目中,我們將授權(quán)url打印到編輯器的串行中,并通過web瀏覽器訪問它。

在頁面上,它為發(fā)出請求提供了一個明確的框架。

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

重定向調(diào)用只是重定向URL輸入。對于我們的程序,我們將打印URL到串行,并手動單擊它來授權(quán)我們的設(shè)備并獲取代碼。

字串。stringify使用默認(rèn)連接器“&”連接JSON字典數(shù)據(jù)。

因此,我們可以創(chuàng)建要在串行上打印的手動URL。

在作用域中,我使用%20來連接作用域,因?yàn)樗硎究瞻椎腢RL編碼。

之后,運(yùn)行程序一次并點(diǎn)擊鏈接。你應(yīng)該到達(dá)下面的頁面,上面有你自己的應(yīng)用程序名稱。

按下同意按鈕,您應(yīng)該被重定向到包含您的授權(quán)碼信息的http bin org鏈接。

復(fù)制授權(quán)代碼,我們現(xiàn)在可以使用它來交換授權(quán)令牌。

要交換令牌,我們首先需要參考Spotify OAuth頁面。

如您所見,我們將需要body參數(shù)和頭參數(shù)來進(jìn)行請求調(diào)用。

首先,讓我們創(chuàng)建body參數(shù)。將驗(yàn)證代碼從HTTP BIN Org粘貼到一個變量中,并在程序中創(chuàng)建以下字典。

這是請求調(diào)用的主體。接下來,讓我們創(chuàng)建header參數(shù)。

如上圖所示,我們需要在base64中制作我們的身份驗(yàn)證細(xì)節(jié)。

為此,我們需要首先導(dǎo)入binascii庫,以UTF-8格式編碼憑證詳細(xì)信息,然后使用binascii的b2a_base64函數(shù)將其更改為base64格式。

但是由于該函數(shù)返回的是字節(jié)字符串對象而不是base64字符串,因此我們需要將字節(jié)字符串解碼回UTF-8并刪除末尾的結(jié)束字符。

之后,將編碼憑據(jù)和內(nèi)容類型都包含到headers參數(shù)中。

最后,使用參數(shù)發(fā)出HTTP請求以交換令牌。

令牌現(xiàn)在應(yīng)該被打印到代碼編輯器上的序列上。復(fù)制令牌并將其粘貼到lib文件夾中auth_token密鑰下的secrets.py文件中。

請注意,令牌只持續(xù)一個小時,如果您完成了on過程,您應(yīng)該注釋令牌交換部分,以允許程序運(yùn)行其余部分。

我們現(xiàn)在已經(jīng)完成了Spotify Web API的授權(quán)過程。您可以通過嘗試使用以下代碼打印您的帳戶名來測試令牌

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

接下來,讓我們討論一下如何使用CircuitPython在W5100S-EVB-Pico2上具有I2C接口的1602LCD模塊。

在我們的板中,它支持兩個I2C接口,供用戶使用I2C設(shè)備。

I2C設(shè)備連接示意圖

該模塊有四個端口,分別是Voltage, Ground, SCL和SDA。連接電壓端口到VBus為5V,并連接接地端口。接下來,我將GP2用于SDA端口,GP3用于SCL端口。

之后,讓我們將引腳制作成I2C對象。

在CircuitPython中,為了使引腳與I2C設(shè)備連接,我們需要使用以下代碼。

根據(jù)這個頁面,在連接完程序中的端口后,我們需要檢查我們的設(shè)備是否被鎖定,是否與我們的板通信。為此,我們需要調(diào)用下面的while循環(huán)。

接下來,我們需要搜索I2C設(shè)備地址,以便我們的程序與之交互。使用i2c.sacn()函數(shù)查找地址,并用十六進(jìn)制對其進(jìn)行編碼,以將字符串轉(zhuǎn)換為十六進(jìn)制。

要檢查地址是否正確,您可以參考設(shè)備的數(shù)據(jù)表。對于162lcd模塊,地址應(yīng)該是0x27。這將用作HD44780對象的初始化地址。

現(xiàn)在,我們可以在程序中使用HD44780庫。讓我們談?wù)勎覍υ嘉募龅母摹?

我們對庫使用的導(dǎo)入進(jìn)行了更改。

原件:

改變:

首先,我改變了對象的初始化,因?yàn)槲以谑褂胊dafruit總線設(shè)備時遇到了錯誤。

原件:

改變:

接下來,我用更長的延遲和不同的方法更改了_write_to_i2c函數(shù),以便將數(shù)據(jù)寫入I2C設(shè)備,因?yàn)槲覀儾辉偈褂胊dafruit總線設(shè)備。我參考了I2C教程頁面將字節(jié)數(shù)據(jù)寫入地址。

原件:

改變:

我還增加了_strobe函數(shù)內(nèi)的延遲。

原件:

改變:

最后,我改變了寫函數(shù)的工作方式。在原始函數(shù)中,如果字符串超過16個字符,我們應(yīng)該寫入的行將不顯示剩余的字符。因此,我改變了庫的工作方式,這樣它就可以顯示每個字符,因?yàn)楦枨拿滞ǔ:荛L。

首先,我檢查單詞是否超過16個字符。如果沒有超出,則在將字符寫入模塊時保持原始代碼。

接下來,我計算了歌曲中所有角色所需的最短臺詞。

我用了數(shù)學(xué)。將字符串的長度除以16得到所需的行數(shù)。

我還初始化了一個filled_line變量,該變量存儲了我們已經(jīng)為lcd屏幕填充的行數(shù)。

start和end變量指向當(dāng)前正在打印的字符串的位置。

之后,我使用for循環(huán)打印所需的行。

每次迭代時,我將行數(shù)增加1,并檢查行數(shù)是否大于2。

如果大于2,我將在LCD行上的每個字符中寫入空格。將字符寫入LCD屏幕的方法是首先將要打印的行地址寫入設(shè)備,然后我們將所需的字符寫入行??崭竦腁SCII碼為32。

之后,我們就可以開始打印字符了。

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

然后,我們按照原始代碼從GitHub逐字打印字符串。

最后,我們更新要在下一次迭代中打印到屏幕上的字符的開始和結(jié)束位置。

下面是原始代碼和更新后的代碼的整個write函數(shù)。

原件:

改變:

然后,讓我們回到code.py文件。

首先使用庫設(shè)置顯示對象,并從secrets py文件中讀取驗(yàn)證令牌。使用地址0x27或從I2C.scan()函數(shù)打印的地址。

接下來,用任何字符串測試寫函數(shù),或者您可以使用我們之前獲得的Spotify用戶名,因?yàn)槲覀儗potify用戶名存儲在my_name變量中

現(xiàn)在,我們可以開始獲取當(dāng)前歌曲名稱以及如何使用控制器旋鈕來控制這個設(shè)備的部分。

3. Spotify歌曲名稱顯示的主要功能

對于本節(jié),我們將分為兩個部分,一個是打印歌曲名稱的主要功能,另一個是列出設(shè)備中可用功能的中斷功能。

在分開這兩個部分之前,我們可以先初始化這兩個部分中要使用的變量。

將模擬桿設(shè)置為控制器旋鈕的縱軸,將CountIO設(shè)置為控制器模塊上的按鈕。

與DigitalIO不同,CountIO存儲按鈕按下的變化次數(shù),而不是按鈕的當(dāng)前狀態(tài)。

你可以在這個網(wǎng)站上了解更多。在我們的程序中,當(dāng)按鈕的初始狀態(tài)為高而按下狀態(tài)為低時,我們計算下降邊的數(shù)量。

接下來,我們設(shè)置要打印到LCD屏幕的可用函數(shù)、一個電源變量和一個刷新計時器變量,它們類似于發(fā)送請求和刷新LCD屏幕的倒計時計時器。另外,設(shè)置一個常數(shù)204,它表示一個空響應(yīng)的狀態(tài)碼。

我們現(xiàn)在可以開始從Spotify Web Player獲取歌曲名稱。

從一個while循環(huán)開始,將power變量作為繼續(xù)while循環(huán)的條件。然后,我們調(diào)用中斷函數(shù),稍后我們將對其進(jìn)行編碼。

在while循環(huán)中,我們現(xiàn)在可以發(fā)送獲取當(dāng)前歌曲名稱的請求。

首先,讓我們參考URL端點(diǎn)上的Spotify頁面及其所需的參數(shù)。

從Spotify API頁面上獲取當(dāng)前歌曲選項卡,它顯示了端點(diǎn)和HTTP方法以及所需的標(biāo)頭。

我們首先用授權(quán)令牌設(shè)置GET請求的報頭。

然后,我們將檢查我們的倒計時計時器。

如果倒計時計時器小于0,那么我們將開始發(fā)出請求。

如果沒有,顯示將不會改變,我們將定時器減少1。

在請求部分,我們首先將倒計時計時器設(shè)置為5并清除顯示。然后,我們可以開始使用URL端點(diǎn)和授權(quán)頭發(fā)出請求。

通常,如果你打開了Spotify網(wǎng)絡(luò)播放器,你應(yīng)該會收到一個非空的回復(fù)。在這種情況下,您應(yīng)該成功地從請求中獲取JSON。

但是,如果您沒有打開Web Player并向該端點(diǎn)發(fā)出請求,您將收到一個空響應(yīng),并且您的程序?qū)⒃谧x取從GET請求獲得的JSON時出錯。

因此,我們需要首先檢查響應(yīng)是否為空。

從這個頁面,你可以得到Spotify API空響應(yīng)的狀態(tài)碼,它是在我們的初始化部分定義的204。

如果狀態(tài)碼不是204,我們將從響應(yīng)中讀取JSON。

在我的程序中,我只會在Spotify Web Player播放歌曲時顯示名稱。因此,我需要JSON中的當(dāng)前播放狀態(tài)和歌曲名稱。

如果播放狀態(tài)為True,則顯示歌曲名稱。

如果播放狀態(tài)為False,那么我們在程序中向用戶顯示設(shè)備暫?;蜿P(guān)閉。

對于狀態(tài)碼為204的情況,意味著Spotify播放器已關(guān)閉,我們顯示Spotify斷開連接的消息并關(guān)閉機(jī)器。

接下來,我們可以創(chuàng)建中斷函數(shù)

首先,我將power變量、操縱桿模塊按鈕的pressed_count變量和refresh_timer變量設(shè)置為全局變量,因?yàn)檫@些值將在此函數(shù)中更改。

此外,我們初始化了另一個計時器變量,用于模擬一個倒計時計時器,如果用戶在函數(shù)頁上閑置太長時間,它可以幫助返回到主函數(shù),并初始化了用戶選擇在此函數(shù)頁中使用的函數(shù)選擇。

之后,我們檢查用戶是否在操縱桿模塊上執(zhí)行了任何按壓。

可以從pressed_count中讀取該值。計數(shù)變量,如果值不為0,那么我們將啟動中斷函數(shù)。

如果變量為0,則忽略中斷函數(shù)并返回到主顯示代碼。

然后,我們將主代碼的計時器重置為-1,并將按鈕按下的計數(shù)重置為0,因?yàn)槲覀冃枰獧z查用戶是否通過按下按鈕從本頁選擇了任何功能。

清空LCD屏幕,顯示功能頁面的第一個選項,即暫停功能。

接下來,我們編寫一個while循環(huán)來檢查用戶空閑時間是否過長。在while循環(huán)結(jié)束時,我們將中斷計時器的值減少1,并將按鈕按下計數(shù)重置為0。

在while循環(huán)中,我們首先設(shè)置更改選項的閾值。

我將上限閾值設(shè)置為55000,下限閾值設(shè)置為5000。如果操縱桿達(dá)到這兩個值,選項將分別轉(zhuǎn)到功能列表中的下一個功能或上一個功能。

對于每個更改,我們清除顯示并將新選擇打印到LCD屏幕上。

接下來,我們可以檢查用戶在選擇功能的動作中是否按下了按鈕。如果count變量不為0,則表示用戶按下了操縱桿模塊。在這種情況下,我們立即將中斷定時器設(shè)置為其下限,重置計數(shù)變量并執(zhí)行所請求的功能。如果不是,我們簡單地繼續(xù)中斷定時器的循環(huán),直到它達(dá)到下限。

正如介紹中所描述的,目前唯一支持的選項是退出設(shè)備,但我也檢查了Spotify API頁面并制作了暫停播放器的代碼。如果您有Spotify Premium,您可以測試和驗(yàn)證代碼。

對于退出設(shè)備的選項,我們只需將power變量設(shè)置為False,設(shè)備將在返回主顯示代碼后退出。

對于暫停設(shè)備的選項,我們可以參考Spotify API網(wǎng)頁,查看請求示例和響應(yīng)示例。

如網(wǎng)頁所述,我們需要使用HTTP PUT方法來暫停播放器。

雖然Spotify API網(wǎng)站的報頭只包括授權(quán)令牌,但在CircuitPython中,為了執(zhí)行PUT請求,我們還需要包括內(nèi)容類型和內(nèi)容長度。

將這兩個參數(shù)分別設(shè)置為“application/json”和“0”,因?yàn)槲覀儾粫⑷魏螖?shù)據(jù)放入API端點(diǎn)。

接下來,我們調(diào)用暫停API端點(diǎn)。如果成功,請求將返回一個空響應(yīng)。如果失敗,它將返回一個包含錯誤原因的響應(yīng)。

因此,我們可以用下面的代碼發(fā)出暫停請求。

類似地,根據(jù)Spotify API頁面,跳過函數(shù)的工作原理與暫停函數(shù)相同,但使用不同的API端點(diǎn)。

至于Start/Resume回放功能,我沒有實(shí)現(xiàn)示例,因?yàn)樾枰~外的主體參數(shù)。

在我的程序中,我決定忽略這兩個函數(shù),并簡單地將返回主菜單字符串打印到串行。

總之,這是我的程序的中斷函數(shù)。

最后,當(dāng)電源設(shè)置為False后,我清除了顯示,并在LCD屏幕上寫了一條關(guān)機(jī)消息,通知用戶設(shè)備已關(guān)機(jī)。

結(jié)論

這就是Spotify名稱顯示器的項目。我希望通過這個項目,你學(xué)會了如何在CircuirPython上使用W5100S-EVB-Pico 2操作I2C設(shè)備,將W5100S-EVB-Pico 2連接到Spotify Web API,并自己為Spotify制作本地控制器。

本文編譯自hackster.io

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉