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入门详解(多篇文章结合)
Mar 07 NodeJs
nodejs的require模块(文件模块/核心模块)及路径介绍
Jan 14 NodeJs
Nodejs sublime text 3安装与配置
Jun 19 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
nodeJS服务器的创建和重新启动的实现方法
May 12 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
PHP模块memcached使用指南
2014/12/08 PHP
php输出图像的方法实例分析
2017/02/16 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
如何编写jquery插件
2017/03/29 jQuery
vue获取input输入值的问题解决办法
2017/10/17 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
学校卫生检查制度
2014/02/03 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
企业节能减排实施方案
2014/03/19 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android