mblock是如何讓Arduino工做的(中)

上一篇文章咱們主要從 WEB IDE 做爲入口簡單分析了一下,Arduino 是如何與 IDE 鏈接上的,咱們發現是與用戶電腦本地的創建了 websocket 鏈接服務。經過本地的服務查詢了串口列表,以及串口腳本寫入,這個過程又是如何實現的呢?javascript

分析系列

mLink

Web 應用可以與 Arduino 一塊兒工做,由於本地安裝了一個應用 mLink ,是經過啓動 mLink 在本地起了一個 websocket 服務。java

發現應用

系統盤 - 應用程序 - mLink(右鍵)- 顯示包內容 經過這個路徑操做,咱們能夠看到應用的代碼,Resources 目錄下有一個項目目錄 robocomm-web,看到這個項目就很熟悉了,一個 Node.js 應用。node

Local Server

Local Server

Node.js 項目的入口是 package.json,經過這個入口咱們能夠看到項目有兩個依賴包,socket.ioserialport,本地的 websocket 服務是經過 socket.io 建立的,對於 serialport 確定是用來獲取串口對應信息的一個包。git

驗證分析

爲了驗證整個分析過程是否正確,咱們把 mLink 應用先關閉,這個應用自己還存在一個 Bug,關閉應用的時候本地的服務仍是沒有關閉。經過關口查找與進程殺死才能徹底關閉。github

# 端口查找
lsof lsof -i tcp:55278

# 進程殺死 下面的 PID 等於下圖中的 31354
kill PID

lsof

直接啓動 Node.js 項目,看能不能正常工做。項目根目錄直接執行命令web

node app

serialport

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

相關文章
相關標籤/搜索