該項目建立在文章“使用 Node.js 加快嵌入式系統上市時間”的基礎上,提供并展示了如何為簡單的 Web 服務器實現代碼。Web 服務器提供了控制板的能力,例如通過獲取和設置數字 I/O (DIO) 值(或打開和關閉 LED)。它還提供了一個簡單的客戶端網頁來訪問此功能,使其成為一個獨立的解決方案,用于通過電路板本身提供的網頁來控制電路板。
在“在運行 Linux 的嵌入式單板計算機上開始使用 node.js ”中,我們展示了如何在Technologic Systems TS-7680等單板計算機 (SBC) 上安裝 node.js。在這個示例項目中,我們展示了如何實現對 TS-7680 硬件的支持,并提供一個簡單的網頁來控制板。DIO 控制通過可視化界面進行說明,該界面可以顯示和更改板上四個 LED 的狀態。板上的模數轉換器 (ADC) 的當前狀態也會定期顯示和更新。最后,提供了一個按鈕,該按鈕對加速度計進行一秒鐘的采樣并顯示其數據圖表。
該項目由兩部分組成:
在用戶(客戶端)網絡瀏覽器中運行的 JavaScript 和 HTML
用于直接硬件接口(服務器)的 Node.js 項目文件(包括 JavaScript、包文件和 C++ 源代碼)。
這將在支持 ARMv5 CPU、使用節點 0.10 的 Technologic Systems TS-7680 上進行演示。
注意:正確安裝此演示需要具有 256 MB 板載 RAM 的 TS-7680。如果您想在只有 128 MB RAM 的板上運行此演示,請從該 ftp 服務器下載包含 service-mx28adc 模塊的壓縮包, 并通過解壓縮包含您的 node_modules 目錄的目錄來安裝它。之后apt install命令將識別該模塊已經安裝并且不會嘗試編譯它。
讓我們看看我們將要創建的文件。
對于客戶:
ts7680.js –這是 TS-7680 用戶界面的實際實現。它將顯示 LED 和 ADC 的當前狀態,并提供對加速度計進行采樣的接口。
index.html –這是顯示用戶界面的 HTML 代碼。
7680-0000.JPG 至 7680-1111.JPG –這些圖像文件將在 Web 界面中顯示 TS-7680 的板載 LED 狀態。LED 上的每個位組合(0000、0001、0010 等)都存在一個文件。
服務器上有幾個 Node.js 包,每個包執行特定的功能:
ts7680-demo-server –這是頂級服務器,用于指定和控制服務器組件的實例化。它還包含使整個項目成為獨立包所需的所有客戶端文件。
server.js –實現
package.json –清單
README.md – Markdown格式的自述文件
file/ –包含客戶端文件的子目錄
express-modular-server –這是一個模塊化框架,用于從 Node.js 提供 HTTP 和 HTTPS 網頁。
server.js –實現
package.json –清單
README.md – Markdown格式的自述文件
service-app –服務于 Web 應用程序(app.html + app.js + 應用程序特定模塊)的插件,用于在其中實現的默認文件處理。
default-file.js -靜態文件服務的實現
package.json –清單
README.md – Markdown格式的自述文件
app.js –應用處理的實現(本項目中未使用)
service-mma8451 –為 TS-7680 上的NXP MMA8451 3 軸加速度計實現應用程序編程接口 (API) 支持的插件。
mma8451.js –實施
package.json –清單
README.md – Markdown格式的自述文件
service-mx28adc –實現對TS-7680 上i.MX28 CPU 低分辨率模數轉換器 (LRADC)外圍設備的支持的插件。
mx28adc.js –實現 API 支持的插件
mx28adc.cc –實施
package.json –清單
Binding.gyp –構建文件
README.md – Markdown格式的自述文件
service-gpio –通過 Linux /sys 文件系統實現對 GPIO 的 API 支持的插件。
gpio.js –實現
package.json –清單
README.md – Markdown格式的自述文件
現在,進入代碼。
ts7680-演示服務器
首先,讓我們看看我們將調用以運行我們的服務器的頂級 JavaScript 文件:server.js。
express-modular-server 軟件包使創建 Web 服務器變得容易。我們為每個服務編寫一個插件,用于初始化 API 端點和服務請求。然后我們配置服務器,指定每個所需的端點,并啟動服務器。
對上面的代碼逐段剖析,我們首先將當前工作目錄更改為安裝包的目錄。這是因為我們的包將所有靜態提供的文件封裝在file/相對于該目錄的子目錄中。
process.chdir(__dirname)
接下來,我們需要 express-modular-server:
var server = require(“express-modular-server”)
這將返回一個函數,我們使用初始化數據作為同一表達式的一部分調用該函數:
({
http:true
})
在這里,我們傳遞一個包含初始化參數的對象。我們感興趣的唯一參數是運行 HTTP 服務器。參數http:true指定了這一點,盡管我們也可以提供一個數字端口而不是 true。默認使用端口 8080。
然后我們將每個 API 添加到服務器,從包名稱中省略“service-”前綴。初始化返回模塊對象,該對象具有添加與關鍵 API 關聯的 API 的功能。
.API(“gpio”)
當這個函數返回時,gpio 插件(來自 service-gpio 包)被加載。此函數返回模塊對象本身,因此我們可以鏈接另一個調用以添加任意數量的 API 端點:
.API(“mma8451”)
.API(“mx28adc”)
.API(“app”)
現在我們為加速度計、ADC 和服務 Web 應用程序添加了端點。添加完端點后,我們再調用一次來啟動服務器:
.start()
而已!這是我們的代碼的樣子:
在安裝演示之前需要運行一些命令才能使安裝和構建過程正常工作。首先,由于 Debian 中缺少標頭,我們需要升級 npm 并設置一個符號鏈接來指向它:
一旦 npm 升級,任何時候它運行都會返回一個錯誤,說 npm 不支持 node.js v0.10.29,你應該升級到更新的版本。忽略此警告,因為 v0.10.29 是 TS-7680 支持的最新版本,因為較新的版本缺少 ARM v5 支持。
您可以使用單個命令安裝整個演示:
npm install ts7680-demo-server
我們的下一部分將從 GPIO 模塊開始詳細檢查服務器使用的模塊。
審核編輯:郭婷
-
led
+關注
關注
242文章
23252瀏覽量
660591 -
adc
+關注
關注
98文章
6495瀏覽量
544469 -
服務器
+關注
關注
12文章
9123瀏覽量
85331
發布評論請先 登錄
相關推薦
評論