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 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
nodeJS模块简单用法示例
Apr 21 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
图解NodeJS实现登录注册功能
Sep 16 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 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取整数函数常用的四种方法小结
2012/07/05 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 可爱的大小写
2008/09/06 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
在python里面运用多继承方法详解
2019/07/01 Python
python小项目之五子棋游戏
2019/12/26 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Python实现壁纸下载与轮换
2020/10/19 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
vue+django实现下载文件的示例
2021/03/24 Vue.js
ktv中秋节活动方案
2014/01/30 职场文书
人力资源作业细则
2014/03/03 职场文书
安全宣传标语口号
2014/06/06 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python