php hex2bin nodejs,Nodejs Serialport文档翻译
版本號(hào):Serialport@5.0.0-beta3
本文鏈接
想象一個(gè)世界,你可以在那寫javascript來(lái)控制攪拌機(jī),燈,安全系統(tǒng)或者甚至是機(jī)器人。是的,我說(shuō)的是機(jī)器人。那個(gè)世界就是這兒,現(xiàn)在使用node serialport。它提供一個(gè)非常簡(jiǎn)單的接口所需要的串口程序代碼Arduino 單片機(jī), X10 無(wú)線通信模塊, 或者甚至是上升到 Z-Wave 和Zigbee . 在這個(gè)物理世界,你可以隨心所欲(The physical world is your oyster with this goodie.)。想完全了解為什么我們做這個(gè),請(qǐng)閱讀NodeBots - The Rise of JS Robotics.
為了入門node-serialport,我們建議你從下列文章開(kāi)始:
Johnny-Five - Johnny-Five 機(jī)器人技術(shù)和物聯(lián)網(wǎng)平臺(tái)的六行“helloworld”(太棒了).
NodeBots - The Rise of JS Robotics - 一篇調(diào)查文章關(guān)于為什么一個(gè)世界需要在js里編寫機(jī)器人程序以及如何開(kāi)始。
平臺(tái)支持
serialport支持NodeJS v4 以及更高版本。0.10和0.12版本使用serialport@4。serialport支持的平臺(tái),體系架構(gòu)和nodejs版本可以查看下列表格信息。
平臺(tái)/架構(gòu)
Node v4.x
Node v6.x
Node v7.x
Linux / ia32
Linux / x64
Linux / ARM v61
Linux / ARM v71
Linux / ARM v81
Linux / MIPSel1
Linux / PPC641
Windows2 / x86
Windows2 / x64
OSX3 / x64
1 ARM, MIPSel and PPC641 平臺(tái)已知可以運(yùn)行但是不屬于我們的測(cè)試范圍或者構(gòu)建矩陣。 #846 ARM v4 and v5 在 Node v0.10版本之后從Nodejs中取消.
2 Windows 7, 8, 10, and 10 IoT 是支持的但是只有Windows Server 2012 R2 是由我們測(cè)試的.
3 OSX 10.4 Tiger 以及更高版本是支持的 但是只有 10.9.5 Mavericks 和 Xcode 6.1 是由我們測(cè)試的.
安裝說(shuō)明
對(duì)于大多數(shù)“標(biāo)準(zhǔn)”使用案例(在mac,linux,windows x86或者x64上node V4.x),node-serialport將會(huì)很好以及很容易的安裝。
npm install serialport
安裝的平臺(tái)環(huán)境
我們使用node-pre-gyp來(lái)編譯以及公布大多數(shù)常見(jiàn)使用平臺(tái)(linux,mac,windows在標(biāo)準(zhǔn)的處理器平臺(tái))的二進(jìn)制庫(kù)。如果你是特別的平臺(tái),node-serialport將會(huì)工作,但是當(dāng)你安裝的時(shí)候它將會(huì)編譯二進(jìn)制文件。
這假定你有必要讓你可以在自己系統(tǒng)中編譯一些nodejs模塊。這個(gè)或許并非如此,可是,請(qǐng)確認(rèn)下列對(duì)于你系統(tǒng)是正確的,在你提出關(guān)于“無(wú)法安裝”的issue之前。對(duì)于所有操作系統(tǒng),請(qǐng)確認(rèn)你有安裝了Python 2.x 以及不是3.0,node-gyp(你用來(lái)編譯的工具)需要Python 2.x。
Alpine Linux
Alpine 是一個(gè)(非常)小的linux開(kāi)發(fā)版系統(tǒng), 但是它使用組織標(biāo)準(zhǔn)庫(kù)來(lái)代替函數(shù)庫(kù) (大多數(shù)開(kāi)發(fā)版linux系統(tǒng)使用的), 所以他需要編譯。 它通常使用Docker.我們已經(jīng)編譯了可以工作的 apline-node.
# 如果你沒(méi)有安裝node/npn,先添加它們
sudo apk add --no-cache nodejs
# 添加必要的構(gòu)建庫(kù)和運(yùn)行依賴
sudo apk add --no-cache make gcc g++ python linux-headers udev
# 然后我們就能安裝 serialport, 強(qiáng)制它編譯
npm install serialport --build-from-source
# 如果你使用root來(lái)安裝,你需要使用
Electron
Electron是一個(gè)框架用來(lái)創(chuàng)建跨平臺(tái)桌面程序。Electron自帶他自己的Node.js運(yùn)行版本
如果你需要serialport作為一個(gè)Electron項(xiàng)目的依賴,你需要為你用在項(xiàng)目里的Electron項(xiàng)目編譯它。
當(dāng)你第一次安裝serialport,它會(huì)編譯針對(duì)你機(jī)器的Node.js版本的serialport,而不是針對(duì)Electron捆綁的Node.js運(yùn)行版本。
再次為Electron編譯serialport(或者一個(gè)本地模塊),你可以使用electron-rebuild.
1.npm install --save-dev electron-rebuild
2.將electron-rebuild加入到你項(xiàng)目中的package.json的安裝鉤子。
3.運(yùn)行npm install
更多關(guān)于electron-rebuild的信息訪問(wèn)README.
非法指令
假定一個(gè)完全有能力的芯片預(yù)編譯的二進(jìn)制文件。例如Galileo2缺乏一些ia32指令集架構(gòu)。一些其他平臺(tái)有相似的問(wèn)題。所以當(dāng)你試圖運(yùn)行serialport時(shí),如果你得到非法指令,你將需要重新構(gòu)建serialport二進(jìn)制文件通過(guò)告知npm去重新構(gòu)建它。
#告知npm構(gòu)建serialport在安裝的時(shí)間內(nèi)
npm install serialport --build-from-source
#如果你有一個(gè)依賴serialport的包,你可以告知npm去特別重新構(gòu)建它。
npm rebuild serialport --build-from-source
#或者除去包名,重新構(gòu)建所有
npm rebuild --build-from-source
Mac OS X
確定你有是在最低的xCode命令行工具里安裝適用你系統(tǒng)的配置。如果你最近更新了系統(tǒng),可能會(huì)移除你安裝的命令行工具,請(qǐng)?jiān)谔峤粏?wèn)題前仔細(xì)查證。你需要使用g++ v4.8或者更高版本來(lái)編譯Node.js 4.x+的node-serialport。
Raspberry Pi Linux
下列是關(guān)于使用Johnny-Five和Raspi IO設(shè)置樹(shù)莓派的說(shuō)明。這些項(xiàng)目使用Node Serialport。
Revision
CPU
Arm Version
A, A+, B, B+
32-bit ARM1176JZF-S
ARMv6
Compute Module
32-bit ARM1176JZF-S
ARMv6
Zero
32-bit ARM1176JZF-S
ARMv6
B2
32-bit ARM Cortex-A7
ARMv7
B3
32-bit ARM Cortex-A53
ARMv8
sudo / root
如果你準(zhǔn)備使用sudo或者root權(quán)限去安裝node Serialport,npm需要你使用不安全的參數(shù)標(biāo)志。這個(gè)需求一般很少需要。
sudo npm install serialport --unsafe-perm --build-form-source
使用標(biāo)志失敗導(dǎo)致類似的錯(cuò)誤如下;
root@rpi3:~# npm install -g serialport
/usr/bin/serialport-list -> /usr/lib/node_modules/serialport/bin/serialport-list.js
/usr/bin/serialport-term -> /usr/lib/node_modules/serialport/bin/serialport-terminal.js
> serialport@4.0.3 install /usr/lib/node_modules/serialport
> node-pre-gyp install --fallback-to-build
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/6.9.1"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/lib/node_modules/serialport/.node-gyp"
make: Entering directory '/usr/lib/node_modules/serialport/build'
make: *** No rule to make target '../.node-gyp/6.9.1/include/node/common.gypi', needed by 'Makefile'. Stop.
make: Leaving directory '/usr/lib/node_modules/serialport/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
Ubuntu/Debian Linux
最好的方式來(lái)安裝任何版本的NodeJS是使用NodeSource Node.js Binary Distributions.舊版本的Ubuntu安裝錯(cuò)誤的nodejs版本和二進(jìn)制名稱。如果你node二進(jìn)制文件是nodejs不是node或者如果你的nodejs版本是v0.10.29 ,那么你應(yīng)該根據(jù)以下這個(gè)說(shuō)明來(lái)操作。
build-essential包是編譯serialport必要的包。如果那兒有一個(gè)你不需要的你平臺(tái)的二進(jìn)制文件,請(qǐng)繼續(xù)!
#Using Ubuntu and node 6
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
#Using Debian and node 6,使用root權(quán)限
curl -sL https://deb.nodesource.com/setup_7.x | bash -
apt-get install -y nodejs
Windows
Windows 7,Windows 8.1,Windows 10和Windows 10 IoT是支持的。預(yù)編譯二進(jìn)制文件是可用的,但是如果你想要從源碼構(gòu)建它的話,你需要查看node-gyp 的安裝的說(shuō)明。一旦這些都完成了并且可以工作了你將能從源碼來(lái)安裝serialport。
npm install serialport --build-from-source
這不是node-gyp說(shuō)明的一部分,但是有些時(shí)候它會(huì)幫助你,如果你在visual studio創(chuàng)建了一個(gè)c++項(xiàng)目,它將會(huì)安裝那些在兩個(gè)小時(shí)安裝visual studio過(guò)程中不能安裝的必要的組件,而你只能坐在那兒。這個(gè)將解決一些Failed to locate:"CL.exe"的實(shí)例。
協(xié)議
SerialPort 使用的是MIT協(xié)議以及它所有的依賴關(guān)系都是遵循MIT或者BSD協(xié)議。
使用
打開(kāi)一個(gè)串口:
var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty-usbserial1',{
baudRate: 57600
});
當(dāng)打開(kāi)一個(gè)串口,你可以指定(按這個(gè)順序)
1.串口的路徑 - 需要
2.選項(xiàng) - 可選的,下面會(huì)描述
打開(kāi)一個(gè)串口
構(gòu)造一個(gè)SerialPort項(xiàng)目將會(huì)立即打開(kāi)一個(gè)串口。當(dāng)你可以在任何時(shí)候能讀出和寫入(它會(huì)在打開(kāi)的串口中排列),大多數(shù)串口函數(shù)要求一個(gè)開(kāi)啟的串口。當(dāng)串口是打開(kāi)的時(shí)候,你可以使用以下三個(gè)方式調(diào)用代碼。
open事件經(jīng)常會(huì)觸發(fā)當(dāng)串口打開(kāi)的時(shí)候。 當(dāng)autoOpen選項(xiàng)沒(méi)有失效的時(shí)候,構(gòu)造函數(shù)的 openCallback
被傳遞給.open()。如果你已經(jīng)將它關(guān)閉,callback回調(diào)會(huì)被忽視。
.open()函數(shù)需要一個(gè)在串口打開(kāi)后的回調(diào)。如果你關(guān)閉了autoOpen選項(xiàng)或者已經(jīng)關(guān)閉了串口,這個(gè)就可以被使用。
var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty-usbserial1');
port.on('open',function(){
port.write('main screen turn on ',function(err){
if(err){
return console.log('Error on write: ' ,err.message);
}
console.log('message written');
});
});
//打開(kāi)錯(cuò)誤將會(huì)發(fā)出一個(gè)錯(cuò)誤事件
port.on('error',function(err){
console.log('Error: ',err.message);
});
這個(gè)可以被移動(dòng)到構(gòu)造函數(shù)的回調(diào)
var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty-usbserial1',function(err){
if(err){
return console.log('Error:',err.message);
}
port.write('main screen turn on',function(err){
if(err){
return console.log('Error on write: ',err.message);
}
console.log('message written');
});
});
當(dāng)關(guān)閉autoOpen選項(xiàng),你將要自己打開(kāi)串口。
var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty-usbserial1',{autoOpen:false});
port.open(function(err){
if(err){
return console.log('Error opening port: ',err.message);
}
//寫入失敗將會(huì)被串口發(fā)出由于沒(méi)有寫回調(diào)。
port.write('main screen turn on');
});
//開(kāi)啟事件總是會(huì)被發(fā)出
port.on('open',function(){
//打開(kāi)的邏輯
});
你可以從下列串口更新新的數(shù)據(jù)
port.on('data',function(data){
console.log('Data: '+data);
});
你可以通過(guò)發(fā)送一個(gè)字符串或者緩沖給寫入方法來(lái)向串口寫入數(shù)據(jù)。像下列一樣:
port.write('Hi Mon!');
port.write(new Buffer('Hi Mom!'));
享受以及使用這些代碼做一些酷的事情吧!
調(diào)試
我們使用debug 包以及記錄下serialport的命名空間。我們的日志;
serialport:main對(duì)于所有高等級(jí)的主要日志
serialport:binding 對(duì)于所有低級(jí)的日志
你可以通過(guò)環(huán)境變量來(lái)應(yīng)用日志。檢查debug文檔給更多的信息。
DEBUG=serialport:main node myapp.js
DEBUG=serialport:* node myapp.js
DEBUG=* node myapp.js
錯(cuò)誤處理
所有函數(shù)在SerialPort的兩個(gè)約定。
參數(shù)錯(cuò)誤拋出一個(gè)TypeError對(duì)象。當(dāng)這些函數(shù)被叫做無(wú)效參數(shù)時(shí),你將會(huì)看見(jiàn)這些。
如果沒(méi)有回調(diào)被提供,運(yùn)行時(shí)錯(cuò)誤提供Error對(duì)象給函數(shù)回調(diào)或者發(fā)出一個(gè)error event。你將會(huì)看到這些當(dāng)一個(gè)運(yùn)行錯(cuò)誤發(fā)生,比如試圖開(kāi)啟一個(gè)錯(cuò)誤的串口,或者設(shè)置一個(gè)不支持的波特率。
如果你調(diào)用正確參數(shù)的函數(shù),它應(yīng)該不需要在一個(gè)try/catch結(jié)構(gòu)中包括一個(gè)SerialPort對(duì)象
SerialPort ?
Kind: 輸出類
Kind: Exported class
Emits: open, data, close, error, disconnect
Properties
Name
Type
Description
baudRate
number
串口的波特率,使用.update來(lái)改變它。只讀
binding
object
支持串口的綁定對(duì)象,只讀.
isOpen
boolean
如果串口打開(kāi)時(shí)為true ,其他情況是 false.只讀. (since 5.0.0)
path
string
串口的系統(tǒng)路徑或者名稱. 只讀.
new SerialPort(path,[options],[openCallback])
為path創(chuàng)建一個(gè)新的串口對(duì)象.用無(wú)效的參數(shù)或者無(wú)效的選項(xiàng)構(gòu)造一個(gè)新的串口時(shí),會(huì)拋出錯(cuò)誤。串口將默認(rèn)自動(dòng)打開(kāi),其次這相當(dāng)于調(diào)用port.open(openCallback)。這個(gè)可以被關(guān)閉,通過(guò)設(shè)置autoOpen選項(xiàng)為false。
Throws:
TypeError 當(dāng)提供無(wú)效參數(shù)時(shí), 將會(huì)拋出TypeError。
參數(shù)
類型
描述
path
string
串口打開(kāi)的系統(tǒng)路徑.例如, 在Mac/Linux上/dev/tty.XXX 或者 Windows上的 COM1 .
[options]
openOptions
串口配置選項(xiàng)
[openCallback]
errorCallback
當(dāng)連接已經(jīng)打開(kāi). 如果它沒(méi)有提供以及由錯(cuò)誤發(fā)生,它將會(huì)發(fā)出串口error事件。如果在openOptions中autoOpen被設(shè)置為false,回調(diào)將不會(huì)調(diào)用
serialPort.open([callback])
打開(kāi)一個(gè)連接到串口
Kind:實(shí)例方法 SerialPort
Emits:open
參數(shù)
類型
描述
[callback]
errorCallback
當(dāng)連接已經(jīng)被打開(kāi). 如果它沒(méi)有被提供以及有一個(gè)錯(cuò)誤發(fā)生, 它將在串口上被發(fā)出error事件``.
serialPort.update([options],[callback])
改變打開(kāi)的串口的波特率。拋出異常如果你提供了一個(gè)錯(cuò)誤的參數(shù)。當(dāng)波特率不支持事,會(huì)拋出錯(cuò)誤或者產(chǎn)生回調(diào)。
Kind: instance method of SerialPort
參數(shù)
類型
描述
[options]
object
目前只有波特率是支持的
[options.baudRate]
number
設(shè)置波特率的串口是打開(kāi)的。這應(yīng)該匹配常見(jiàn)的波特率之一, 比如 110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200. 當(dāng)然不能擔(dān)保, 串口連接的設(shè)備將支持請(qǐng)求的波特率,只要串口自己支持那個(gè)波特率.
[callback]
errorCallback
當(dāng)波特率被改變的時(shí)候. 如果 .update 被調(diào)用而沒(méi)有回調(diào)以及有一個(gè)錯(cuò)誤,錯(cuò)誤事件將會(huì)被觸發(fā)。
serialPort.write(data,[encoding],[callback])? boolean
向給定的串口寫入數(shù)據(jù)。如果端口沒(méi)有打開(kāi),會(huì)緩存寫入數(shù)據(jù)。
寫入操作是無(wú)阻塞的。當(dāng)它返回時(shí),數(shù)據(jù)或許還沒(méi)有被寫入串口??磀rain()
一些設(shè)備,比如當(dāng)你打開(kāi)一個(gè)連接到Arduino時(shí),它會(huì)重啟。在這種情況下,如果你立刻向設(shè)備寫入,它們將不能接收到數(shù)據(jù)。這經(jīng)常在Arduino發(fā)送“ready”字節(jié)后工作,你的node程序會(huì)在寫入前等待。你也可以僥幸認(rèn)為等待大概400ms.
盡管串口是一個(gè)流,但當(dāng)寫入它可以接受的字節(jié)數(shù)組除了字符串和緩存時(shí),這個(gè)格外的功能非常有用。
Kind: 實(shí)例方法 SerialPort
Returns: boolean - 如果流渴望在繼續(xù)寫入其他數(shù)據(jù)之前調(diào)用代碼等待被觸發(fā)的drain事件,就是false; 其他情況是 true.
Since: 5.0.0
參數(shù)
類型
描述
data
string
array
buffer
接收一個(gè) Buffer 對(duì)象, 或者一個(gè)接受buffer構(gòu)造函數(shù)的類型 (除了字節(jié)數(shù)組或者一個(gè)字符串).
[encoding]
string
編碼, 如果數(shù)據(jù)塊是一個(gè)字符串. 默認(rèn)的是 'utf8'. 也接受 'ascii', 'base64', 'binary', 'hex' 查看 Buffers and Character Encodings了解所有可用的選項(xiàng).
[callback]
function
第一次寫入操作結(jié)束.數(shù)據(jù)可能還沒(méi)有刷新到底層端口,沒(méi)有參數(shù).
serialPort.read([size]) ? string | Buffer | null
從串口請(qǐng)求一個(gè)字節(jié)數(shù).read()方法從內(nèi)存緩沖區(qū)拉取一些數(shù)據(jù)然后返回它。如果沒(méi)有可用數(shù)據(jù)被讀取,會(huì)返回null。默認(rèn)的,數(shù)據(jù)將會(huì)被返回成一個(gè)緩存對(duì)象,除非一個(gè)編碼已經(jīng)指明使用了.setEncoding()方法。
Kind: 實(shí)例方法 SerialPort
Returns: string | Buffer | null - 內(nèi)存緩沖區(qū)數(shù)據(jù)
Since: 5.0.0
參數(shù)
類型
描述
[size]
number
指明了會(huì)返回多少字節(jié)的數(shù)據(jù)如果是可用的話。
serialPort.close(callback)
關(guān)閉開(kāi)啟的連接
Kind: 實(shí)例方法 SerialPort
Emits: close
參數(shù)
類型
描述
callback
errorCallback
當(dāng)連接被關(guān)閉.
serialPort.set([options], [callback])
在打開(kāi)的串口上設(shè)置控制標(biāo)志. Uses SetCommMask for windows and ioctl for mac and linux.
Kind:實(shí)例方法 SerialPort
Since: 5.0.0
參數(shù)
類型
默認(rèn)值
描述
[options]
object
所有選項(xiàng)是操作系統(tǒng)默認(rèn)的當(dāng)串口被打開(kāi). 每個(gè)標(biāo)志被設(shè)置為相同的調(diào)用提供或者是默認(rèn)數(shù)據(jù).如果選項(xiàng)沒(méi)有提供將要使用的默認(rèn)選項(xiàng).
[options.brk]
Boolean
false
[options.cts]
Boolean
false
[options.dsr]
Boolean
false
[options.dtr]
Boolean
true
[options.rts]
Boolean
true
[callback]
errorCallback
當(dāng)串口標(biāo)志被設(shè)置.
serialPort.get([callback])
返回控制標(biāo)志 (CTS, DSR, DCD)在開(kāi)啟的串口上.
使用GetCommModemStatus for windows and ioctl for mac and linux.
Kind: 實(shí)例方法 SerialPort
參數(shù)
類型
描述
[callback]
Called once the modem bits have been retrieved(當(dāng)比特被恢復(fù))
serialPort.flush([callback])
刷新收到的丟棄的數(shù)據(jù),但是不讀出和寫入,也不傳輸。. 更多的詳細(xì)技術(shù)請(qǐng)看 tcflush(fd, TCIFLUSH) for Mac/Linux and FlushFileBuffers for Windows.
Kind: 實(shí)例方法 SerialPort
參數(shù)
類型
描述
[callback]
errorCallback
當(dāng)刷新操作完成.
serialPort.drain([callback])
等待直到所有發(fā)出的數(shù)據(jù)被傳輸?shù)酱凇?查看 tcdrain() or FlushFileBuffers() 了解更多信息。
Kind: 實(shí)例方法 SerialPort
參數(shù)
類型
描述
[callback]
errorCallback
當(dāng)耗盡操作返回
Example
寫入 data 以及等待直到在調(diào)用回調(diào)之前,結(jié)束對(duì)目標(biāo)串口的傳輸。
function writeAndDrain (data, callback) {
sp.write(data, function () {
sp.drain(callback);
});
}
serialPort.pause() ?
pause()方法會(huì)導(dǎo)致一個(gè)流的流動(dòng)模式停止觸發(fā)'data'事件,切換的流動(dòng)模式. 任何可用的數(shù)據(jù)將仍然存放在內(nèi)存緩存區(qū)。
Kind: 實(shí)例方法SerialPort
Returns: this
See: module:serialport#resume
Since: 5.0.0
serialPort.resume() ?
resume()會(huì)導(dǎo)致一個(gè)明確的暫??勺x的流,來(lái)恢復(fù)觸發(fā)的‘data'事件,切換流到流模式
Kind: 實(shí)例方法 SerialPort
Returns: this
See: module:serialport#pause
Since: 5.0.0
Event: "error"
無(wú)論何時(shí)這有一個(gè)錯(cuò)誤就會(huì)回調(diào)error 事件。
Kind: 事件由此觸發(fā) SerialPort
Event: "open"
當(dāng)串口打開(kāi)以及準(zhǔn)備進(jìn)行寫入時(shí),open 事件將會(huì)無(wú)參回調(diào)。 如果碰巧如果你有構(gòu)造函數(shù)立即打開(kāi)或者如果你通過(guò)open()手動(dòng)打開(kāi)串口。查看 Useage/Opening a Port 了解更多信息.
Kind: 事件由此觸發(fā) SerialPort
Event: "data"
data 事件輸出字符串到串口在流動(dòng)模式中. 一旦被接受到,數(shù)據(jù)就會(huì)被發(fā)出。 數(shù)據(jù)將會(huì)是一個(gè)緩存對(duì)象,很多不同的數(shù)據(jù)量在其中.readLine解析器將數(shù)據(jù)轉(zhuǎn)換成字符串.查看 parsers部分了解關(guān)于解析器的更多信息以及 NodeJS stream documentation 了解更多關(guān)于數(shù)據(jù)事件的信息.
Kind: 事件由此觸發(fā) SerialPort
Event: "disconnect"
disconnect 事件回調(diào)會(huì)調(diào)用一個(gè)錯(cuò)誤對(duì)象. 這個(gè)經(jīng)常發(fā)生在 close 事件之前如果斷開(kāi)連接被發(fā)現(xiàn)。
Kind: 事件由此觸發(fā)SerialPort
Event: "close"
close事件是無(wú)參回調(diào)當(dāng)串口被關(guān)閉時(shí). 當(dāng)一個(gè)錯(cuò)誤發(fā)生,錯(cuò)誤事件將被觸發(fā)。
Kind: 事件由此觸發(fā) SerialPort
SerialPort.Binding : BaseBinding
Binding是node Serialport底層的系統(tǒng). 默認(rèn)的我們自動(dòng)檢測(cè) windows, Linux 和 OSX系統(tǒng) 以及為你系統(tǒng)加載合適的模塊. 你可以指定 SerialPort.Binding 去綁定任何你喜歡的后臺(tái). 你可以搜索更多信息從 npm.
你也可以禁止自動(dòng)后臺(tái)加載,通過(guò)一下代碼實(shí)現(xiàn)
var SerialPort = require('serialport/lib/serialport');
SerialPort.Binding = MyBindingClass;
Kind: 靜態(tài)性能SerialPort
Since: 5.0.0
SerialPort.parsers : object
默認(rèn)的分析程序是Transform streams 可以用各種各樣的方式來(lái)解析數(shù)據(jù),可以被使用來(lái)處理傳入的數(shù)據(jù)。
使用各種解析程序你都需要?jiǎng)?chuàng)建他們?nèi)缓筝斔蚐erialPort到解析程序。千萬(wàn)別編寫解析程序,而是編寫SerialPort對(duì)象。
Kind: 靜態(tài)特性SerialPort
Since: 5.0.0
Properties
名稱
狀態(tài)
描述
ByteLength
Class
發(fā)出數(shù)據(jù)的轉(zhuǎn)換流作為緩存,在收到一個(gè)特定的字節(jié)數(shù)后
Delimiter
Class
發(fā)出數(shù)據(jù)的轉(zhuǎn)換流,每次接受一個(gè)字節(jié)序列
Readline
Class
發(fā)出數(shù)據(jù)的轉(zhuǎn)換流,在收到一個(gè)換行符之后
例子
var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = new Readline();
port.pipe(parser);
parser.on('data', console.log);
port.write('ROBOT PLEASE RESPOND\n');
// 可以縮短創(chuàng)建的解析程序和傳輸管道
var parser = port.pipe(new Readline());
使用字節(jié)長(zhǎng)度解析器,你必須提供字節(jié)數(shù)的長(zhǎng)度:
var SerialPort = require('serialport');
var ByteLength = SerialPort.parsers.ByteLength
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(new ByteLength({length: 8}));
parser.on('data', console.log);
使用分隔符解析器你必須指明分隔符,你必須在一個(gè)字符串、緩存或者一個(gè)字節(jié)數(shù)組中提供一個(gè)分隔符:
var SerialPort = require('serialport');
var Delimiter = SerialPort.parsers.Delimiter;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(new Delimiter({delimiter: new Buffer('EOL')}));
parser.on('data', console.log);
使用換行符解析器,你必須提供一個(gè)分隔符 (默認(rèn)是 '\n')
var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var port = new SerialPort('/dev/tty-usbserial1');
var parser = port.pipe(Readline({delimiter: '\r\n'}));
parser.on('data', console.log);
SerialPort.list(callback) : function
從元數(shù)據(jù)中找回可用的串口列表. 只有“串口名”是可用的,所有其他的字段如果它們不可用,將會(huì)無(wú)意義。 串口名 也是一個(gè)路徑或者一個(gè)標(biāo)識(shí)符(例如 COM1)用來(lái)打開(kāi)串口.
Kind: 靜態(tài)方法 SerialPort
參數(shù)
類型
callback
listCallback
例子
// 示例的串口信息
{
comName: '/dev/cu.usbmodem1421',
manufacturer: 'Arduino (www.arduino.cc)',
serialNumber: '757533138333964011C1',
pnpId: undefined,
locationId: '0x14200000',
vendorId: '0x2341',
productId: '0x0043'
}
var SerialPort = require('serialport');
SerialPort.list(function (err, ports) {
ports.forEach(function(port) {
console.log(port.comName);
console.log(port.pnpId);
console.log(port.manufacturer);
});
});
SerialPort~BaseBinding
你永遠(yuǎn)不能直接使用Binding對(duì)象,因?yàn)樗鼈兺ㄟ^(guò)SerialPort來(lái)接觸底層硬件. 這個(gè)文檔是針對(duì)綁定不同平臺(tái)的用戶.這個(gè)類能被繼承來(lái)為每個(gè)方法進(jìn)行類型檢查.
Kind: 內(nèi)部類 SerialPort
Since: 5.0.0
Properties
名稱
類型
描述
isOpen
boolean
必須的屬性. 串口打開(kāi)就是true , 其他的是false.只讀.
~BaseBinding
instance
.close() ? Promise
.read(data, length) ? Promise
.write(data) ? Promise
.update([options]) ? Promise
.set([options]) ? Promise
.get() ? Promise
.flush() ? Promise
.drain() ? Promise
static
.list() ? Promise
new BaseBinding(options)
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
參數(shù)
類型
描述
options
object
options.disconnect
function
當(dāng)binding被檢測(cè)到一個(gè)沒(méi)連接的串口,方法將會(huì)被調(diào)用. 這個(gè)方法應(yīng)該在所有操作期間調(diào)用,而不是在操作正?;卣{(diào)后調(diào)用。SerialPort 將試圖調(diào)用 close在斷開(kāi)連接后,以及會(huì)忽視所有錯(cuò)誤.
baseBinding.open(path, openOptions) ? Promise
通過(guò)路徑打開(kāi)一個(gè)引用的串口連接
Kind: 實(shí)例方法BaseBinding
Returns: Promise - 在串口打開(kāi)和配置好后返回解決.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
參數(shù)
類型
path
string
openOptions
openOptions
baseBinding.close() ? Promise
關(guān)閉一個(gè)串口連接
Kind: 實(shí)例方法 BaseBinding
Returns: Promise - 一旦串口被關(guān)閉返回解決.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
baseBinding.read(data, length) ? Promise
從SerialPort請(qǐng)求一個(gè)字節(jié)數(shù)。這個(gè)方法和node的 fs.read相似.
Kind: 實(shí)例方法 BaseBinding
Returns: Promise -在閱讀操作結(jié)束之后返回讀取的字節(jié)數(shù).
Throws:
TypeError當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
Params: integer 偏移 - 在緩存區(qū)偏移處開(kāi)始寫入.
參數(shù)
類型
描述
data
buffer
length
integer
讀取指定的最大字節(jié)數(shù)
baseBinding.write(data) ? Promise
向SerialPort寫入一個(gè)字節(jié)數(shù),這將只能在沒(méi)有等待寫入的操作時(shí)被調(diào)用.
Kind: 實(shí)例方法 BaseBinding
Returns: Promise - 在數(shù)據(jù)傳遞給操作系統(tǒng)編寫后返回.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
參數(shù)
類型
描述
data
buffer
baseBinding.update([options]) ? Promise
改變開(kāi)啟的串口的連接設(shè)置。當(dāng)前只能設(shè)置波特率。
Kind: 實(shí)例方法 BaseBinding
Returns: Promise - 當(dāng)串口波特率被改變后返回.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
參數(shù)
類型
描述
[options]
object
目前只有波特率支持
[options.baudRate]
number
如果通過(guò)bingdings提供一個(gè)不支持的波特率,它將回調(diào)一個(gè)錯(cuò)誤。
baseBinding.set([options]) ? Promise
設(shè)置一個(gè)打開(kāi)的串口的控制標(biāo)志。
Kind: 實(shí)例方法BaseBinding
Returns: Promise - 在串口的標(biāo)識(shí)被設(shè)置后返回.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
參數(shù)
類型
默認(rèn)
描述
[options]
object
當(dāng)串口被打開(kāi)時(shí),所有設(shè)置都是操作系統(tǒng)的默認(rèn)設(shè)置. 每個(gè)標(biāo)識(shí)都被設(shè)置成每次調(diào)用時(shí)提供的或者默認(rèn)的數(shù)值。所有設(shè)置通常都是被提供的.
[options.brk]
Boolean
false
[options.cts]
Boolean
false
[options.dsr]
Boolean
false
[options.dtr]
Boolean
true
[options.rts]
Boolean
true
baseBinding.get() ? Promise
從打開(kāi)的串口中獲得控制標(biāo)識(shí)(CTS, DSR, DCD).
Kind: 實(shí)例 BaseBinding
Returns: Promise - 當(dāng)標(biāo)識(shí)被獲取后返回.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
baseBinding.flush() ? Promise
接收到的沖洗 (丟棄)的數(shù)據(jù)不會(huì)被讀寫也不會(huì)傳輸.
Kind: 實(shí)例方法 BaseBinding
Returns: Promise - 當(dāng)沖洗操作結(jié)束后返回.
Throws:
TypeError 當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
baseBinding.drain() ? Promise
耗盡等待所有輸出數(shù)據(jù)被傳輸?shù)酱诤?
Kind: instance method of BaseBinding
Returns: Promise - 耗盡操作結(jié)束后調(diào)用.
Throws:
TypeError當(dāng)給定一個(gè)無(wú)效的參數(shù),將會(huì)拋出TypeError錯(cuò)誤.
BaseBinding.list() ? Promise
從元數(shù)據(jù)中找回可用的串口列表. 只有“串口名”是可用的,所有其他的字段如果它們不可用,將會(huì)無(wú)意義。 串口名 也是一個(gè)路徑或者一個(gè)標(biāo)識(shí)符(例如 COM1)用來(lái)打開(kāi)串口.
Kind: 實(shí)例方法 BaseBinding
Returns: Promise - 串口列表數(shù)組info objects.
SerialPort~errorCallback : function
錯(cuò)誤或者null的回調(diào)
Kind: 內(nèi)部類型定義 SerialPort
參數(shù)
類型
error
error
SerialPort~modemBitsCallback : function
控制標(biāo)識(shí)(cts, dsr, dcd)一個(gè)錯(cuò)誤或者對(duì)象產(chǎn)生回調(diào).
Kind: 內(nèi)部類型定義 SerialPort
參數(shù)
類型
默認(rèn)
error
error
status
object
[status.cts]
boolean
false
[status.dsr]
boolean
false
[status.dcd]
boolean
false
SerialPort~openOptions : Object
Kind: 內(nèi)部類型定義 SerialPort
Properties
名稱
類型
默認(rèn)
描述
Binding
module:serialport~Binding
硬件訪問(wèn)綁定, 綁定是node SreialPort如何和底層系統(tǒng)通信.默認(rèn)的,我們自動(dòng)判斷Windows (WindowsBinding), Linux (LinuxBinding) 和 OSX (DarwinBinding)系統(tǒng),以及加載合適我們系統(tǒng)的模塊.
autoOpen
boolean
true
在 nextTick自動(dòng)打開(kāi)串口
lock
boolean
true
防止其他進(jìn)程打開(kāi)串口. 目前不支持Windows系統(tǒng).
baudRate
number
9600
已經(jīng)打開(kāi)的串口的波特率. 這個(gè)應(yīng)該匹配一個(gè)常用的波特率,比如 110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200. 這些是不確定的, 設(shè)備連接到串口上將支持請(qǐng)求的波特率,即使串口自己支持那個(gè)波特率。
dataBits
number
8
必須是其中之一: 8, 7, 6, or 5.
stopBits
number
1
必須是其中之一: 1 or 2.
highWaterMark
number
16384
讀寫緩存區(qū)大小,默認(rèn)是 16k
parity
string
"none"
必須是其中之一: 'none', 'even', 'mark', 'odd', 'space'
rtscts
boolean
false
流控制設(shè)置
xon
boolean
false
流控制設(shè)置
xoff
boolean
false
流控制設(shè)置
xany
boolean
false
流控制設(shè)置
bindingOptions
object
設(shè)置特定的綁定選項(xiàng)
bindingOptions.vmin
number
1
查看man termios LinuxBinding和 DarwinBinding
bindingOptions.vtime
number
0
查看man termios LinuxBinding 和 DarwinBinding
SerialPort~listCallback : function
這個(gè)回調(diào)類型叫做 requestCallback,作為一個(gè)全局標(biāo)識(shí)展示。
Kind: 內(nèi)部類型定義 SerialPort
參數(shù)
類型
描述
error
error
ports
array
串口信息的對(duì)象數(shù)組
命令行工具
如果你全局安裝了 serialport. (例如 npm install -g serialport) 你會(huì)獲得兩個(gè)命令行工具.
串口列表
serialport-list 將會(huì)通過(guò)不同的格式列出所有可用的串口.
$ serialport-list -h
Usage: serialport-list [options]
List available serial ports
Options:
-h, --help 輸出幫助信息
-V, --version 輸出版本號(hào)
-f, --format 輸出的格式: text, json, or jsonline. 默認(rèn)的是: text
$ serialport-list
/dev/cu.Bluetooth-Incoming-Port
/dev/cu.usbmodem1421 Arduino (www.arduino.cc)
$ serialport-list -f json
[{"comName":"/dev/cu.Bluetooth-Incoming-Port"},{"comName":"/dev/cu.usbmodem1421","manufacturer":"Arduino (www.arduino.cc)","serialNumber":"752303138333518011C1","locationId":"0x14200000","vendorId":"0x2341","productId":"0x0043"}]
$ serialport-list -f jsonline
{"comName":"/dev/cu.Bluetooth-Incoming-Port"}
{"comName":"/dev/cu.usbmodem1421","manufacturer":"Arduino (www.arduino.cc)","serialNumber":"752303138333518011C1","locationId":"0x14200000","vendorId":"0x2341","productId":"0x0043"}
串口終端
serialport-term 提供基礎(chǔ)的命令的接口給一個(gè)串口通信使用。 通過(guò)ctrl+c退出.
$ serialport-term -h
Usage: serialport-term -p [options]
A basic terminal interface for communicating over a serial port. Pressing ctrl+c exits.
Options:
-h, --help 輸出幫助信息
-V, --version 輸出版本號(hào)
-l --list 列出可用串口然后退出
-p, --port, --portname 串口的路徑或者名稱
-b, --baud 波特率,默認(rèn)是: 9600
--databits 數(shù)據(jù)字節(jié) 默認(rèn)是: 8
--parity 奇偶性,默認(rèn)是: none
--stopbits 停止位,默認(rèn)是: 1
--echo --localecho 打印類型,你輸入它們時(shí).
$ serialport-term -l
/dev/cu.Bluetooth-Incoming-Port
/dev/cu.usbmodem1421 Arduino (www.arduino.cc)
總結(jié)
以上是生活随笔為你收集整理的php hex2bin nodejs,Nodejs Serialport文档翻译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab教程点语言,编程语言 /
- 下一篇: php rss xml,php 一个完全