forked from lbsadmin/nodeMessageBoard
		
	Added server and Interface structure
This commit is contained in:
		
							
								
								
									
										47
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								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 debug = false; | ||||||
| var server = http.createServer(function(request, response) { |  | ||||||
|   response.writeHead(200, {"Content-Type": "text/html"}); | var handle = {} | ||||||
|   response.write("<!DOCTYPE 'html'>"); | handle["/"] = requestHandlers.sendInterface; | ||||||
|   response.write("<html>"); | handle["/interface"] = requestHandlers.sendInterface; | ||||||
|   response.write("<head>"); |  | ||||||
|   response.write("<title>Hello World Page</title>"); | server.start(router.route,handle,debug); | ||||||
|   response.write("</head>"); |  | ||||||
|   response.write("<body>"); |  | ||||||
|   response.write("Hello World!"); |  | ||||||
|   response.write("</body>"); |  | ||||||
|   response.write("</html>"); | // old app.js | ||||||
|   response.end(); | /* | ||||||
|  | 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); | app.listen(port, function () { | ||||||
| console.log("Server is listening"); |   console.log('Example app listening on port '+port+'!'); | ||||||
|  | }); | ||||||
|  |  | ||||||
| var serialport = require("serialport"); | var serialport = require("serialport"); | ||||||
| var SerialPort = serialport.SerialPort; | var SerialPort = serialport.SerialPort; | ||||||
| @@ -30,7 +40,12 @@ serialPort.on("open", function () { | |||||||
|   console.log('open'); |   console.log('open'); | ||||||
| serialPort.on("data", function (data) { | serialPort.on("data", function (data) { | ||||||
|   console.log("here: "+data); |   console.log("here: "+data); | ||||||
|  |  | ||||||
|  |   app.get('/', function (req, res) { | ||||||
|  |     res.send(data) | ||||||
|  |   }) | ||||||
| }); | }); | ||||||
|  |  | ||||||
| serialPort.write("AT+CPIN?\r"); | serialPort.write("AT+CPIN?\r"); | ||||||
| }); | }); | ||||||
|  | */ | ||||||
|   | |||||||
							
								
								
									
										173
									
								
								board.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								board.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,173 @@ | |||||||
|  | <!DOCTYPE HTML> | ||||||
|  |  <html> | ||||||
|  |    <head> | ||||||
|  |     <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" /> | ||||||
|  |     <style> | ||||||
|  | 	body { | ||||||
|  | 		margin: 0px; | ||||||
|  | 		padding: 0px; | ||||||
|  |         } | ||||||
|  | 	#rData{ | ||||||
|  | 		float:left; | ||||||
|  | 		margin-left:100px; | ||||||
|  | 		margin-right:auto; | ||||||
|  | 		width:470px; | ||||||
|  | 	} | ||||||
|  | 	#sData{ | ||||||
|  | 		float: left; | ||||||
|  | 		margin-left:100px; | ||||||
|  | 		margin-right:auto; | ||||||
|  | 		width:470px; | ||||||
|  | 	} | ||||||
|  | 	h2{ | ||||||
|  | 		text-align:center; | ||||||
|  | 	} | ||||||
|  |         #myCanvas { | ||||||
|  | 		border: 2px dashed grey; | ||||||
|  |         } | ||||||
|  | 	#btnHolder, #sliderTxt{ | ||||||
|  | 	text-align:center; | ||||||
|  | 	} | ||||||
|  |     </style> | ||||||
|  |         <script src="http://code.jquery.com/jquery-1.8.3.js"></script> | ||||||
|  | 	<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> | ||||||
|  | 	<script src="/socket.io/socket.io.js"></script> | ||||||
|  |     <script> | ||||||
|  | 	// canvas request for all browsers | ||||||
|  | 	window.requestAnimFrame = (function(callback) { | ||||||
|  |         return window.requestAnimationFrame || | ||||||
|  |         window.webkitRequestAnimationFrame || | ||||||
|  |         window.mozRequestAnimationFrame || | ||||||
|  |         window.oRequestAnimationFrame || | ||||||
|  |         window.msRequestAnimationFrame || | ||||||
|  |         function(callback) { | ||||||
|  |           window.setTimeout(callback, 1000 / 30); // 30 frames per second | ||||||
|  | 	  }; | ||||||
|  | 	})(); | ||||||
|  |  | ||||||
|  | 	var iosocket; | ||||||
|  | 	var pollOneH = 0; | ||||||
|  | 	var poll1; | ||||||
|  | 	var text; | ||||||
|  | 	var potValue; | ||||||
|  | 	var prevPotValue; | ||||||
|  | 	//var onOff = false; | ||||||
|  | 	var toggleVal = 0; | ||||||
|  |  | ||||||
|  | 	function animation(poll1,text) | ||||||
|  | 	{ | ||||||
|  | 	  var canvas = document.getElementById("myCanvas"); | ||||||
|  |           var content = canvas.getContext("2d"); | ||||||
|  |  | ||||||
|  | 	  // clear canvas | ||||||
|  | 	  content.clearRect(0, 0, 460, 540); | ||||||
|  |  | ||||||
|  | 	  content.fillStyle = 'black'; | ||||||
|  | 	  content.textAlign = 'center'; | ||||||
|  | 	  content.font = '20pt Calibri'; | ||||||
|  |  | ||||||
|  | 	  // make the wobbely values stop | ||||||
|  | 	  if(pollOneH*2 > prevPotValue+2 || pollOneH*2 < prevPotValue-2){ | ||||||
|  | 		prevPotValue = potValue; | ||||||
|  | 		potValue = pollOneH*2; | ||||||
|  | 	  } | ||||||
|  |  | ||||||
|  | 	  content.fillText('Potmeter value: ' + potValue, text.x, text.y); | ||||||
|  |  | ||||||
|  |           // render graph | ||||||
|  | 	  content.fillStyle = 'orange'; | ||||||
|  | 	  content.fillRect(poll1.x,(poll1.y-poll1.h),poll1.w,poll1.h); | ||||||
|  |  | ||||||
|  | 	  content.fill(); | ||||||
|  |  | ||||||
|  | 	  // request new frame | ||||||
|  | 	  requestAnimFrame(function() { | ||||||
|  |  | ||||||
|  | 	  if(poll1.h < pollOneH){ | ||||||
|  | 		poll1.h += (pollOneH - poll1.h)*.15; | ||||||
|  | 	  } | ||||||
|  | 	  else if(poll1.h > pollOneH){ | ||||||
|  | 		poll1.h -= (poll1.h - pollOneH)*.15; | ||||||
|  | 	  } | ||||||
|  | 	  text.y = (poll1.y - poll1.h) - 5; | ||||||
|  | 	  animation(poll1,text); | ||||||
|  | 	 }); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	function initSocketIO() | ||||||
|  | 	{ | ||||||
|  | 		iosocket = io.connect(); | ||||||
|  | 		iosocket.on('onconnection', function(value) { | ||||||
|  | 		pollOneH = value.pollOneValue/2; // recieve start poll value from server | ||||||
|  | 		initPoll(); | ||||||
|  | 		initButton(); | ||||||
|  | 		initSlider(); | ||||||
|  |  | ||||||
|  | 		// recieve changed values by other client from server | ||||||
|  | 		iosocket.on('updateData', function (recievedData) { | ||||||
|  | 			pollOneH = recievedData.pollOneValue/2; // recieve start poll value from server | ||||||
|  | 		}); | ||||||
|  | 	    }); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	function initPoll() | ||||||
|  | 	{ | ||||||
|  | 	   poll1 = { | ||||||
|  | 		x: 10, | ||||||
|  | 		y: 540, | ||||||
|  | 		w: 440, | ||||||
|  | 		h: 0 | ||||||
|  | 	   } | ||||||
|  | 	   text = { | ||||||
|  | 		x:poll1.w/2, | ||||||
|  | 		y:100 | ||||||
|  | 	   } | ||||||
|  | 	   potValue = pollOneH*2; | ||||||
|  | 	   prevPotValue = potValue; | ||||||
|  | 	   animation(poll1,text); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	function initButton() | ||||||
|  | 	{ | ||||||
|  | 	   $( "#check" ).button(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	function initSlider() | ||||||
|  | 	{ | ||||||
|  | 	     $( "#slider" ).slider({ | ||||||
|  | 	     min:0, | ||||||
|  | 	     max:255, | ||||||
|  | 	     change: function(event,ui) { | ||||||
|  | 	        iosocket.emit('sliderval',ui.value); | ||||||
|  | 	        } | ||||||
|  | 	     }); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	window.onload = function() { | ||||||
|  | 	     initSocketIO(); | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |       $(document).ready(function() { | ||||||
|  |         $('#check').click(function() { | ||||||
|  |             toggleVal += 1; | ||||||
|  | 	    toggleVal %= 2; | ||||||
|  | 	    iosocket.emit('buttonval',toggleVal); | ||||||
|  | 	 }); | ||||||
|  | 	}); | ||||||
|  |     </script> | ||||||
|  |   </head> | ||||||
|  |   <body> | ||||||
|  |    <div id="rData"> | ||||||
|  | 	<h2>Data from Arduino</h2> | ||||||
|  |     <canvas id="myCanvas" width="460" height="540"></canvas> | ||||||
|  |    </div> | ||||||
|  |        <div id="sData"> | ||||||
|  | 	<h2>Data to Arduino</h2> | ||||||
|  | 	<div id="btnHolder"> | ||||||
|  | 	  <input type="checkbox" id="check" value="toggle"/><label for="check">Toggle LED</label> | ||||||
|  | 	</div> | ||||||
|  | 	<p id="sliderTxt">LED Dimmer</p> | ||||||
|  | 	<div id="slider"></div> | ||||||
|  |    </div> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										20
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -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" | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								requestHandlers.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								requestHandlers.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
							
								
								
									
										18
									
								
								route.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								route.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
							
								
								
									
										93
									
								
								server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								server.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
		Reference in New Issue
	
	Block a user