Nodejs Serialport文檔翻譯

版本號:Serialport@5.0.0-beta3

serialport@5.0.0-beta3
英文文檔

本文鏈接
想象一個(gè)世界耗美,你可以在那寫javascript來控制攪拌機(jī)辰斋,燈歧譬,安全系統(tǒng)或者甚至是機(jī)器人。是的,我說的是機(jī)器人钳枕。那個(gè)世界就是這兒,現(xiàn)在使用node serialport赏壹。它提供一個(gè)非常簡單的接口所需要的串口程序代碼Arduino 單片機(jī), X10 無線通信模塊, 或者甚至是上升到 Z-WaveZigbee . 在這個(gè)物理世界鱼炒,你可以隨心所欲(The physical world is your oyster with this goodie.)。想完全了解為什么我們做這個(gè)蝌借,請閱讀NodeBots - The Rise of JS Robotics.


為了入門node-serialport昔瞧,我們建議你從下列文章開始:



平臺支持

serialport支持NodeJS v4 以及更高版本菩佑。0.10和0.12版本使用serialport@4自晰。serialport支持的平臺,體系架構(gòu)和nodejs版本可以查看下列表格信息稍坯。

平臺/架構(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 平臺已知可以運(yùn)行但是不屬于我們的測試范圍或者構(gòu)建矩陣酬荞。 #846 ARM v4 and v5 在 Node v0.10版本之后從Nodejs中取消.

2 Windows 7, 8, 10, and 10 IoT 是支持的但是只有Windows Server 2012 R2 是由我們測試的.

3 OSX 10.4 Tiger 以及更高版本是支持的 但是只有 10.9.5 Mavericks 和 Xcode 6.1 是由我們測試的.

安裝說明

對于大多數(shù)“標(biāo)準(zhǔn)”使用案例(在mac,linux瞧哟,windows x86或者x64上node V4.x)混巧,node-serialport將會很好以及很容易的安裝。

npm install serialport 

安裝的平臺環(huán)境

我們使用node-pre-gyp來編譯以及公布大多數(shù)常見使用平臺(linux勤揩,mac咧党,windows在標(biāo)準(zhǔn)的處理器平臺)的二進(jìn)制庫。如果你是特別的平臺陨亡,node-serialport將會工作傍衡,但是當(dāng)你安裝的時(shí)候它將會編譯二進(jìn)制文件。

這假定你有必要讓你可以在自己系統(tǒng)中編譯一些nodejs模塊数苫。這個(gè)或許并非如此聪舒,可是,請確認(rèn)下列對于你系統(tǒng)是正確的虐急,在你提出關(guān)于“無法安裝”的issue之前箱残。對于所有操作系統(tǒng),請確認(rèn)你有安裝了Python 2.x 以及不是3.0止吁,node-gyp(你用來編譯的工具)需要Python 2.x被辑。

Alpine Linux

Alpine 是一個(gè)(非常)小的linux開發(fā)版系統(tǒng), 但是它使用組織標(biāo)準(zhǔn)庫來代替函數(shù)庫 (大多數(shù)開發(fā)版linux系統(tǒng)使用的), 所以他需要編譯。 它通常使用Docker.我們已經(jīng)編譯了可以工作的 apline-node.

# 如果你沒有安裝node/npn敬惦,先添加它們
sudo apk add --no-cache nodejs

# 添加必要的構(gòu)建庫和運(yùn)行依賴
sudo apk add --no-cache make gcc g++ python linux-headers udev

# 然后我們就能安裝 serialport, 強(qiáng)制它編譯
npm install serialport --build-from-source

# 如果你使用root來安裝盼理,你需要使用

Electron

Electron是一個(gè)框架用來創(chuàng)建跨平臺桌面程序。Electron自帶他自己的Node.js運(yùn)行版本

如果你需要serialport作為一個(gè)Electron項(xiàng)目的依賴俄删,你需要為你用在項(xiàng)目里的Electron項(xiàng)目編譯它宏怔。

當(dāng)你第一次安裝serialport,它會編譯針對你機(jī)器的Node.js版本的serialport奏路,而不是針對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的信息訪問README.

查看實(shí)例項(xiàng)目可查看electron-serialport.

非法指令

假定一個(gè)完全有能力的芯片預(yù)編譯的二進(jìn)制文件。例如Galileo2缺乏一些ia32指令集架構(gòu)抓艳。一些其他平臺有相似的問題触机。所以當(dāng)你試圖運(yùn)行serialport時(shí),如果你得到非法指令玷或,你將需要重新構(gòu)建serialport二進(jìn)制文件通過告知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)约谈,可能會移除你安裝的命令行工具笔宿,請?jiān)谔峤粏栴}前仔細(xì)查證。你需要使用g++ v4.8或者更高版本來編譯Node.js 4.x+的node-serialport棱诱。

Raspberry Pi Linux

下列是關(guān)于使用Johnny-Five和Raspi IO設(shè)置樹莓派的說明泼橘。這些項(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)致類似的錯誤如下靡菇;

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

最好的方式來安裝任何版本的NodeJS是使用NodeSource Node.js Binary Distributions.舊版本的Ubuntu安裝錯誤的nodejs版本和二進(jìn)制名稱重归。如果你node二進(jìn)制文件是nodejs不是node或者如果你的nodejs版本是v0.10.29 ,那么你應(yīng)該根據(jù)以下這個(gè)說明來操作厦凤。

build-essential包是編譯serialport必要的包鼻吮。如果那兒有一個(gè)你不需要的你平臺的二進(jìn)制文件,請繼續(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 的安裝的說明香椎。一旦這些都完成了并且可以工作了你將能從源碼來安裝serialport。

npm install serialport --build-from-source

這不是node-gyp說明的一部分禽篱,但是有些時(shí)候它會幫助你畜伐,如果你在visual studio創(chuàng)建了一個(gè)c++項(xiàng)目,它將會安裝那些在兩個(gè)小時(shí)安裝visual studio過程中不能安裝的必要的組件躺率,而你只能坐在那兒玛界。這個(gè)將解決一些Failed to locate:"CL.exe"的實(shí)例万矾。

協(xié)議

SerialPort 使用的是MIT協(xié)議以及它所有的依賴關(guān)系都是遵循MIT或者BSD協(xié)議。

使用

打開一個(gè)串口:

var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty-usbserial1',{
    baudRate: 57600
});

當(dāng)打開一個(gè)串口慎框,你可以指定(按這個(gè)順序)
1.串口的路徑 - 需要
2.選項(xiàng) - 可選的勤众,下面會描述

打開一個(gè)串口

構(gòu)造一個(gè)SerialPort項(xiàng)目將會立即打開一個(gè)串口。當(dāng)你可以在任何時(shí)候能讀出和寫入(它會在打開的串口中排列)鲤脏,大多數(shù)串口函數(shù)要求一個(gè)開啟的串口。當(dāng)串口是打開的時(shí)候吕朵,你可以使用以下三個(gè)方式調(diào)用代碼猎醇。

  • open事件經(jīng)常會觸發(fā)當(dāng)串口打開的時(shí)候。 當(dāng)autoOpen選項(xiàng)沒有失效的時(shí)候努溃,構(gòu)造函數(shù)的 openCallback
  • 被傳遞給.open()硫嘶。如果你已經(jīng)將它關(guān)閉,callback回調(diào)會被忽視梧税。
  • .open()函數(shù)需要一個(gè)在串口打開后的回調(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');
    });
});

//打開錯誤將會發(fā)出一個(gè)錯誤事件
port.on('error',function(err){
    console.log('Error: ',err.message);
});

這個(gè)可以被移動到構(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)哮塞,你將要自己打開串口。

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);
    }
    
    //寫入失敗將會被串口發(fā)出由于沒有寫回調(diào)凳谦。
    port.write('main screen turn on');
});

//開啟事件總是會被發(fā)出
port.on('open',function(){
    //打開的邏輯
});

你可以從下列串口更新新的數(shù)據(jù)

port.on('data',function(data){
    console.log('Data: '+data);
});

你可以通過發(fā)送一個(gè)字符串或者緩沖給寫入方法來向串口寫入數(shù)據(jù)忆畅。像下列一樣:

port.write('Hi Mon!');
port.write(new Buffer('Hi Mom!'));

享受以及使用這些代碼做一些酷的事情吧!

調(diào)試

我們使用debug 包以及記錄下serialport的命名空間尸执。我們的日志家凯;

  • serialport:main對于所有高等級的主要日志
  • serialport:binding 對于所有低級的日志

你可以通過環(huán)境變量來應(yīng)用日志。檢查debug文檔給更多的信息如失。

DEBUG=serialport:main node myapp.js
DEBUG=serialport:* node myapp.js
DEBUG=* node myapp.js

錯誤處理

所有函數(shù)在SerialPort的兩個(gè)約定绊诲。

  • 參數(shù)錯誤拋出一個(gè)TypeError對象。當(dāng)這些函數(shù)被叫做無效參數(shù)時(shí)褪贵,你將會看見這些掂之。
  • 如果沒有回調(diào)被提供,運(yùn)行時(shí)錯誤提供Error對象給函數(shù)回調(diào)或者發(fā)出一個(gè)error event竭鞍。你將會看到這些當(dāng)一個(gè)運(yùn)行錯誤發(fā)生板惑,比如試圖開啟一個(gè)錯誤的串口,或者設(shè)置一個(gè)不支持的波特率偎快。

如果你調(diào)用正確參數(shù)的函數(shù)冯乘,它應(yīng)該不需要在一個(gè)try/catch結(jié)構(gòu)中包括一個(gè)SerialPort對象

<a name="exp_module_serialport--SerialPort"></a>

SerialPort ?

Kind: 輸出類
Kind: Exported class
Emits: <code>open</code>, <code>data</code>, <code>close</code>, <code>error</code>, <code>disconnect</code>
Properties

Name Type Description
baudRate <code>number</code> 串口的波特率,使用.update來改變它晒夹。只讀
binding <code>object</code> 支持串口的綁定對象裆馒,只讀.
isOpen <code>boolean</code> 如果串口打開時(shí)為true 姊氓,其他情況是 false.只讀. (since 5.0.0)
path <code>string</code> 串口的系統(tǒng)路徑或者名稱. 只讀.

<a name="new_module_serialport--SerialPort_new"></a>

new SerialPort(path,[options],[openCallback])

path創(chuàng)建一個(gè)新的串口對象.用無效的參數(shù)或者無效的選項(xiàng)構(gòu)造一個(gè)新的串口時(shí),會拋出錯誤喷好。串口將默認(rèn)自動打開翔横,其次這相當(dāng)于調(diào)用port.open(openCallback)。這個(gè)可以被關(guān)閉梗搅,通過設(shè)置autoOpen選項(xiàng)為false禾唁。

Throws:

  • <code>TypeError</code> 當(dāng)提供無效參數(shù)時(shí), 將會拋出TypeError无切。
參數(shù) 類型 描述
path <code>string</code> 串口打開的系統(tǒng)路徑.例如, 在Mac/Linux上/dev/tty.XXX 或者 Windows上的 COM1 .
[options] <code>openOptions</code> 串口配置選項(xiàng)
[openCallback] <code>errorCallback</code> 當(dāng)連接已經(jīng)打開. 如果它沒有提供以及由錯誤發(fā)生荡短,它將會發(fā)出串口error事件。如果在openOptions中autoOpen被設(shè)置為false哆键,回調(diào)將不會調(diào)用

<a name="module_serialport--SerialPort+open"></a>

serialPort.open([callback])

打開一個(gè)連接到串口

Kind:實(shí)例方法 <code>SerialPort</code>
Emits:<code>open</code>

參數(shù) 類型 描述
[callback] <code>errorCallback</code> 當(dāng)連接已經(jīng)被打開. 如果它沒有被提供以及有一個(gè)錯誤發(fā)生, 它將在串口上被發(fā)出error事件``.

<a name="module_serialport--SerialPort+update"></a>

serialPort.update([options],[callback])

改變打開的串口的波特率掘托。拋出異常如果你提供了一個(gè)錯誤的參數(shù)。當(dāng)波特率不支持事籍嘹,會拋出錯誤或者產(chǎn)生回調(diào)闪盔。
Kind: instance method of <code>SerialPort</code>

參數(shù) 類型 描述
[options] <code>object</code> 目前只有波特率是支持的
[options.baudRate] <code>number</code> 設(shè)置波特率的串口是打開的。這應(yīng)該匹配常見的波特率之一, 比如 110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200. 當(dāng)然不能擔(dān)保, 串口連接的設(shè)備將支持請求的波特率,只要串口自己支持那個(gè)波特率.
[callback] <code>errorCallback</code> 當(dāng)波特率被改變的時(shí)候. 如果 .update 被調(diào)用而沒有回調(diào)以及有一個(gè)錯誤,錯誤事件將會被觸發(fā)辱士。

<a name="module_serialport--SerialPort+write"></a>

serialPort.write(data,[encoding],[callback])? <code>boolean</code>

向給定的串口寫入數(shù)據(jù)泪掀。如果端口沒有打開,會緩存寫入數(shù)據(jù)颂碘。

寫入操作是無阻塞的族淮。當(dāng)它返回時(shí),數(shù)據(jù)或許還沒有被寫入串口凭涂∽@保看drain()

一些設(shè)備,比如當(dāng)你打開一個(gè)連接到Arduino時(shí)切油,它會重啟蝙斜。在這種情況下,如果你立刻向設(shè)備寫入澎胡,它們將不能接收到數(shù)據(jù)孕荠。這經(jīng)常在Arduino發(fā)送“ready”字節(jié)后工作,你的node程序會在寫入前等待攻谁。你也可以僥幸認(rèn)為等待大概400ms.

盡管串口是一個(gè)流稚伍,但當(dāng)寫入它可以接受的字節(jié)數(shù)組除了字符串和緩存時(shí),這個(gè)格外的功能非常有用戚宦。

Kind: 實(shí)例方法 <code>SerialPort</code>
Returns: <code>boolean</code> - 如果流渴望在繼續(xù)寫入其他數(shù)據(jù)之前調(diào)用代碼等待被觸發(fā)的drain事件个曙,就是false; 其他情況是 true.
Since: 5.0.0

參數(shù) 類型 描述
data <code>string</code> <code>array</code> <code>buffer</code> 接收一個(gè) Buffer 對象, 或者一個(gè)接受buffer構(gòu)造函數(shù)的類型 (除了字節(jié)數(shù)組或者一個(gè)字符串).
[encoding] <code>string</code> 編碼, 如果數(shù)據(jù)塊是一個(gè)字符串. 默認(rèn)的是 'utf8'. 也接受 'ascii', 'base64', 'binary', 'hex' 查看 Buffers and Character Encodings了解所有可用的選項(xiàng).
[callback] <code>function</code> 第一次寫入操作結(jié)束.數(shù)據(jù)可能還沒有刷新到底層端口,沒有參數(shù).

<a name="module_serialport--SerialPort+read"></a>

serialPort.read([size]) ? <code>string</code> | <code>Buffer</code> | <code>null</code>

從串口請求一個(gè)字節(jié)數(shù).read()方法從內(nèi)存緩沖區(qū)拉取一些數(shù)據(jù)然后返回它。如果沒有可用數(shù)據(jù)被讀取受楼,會返回null垦搬。默認(rèn)的呼寸,數(shù)據(jù)將會被返回成一個(gè)緩存對象,除非一個(gè)編碼已經(jīng)指明使用了.setEncoding()方法猴贰。

Kind: 實(shí)例方法 <code>SerialPort</code>
Returns: <code>string</code> | <code>Buffer</code> | <code>null</code> - 內(nèi)存緩沖區(qū)數(shù)據(jù)
Since: 5.0.0

參數(shù) 類型 描述
[size] <code>number</code> 指明了會返回多少字節(jié)的數(shù)據(jù)如果是可用的話对雪。

<a name="module_serialport--SerialPort+close"></a>

serialPort.close(callback)

關(guān)閉開啟的連接

Kind: 實(shí)例方法 <code>SerialPort</code>
Emits: <code>close</code>

參數(shù) 類型 描述
callback <code>errorCallback</code> 當(dāng)連接被關(guān)閉.

<a name="module_serialport--SerialPort+set"></a>

serialPort.set([options], [callback])

在打開的串口上設(shè)置控制標(biāo)志. Uses SetCommMask for windows and ioctl for mac and linux.

Kind:實(shí)例方法 <code>SerialPort</code>
Since: 5.0.0

參數(shù) 類型 默認(rèn)值 描述
[options] <code>object</code> 所有選項(xiàng)是操作系統(tǒng)默認(rèn)的當(dāng)串口被打開. 每個(gè)標(biāo)志被設(shè)置為相同的調(diào)用提供或者是默認(rèn)數(shù)據(jù).如果選項(xiàng)沒有提供將要使用的默認(rèn)選項(xiàng).
[options.brk] <code>Boolean</code> <code>false</code>
[options.cts] <code>Boolean</code> <code>false</code>
[options.dsr] <code>Boolean</code> <code>false</code>
[options.dtr] <code>Boolean</code> <code>true</code>
[options.rts] <code>Boolean</code> <code>true</code>
[callback] <code>errorCallback</code> 當(dāng)串口標(biāo)志被設(shè)置.

<a name="module_serialport--SerialPort+get"></a>

serialPort.get([callback])

返回控制標(biāo)志 (CTS, DSR, DCD)在開啟的串口上.
使用GetCommModemStatus for windows and ioctl for mac and linux.

Kind: 實(shí)例方法 <code>SerialPort</code>

參數(shù) 類型 描述
[callback] <code>modemBitsCallback</code> Called once the modem bits have been retrieved(當(dāng)比特被恢復(fù))

<a name="module_serialport--SerialPort+flush"></a>

serialPort.flush([callback])

刷新收到的丟棄的數(shù)據(jù),但是不讀出和寫入米绕,也不傳輸瑟捣。. 更多的詳細(xì)技術(shù)請看 tcflush(fd, TCIFLUSH) for Mac/Linux and FlushFileBuffers for Windows.

Kind: 實(shí)例方法 <code>SerialPort</code>

參數(shù) 類型 描述
[callback] <code>errorCallback</code> 當(dāng)刷新操作完成.

<a name="module_serialport--SerialPort+drain"></a>

serialPort.drain([callback])

等待直到所有發(fā)出的數(shù)據(jù)被傳輸?shù)酱凇?查看 tcdrain() or FlushFileBuffers() 了解更多信息。

Kind: 實(shí)例方法 <code>SerialPort</code>

參數(shù) 類型 描述
[callback] <code>errorCallback</code> 當(dāng)耗盡操作返回

Example
寫入 data 以及等待直到在調(diào)用回調(diào)之前栅干,結(jié)束對目標(biāo)串口的傳輸蝶柿。

function writeAndDrain (data, callback) {
  sp.write(data, function () {
    sp.drain(callback);
  });
}

<a name="module_serialport--SerialPort+pause"></a>

serialPort.pause() ?

pause()方法會導(dǎo)致一個(gè)流的流動模式停止觸發(fā)'data'事件,切換的流動模式. 任何可用的數(shù)據(jù)將仍然存放在內(nèi)存緩存區(qū)非驮。

Kind: 實(shí)例方法<code>SerialPort</code>
Returns: this
See: module:serialport#resume
Since: 5.0.0

<a name="module_serialport--SerialPort+resume"></a>

serialPort.resume() ?

resume()會導(dǎo)致一個(gè)明確的暫停可讀的流雏赦,來恢復(fù)觸發(fā)的‘data'事件鳖链,切換流到流模式

Kind: 實(shí)例方法 <code>SerialPort</code>
Returns: this
See: module:serialport#pause
Since: 5.0.0

<a name="module_serialport--SerialPort+event_error"></a>

Event: "error"

無論何時(shí)這有一個(gè)錯誤就會回調(diào)error 事件莲组。

Kind: 事件由此觸發(fā) <code>SerialPort</code>

<a name="module_serialport--SerialPort+event_open"></a>

Event: "open"

當(dāng)串口打開以及準(zhǔn)備進(jìn)行寫入時(shí),open 事件將會無參回調(diào)。 如果碰巧如果你有構(gòu)造函數(shù)立即打開或者如果你通過open()手動打開串口绝骚。查看 Useage/Opening a Port 了解更多信息.

Kind: 事件由此觸發(fā) <code>SerialPort</code>

<a name="module_serialport--SerialPort+event_data"></a>

Event: "data"

data 事件輸出字符串到串口在流動模式中. 一旦被接受到,數(shù)據(jù)就會被發(fā)出茂腥。 數(shù)據(jù)將會是一個(gè)緩存對象井联,很多不同的數(shù)據(jù)量在其中.readLine解析器將數(shù)據(jù)轉(zhuǎn)換成字符串.查看 parsers部分了解關(guān)于解析器的更多信息以及 NodeJS stream documentation 了解更多關(guān)于數(shù)據(jù)事件的信息.

Kind: 事件由此觸發(fā) <code>SerialPort</code>

<a name="module_serialport--SerialPort+event_disconnect"></a>

Event: "disconnect"

disconnect 事件回調(diào)會調(diào)用一個(gè)錯誤對象. 這個(gè)經(jīng)常發(fā)生在 close 事件之前如果斷開連接被發(fā)現(xiàn)。

Kind: 事件由此觸發(fā)<code>SerialPort</code>

<a name="module_serialport--SerialPort+event_close"></a>

Event: "close"

close事件是無參回調(diào)當(dāng)串口被關(guān)閉時(shí). 當(dāng)一個(gè)錯誤發(fā)生寥掐,錯誤事件將被觸發(fā)靴寂。

Kind: 事件由此觸發(fā) <code>SerialPort</code>

<a name="module_serialport--SerialPort.Binding"></a>

SerialPort.Binding : <code>BaseBinding</code>

Binding是node Serialport底層的系統(tǒng). 默認(rèn)的我們自動檢測 windows, Linux 和 OSX系統(tǒng) 以及為你系統(tǒng)加載合適的模塊. 你可以指定 SerialPort.Binding 去綁定任何你喜歡的后臺. 你可以搜索更多信息從 npm.
你也可以禁止自動后臺加載,通過一下代碼實(shí)現(xiàn)

var SerialPort = require('serialport/lib/serialport');
SerialPort.Binding = MyBindingClass;

Kind: 靜態(tài)性能<code>SerialPort</code>
Since: 5.0.0

<a name="module_serialport--SerialPort.parsers"></a>

SerialPort.parsers : <code>object</code>

默認(rèn)的分析程序是Transform streams 可以用各種各樣的方式來解析數(shù)據(jù)召耘,可以被使用來處理傳入的數(shù)據(jù)百炬。

使用各種解析程序你都需要創(chuàng)建他們?nèi)缓筝斔蚐erialPort到解析程序。千萬別編寫解析程序污它,而是編寫SerialPort對象剖踊。

Kind: 靜態(tài)特性<code>SerialPort</code>
Since: 5.0.0
Properties

名稱 狀態(tài) 描述
ByteLength <code>Class</code> 發(fā)出數(shù)據(jù)的轉(zhuǎn)換流作為緩存,在收到一個(gè)特定的字節(jié)數(shù)后
Delimiter <code>Class</code> 發(fā)出數(shù)據(jù)的轉(zhuǎn)換流衫贬,每次接受一個(gè)字節(jié)序列
Readline <code>Class</code> 發(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é)長度解析器,你必須提供字節(jié)數(shù)的長度:

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);

<a name="module_serialport--SerialPort.list"></a>

SerialPort.list(callback) : <code>function</code>

從元數(shù)據(jù)中找回可用的串口列表. 只有“串口名”是可用的,所有其他的字段如果它們不可用葬毫,將會無意義澳窑。 串口名 也是一個(gè)路徑或者一個(gè)標(biāo)識符(例如 COM1)用來打開串口.

Kind: 靜態(tài)方法 <code>SerialPort</code>

參數(shù) 類型
callback <code>listCallback</code>

例子

// 示例的串口信息
{
  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);
  });
});

<a name="module_serialport--SerialPort..BaseBinding"></a>

SerialPort~BaseBinding

你永遠(yuǎn)不能直接使用Binding對象斧散,因?yàn)樗鼈兺ㄟ^SerialPort來接觸底層硬件. 這個(gè)文檔是針對綁定不同平臺的用戶.這個(gè)類能被繼承來為每個(gè)方法進(jìn)行類型檢查.

Kind: 內(nèi)部類 <code>SerialPort</code>
Since: 5.0.0
Properties

名稱 類型 描述
isOpen <code>boolean</code> 必須的屬性. 串口打開就是true , 其他的是false.只讀.

<a name="new_module_serialport--SerialPort..BaseBinding_new"></a>

new BaseBinding(options)

Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù),將會拋出TypeError錯誤.
參數(shù) 類型 描述
options <code>object</code>
options.disconnect <code>function</code> 當(dāng)binding被檢測到一個(gè)沒連接的串口摊聋,方法將會被調(diào)用. 這個(gè)方法應(yīng)該在所有操作期間調(diào)用鸡捐,而不是在操作正常回調(diào)后調(diào)用麻裁。SerialPort 將試圖調(diào)用 close在斷開連接后箍镜,以及會忽視所有錯誤.

<a name="module_serialport--SerialPort..BaseBinding+open"></a>

baseBinding.open(path, openOptions) ? <code>Promise</code>

通過路徑打開一個(gè)引用的串口連接

Kind: 實(shí)例方法<code>BaseBinding</code>
Returns: <code>Promise</code> - 在串口打開和配置好后返回解決.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù),將會拋出TypeError錯誤.
參數(shù) 類型
path <code>string</code>
openOptions <code>openOptions</code>

<a name="module_serialport--SerialPort..BaseBinding+close"></a>

baseBinding.close() ? <code>Promise</code>

關(guān)閉一個(gè)串口連接

Kind: 實(shí)例方法 <code>BaseBinding</code>
Returns: <code>Promise</code> - 一旦串口被關(guān)閉返回解決.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù)煎源,將會拋出TypeError錯誤.

<a name="module_serialport--SerialPort..BaseBinding+read"></a>

baseBinding.read(data, length) ? <code>Promise</code>

從SerialPort請求一個(gè)字節(jié)數(shù)色迂。這個(gè)方法和node的 fs.read相似.

Kind: 實(shí)例方法 <code>BaseBinding</code>
Returns: <code>Promise</code> -在閱讀操作結(jié)束之后返回讀取的字節(jié)數(shù).
Throws:

  • <code>TypeError</code>當(dāng)給定一個(gè)無效的參數(shù),將會拋出TypeError錯誤.

Params: <code>integer</code> 偏移 - 在緩存區(qū)偏移處開始寫入.

參數(shù) 類型 描述
data <code>buffer</code> 接受 Buffer 對象
length <code>integer</code> 讀取指定的最大字節(jié)數(shù)

<a name="module_serialport--SerialPort..BaseBinding+write"></a>

baseBinding.write(data) ? <code>Promise</code>

向SerialPort寫入一個(gè)字節(jié)數(shù)手销,這將只能在沒有等待寫入的操作時(shí)被調(diào)用.

Kind: 實(shí)例方法 <code>BaseBinding</code>
Returns: <code>Promise</code> - 在數(shù)據(jù)傳遞給操作系統(tǒng)編寫后返回.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù)歇僧,將會拋出TypeError錯誤.
參數(shù) 類型 描述
data <code>buffer</code> 接受 Buffer 對象.

<a name="module_serialport--SerialPort..BaseBinding+update"></a>

baseBinding.update([options]) ? <code>Promise</code>

改變開啟的串口的連接設(shè)置。當(dāng)前只能設(shè)置波特率锋拖。

Kind: 實(shí)例方法 <code>BaseBinding</code>
Returns: <code>Promise</code> - 當(dāng)串口波特率被改變后返回.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù)诈悍,將會拋出TypeError錯誤.
參數(shù) 類型 描述
[options] <code>object</code> 目前只有波特率支持
[options.baudRate] <code>number</code> 如果通過bingdings提供一個(gè)不支持的波特率,它將回調(diào)一個(gè)錯誤兽埃。

<a name="module_serialport--SerialPort..BaseBinding+set"></a>

baseBinding.set([options]) ? <code>Promise</code>

設(shè)置一個(gè)打開的串口的控制標(biāo)志侥钳。

Kind: 實(shí)例方法<code>BaseBinding</code>
Returns: <code>Promise</code> - 在串口的標(biāo)識被設(shè)置后返回.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù),將會拋出TypeError錯誤.
參數(shù) 類型 默認(rèn) 描述
[options] <code>object</code> 當(dāng)串口被打開時(shí)柄错,所有設(shè)置都是操作系統(tǒng)的默認(rèn)設(shè)置. 每個(gè)標(biāo)識都被設(shè)置成每次調(diào)用時(shí)提供的或者默認(rèn)的數(shù)值舷夺。所有設(shè)置通常都是被提供的.
[options.brk] <code>Boolean</code> <code>false</code>
[options.cts] <code>Boolean</code> <code>false</code>
[options.dsr] <code>Boolean</code> <code>false</code>
[options.dtr] <code>Boolean</code> <code>true</code>
[options.rts] <code>Boolean</code> <code>true</code>

<a name="module_serialport--SerialPort..BaseBinding+get"></a>

baseBinding.get() ? <code>Promise</code>

從打開的串口中獲得控制標(biāo)識(CTS, DSR, DCD).

Kind: 實(shí)例 <code>BaseBinding</code>
Returns: <code>Promise</code> - 當(dāng)標(biāo)識被獲取后返回.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù),將會拋出TypeError錯誤.

<a name="module_serialport--SerialPort..BaseBinding+flush"></a>

baseBinding.flush() ? <code>Promise</code>

接收到的沖洗 (丟棄)的數(shù)據(jù)不會被讀寫也不會傳輸.

Kind: 實(shí)例方法 <code>BaseBinding</code>
Returns: <code>Promise</code> - 當(dāng)沖洗操作結(jié)束后返回.
Throws:

  • <code>TypeError</code> 當(dāng)給定一個(gè)無效的參數(shù)售貌,將會拋出TypeError錯誤.

<a name="module_serialport--SerialPort..BaseBinding+drain"></a>

baseBinding.drain() ? <code>Promise</code>

耗盡等待所有輸出數(shù)據(jù)被傳輸?shù)酱诤?

Kind: instance method of <code>BaseBinding</code>
Returns: <code>Promise</code> - 耗盡操作結(jié)束后調(diào)用.
Throws:

  • <code>TypeError</code>當(dāng)給定一個(gè)無效的參數(shù)给猾,將會拋出TypeError錯誤.

<a name="module_serialport--SerialPort..BaseBinding.list"></a>

BaseBinding.list() ? <code>Promise</code>

從元數(shù)據(jù)中找回可用的串口列表. 只有“串口名”是可用的,所有其他的字段如果它們不可用颂跨,將會無意義耙册。 串口名 也是一個(gè)路徑或者一個(gè)標(biāo)識符(例如 COM1)用來打開串口.

Kind: 實(shí)例方法 <code>BaseBinding</code>
Returns: <code>Promise</code> - 串口列表數(shù)組info objects.

<a name="module_serialport--SerialPort..errorCallback"></a>

SerialPort~errorCallback : <code>function</code>

錯誤或者null的回調(diào)

Kind: 內(nèi)部類型定義 <code>SerialPort</code>

參數(shù) 類型
error <code>error</code>

<a name="module_serialport--SerialPort..modemBitsCallback"></a>

SerialPort~modemBitsCallback : <code>function</code>

控制標(biāo)識(cts, dsr, dcd)一個(gè)錯誤或者對象產(chǎn)生回調(diào).

Kind: 內(nèi)部類型定義 <code>SerialPort</code>

參數(shù) 類型 默認(rèn)
error <code>error</code>
status <code>object</code>
[status.cts] <code>boolean</code> <code>false</code>
[status.dsr] <code>boolean</code> <code>false</code>
[status.dcd] <code>boolean</code> <code>false</code>

<a name="module_serialport--SerialPort..openOptions"></a>

SerialPort~openOptions : <code>Object</code>

Kind: 內(nèi)部類型定義 <code>SerialPort</code>
Properties

名稱 類型 默認(rèn) 描述
Binding <code>module:serialport~Binding</code> 硬件訪問綁定, 綁定是node SreialPort如何和底層系統(tǒng)通信.默認(rèn)的,我們自動判斷Windows (WindowsBinding), Linux (LinuxBinding) 和 OSX (DarwinBinding)系統(tǒng)毫捣,以及加載合適我們系統(tǒng)的模塊.
autoOpen <code>boolean</code> <code>true</code> nextTick自動打開串口
lock <code>boolean</code> <code>true</code> 防止其他進(jìn)程打開串口. 目前不支持Windows系統(tǒng).
baudRate <code>number</code> <code>9600</code> 已經(jīng)打開的串口的波特率. 這個(gè)應(yīng)該匹配一個(gè)常用的波特率详拙,比如 110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200. 這些是不確定的, 設(shè)備連接到串口上將支持請求的波特率,即使串口自己支持那個(gè)波特率蔓同。
dataBits <code>number</code> <code>8</code> 必須是其中之一: 8, 7, 6, or 5.
stopBits <code>number</code> <code>1</code> 必須是其中之一: 1 or 2.
highWaterMark <code>number</code> <code>16384</code> 讀寫緩存區(qū)大小饶辙,默認(rèn)是 16k
parity <code>string</code> <code>"none"</code> 必須是其中之一: 'none', 'even', 'mark', 'odd', 'space'
rtscts <code>boolean</code> <code>false</code> 流控制設(shè)置
xon <code>boolean</code> <code>false</code> 流控制設(shè)置
xoff <code>boolean</code> <code>false</code> 流控制設(shè)置
xany <code>boolean</code> <code>false</code> 流控制設(shè)置
bindingOptions <code>object</code> 設(shè)置特定的綁定選項(xiàng)
bindingOptions.vmin <code>number</code> <code>1</code> 查看man termios LinuxBinding和 DarwinBinding
bindingOptions.vtime <code>number</code> <code>0</code> 查看man termios LinuxBinding 和 DarwinBinding

<a name="module_serialport--SerialPort..listCallback"></a>

SerialPort~listCallback : <code>function</code>

這個(gè)回調(diào)類型叫做 requestCallback,作為一個(gè)全局標(biāo)識展示斑粱。

Kind: 內(nèi)部類型定義 <code>SerialPort</code>

參數(shù) 類型 描述
error <code>error</code>
ports <code>array</code> 串口信息的對象數(shù)組

命令行工具

如果你全局安裝了 serialport. (例如 npm install -g serialport) 你會獲得兩個(gè)命令行工具.

串口列表

serialport-list 將會通過不同的格式列出所有可用的串口.

$ serialport-list -h

  Usage: serialport-list [options]

  List available serial ports

  Options:

    -h, --help           輸出幫助信息
    -V, --version        輸出版本號
    -f, --format <type>  輸出的格式: 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è)串口通信使用弃揽。 通過ctrl+c退出.

$ serialport-term -h

  Usage: serialport-term -p <port> [options]

  A basic terminal interface for communicating over a serial port. Pressing ctrl+c exits.

  Options:

    -h, --help                     輸出幫助信息
    -V, --version                  輸出版本號
    -l --list                      列出可用串口然后退出
    -p, --port, --portname <port>  串口的路徑或者名稱
    -b, --baud <baudrate>          波特率,默認(rèn)是: 9600
    --databits <databits>          數(shù)據(jù)字節(jié) 默認(rèn)是: 8
    --parity <parity>              奇偶性,默認(rèn)是: none
    --stopbits <bits>              停止位矿微,默認(rèn)是: 1
    --echo --localecho             打印類型痕慢,你輸入它們時(shí).

$ serialport-term -l
/dev/cu.Bluetooth-Incoming-Port
/dev/cu.usbmodem1421    Arduino (www.arduino.cc)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涌矢,隨后出現(xiàn)的幾起案子掖举,更是在濱河造成了極大的恐慌,老刑警劉巖娜庇,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塔次,死亡現(xiàn)場離奇詭異,居然都是意外死亡名秀,警方通過查閱死者的電腦和手機(jī)励负,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匕得,“玉大人继榆,你說我怎么就攤上這事≈樱” “怎么了略吨?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長调塌。 經(jīng)常有香客問我,道長惠猿,這世上最難降的妖魔是什么羔砾? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮偶妖,結(jié)果婚禮上姜凄,老公的妹妹穿的比我還像新娘。我一直安慰自己趾访,他們只是感情好态秧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扼鞋,像睡著了一般申鱼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上云头,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天捐友,我揣著相機(jī)與錄音,去河邊找鬼溃槐。 笑死匣砖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猴鲫,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼对人,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拂共?” 一聲冷哼從身側(cè)響起牺弄,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匣缘,沒想到半個(gè)月后猖闪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肌厨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年培慌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柑爸。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吵护,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出表鳍,到底是詐尸還是另有隱情馅而,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布譬圣,位于F島的核電站瓮恭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏厘熟。R本人自食惡果不足惜屯蹦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绳姨。 院中可真熱鬧登澜,春花似錦、人聲如沸飘庄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跪削。三九已至谴仙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碾盐,已是汗流浹背狞甚。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留廓旬,地道東北人哼审。 一個(gè)月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓谐腰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涩盾。 傳聞我的和親對象是個(gè)殘疾皇子十气,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容