Я пытаюсь заставить Intel Galileo запускать Node.js и serialPort.js для сбора данных, отправляемых с пусковой площадки MSP430 (плата на базе Arduino) , Когда я запускаю код на Galileo, сообщение «Port Open» печатается, поэтому я знаю, что состояние «open» было достигнуто в serialPort, но оно просто никогда не будет использовать функцию данных.Node.js cant просмотреть любые данные из последовательного порта Подключен к MSP430 Launch Pad
Вот код сервера без функции:
var express = require('express');
var app = express();
var io = require('socket.io').listen(app.listen(4000));
var com = require("serialport");
app.get('/', function(request, response){response.sendfile(__dirname + "/home.html");});
app.use('/static', express.static(__dirname + '/public'));
var activeClients = 0;
io.sockets.on('connection', function(socket){clientConnect(socket);});
var serialPort = new com.SerialPort("/dev/ttyS0", {
baudRate: 9600,
dataBits: 8,
parity: 'none',
stopBits: 1,
flowControl: false,
parser: com.parsers.readline("\n")
});
serialPort.on('open',function() {
console.log('Port open ');
console.log(process.argv[0] + " " + " " + process.argv[1]);
serialPort.on('data', function(data) {
console.log("Data recieved: ");
console.log(data.toString());
io.sockets.emit('heartUpdate', {heartcrc:data});
emitHeartRate(data);
});
serialPort.on('close', function() {
console.log('Port close');
});
serialPort.on('error', function() {
console.log('Error');
});
});
Вот скрипт установки запуска на Galileo перед запуском кода сервера, чтобы настроить порты на Galileo:
#!/bin/bash
# Initialize sysfs to use the uart on pins 0 and 1 as /dev/ttyS0:
echo -n "4" > /sys/class/gpio/export
echo -n "40" > /sys/class/gpio/export
echo -n "41" > /sys/class/gpio/export
echo -n "out" > /sys/class/gpio/gpio4/direction
echo -n "out" > /sys/class/gpio/gpio40/direction
echo -n "out" > /sys/class/gpio/gpio41/direction
echo -n "strong" > /sys/class/gpio/gpio40/drive
echo -n "strong" > /sys/class/gpio/gpio41/drive
echo -n "1" > /sys/class/gpio/gpio4/value
echo -n "0" > /sys/class/gpio/gpio40/value
echo -n "0" > /sys/class/gpio/gpio41/value
stty -F /dev/ttyS0 raw
stty -F /dev/ttyS0 9600
Ниже приведен код на MSP430, который устанавливает и передает данные:
//UART configuration settings
UCA0CTL1 &= UCSWRST; //Reset UART control register
UCA0CTL1 = UCSSEL_2 + UCMSB; //UART timer input MCLK, enable MSB sent first
//Defaults: Parity disabled, 8 bit data, one stop bit, UART mode, asyncronous
UCA0BR0 = 0x68; //1MHz 9600 baud
UCA0BR1 = 0x00; //1MHz 9600 baud
UCA0MCTL = UCBRS0; //Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; //Enable the USCI peripheral (take it out of reset)
пара функций, которые используются для передачи данных:
void uartCHAR(int txChar)
{
while (!(IFG2 & UCA0TXIFG)); //Wait for the transmit buffer to be ready
UCA0TXBUF = (char)txChar; //Put integer value in to UART transmit buffer in character format
}
void uartTransmit(int tx)
{
P1OUT |= REDLED; //Turn on Red LED
unsigned int byteSelect = 0xFF00; //Declare value used to isolate each byte
unsigned int byteHold = 0; //Declare varible to hold isolated byte
unsigned char sendByte = 0; //Declare a variable to hold the byte to be transmitted
int k; //Declare a variable to be used in the for loop
for (k = 1; k>=0 ; k--) //Cycle through the code twice
{
byteHold = byteSelect&tx; //Isoltate each section of 8 bits in the and store in byteHold
byteHold >>= (8*(k)); //Shift the data down to the lowest byte position
sendByte = byteHold;
uartCHAR(sendByte); //Pass sendByte in to the uartCHAR function
byteHold = 0;
byteSelect>>=8; //Shift the byte selector to the next section of 8 bits
}
P1OUT &= ~REDLED; //Turn off Red LED
uartCHAR('\n'); //Send symbol to indicate to the parser that the end of the message has arrived
}
Если кто-то может указать на то, если я делаю что-то неправильно, я очень ценю это. Я не получаю никакого вывода на экран, когда он работает. Я знаю, что если бы у меня были несоответствия скорости бод, то я получал бы странный результат, но нет никакого выхода, поэтому я не могу его изучить и исправить.
Вы видите что-нибудь на линии TXD с помощью осциллографа или логического анализатора? –
@CL Да, поток бит, который выходит, соответствует байтам, которые я отправляю. Я сделал тест, где я отправил известный номер, и он вышел в двоичном формате. Я чувствую, что проблема заключается в том, что я не отправляю биты в правильном формате из MSP или что код serialPort не настроен должным образом, чтобы поднять его. – Skywatermelon
@CL Возможно ли, что простое размещение байтов в буфере передачи не означает, что отправляются биты начала и окончания? – Skywatermelon