From 76cc6c6d6aee83c1626f556f9a958d3f07ae19aa Mon Sep 17 00:00:00 2001 From: Lukas Bachschwell Date: Mon, 7 Mar 2016 21:14:16 +0100 Subject: [PATCH] Added server and Interface structure --- app.js | 47 +++++++----- board.html | 173 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 20 ++++++ requestHandlers.js | 15 ++++ route.js | 18 +++++ server.js | 93 ++++++++++++++++++++++++ 6 files changed, 350 insertions(+), 16 deletions(-) create mode 100644 board.html create mode 100644 package.json create mode 100644 requestHandlers.js create mode 100644 route.js create mode 100644 server.js diff --git a/app.js b/app.js index 8393fd4..e0073d9 100644 --- a/app.js +++ b/app.js @@ -1,22 +1,32 @@ -console.log("hello world\r"); +var server = require("./server"); +var router = require("./route"); +var requestHandlers = require("./requestHandlers"); -var http = require("http"); -var server = http.createServer(function(request, response) { - response.writeHead(200, {"Content-Type": "text/html"}); - response.write(""); - response.write(""); - response.write(""); - response.write("Hello World Page"); - response.write(""); - response.write(""); - response.write("Hello World!"); - response.write(""); - response.write(""); - response.end(); +var debug = false; + +var handle = {} +handle["/"] = requestHandlers.sendInterface; +handle["/interface"] = requestHandlers.sendInterface; + +server.start(router.route,handle,debug); + + + + +// old app.js +/* +console.log("hello world\r"); +var port = 3000; +var express = require('express') +var app = express() + +app.get('/', function (req, res) { + res.send('Hello World') }); -server.listen(5000); -console.log("Server is listening"); +app.listen(port, function () { + console.log('Example app listening on port '+port+'!'); +}); var serialport = require("serialport"); var SerialPort = serialport.SerialPort; @@ -30,7 +40,12 @@ serialPort.on("open", function () { console.log('open'); serialPort.on("data", function (data) { console.log("here: "+data); + + app.get('/', function (req, res) { + res.send(data) + }) }); serialPort.write("AT+CPIN?\r"); }); +*/ diff --git a/board.html b/board.html new file mode 100644 index 0000000..79e1a4b --- /dev/null +++ b/board.html @@ -0,0 +1,173 @@ + + + + + + + + + + + +
+

Data from Arduino

+ +
+
+

Data to Arduino

+
+ +
+

LED Dimmer

+
+
+ + diff --git a/package.json b/package.json new file mode 100644 index 0000000..cb6a4a8 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "nodemessageboard", + "version": "1.0.0", + "description": "A SMS Messageboard built using node and express", + "main": "app.js", + "dependencies": { + "serialport": "^2.0.6", + "socket.io": "^1.4.5" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "." + }, + "author": "Lukas Bachschwell", + "license": "ISC" +} diff --git a/requestHandlers.js b/requestHandlers.js new file mode 100644 index 0000000..a6cd7fe --- /dev/null +++ b/requestHandlers.js @@ -0,0 +1,15 @@ +// functions that will be executed when +// typeoff handle[pathname] === a function in requestHandlers. +// the handle and function are discribed in index.js + +var fs = require('fs'), +server = require('./server'); + +function sendInterface(response) { + console.log("Request handler 'interface' was called."); + response.writeHead(200, {"Content-Type": "text/html"}); + var html = fs.readFileSync(__dirname + "board.html") + response.end(html); +} + +exports.sendInterface = sendInterface; diff --git a/route.js b/route.js new file mode 100644 index 0000000..fd97cfc --- /dev/null +++ b/route.js @@ -0,0 +1,18 @@ +function route(handle, pathname,response,request,debug) { + console.log("About to route a request for " + pathname); + //typeof probes the data type of handle[pathname]. So if + //handle[pathname] is a function (in both type and value) + //,then run that function. + if (typeof handle[pathname] === 'function') { + return handle[pathname](response,request); + } else { + if(debug == true){ + console.log("No request handler found for " + pathname); + } + response.writeHead(404, {"Content-Type": "text/plain"}); + response.write("404 Not found"); + response.end(); + } +} + +exports.route = route; diff --git a/server.js b/server.js new file mode 100644 index 0000000..03163dd --- /dev/null +++ b/server.js @@ -0,0 +1,93 @@ +var fs = require('fs'), +http = require('http'), +socketio = require('socket.io'), +url = require("url"), +serialport = require("serialport"); + +var SerialPort = serialport.SerialPort; + +var socketServer; +var serialPort; +var portName = '/dev/tty.usbmodemFD121'; //change this to your Arduino port +var sendData = ""; + +// handle contains locations to browse to (vote and poll); pathnames. +function startServer(route,handle,debug) +{ + // on request event + function onRequest(request, response) { + // parse the requested url into pathname. pathname will be compared + // in route.js to handle (var content), if it matches the a page will + // come up. Otherwise a 404 will be given. + var pathname = url.parse(request.url).pathname; + console.log("Request for " + pathname + " received"); + var content = route(handle,pathname,response,request,debug); + } + + var httpServer = http.createServer(onRequest).listen(1337, function(){ + console.log("Listening at: http://localhost:1337"); + console.log("Server is up"); + }); + serialListener(debug); + initSocketIO(httpServer,debug); +} + +function initSocketIO(httpServer,debug) +{ + socketServer = socketio.listen(httpServer); + if(debug == false){ + socketServer.set('log level', 1); // socket IO debug off + } + socketServer.on('connection', function (socket) { + console.log("user connected"); + socket.emit('onconnection', {pollOneValue:sendData}); + socketServer.on('update', function(data) { + socket.emit('updateData',{pollOneValue:data}); + }); + socket.on('buttonval', function(data) { + serialPort.write('AT\r'); + console.log('sending:..'); + }); + socket.on('sliderval', function(data) { + serialPort.write(data + 'P'); + }); + + }); +} + +// Listen to serial port +function serialListener(debug) +{ + var receivedData = ""; + serialPort = new SerialPort(portName, { + baudrate: 19200, + parser: serialport.parsers.readline("\n") + }); + + serialPort.on("open", function () { + console.log('opened serial communication'); + + // Listens to incoming data + serialPort.on('data', function(data) { + //receivedData += data.toString(); + //if (receivedData .indexOf('E') >= 0 && receivedData .indexOf('B') >= 0) { + sendData = '50'; //.substring(receivedData .indexOf('B') + 1, receivedData .indexOf('E')); + receivedData = ''; + console.log('server event happening..' + data + '.\r'); + //} + // send the incoming data to browser with websockets. + socketServer.emit('update', sendData); + }); + //setTimeout(sendPin,500); + serialPort.write('AT+CPIN=3797\r'); + console.log("Sent Pincode..."); + }); +} + +function sendPin(){ +serialPort.write('AT+CPIN=3797\r'); +console.log("Sent Pincode..."); +} + + +exports.start = startServer;