上一篇文章咱們主要從 WEB IDE 做爲入口簡單分析了一下,Arduino 是如何與 IDE 鏈接上的,咱們發現是與用戶電腦本地的創建了 websocket 鏈接服務。經過本地的服務查詢了串口列表,以及串口腳本寫入,這個過程又是如何實現的呢?javascript
Web 應用可以與 Arduino 一塊兒工做,由於本地安裝了一個應用 mLink ,是經過啓動 mLink 在本地起了一個 websocket 服務。java
系統盤 - 應用程序 - mLink(右鍵)- 顯示包內容
經過這個路徑操做,咱們能夠看到應用的代碼,Resources
目錄下有一個項目目錄 robocomm-web
,看到這個項目就很熟悉了,一個 Node.js 應用。node
Node.js 項目的入口是 package.json,經過這個入口咱們能夠看到項目有兩個依賴包,socket.io
和 serialport
,本地的 websocket 服務是經過 socket.io 建立的,對於 serialport 確定是用來獲取串口對應信息的一個包。git
爲了驗證整個分析過程是否正確,咱們把 mLink 應用先關閉,這個應用自己還存在一個 Bug,關閉應用的時候本地的服務仍是沒有關閉。經過關口查找與進程殺死才能徹底關閉。github
# 端口查找 lsof lsof -i tcp:55278 # 進程殺死 下面的 PID 等於下圖中的 31354 kill PID
直接啓動 Node.js 項目,看能不能正常工做。項目根目錄直接執行命令web
node app
serialport,這是一個使用 JavaScript 訪問串行端口的庫。json
serialport
是全部功能(Stream Interface, Bindings,Parser streams)的集合,暫時先直接引入整個包來上一個簡單的上手。segmentfault
// getDevice const Serialport = require('serialport'); serialport.list().then(res => {}); // /dev/tty.Bluetooth-Incoming-Port /dev/tty.usbmodem14201 // connect const comName = '/dev/tty.usbmodem14201'; const port = new SerialPort(comName); // addEventListener port.on('open', () => {}); port.on('data', () => {}); port.on('write', () => {}); port.on('error', () => {}); port.on('close', () => {}); port.on('drain', () => {});
上述操做基本都是經過參考項目代碼以及官方文檔大體瞭解了一下,尚未實現一個完整的 DEMO。後續文章還須要瞭解 mBlock 傳入的 cmd 爲 write 操做時傳入的數據是什麼?block 是如何轉換成爲數據的?傳入的數據直接經過寫操做就成功寫入程序了嗎?帶着這些疑問下一篇文章咱們後續繼續深刻學習實現一個本身的 link。websocket
本次經過分析 mLink ,咱們主要認識了一個新的庫 serialport
,經過 JavaScript 就可以獲取串行端口。咱們回顧一下前面學習到知識,瞭解到 johnny-five
能過獲取到端口也是使用了 serialport。app