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(二)--- Node.js事件模块
May 21 NodeJs
使用forever管理nodejs应用教程
Jun 03 NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
配置nodejs环境的方法
May 13 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
php 代码优化之经典示例
2011/03/24 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
如何在PHP中读写文件
2020/09/07 PHP
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python里dict变成list实例方法
2019/06/26 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
几款好用的python工具库(小结)
2020/10/20 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
《悯农》教学反思
2014/04/28 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
宾馆客房管理制度
2015/08/06 职场文书
JavaScript 定时器详情
2021/11/11 Javascript