學習如何使用 JavaScript 與電子設備溝通

Johnny Five 是一個超酷的函式庫,讓我們可以使用 JavaScript 與電子設備進行互動

Arduino 這樣的設備通常是使用 Arduino 語言 進行編程,這是一種針對 C/C++ 的特殊框架。

由於這些電子設備的能力有限,記憶體和處理器速度都很低,其他語言無法直接用於為它們編寫程序。

但是有一種特殊的協議,稱為 Firmata,允許語言與 Arduino 進行交互。

Johnny Five 是一個很棒的函式庫,它允許我們使用 JavaScript 進行交互,尤其是 Node.js

設置 Arduino 與 Johnny Five 的工作環境

http://arduino.cc/en/main/software 下載 Arduino IDE。

打開它,你會看到如下畫面:

將 Arduino 板連接到 USB 連接埠。

前往「工具(Tools)」->「連接埠(Port)」,確保選擇的連接埠是 Arduino 連接的連接埠(在我這裡是 /dev/cu.usbmodem14101)。你應該會有幾個選項,Arduino IDE 應已預先檢測到它。

前往「工具(Tools)」->「開發板(Board)」確保選擇了正確的設備。

在我的案例中,設備是一個兼容 Arduino Uno 的開發板。

然後前往「文件(File)」->「範例(Examples)」->「Firmata」,並選擇 StandardFirmataPlus

這將加載一個新窗口:

點擊工具欄上的右箭頭圖標編譯並將程序加載到 Arduino 板上:

太好了!現在,在硬件方面,你已經準備好使用 Johnny Five。

Arduino 設備必須保持連接

關於 Johnny Five 和使用 JavaScript/Node.js 撰寫電子應用的這種方法,你需要注意一點,那就是我們不能將設備從計算機中斷開。

通常,在使用 Arduino 語言(C/C++)編程時,一旦將程序加載到設備上,你可以將其移動到任何地方,並且只要 Arduino 開機,因為它通電了,程序就會開始運行。

Arduino 的簡單性使得它不需要操作系統、運行時或者設備上執行的除了加載到內存中的程序以外的任何東西。

現在加載到內存中的程序是 StandardFirmataPlus 程序,它為 Johnny Five 提供了一套原子操作,通過 USB 連接進行程序調用的 Firmata 協議

一旦我們斷開 Arduino 的連接,Johnny Five 程序就停止執行。

如果我們想在其他地方部署設備,我們可以通過 Raspberry PI 來解決這個問題,將 Arduino 連接到 Raspberry PI,并從那裡運行 Node.js 應用程序,或者使用 VLC 或 SSH 連接從你的計算機遠程執行該應用程序。

這超出了本課程的範圍,但是如果你有興趣這樣做,可以查看 如何使用Mac連接到Raspberry Pi如何確保Raspberry Pi始終具有相同的 IP 地址

你也可以通過其他方式克服這個問題,例如使用其他的 WiFi 模組

然而,為了了解如何使用 JavaScript 編程控制電子設備,只需要將設備連接到計算機上即可。

Johnny Five 提供的功能概述

Johnny Five 提供了多個 API,我們可以使用它們來訪問常用的電子組件:

等等。

所有這些功能都作為 johnny-five npm 套件的一部分可用:

npm install johnny-five

這是如何初始化一個板子並等待它可用的方法:

const { Board } = require('johnny-five')
const board = new Board()

board.on('ready', () => {
 //ready!
})

我不會涵蓋整個 API,可以在 http://johnny-five.io/api 上查詢,但是我會給你演示如何使用 LED。

從函式庫中獲取 Led 類,並使用 new Led() 初始化一個新的 Led 對象,並將引腳號作為參數傳遞:

const { Led } = require('johnny-five')
//...
const led = new Led(13)

一旦有了 led 對象,你可以調用它的方法,包括:

  • led.on() 打開它
  • led.off() 關閉它
  • led.toggle() 切換它的當前狀態
  • led.blink() 持續切換,預設每 100 毫秒切換一次
  • led.stop() 停止閃爍

這是 Johnny Five 教程系列中的第一篇。下一篇 Johnny Five 教程中我將向你展示更多有關如何使用它的內容!