nodejs简单实现操作arduino


Posted in NodeJs onSeptember 25, 2016

用Javascript来操作硬件早就不是一件稀奇的事情了。

所以作为一名电子专业出身的FE,我也打算尝试一下用js来驱动arduino;

要想操作这些底层硬件,肯定是需要一些工具的,我这里介绍的工具主要是 cylonjs 和 gort

cylonjs其实就是一个操作"机器"的js框架,官网的介绍是这样的:

Cylon.js is a JavaScript framework for robotics, physical computing, and the Internet of Things. It makes it incredibly easy to command robots and devices.

简单点说就是用JS操作硬件,他支持很多硬件平台,譬如arduino(一种类似于单片机的东西)

nodejs简单实现操作arduino

举例一部分代码:

var Cylon = require("cylon");
// Initialize the robot
Cylon.api('http');//这个是用来连接本地浏览器的
Cylon.robot({//调用robot函数,并传入一个大对象来配置
 // Change the port to the correct port for your Arduino.
 connections: {//连接项定义小对象,用来配置连接arduino
  arduino: { adaptor: 'firmata', port: '/dev/cu.wchusbserial1420' }//prot是我arduino的在mac上连接的端口
  //firmata是一个PC与MCU通讯的一个常用协议。其遵旨是能与任何主机PC软件包兼容,这样可方便地将对协议的支持加入软件系统中。Firmata起初是针对于PC与Arduino通讯的固件(Firmware),其目标是让开发者可以通过PC软件完全地控件Arduino。
 },

 devices: {//设备,定义要操作的具体器件,这里是led,pin口是1
  led: { driver: 'led', pin: 1 }//
 },

 work: function(my) {//驱动函数,
  every((3).second(), function() {//每3秒,闪一下((3).second()貌似是lodash,我猜的,没用过,嘿嘿)
   my.led.toggle();//my应该是指向他自己
  });
 }
}).start();//配置好了之后就开始工作

下面我们来详细说明下

安装cylonjs

好了第一步肯定是要安装:

npm install cylon

新建项目

新建一个目录(我的是robot),然后在终端(我用的是mac,window的话在git bash里操作吧)输入

npm init

基本上一直按回车就可以了,不过我把我的入口文件改成了main.js:

entry point: (index.js) main.js

 nodejs简单实现操作arduino

好了之后在终端输入:

touch main.js

就是新建main.js文件,windows自己手动建。

然后再main.js中:

var Cylon = require("cylon");
// Initialize the robot
Cylon.api('http');//这个是用来连接本地浏览器的
Cylon.robot({//调用robot函数,并传入一个大对象来配置
 // Change the port to the correct port for your Arduino.
 connections: {//连接项定义小对象,用来配置连接arduino
  arduino: { adaptor: 'firmata', port: '/dev/cu.wchusbserial1420' }//prot是我arduino的在mac上连接的端口
  //firmata是一个PC与MCU通讯的一个常用协议。其遵旨是能与任何主机PC软件包兼容,这样可方便地将对协议的支持加入软件系统中。Firmata起初是针对于PC与Arduino通讯的固件(Firmware),其目标是让开发者可以通过PC软件完全地控件Arduino。
 },

 devices: {//设备,定义要操作的具体器件,这里是led,pin口是1
  led: { driver: 'led', pin: 1 }//
 },

 work: function(my) {//驱动函数,
  every((3).second(), function() {//每3秒,闪一下((3).second()貌似是lodash,我猜的,没用过,嘿嘿)
   my.led.toggle();//my应该是指向他自己
  });
 }
}).start();//配置好了之后就开始工作

一开始我运行node main.js的时候,报错显示找不到cylon-firmata模块

nodejs简单实现操作arduino

其实我在当前目录是装了这个模块的,其实还要装cylon,如下操作没问题

npm install cylon cylon-firmata

然后执行node main.js:

nodejs简单实现操作arduino

报错?因为我还没连arduino。

连上arduino怎么找到arduino的端口,在main.js中有这段代码:

nodejs简单实现操作arduino

prot的值咋来的?这个时候就要用到gort了

gort介绍:

GORTis a Command Line Toolkit for RobotOps

我觉得就是一个检测硬件的命令行工具,

安装:

brew install hybridgroup/tools/gort

当然如果你是windows或linux,你自己看官网说明:安装gort

然后执行下面代码检测端口

gort scan serial

nodejs简单实现操作arduino

然后执行:

gort arduino install

结果出现下面情况:

nodejs简单实现操作arduino

意思是我安装成功了但是,brew link 这步骤没成功,原因是/usr/local/lib is not writable,就是没写入权限,

所以执行:(whoami就是你电脑的用户名)

sudo chown -R whoami /usr/local/lib

然后再执行:

nodejs简单实现操作arduino

就是把上面出现没有brew link成功的都再执行一次link.

然后:

gort arduino upload firmata /dev/tty.wchusbserial1420

nodejs简单实现操作arduino

成功了。这个时候再执行:node main.js

nodejs简单实现操作arduino

arduino有反应,名字为tx的LED3秒一闪,在浏览器输入https://127.0.0.1:3000

nodejs简单实现操作arduino

哈哈,成功了,好了,就写到这里,以后继续研究还回再写相关文章。

对了,连接mac和arduino还需要驱动,我的arduino是arduino uno.我安装了ch340这个驱动,下载地址

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
详解nodejs 文本操作模块-fs模块(一)
Dec 22 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 #NodeJs
nodejs微信公众号支付开发
Sep 19 #NodeJs
nodeJs内存泄漏问题详解
Sep 05 #NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 #NodeJs
NodeJS远程代码执行
Aug 28 #NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 #NodeJs
使用nodejs中httpProxy代理时候出现404异常的解决方法
Aug 15 #NodeJs
You might like
php反弹shell实现代码
2009/04/22 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
轻松实现php文件上传功能
2017/02/17 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
javascript一点特殊用法
2008/05/28 Javascript
javascript Select标记中options操作方法集合
2008/10/22 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
Python datetime模块使用方法小结
2020/06/18 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
自我鉴定怎么写
2013/12/05 职场文书
教育局长自荐信范文
2013/12/22 职场文书
业务员辞职信范文
2015/03/02 职场文书
八年级历史教学反思
2016/02/19 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python