1
0
Fork 0

Added server and Interface structure

This commit is contained in:
Lukas Bachschwell 2016-03-07 21:14:16 +01:00
parent f4b1da0e1f
commit 76cc6c6d6a
6 changed files with 350 additions and 16 deletions

47
app.js
View File

@ -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("<!DOCTYPE 'html'>");
response.write("<html>");
response.write("<head>");
response.write("<title>Hello World Page</title>");
response.write("</head>");
response.write("<body>");
response.write("Hello World!");
response.write("</body>");
response.write("</html>");
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");
});
*/

173
board.html Normal file
View 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
View 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
View 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
View 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
View 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;