Node.js: Difference between revisions
| Line 364: | Line 364: | ||
===Simple Arduino Test=== |
===Simple Arduino Test=== |
||
Placez la patte du milieu d'un potentiomètre sur la pin analogique A0 (les pattes des bords sur GND et +5V). |
|||
Téléversez le sketch suivant sur votre [[Arduino]]. |
|||
| Line 439: | Line 441: | ||
<pre> |
<pre> |
||
npm install serialport |
npm install serialport |
||
node arduino-ldr-read.js /dev/ |
node arduino-ldr-read.js /dev/tty.usbmodemfa131 |
||
</pre> |
</pre> |
||
===Arduino avec [[Firmata]]=== |
===Arduino avec [[Firmata]]=== |
||
Revision as of 20:29, 4 March 2013
Description
Node.js est un canevas événementiel pour réaliser des applications serveur en Javascript. L'ensemble des événements est traité par une seule thread: Node.js privilégie les appels non bloquants. Node.js facilite le push (serveur --> client Web)
Cours
- Formation Valtech : http://public.valtech-training.fr/DekNOD/slideshow/dist/#1
API
Des nombreuses bibliothèques sont disponibles : Assertion Testing, Buffer, C/C++ Addons, Child Processes, Cluster, Crypto, Debugger, DNS, Domain, Events, File System, Globals, HTTP, HTTPS, Modules, Net, OS, Path, Process, Punycode, Query Strings, Readline, REPL, STDIO, Stream, String Decoder, Timers, TLS/SSL, TTY, UDP/Datagram, URL, Utilities, VM, ZLIB
Canevas
Des nombreux canevas sont construits sur Node.js
- ql.io
- https://npmjs.org/package/jade templates HTML (voir http://cssdeck.com/labs/learning-the-jade-templating-engine-syntax)
- http://backbonejs.org
- http://underscorejs.org
- ...
Registre
Plusieurs modules sont catalogués depuis le registre https://npmjs.org/ et installables avec npm (Node Package Manager)
# Voir les packages disponibles npm ls # Voir les packages installés npm ls installed # Rechercher un package npm search duino # Installer un package pour le contrôle d'une carte Arduino npm install duino # Installer un package npm publish mypackage
Modules pour les projets AIR
- node-serialport access serial ports for reading and writing
- duino A framework for working with Arduinos in node.js
- firmata A Node library to interact with an Arduino running the firmata protocol.
Déploiement sur PaaS
Exemples
Lancement
Aide
node --help
Interactif
node
En ligne
node -p -e "Boolean(process.stdout.isTTY)"
En argument (process.argv[1])
node httpserver.js 8080
HTTP script
var port = process.argv[2];
var http = require("http");
function onRequest(request, response) {
console.log("Receiving a request");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(port);
console.log("Server started. ^C to kill it");
node hello.js 8888
Express
var express = require('express');
var app = express();
app.get('/hello.txt', function(req, res){
res.send('Hello World');
});
app.listen(3000);
node install express node express.js 3000
start http://localhost:3000/hello.txt
UDP Datagrams
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
console.log("server got: " + msg + " from " +
rinfo.address + ":" + rinfo.port);
});
server.on("listening", function () {
var address = server.address();
console.log("server listening " +
address.address + ":" + address.port);
});
server.bind(41234);
// server listening 0.0.0.0:41234
node dgram.js
Crypto: SHA1 Hashing
var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');
var shasum = crypto.createHash('sha1');
var s = fs.ReadStream(filename);
s.on('data', function(d) {
shasum.update(d);
});
s.on('end', function() {
var d = shasum.digest('hex');
console.log(d + ' ' + filename);
});
node hash.js hash.js
TTY
process.stdout.on('resize', function() {
console.log('screen size has changed!');
console.log(process.stdout.columns + 'x' + process.stdout.rows);
});
node resize.js
$ node -p -e "Boolean(process.stdout.isTTY)" true $ node -p -e "Boolean(process.stdout.isTTY)" | cat false
REPL (Read-Eval-Print-Loop)
var net = require("net"),
repl = require("repl");
connections = 0;
repl.start({
prompt: "node via stdin> ",
input: process.stdin,
output: process.stdout
});
net.createServer(function (socket) {
connections += 1;
repl.start({
prompt: "node via TCP socket> ",
input: socket,
output: socket
}).on('exit', function() {
connections -= 1;
socket.end();
});
}).listen(5001);
node repl.js 1+2+3+4+5
telnet localhost 5001 1+2+3+4+5 .help .exit
Cluster
var port = process.argv[2];
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(port);
}
node httpcluster.js 8080
Serial GPS
var SerialPort = require("serialport").SerialPort;
var util = require("util"), repl = require("repl");
var port = process.argv[2];
var baudrate = process.argv[3];
if (!port) {
console.log("You must specify a serial port location of your NMEA GPS receiver.");
} else {
if (!baudrate) {
baudrate = 4800;
}
var serial_port = new SerialPort(port, {baudrate: baudrate});
serial_port.on("data", function (data) {
util.puts("data: "+data);
})
serial_port.on("error", function (msg) {
util.puts("error: "+msg);
})
repl.start("=>")
//serial_port.close();
}
npm install serialport node serialgps.js
NMEA 0183 Parsing
var nmea = require('nmea')
var s = [
"$GPGSA,A,1,,,,,,,,,,,,,,,*1E",
"$GPGSV,3,1,12,29,75,266,39,05,48,047,,26,43,108,,15,35,157,*78",
"$GPGSV,3,2,12,21,30,292,,18,21,234,,02,18,093,,25,13,215,*7F",
"$GPGSV,3,3,12,30,11,308,,16,,333,,12,,191,,07,-4,033,*62",
"$GPRMC,085542.023,V,,,,,,,041211,,,N*45",
"$GPGGA,085543.023,,,,,0,00,,,M,0.0,M,,0000*58",
];
for (var i=0; i < s.length; i++) {
console.log(nmea.parse(s[i]));
};
npm install testnmea node testnmea.js
see also https://npmjs.org/package/coordinator
Simple Arduino Test
Placez la patte du milieu d'un potentiomètre sur la pin analogique A0 (les pattes des bords sur GND et +5V). Téléversez le sketch suivant sur votre Arduino.
// arduino-ldr-read.ino from https://github.com/voodootikigod/node-serialport/blob/master/tests/arduino-ldr-read.pde
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
delay(sensorValue);
}
// From https://github.com/voodootikigod/node-serialport/blob/master/tests/arduino-ldr-read.js
// For use with Arduino LDR
// Upload arduino-ldr-read.ino to Arduino apparatus via Arduino IDE
var port = process.argv[2];
var sys = require("sys"),
repl = require("repl"),
serialPort = require("serialport").SerialPort,
// Required
defaults = {
baudrate: 9600
},
// Create new serialport pointer
serial = new serialPort(port , defaults);
// Add data read event listener
serial.on( "data", function( data ) {
var output;
// Coerce data into a number
data = +data;
// If data is worth reading and processing
if ( data && data > 1 ) {
// Create a new Array() whose length equals data
// then join to create output visualization
output = ( new Array(data) ).join( ">" );
// Print the data value along with visualization of data
sys.puts( data + " " + output );
}
});
serial.on( "error", function( msg ) {
sys.puts("error: " + msg );
});
repl.start( "=>" );
npm install serialport node arduino-ldr-read.js /dev/tty.usbmodemfa131
Arduino avec Firmata
Placez la patte du milieu d'un potentiomètre sur la pin analogique A0 (les pattes des bords sur GND et +5V). Téléversez l'exemple Examples > Firmata > StandardFirmata sur votre Arduino
// testfirmata.js <port>
var port = process.argv[2];
var firmata = require('firmata');
var board = new firmata.Board(port,function(){
//arduino is ready to communicate
board.analogRead(0,function(data){
console.log(data);
})
});
npm install firmata node testfirmata.js /dev/tty.usbmodemfa131
Voir https://github.com/jgautier/firmata
NFC RFID Readers
See:
var HID = require('node-hid');
console.log(HID.devices());
npm install node-hid node listhid.js