音樂伴隨著我們的日常生活,能夠讀出當前的播放信息,如標題、藝術家和專輯,直接打開了在顯示器上顯示這些數(shù)據(jù)的可能性,從而為桌子創(chuàng)造了創(chuàng)造性的裝飾。有了ESP32和Spotify API,這些數(shù)據(jù)可以很容易地以各種方式檢索和使用。在這篇博客文章中,您將學習到從Spotify獲取當前播放軌道API端點的API請求的基礎知識。
硬件:
主板采用ESP32芯片;例如:Dev Kit C V2或Dev Kit C V4 USB-C
軟件:
如果您是第一次在Arduino IDE中編程ESP32,請復制Arduino IDE中的以下鏈接:File->Preferences->Additional boards manager
操作系統(tǒng)已經(jīng)安裝了該板的驅(qū)動程序(CP2102)。
Spotify API提供了各種API端點來檢索信息或?qū)崿F(xiàn)用戶交互。要檢索標題、藝術家、專輯和進度等數(shù)據(jù),可以使用Get Current Playing Track API。
1.創(chuàng)建一個Spotify應用程序
為了能夠使用Spotify API,您必須在Spotify開發(fā)者頁面上登錄您的Spotify帳戶并打開儀表板(單擊右上角的帳戶)。在儀表板中,單擊按鈕Create App按鈕,然后輸入您選擇的名稱和描述。對于API類型,選擇Web API。在成功配置Spotify應用程序后,您可以通過點擊“查看客戶端秘密”查看應用程序設置下的客戶端ID和API密鑰。
保存這兩條信息。
2.授權
現(xiàn)在使用上一步中的ID在瀏覽器中打開鏈接。
一段時間后,一個窗口打開請求同意。同意后,瀏覽器現(xiàn)在提供一個響應,看起來像這樣:
在這里保存代碼(在搜索欄code=中)。此代碼是一個授權令牌?,F(xiàn)在您已經(jīng)收到了授權碼,必須通過API將其“交換”為請求令牌。您可以在文檔中找到有關這方面的一般信息。
ESP32包中包含的HTTPclient庫適合通過Arduino與API通信。作為json格式的服務器響應,解碼為明文需要使用ArduinoJson庫進行明文解碼。
該庫可以通過鏈接下載為.zip文件,并添加到Arduino IDE中Sketch>Include library >Add.ZIP library ....如果你使用的是PlatformIO,將以下內(nèi)容復制到PlatformIO .ini文件中的lib_deps中:
3.請求刷新和訪問令牌
初始調(diào)試時,授權令牌由最終程序中的API查詢,程序代碼如下:
在第一步中接收到的授權令牌在最后的程序中通過串行監(jiān)視器傳送到電路板上。首先,根據(jù)文檔中的規(guī)范創(chuàng)建包含信息的HTTP標頭和正文。然后通過POST將這些信息傳輸?shù)絊potify服務器;如果接收到響應碼200,則表示請求成功,可以暫時存儲傳輸?shù)臄?shù)據(jù)并提取所需的信息。有關該過程的信息可以在以下文檔頁面上找到:Codeflow。
4.更新訪問令牌
由于訪問令牌僅在一小時的有限時間內(nèi)有效,因此必須在過期后再次更新。與請求令牌的第一個請求一樣,基本程序保持不變,只是現(xiàn)在使用第一步中的請求令牌而不是授權碼。
5.請求數(shù)據(jù)
現(xiàn)在已經(jīng)確保了當前訪問令牌始終可用,您可以切換到查詢相關信息。在文檔頁面的右側是來自服務器的響應,其中包含您帳戶的當前數(shù)據(jù)。這些數(shù)據(jù)可以使用以下程序從ESP32中檢索:
首先,生成HTTP報頭,然后使用POST命令將其發(fā)送到服務器。響應代碼401表示訪問令牌不再有效,必須更新。對于代碼200,從JSON格式中提取接收到的數(shù)據(jù)并臨時存儲在相應的變量中。為了更好的可讀性,時間被轉換成秒,然后所有信息(標題、藝術家、專輯、持續(xù)時間、經(jīng)過的時間和進度)都顯示在串行監(jiān)視器上。
6.最終方案
將最終程序加載到電路板上,并通過監(jiān)視器輸入授權令牌。串行監(jiān)視器應該顯示當前正在播放的歌曲的數(shù)據(jù)。
如果有任何問題,請將HTTP響應代碼與文檔中的各種代碼進行比較。
程序說明:在setup()中檢索保存的令牌。如果沒有可用的令牌,則必須在串行監(jiān)視器中輸入它。因此,程序?qū)⒌却?,直到?chuàng)建條目,然后將此代碼保存在SPIFFS中。如果請求令牌已經(jīng)存在,則使用它來請求訪問令牌。使用上面生成的訪問令牌在loop()中檢索信息。接收到的數(shù)據(jù)然后在串行監(jiān)視器中輸出。如果HTTP請求返回代碼401,這意味著訪問令牌已經(jīng)過期,必須更新;這是自動完成的。
該程序還包含三個輔助方法。base64Encode()方法將訪問數(shù)據(jù)更改為API接口所需的base64格式。最后兩個函數(shù)是存儲和讀取令牌,它們用于在flash中存儲刷新令牌。存儲的令牌即使在程序重新閃現(xiàn)之后也會保留,因此只需要在程序第一次啟動時進行授權。
本文編譯自hackster.io