NodeJS & 3D Printer
Por que NodeJS ?
Node.js es un entorno JavaScript de lado de servidor que utiliza un modelo asíncrono y dirigido por eventos. :
-El lenguaje es el mismo para el servidor y cliente.
-Existe una cantidad enorme de módulos fáciles de instalar y usar
(npm).
-Esta pensado para trabajar en tiempo real.
-Permite realizar llamadas asincrónicas de forma sencilla.
Que queremos que haga nuestra
aplicación ?
Implementación en NodeJS
Tecnología a utilizar
Html5
Css
Js
NodeJS
ThreeJS
JQuery
ExampleDescriptionParamsCmd
G0 X50Rapid MovementAxis [X/Y/Z] Position G0
G1 F150
X10
Controlled MovementAxis [X/Y/Z/E] Position
Feed [F]G1
G28 X YHome<Axis [X/Y/Z]>G28
G90Absolute PositioningnoneG90
G91Relative PositioningnoneG91
M104
S100
Set extruder
temperature
Temperature[S]M104
M17Enable all stepper
motors
noneM17
M18Disable all stepper
motors
noneM18
M140
S55
Set heated bed
temperature to S
Degrees[S]M140
M105Get extruder
Temperature
noneM105
Gcode
Gcode
Ejemplo del cálculo del cheksum con el número de línea correspondiente:
function checksum(cmd){
cs=0;for(var i = 0; i < cmd.length; i++){
cs=cs^cmd.charCodeAt(i);}return cs;
}
cs=checksum("N1 G1 X104.238 Y203.924 E3.9304");
N1 G1 X104.238 Y203.924 E3.9304*cs
N1 G1 X104.238 Y203.924 E3.9304*92
Modulos NodeJS
npm
Para facilitar la compilación, la instalación, la actualización y la
gestión de las dependencias de los módulos de Node.js se usa el
gestor de paquetes Node Package Manager (npm).
Ejemplo: npm install socket.io
https://www.npmjs.org/
Módulos
SerialPort
Socket.io
ExpressJS (Framework web)
FileSystem
SerialPort
Métodos:
SerialPort (path, options, openImmediately, callback)
.open (callback)
.write (buffer, callback)
.close (callback)
Eventos:
.on('open', callback)
.on('data', callback)
.on('close', callback)
.on('error', callback)
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/tty-usbserial1", {
baudrate: 57600
}, true); // this is the openImmediately flag [default is true]
serialPort.open(function () {
console.log('open');
serialPort.on('data', function(data) {
console.log('data received: ' + data);
});
serialPort.write("ls\n", function(err, results) { console.log('err ' + err);
console.log('results ' + results);
});
});
https://github.com/voodootikigod/node-serialport
Socket.io
Socket designa un concepto abstracto por el cual dos programas
(posiblemente situados en computadoras distintas) pueden
intercambiar cualquier flujo de datos, generalmente de manera
fiable y ordenada. (Wikipedia)
http://socket.io
Server (app.js)
var app = require('express').createServer();
var io = require('socket.io')(app);
app.listen(80);
app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket)
{
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) { console.log(data); });
});
Client (index.html)
<script>
var chat = io.connect('http://localhost/chat') ,
news = io.connect('http://localhost/news');
chat.on('connect', function () { chat.emit('hi!');
});
news.on('news', function () { news.emit('woot');
});
</script>
Socket.io & SerialportServer (app.js)
this.io.sockets.on("connection", function (socket) {
socket.on("connected", function (msg) {
serialport.open();
});
socket.on("disconnect", function (msg) {
serialport.close();
});
socket.on("home", function(data) {
data=cmd.customCmd("G28");
serialport.write(data,function(err, results){
console.log(err);
});
});
});
Client (index.html)
var socket = io.connect('http://localhost');
socket.on('connected', function (data) {
console.log(data);
});
$("# connected ").click(function(){
socket.emit(" connected ")
});
$("#home").click(function(){
socket.emit('home');
});
$("# disconnect ").click(function(){
socket.emit(disconnect ');
});
Top Related