鑰匙要點
- >本文介紹瞭如何使用node.js在Arduino的LCD上顯示Web API的數據。作者以在IoT悉尼聚會上進行隨機抽獎的示例,Arduino LCD設置在Meetup.com event rsvp信息中引入RSVP信息並隨機選擇成員。 >
- 作者使用node.js創建一個腳本,該腳本向Meetup API提出HTTP請求,解析返回的JSON數據,並在Arduino的LCD上顯示一個隨機選擇的成員名稱。作者還提供了有關如何設置node.js服務器,製作http請求並處理返回數據的分步指南。
> 作者提到約翰尼五庫用於通過node.js來控制arduino,並且請求模塊用於從node.js服務器向Meetup API發出HTTP請求。下劃線庫用於解析返回的JSON數據。
- >作者結束時,提出了此設置的其他潛在用途,例如顯示怪異的消息,保留NBA季后賽分數或從Web API獲取的任何其他數據。作者還鼓勵讀者根據此代碼共享自己的項目。
- > lcds。他們很有趣。這是通過發光文字說話時向您的Arduino發出聲音的最酷方法之一。在本文中,我們將探討如何使用node.js. 從Web API中引入數據並在Arduino的LCD上顯示。
>它也與我在Sitepoint上寫的一系列物品文章相同。我正在探索帶有各種設備的許多不同的物聯網可能性。上週,我研究了Unity遊戲引擎中使用的IoT數據,在此之前,我研究瞭如何從Jawbone Up中獲取數據。
>>讓我們開始!
您的arduino素描
我們將在此示例中使用的草圖看起來像:
>這是您在Sparkfun Inventors套件中會發現的版本的略微修改版本。您會在網上找到其他LCD草圖的其他變體,可以重新排列事物的連接方式,但可以以相同的方式工作。您可能只需要調整下面JavaScript中定義哪個引腳。
>
我們的JavaScript代碼
<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000, </span> five <span>= require('johnny-five'), </span> request <span>= require('request'), </span> _ <span>= require('underscore'), </span> board <span>= new five<span>.Board</span>(), </span> lcd<span>; </span> board<span>.on('ready', function() { </span> lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span> <span>}); </span> <span>this.repl.inject({ </span> <span>lcd: lcd </span> <span>}); </span><span>}); </span> app<span>.get('/chooseMember/:event_id', function(req<span>, resp</span>) { </span> <span>request({ </span> <span>url: 'https://api.meetup.com/2/rsvps?key=474cc9332345ea7d7e135f50653c&event_id='+req.params.event_id, </span> <span>json: true </span> <span>}, function(error<span>, response, body</span>) { </span> <span>var members = _.pluck(body.results, 'member'), </span> randomMember <span>= members[_.random(members.length - 1)]; </span> resp<span>.json(randomMember); </span> <span>console.log(randomMember.name); </span> lcd<span>.clear().print(randomMember.name); </span> <span>}); </span><span>}); </span> server<span>.listen(port, function() { </span> <span>console.log('Listening on ' + port); </span><span>});</span>
>逐步設置此此操作
如果您非常了解Node.js,那麼大部分代碼已經對您來說很有意義。我將解釋每一項,只是為了確保每個人都在同一頁面上,並在我們需要設置的其他任何內容方面提供指導。首先,我們設置了Express Server變量,以準備在端口5000上運行LocalHost服務器:
>然後,我們有一個相當重要的事情要包括約翰尼五。這是NPM庫,它使我們可以訪問通過Node.js.
來控制Arduino的功能。<span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000,</span>在那之後,我們包括請求模塊。我們將使用它來從我們的node.js服務器到METUP API。
要保持非常乾淨和簡單,我們將使用下劃線來瀏覽數據陣列。
five <span>= require('johnny-five'),</span>
最終兩個變量是板和LCD變量,我們將用來存儲Johnny-Five創建的Arduino對象。
request <span>= require('request'),</span>
我們首先要等待我們的Arduino董事會準備好訪問,Johnny-Five在我們的董事會準備就緒時發出了“準備”活動。
_ <span>= require('underscore'),</span>
>我們的董事會準備就緒後,我們讓Johnny-Five知道我們已經連接了哪種LCD。我們在數組中定義了從上到下的引腳:
board <span>= new five<span>.Board</span>(), </span> lcd<span>;</span>
>我們還定義了LCD有多少行和列。就我而言,它是2×16 LCD。所有這些看起來都這樣:
board<span>.on('ready', function() {</span>
然後,我們有可選的代碼(但要包括在內),這將使我們能夠從命令行運行時從命令行訪問LCD功能(我將在文章後面在操作中顯示此操作):

>
lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span><span>});</span>我們的Get請求查找此ID看起來像:
然後,我們進入代碼的複雜位!我們對METUP API的實際HTTP請求。我們通過請求功能訪問此功能。我們在這里傳遞兩件事,我們的HTTP選項和我們的回調功能。
<span>this.repl.inject({ </span> <span>lcd: lcd </span><span>});</span>>我們的HTTP調用選項包含我們的URL和布爾值,以使請求知道我們期望將JSON對象重新回來。看起來很這樣:

>
>最後,我們獲得了使用返回的JSON數據的回調函數。我一直保持簡單且沒有錯誤處理,但是如果這是一個嚴肅的生產級別的創建 - 添加了錯誤變量的檢查。
>json輸出,回調將在我們的身體變量中返回,看起來像:
><span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000, </span> five <span>= require('johnny-five'), </span> request <span>= require('request'), </span> _ <span>= require('underscore'), </span> board <span>= new five<span>.Board</span>(), </span> lcd<span>; </span> board<span>.on('ready', function() { </span> lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span> <span>}); </span> <span>this.repl.inject({ </span> <span>lcd: lcd </span> <span>}); </span><span>}); </span> app<span>.get('/chooseMember/:event_id', function(req<span>, resp</span>) { </span> <span>request({ </span> <span>url: 'https://api.meetup.com/2/rsvps?key=474cc9332345ea7d7e135f50653c&event_id='+req.params.event_id, </span> <span>json: true </span> <span>}, function(error<span>, response, body</span>) { </span> <span>var members = _.pluck(body.results, 'member'), </span> randomMember <span>= members[_.random(members.length - 1)]; </span> resp<span>.json(randomMember); </span> <span>console.log(randomMember.name); </span> lcd<span>.clear().print(randomMember.name); </span> <span>}); </span><span>}); </span> server<span>.listen(port, function() { </span> <span>console.log('Listening on ' + port); </span><span>});</span>
我們通過在下劃線中使用_.pluck()函數來濾除很多。這將有助於我們專注於API的重要一點 - RSV的成員。 _.pluck()函數通過結果陣列,僅從每個成員信息中獲取成員信息。
><span>var express = require('express'), </span> app <span>= express(), </span> server <span>= require('http').<span>Server</span>(app), </span> port <span>= 5000,</span>然後,我們使用_.members()下劃線函數從結果數組中隨機選擇一個成員。
five <span>= require('johnny-five'),</span>>我們通過Express Server返回該數據作為對GET請求的JSON響應,並在控制台中記錄名稱,以便我們可以查看選擇誰:
然後,我們使用LCD Johnny-Five對象,我們之前設置的對象將成員的名稱打印到我們的LCD上。我們首先使用lcd.clear()清除當前所有內容的LCD,然後使用lcd.print()打印出名稱字符。
request <span>= require('request'),</span>
>當您運行此操作時,您會注意到一些長名將被切斷,而不是包裹到另一行。如果您想將物品包裹在第二行上,請嘗試將您的randommember分開。名稱為兩個16個字符字符串,打印第一個字符串,然後使用lcd.cursor(1,0);在打印第二條之前,移至第二行。就我而言,不需要,因為我們真正需要的就是能夠分辨出繪製誰的名字 - 一些缺少的字符通常不會在這裡引起問題。
>_ <span>= require('underscore'),</span>在您的arduino上跑步
>我們已經準備好了node.js代碼。現在,連接您的arduino,並確保已上載了標準firmata素描:
>我們還需要確保已經整理了所有依賴項。我的軟件包。 json文件看起來像:

隨時可以將其適應您自己的項目,您想要的主要是這些依賴性。
board <span>= new five<span>.Board</span>(), </span> lcd<span>;</span>>然後,一旦完成了一個軟件包。 JSON文件,打開控制台,然後轉到代碼的位置。運行這個出色的命令:
之後是一個:
>board<span>.on('ready', function() {</span>
>在該運行中,您現在應該能夠訪問http:// localhost:5000/choosemember/221960710(當然可以替換自己的事件ID),結果您會出現隨機的RSVP:
lcd <span>= new five<span>.LCD</span>({ </span> <span>pins: [12, 11, 5, 4, 3, 2], </span> <span>rows: 2, </span> <span>cols: 16 </span><span>});</span>如果您再次運行它,將會出現新的RSVP。如果一切順利,這些名稱應該出現在您的Arduino的LCD上!
>
我們提到的
>我們在Node.js Server中提供了一些代碼。這樣做的是,您可以在node.js服務器運行時從終端內運行命令,以設置LCD屏幕上顯示的內容:
>
如果我們輸入lcd.print(),我們可以得到一些魔術:

>

>我們成功地在我們的LCD上出現了活動組的隨機選擇!可以將同樣的想法應用於那裡的任何其他API,只需調整請求調用以及如何處理數據即可。在LCD上留下怪異的郵件供室友,請保留最新的NBA季后賽分數或其他任何您喜歡的東西!
>
根據此代碼使某些有趣的事情?在評論中留下便條並分享,我很想看到它!>
經常詢問有關Arduino LCD上的Web API的問題(常見問題解答)>如何將我的Arduino LCD連接到Internet?
>將您的Arduino LCD連接到Internet需要像ESP8266這樣的Wi-Fi模塊。該模塊允許您的Arduino連接到Wi-Fi網絡,並使用HTTP發出簡單的數據請求。您需要使用SPI接口將ESP8266連接到Arduino板。連接後,您可以使用ESP8266WIFI庫來管理Wi-Fi連接和ESP8266HTTPCLCCLIENT庫來製作HTTP請求。
>api在arduino lcd中的作用是什麼? (應用程序編程接口)是一組規則,允許不同的軟件應用程序相互通信。在Arduino LCD的背景下,API用於從Internet獲取數據。這些數據可以是天氣更新,股價甚至您自己的自定義數據中的任何內容。 API獲取此數據並將其發送給您的Arduino板,然後在LCD上顯示它您的Arduino LCD上的API涉及幾個步驟。首先,您需要使用Wi-Fi模塊將Arduino連接到Internet。然後,您需要使用HTTP協議向API提出請求。 API將使用請求的數據響應,然後您可以在LCD上解析並顯示它們。 LiquidCrystal庫可用於管理LCD顯示。 >>我可以在我的Arduino LCD上使用任何API?但是,請記住,某些API可能需要身份驗證,這可能會更複雜。另外,API返回的數據需要以您的Arduino可以理解的格式,通常是JSON或XML。 🎜>實時更新Arduino LCD上的數據需要對API進行定期請求。您可以使用delay()函數在一定時間內暫停程序的執行。例如,如果您想每分鐘更新數據,則可以在loop()函數末尾添加延遲(60000)。這將在循環的下一次迭代之前暫停60000毫秒或一分鐘的程序。
>
>在將API與Arduino一起使用Arduino時,將API與Arduino一起使用API是什麼限制很多可能性,存在一些局限性。首先,Arduino板的內存有限,在處理大量數據時,這可能是一個問題。其次,並非所有API都可以免費使用,有些API可能具有使用限制。最後,製作http請求和解析數據可能很複雜,需要對編程和網絡進行良好的了解。
>>我可以與其他Arduino組件一起使用API嗎?
是的,是的,可以與任何API一起使用。可以連接到Internet的Arduino組件。這不僅包括LCD,還包括LED,電動機和其他傳感器。該過程是相同的:Arduino向API提出請求,接收數據並使用此數據來控制組件。
>>我如何對我的Arduino LCD和API進行故障排除? >解決Arduino LCD和API的故障排除問題可能具有挑戰性,但是您可以做一些事情。首先,檢查佈線並確保您的Arduino正確連接到Internet。其次,使用串行顯示器調試代碼,並查看API的響應。最後,檢查API文檔是否有任何特定要求或限制。
>我可以使用Arduino LCD和API來創建自己的項目嗎?使用Arduino LCD和API,您可以創建各種項目。例如,您可以創建一個顯示實時天氣數據的氣象站,一個顯示最新股價的股票股票或根據Internet數據控制設備的家庭自動化系統。
>關於將API與Arduino一起使用的更多資源是什麼? Arduino官方網站和論壇是一個不錯的起點。 YouTube,Udacity和Coursera等網站上也有許多在線教程和課程。最後,西蒙·蒙克(Simon Monk)諸如“編程Arduino:開始草圖”之類的書提供了全面的Arduino編程介紹,包括使用API。
以上是使用node.js在Arduino LCD上顯示Web API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

本文系列在2017年中期進行了最新信息和新示例。 在此JSON示例中,我們將研究如何使用JSON格式將簡單值存儲在文件中。 使用鍵值對符號,我們可以存儲任何類型的

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

增強您的代碼演示文稿:10個語法熒光筆針對開發人員在您的網站或博客上共享代碼段的開發人員是開發人員的常見實踐。 選擇合適的語法熒光筆可以顯著提高可讀性和視覺吸引力。 t

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

本文介紹了關於JavaScript和JQuery模型視圖控制器(MVC)框架的10多個教程的精選選擇,非常適合在新的一年中提高您的網絡開發技能。 這些教程涵蓋了來自Foundatio的一系列主題


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器