用 Node 控制 Arduino

why node?

如今,js 語言已經在服務端有了必定的應用,有人也想到了用 Node 去控制硬件設備,Node也很早就退出了 armv六、armv七、armv8 三個版本,而樹莓派基於 armv7 架構,也就是說我麼能夠輕鬆的使用 Node 在樹莓派端編程。推出了,甚至有一些開發板直接能夠編譯 js 文件。javascript

絕大多數嵌入式設備選用的是 C/C++ 語言,對於一些實時性較高的語言則選用匯編語言。可是隨着硬件設備的性能提高,愈來愈有可能選用本身熟悉的語言進行編程,好比java、C#、javascript、python等。目前,在一些高端的微處理器(如樹莓派)上已經可使用這些語言進行編程,大多數 MCU (絕大多數8/16位芯片)的編譯環境都是將 C 語言編譯成16進制文件燒錄到芯片中執行。因此,當選用一個本身熟悉的語言在低端芯片中編程時,可能沒法藉助現有的編譯器完成。本文以 Ardunio UNO (8位芯片)爲例,用 Javascript 編寫一個硬件的「Hello World」(點亮LED)程序。java

下載程序

MCU 下載程序須要軟硬件共同支持,通常會使用現成的 IDE 工具,極少會關注到這些。那麼將一段程序下載到 MCU 中須要哪些支持呢?這裏以 Ardunio UNO 爲例進行講解。將一段程序下載到 Ardunio UNO ,Ardunio UNO 依靠 ATmega32U4/ATmega16U2(不一樣版本的 UNO 使用的芯片不一樣,高版本的有所升級)等 進行下載。而 ATmega32U4/ATmega16U2 等是 USB 接口芯片,是將 PC 發送的信號傳遞到 UNO 主芯片的中樞。從第一章的電路圖能夠看出,ATmega16U2 芯片能夠將 USB 信號轉換爲 ISP、串口信號等,而這裏是將其轉化爲串口信號下載到主芯片(不一樣廠商、不一樣芯片支持不一樣的下載方式)。另外一方面,不一樣平臺電腦也會裝上對應的驅動(第一章安裝環境中有提到),ATmega16U2 內置 Bootloader ,按照特定的協議與 PC 通訊。這裏特別提一下,ATmega16U2 系列芯片支持固件升級,須要藉助官方提供的軟件 Flip 對其升級,對應的固件 megaUSB_DFU_Bootloaders 都是16進制文件。下圖是 ATmega16U2 等硬件及 Boot 處理流程:node

這裏寫圖片描述

Firmata 協議

Arduino IDE 是不支持 Javascript 語法的,這裏沒法使用 Arduino IDE 進行 Js 編程。首先,須要用 js 編寫程序,而後將 js 程序寫入到 arduino 中。這裏須要一個協議來支持 PC 與 MCU 的通訊。而 Arduino IDE 自己集成 Firmata 協議(準確的說是 Firmata 從 Aduino 抽離出來的)。這裏首先須要作的事講 Firmata 協議的 Arduino 實現燒寫到芯片中。而後,用 js 實現 Firmata 協議,PC 經過 Firmata 協議控制 Arduino.python

燒寫 Firmata 協議

Arduino IDE 自己是集成了 Firmata,只須要找到這個程序,燒寫到 arduino 中便可,具體位置以下圖:git

這裏寫圖片描述

PC 端程序

首先,要實現 PC 與 MCU 的 Firmata 協議,這裏直接藉助 firmata.js,firmata.js 實現了用 PC 端用 js 與 MCU 的 Firmata 通訊。在這個基礎上,編寫 「Hello World」 。鏈接 USB 線,找到對應的設備端口ls /dev/tty.usb*github

這裏寫圖片描述

編寫程序,當 PC 和 MCU 與鏈接成功以後,將 Arduino 的13(鏈接LED)管腳置爲高電平。將剛纔顯示的設備端口寫到如下程序中:編程

var Board = require("firmata");
var board = new Board("/dev/tty.usbmodem1421");

board.on("ready", function() {
  // Arduino is ready to communicate
 console.log('connet');
 board.digitalWrite(13, 1)
});

如圖,鏈接成功,開發板 LED 點亮:架構

這裏寫圖片描述

圖片描述

上面就實現了用 js 控制硬件,當想用 js 編寫複雜的程序是,也能夠依賴一些現成的 js 庫,這裏推薦一個 johnny-five。一樣,用其餘的語言也能夠實現,只須要使用 Firmata 對應的實現。Firmata client libraries,這個文檔中列出各類語言對 Firmata 實現的庫。工具

更多內容可訪問:性能

相關文章
相關標籤/搜索