nodejs簡(jiǎn)單實(shí)現(xiàn)操作arduino
用Javascript來操作硬件早就不是一件稀奇的事情了。
所以作為一名電子專業(yè)出身的FE,我也打算嘗試一下用js來驅(qū)動(dòng)arduino;
要想操作這些底層硬件,肯定是需要一些工具的,我這里介紹的工具主要是 cylonjs 和 gort
cylonjs其實(shí)就是一個(gè)操作"機(jī)器"的js框架,官網(wǎng)的介紹是這樣的:
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.
簡(jiǎn)單點(diǎn)說就是用JS操作硬件,他支持很多硬件平臺(tái),譬如arduino(一種類似于單片機(jī)的東西)
舉例一部分代碼:
var Cylon = require("cylon"); // Initialize the robot Cylon.api('http');//這個(gè)是用來連接本地瀏覽器的 Cylon.robot({//調(diào)用robot函數(shù),并傳入一個(gè)大對(duì)象來配置 // Change the port to the correct port for your Arduino. connections: {//連接項(xiàng)定義小對(duì)象,用來配置連接arduino arduino: { adaptor: 'firmata', port: '/dev/cu.wchusbserial1420' }//prot是我arduino的在mac上連接的端口 //firmata是一個(gè)PC與MCU通訊的一個(gè)常用協(xié)議。其遵旨是能與任何主機(jī)PC軟件包兼容,這樣可方便地將對(duì)協(xié)議的支持加入軟件系統(tǒng)中。Firmata起初是針對(duì)于PC與Arduino通訊的固件(Firmware),其目標(biāo)是讓開發(fā)者可以通過PC軟件完全地控件Arduino。 }, devices: {//設(shè)備,定義要操作的具體器件,這里是led,pin口是1 led: { driver: 'led', pin: 1 }// }, work: function(my) {//驅(qū)動(dòng)函數(shù), every((3).second(), function() {//每3秒,閃一下((3).second()貌似是lodash,我猜的,沒用過,嘿嘿) my.led.toggle();//my應(yīng)該是指向他自己 }); } }).start();//配置好了之后就開始工作
下面我們來詳細(xì)說明下
安裝cylonjs
好了第一步肯定是要安裝:
npm install cylon
新建項(xiàng)目
新建一個(gè)目錄(我的是robot),然后在終端(我用的是mac,window的話在git bash里操作吧)輸入
npm init
基本上一直按回車就可以了,不過我把我的入口文件改成了main.js:
entry point: (index.js) main.js
好了之后在終端輸入:
touch main.js
就是新建main.js文件,windows自己手動(dòng)建。
然后再main.js中:
var Cylon = require("cylon"); // Initialize the robot Cylon.api('http');//這個(gè)是用來連接本地瀏覽器的 Cylon.robot({//調(diào)用robot函數(shù),并傳入一個(gè)大對(duì)象來配置 // Change the port to the correct port for your Arduino. connections: {//連接項(xiàng)定義小對(duì)象,用來配置連接arduino arduino: { adaptor: 'firmata', port: '/dev/cu.wchusbserial1420' }//prot是我arduino的在mac上連接的端口 //firmata是一個(gè)PC與MCU通訊的一個(gè)常用協(xié)議。其遵旨是能與任何主機(jī)PC軟件包兼容,這樣可方便地將對(duì)協(xié)議的支持加入軟件系統(tǒng)中。Firmata起初是針對(duì)于PC與Arduino通訊的固件(Firmware),其目標(biāo)是讓開發(fā)者可以通過PC軟件完全地控件Arduino。 }, devices: {//設(shè)備,定義要操作的具體器件,這里是led,pin口是1 led: { driver: 'led', pin: 1 }// }, work: function(my) {//驅(qū)動(dòng)函數(shù), every((3).second(), function() {//每3秒,閃一下((3).second()貌似是lodash,我猜的,沒用過,嘿嘿) my.led.toggle();//my應(yīng)該是指向他自己 }); } }).start();//配置好了之后就開始工作
一開始我運(yùn)行node main.js的時(shí)候,報(bào)錯(cuò)顯示找不到cylon-firmata模塊
其實(shí)我在當(dāng)前目錄是裝了這個(gè)模塊的,其實(shí)還要裝cylon,如下操作沒問題
npm install cylon cylon-firmata
然后執(zhí)行node main.js:
報(bào)錯(cuò)?因?yàn)槲疫€沒連arduino。
連上arduino怎么找到arduino的端口,在main.js中有這段代碼:
prot的值咋來的?這個(gè)時(shí)候就要用到gort了
gort介紹:
GORTis a Command Line Toolkit for RobotOps
我覺得就是一個(gè)檢測(cè)硬件的命令行工具,
安裝:
brew install hybridgroup/tools/gort
當(dāng)然如果你是windows或linux,你自己看官網(wǎng)說明:安裝gort
然后執(zhí)行下面代碼檢測(cè)端口
gort scan serial
然后執(zhí)行:
gort arduino install
結(jié)果出現(xiàn)下面情況:
意思是我安裝成功了但是,brew link 這步驟沒成功,原因是/usr/local/lib is not writable,就是沒寫入權(quán)限,
所以執(zhí)行:(whoami就是你電腦的用戶名)
sudo chown -R whoami /usr/local/lib
然后再執(zhí)行:
就是把上面出現(xiàn)沒有brew link成功的都再執(zhí)行一次link.
然后:
gort arduino upload firmata /dev/tty.wchusbserial1420
成功了。這個(gè)時(shí)候再執(zhí)行:node main.js
arduino有反應(yīng),名字為tx的LED3秒一閃,在瀏覽器輸入https://127.0.0.1:3000
哈哈,成功了,好了,就寫到這里,以后繼續(xù)研究還回再寫相關(guān)文章。
對(duì)了,連接mac和arduino還需要驅(qū)動(dòng),我的arduino是arduino uno.我安裝了ch340這個(gè)驅(qū)動(dòng),下載地址
- 簡(jiǎn)單實(shí)現(xiàn)nodejs上傳功能
- 基于NodeJS+MongoDB+AngularJS+Bootstrap開發(fā)書店案例分析
- NodeJS實(shí)現(xiàn)客戶端js加密
- 詳解NodeJs支付寶移動(dòng)支付簽名及驗(yàn)簽
- nodeJS刪除文件方法示例
- 學(xué)習(xí) NodeJS 第八天:Socket 通訊實(shí)例
- nodejs連接mongodb數(shù)據(jù)庫實(shí)現(xiàn)增刪改查
- Nodejs 搭建簡(jiǎn)單的Web服務(wù)器詳解及實(shí)例
- window通過vbs+bat實(shí)現(xiàn)自動(dòng)在后臺(tái)運(yùn)行nodejs application
- NodeJS和BootStrap分頁效果的實(shí)現(xiàn)代碼
- NodeJS使用formidable實(shí)現(xiàn)文件上傳
- 初探nodeJS
相關(guān)文章
詳解nodejs微信公眾號(hào)開發(fā)——5.素材管理接口
這篇文章主要介紹了詳解nodejs微信公眾號(hào)開發(fā)——5.素材管理接口,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04nodejs和npm版本不匹配:ERROR:?npm?v9.5.1?is?known?not?to?run
本文主要介紹了nodejs和npm版本不匹配:ERROR:?npm?v9.5.1?is?known?not?to?run?on?Node.js,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06nodejs結(jié)合socket.io實(shí)現(xiàn)websocket通信功能的方法
這篇文章主要介紹了nodejs結(jié)合socket.io實(shí)現(xiàn)websocket通信功能的方法,結(jié)合實(shí)例形式分析了nodejs結(jié)合socket.io實(shí)現(xiàn)websocket通信的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2018-01-01nodejs實(shí)現(xiàn)大文件(在線視頻)的讀取
這篇文章主要為大家詳細(xì)介紹了nodejs實(shí)現(xiàn)大文件的讀取,比如在線視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12詳解Node.js amqplib 連接 Rabbit MQ最佳實(shí)踐
這篇文章主要介紹了詳解Node.js amqplib 連接 Rabbit MQ最佳實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01