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

相关文章
相关标签/搜索