2015-08-20 2 views
0

Я пытаюсь разместить локальный сервер (используя Node.js) на малине Pi. У Pi есть подключенный к нему АЦП (MCP3008), и у меня есть сценарий Python, который непрерывно отображает АЦП и печатает текущее значение. Я хочу, чтобы сервер Node запускал скрипт Python, и всякий раз, когда он видит инструкцию печати, просто пока что нужно сделать console.log (текущее значение). Я новичок в Node и веб-разработке в целом, так что это может быть что-то простое, что мне не хватает, так что Node будет непрерывно получать данные из сценария Python. Я пытаюсь использовать Socket.io на данный момент, поскольку это, похоже, имеет смысл, поскольку метод Node позволяет видеть изменения в скрипте Python, но, возможно, это не лучший способ сделать это. Основная веб-страница из учебника, который я нашел (http://www.jaredwolff.com/blog/raspberry-pi-getting-interactive-with-your-server-using-websockets/). Код, который я использую в настоящее время, находится здесь:Raspberry Pi - Node.js запускает скрипт Python для непрерывной выборки ADC

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , url= require('url') 
    , fs = require('fs') 
    , gpio = require('onoff').Gpio 
    , PythonShell = require('python-shell'); 

app.listen(5000); 

function handler (req, res) { 

    var path = url.parse(req.url).pathname; 

    if (path == '/') { 
     index = fs.readFile(__dirname+'/public/index.html', 
      function(error,data) { 

       if (error) { 
        res.writeHead(500); 
        return res.end("Error: unable to load index.html"); 
       } 

       res.writeHead(200,{'Content-Type': 'text/html'}); 
       res.end(data); 
      }); 
    } else if(/\.(js)$/.test(path)) { 
     index = fs.readFile(__dirname+'/public'+path, 
      function(error,data) { 

       if (error) { 
        res.writeHead(500); 
        return res.end("Error: unable to load " + path); 
       } 

       res.writeHead(200,{'Content-Type': 'text/plain'}); 
       res.end(data); 
      }); 
    } else { 
     res.writeHead(404); 
     res.end("Error: 404 - File not found."); 
    } 
} 

// Python 
var pyshell = new PythonShell('mcp3008.py'); 

pyshell.run('mcp3008.py', function (err, results) { 
    if (err) throw err; 
    console.log('Results: %j', results); 
}); 

io.sockets.on('connection', function (socket) { 

    pyshell.on('message', function (message) { 
     console.log(message); 
    }); 
}); 

Благодарим вас за любые подсказки или помощь, которые вы можете предоставить!

+0

Почему бы просто не закодировать доступ ADC в node.js, а не делать этот материал на разных языках? Вероятно, вы можете найти какой-то существующий код. – jfriend00

ответ

1

Как рекомендовал jfriend00, я рассмотрел решения node.js. Я ранее пробовал это, используя несколько пакетов mcp3008, доступных на npm, но ни один из них не был успешно установлен на моей малиновой Pi (модель B). Тем не менее, я закончил переписывать расположенную здесь (https://github.com/fiskeben/mcp3008.js) как отдельный .js-файл, включил его вместе с моим кодом (наряду с некоторой работой из библиотеки npm spi) и поместил его в цикл, чтобы прочитать вывод ADC. Это работает на данный момент и должно быть достаточно хорошим для моих текущих потребностей, но оно по-прежнему выглядит как более процессорное решение, чем должно быть. Спасибо за ваш отзыв!

+0

Спасибо Джастину, ваш сценарий отлично работал и решил серьезную головную боль, что позволило мне выполнить все проверки АЦП и сокет на удаленном сервере в узле. – netpraxis

Смежные вопросы