構建一個激勵語錄查看器
M5Stack PaperS3是創(chuàng)建能夠顯示來自各種類型傳感器數(shù)據的信息面板的絕佳選擇。但它也可以可視化從互聯(lián)網上的多個來源提取的內容,如天氣信息和預報,股票價格,新聞,和許多其他有用的(有時只是有趣的)數(shù)據。
為了訪問這類內容,許多服務提供了所謂的api——一個允許我們與網站“對話”以發(fā)送或接收結構化數(shù)據的接口。
在本文中,我將解釋什么是API,如何使用API,并作為一個實際示例,我們將構建一個激勵語錄查看器,它每隔15分鐘自動下載鼓舞人心的語錄,并將它們顯示在PaperS3屏幕上。
如果您不熟悉PaperS3的特性,我建議您查看之前的這篇文章,在這篇文章中我做了全面的回顧,并展示了一個簡單的示例。
什么是API?
作為用戶,我們使用瀏覽器及其界面訪問網站及其服務。但是在計算機或微控制器上運行的應用程序需要其他機制來交換數(shù)據。這就是api(應用程序編程接口)發(fā)揮作用的地方:它們定義了一組規(guī)則,允許另一個應用程序或服務(不是人)訪問網站并請求數(shù)據或執(zhí)行功能。
RESTful API
api可以通過多種方式實現(xiàn)。在web API的情況下,最常見的方法是通過HTTP協(xié)議使用GET或POST等方法。它們通常遵循一種稱為REST(具象狀態(tài)傳輸)的方法,這就是為什么它們被稱為RESTful api(或簡稱REST api)的原因。
REST API的主要特性包括:
?使用HTTP協(xié)議:web瀏覽器使用的HTTP協(xié)議。
?遵循客戶機-服務器模型:客戶機發(fā)出請求,服務器響應。
?通過URL訪問資源:每個資源都有自己的地址,稱為端點。
?使用標準HTTP方法:GET、POST、PUT、DELETE。
?獨立處理每個請求:請求之間不存儲上下文(這稱為無狀態(tài))。
?服務器用狀態(tài)碼(例如,200 = OK)和可選的JSON等標準格式的數(shù)據進行應答。
API的例子
如前所述,許多網站都可以通過REST api訪問。有些是付費的,有些是免費的,但需要注冊才能獲得訪問令牌或密鑰,還有一些是完全開放的。例子包括:
?OpenWeather:天氣數(shù)據
?Todoist:訪問任務和項目
?格言:勵志名言
?Cat API:隨機貓圖像
?股票數(shù)據:財務信息
?ChuckNorris。有趣的查克·諾里斯故事
接下來,我將向您展示如何為M5Stack PaperS3創(chuàng)建一個應用程序,該應用程序可以使用ZenQuotes API全天下載激勵語錄。該過程非常通用,因此您也可以輕松地將其應用于其他基于REST api的網站。
ZenQuotes
ZenQuotes是一個提供免費服務的網站,可以通過其API從各種作者和主題中獲取勵志名言。
基本功能是完全免費的,不需要注冊或令牌。但是,對于高級功能或大量使用,需要付費帳戶。
端點
其中mode可以為:
?random:返回一個隨機引號
?quotes:返回多個引號(非常適合緩存和本地顯示)
?today:返回當天的特色報價
?author:根據作者篩選引用(與其他模式一起使用);溢價)
?image:返回一張圖片(僅限高級版)
響應格式
對API的任何請求都以JSON格式返回數(shù)據,其中包含以下關鍵字:
?q =引用文本
?a =作者姓名
?i =作者形象(僅限收費)
?c =引用的字符數(shù)
?h =引用HTML格式
響應是這種格式的元素數(shù)組。當調用/quotes時,響應包含多個項目。在/random或/today這樣的端點中,它只包含一個。
來自/today端點的示例響應:
請求和響應處理可以在Arduino或MicroPython中輕松編碼,但對于這個項目,我將使用UIFlow 2,使其更加可視化和初學者友好。
這個項目
該程序的結構很簡單,由以下任務組成:
?初始化設備
?連接Wi - Fi網絡
?向ZenQuotes網站提出請求
?在屏幕上顯示引用及其作者
?15分鐘后,將設備下電并重啟
最復雜的部分是在屏幕上顯示文本的功能,因為我設計它是為了保持單詞分隔,避免單詞在中間劃線。我將一步一步解釋它是如何工作的。
初始化
在初始化期間(除了UIFlow執(zhí)行的默認設置之外),使用覆蓋整個顯示器的圖像小部件設置屏幕背景。
使用Web終端將圖像(名為FondoEPD16p.png的文件)上傳到PaperS3的閃存中,然后使用代碼中的Set image0 Show塊使其可見。
接下來,設置字體大小、文本顏色和背景顏色。在坐標20,80處也為即將打印的文本定義了光標位置。
連接Wi - Fi
Wi - Fi連接是通過調用ConnectWifi函數(shù)建立的,該函數(shù)使用以下代碼塊定義:
此功能將Wi - Fi設置為STA(站)模式,并連接到您的家庭網絡。記住用實際的網絡詳細信息替換隱藏的SSID和密碼。該函數(shù)返回連接狀態(tài),允許您驗證連接是否成功。
發(fā)送請求到ZenQuotes
如果Wi - Fi網絡連接失敗,則會顯示錯誤信息。如果成功,則向ZenQuotes網站發(fā)送請求。
在屏幕顯示文本
在程序的這一部分中,將處理服務器響應。如果沒有錯誤,則使用PrintLargeText函數(shù)將引用和作者顯示在屏幕上。
如上圖所示,第一步是檢查來自服務器的響應代碼是否為200(這意味著一切正常)。如果不是200,則顯示一條錯誤消息。如果是,則解析接收到的信息。
首先,服務器返回的JSON數(shù)據存儲在變量ResponseData中。
接下來,使用get鍵塊,我們在ResponseData的元素0(一個列表,盡管它只包含一個元素)中查找鍵q,它對應于引號。該鍵的值存儲在變量Text中,并作為參數(shù)傳遞給PrintLargeText函數(shù),該函數(shù)將其顯示在屏幕上。
重復相同的過程來查找與作者姓名對應的鍵a。該值再次存儲在Text中,并使用PrintLargeText打印。
現(xiàn)在讓我們看看這個函數(shù)是做什么的:
這個想法是打印引用的完整單詞,而不會在屏幕邊緣破壞它們。
要做到這一點,要打印的文本被分割成一個稱為單詞的單詞列表。然后,使用count循環(huán)逐個打印這些單詞,同時確保字符總數(shù)加上空格不超過20個——這是我設置的最大寬度。如果下一個單詞將超過這個限制,則從更低的位置開始新的一行,并重復此過程,直到打印所有單詞。
設備下電
為了節(jié)省電池,在顯示文本后,程序暫停2秒,然后關閉PaperS3電源,并計劃在15分鐘內喚醒它。
上面的所有操作都是在Setup塊中完成的,Loop塊中沒有任何操作。
這是PaperS3的樣子,上面有鼓舞人心的名言,用內置的磁鐵貼在我的冰箱上
結論
M5Stack PaperS3不僅因其低功耗EPD屏幕而脫穎而出,而且還因其成為數(shù)字世界窗口的能力而脫穎而出——顯示有用的、有趣的或僅僅是鼓舞人心的信息。
在這個項目中,我們學習了如何使用REST API連接到像ZenQuotes這樣的web服務,檢索JSON格式的內容,并在屏幕上清晰地顯示出來。我們使用UIFlow 2完成了所有這些,這表明您不需要編寫太多代碼來創(chuàng)建連接和視覺上引人入勝的應用程序。
除了這個勵志語錄的例子,同樣的結構可以很容易地適應顯示:
?每天的天氣,
?待辦事項清單,
?財務數(shù)據,
?新聞標題
?或任何其他可通過API訪問的數(shù)據。
與UIFlow 2編程環(huán)境相結合,PaperS3以簡單直觀的方式成為進入物聯(lián)網和網絡連接編程世界的絕佳工具。它的易用性使其成為教育項目的理想選擇-其目標是學習api,傳感器和自動化-以及家庭制造項目,如信息面板,日常計劃或數(shù)字板,為您的家庭帶來功能和風格。
本文編譯自hackster.io