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读取memcache示例分享
Jan 02 NodeJs
14款NodeJS Web框架推荐
Jul 11 NodeJs
NodeJS学习笔记之网络编程
Aug 03 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 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魔术方法__GET、__SET使用实例
2014/11/25 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
javascript实现评分功能
2020/06/24 Javascript
vue实现登录拦截
2020/06/29 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Python import自定义模块方法
2015/02/12 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
python解析含有重复key的json方法
2019/01/22 Python
python实现手势识别的示例(入门)
2020/04/15 Python
python3 re返回形式总结
2020/11/20 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
Ajax的优点和缺点
2014/11/21 面试题
创新比赛获奖感言
2014/02/13 职场文书
学校校庆演讲稿
2014/05/22 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
红色旅游心得体会
2014/09/03 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
学校教代会开幕词
2016/03/04 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
浅谈Python数学建模之数据导入
2021/06/23 Python