Socketcan+ Express.js +Node.js получать / отправлять сообщения Can-Bus
Я установил сокет с
npm install socketcan
Ссылка без ошибок на моем Raspberry Pi 2 B. Я могу использовать адаптер Pican с Candump/ Cansend на терминале. Так что это прекрасно работает. Но я не понимаю, как использовать Socketcan. Я хочу использовать can0.
Это помощь от Socketcan:
var can = require('socketcan');
var channel = can.createRawChannel("vcan0", true);
// Log any message
channel.addListener("onMessage", function(msg) { console.log(msg); } );
// Reply any message
channel.addListener("onMessage", channel.send, channel);
channel.start();
Работа с сообщением и сигналами:
var can = require('socketcan');
var fs = require('fs');
// Parse database
var network = can.parseNetworkDescription("samples/can_definition_sample.kcd");
var channel = can.createRawChannel("vcan0");
var db = new can.DatabaseService(channel, network.buses["Motor"]);
channel.start();
// Register a listener to get any value changes
db.messages["CruiseControlStatus"].signals["SpeedKm"].onChange(function(s) {
console.log("SpeedKm " + s.value);
});
// Update tank temperature
db.messages["TankController"].signals["TankTemperature"].update(80);
// Trigger sending this message
db.send("TankController");
Но в каком файле я помещаю эти команды, app.js
, index.html
или же bin/www
файл? Вещи, которые я пробовал, не работали. И как я могу установить скорость передачи / битрейт? Или есть альтернатива, которую я мог бы использовать для входа / отправки некоторых сообщений?
Я только начал с JavaScript / HTML5 / CSS.
3 ответа
Вы можете настроить can0 и установить скорость передачи данных с помощью команды ip.
из командной строки:
ip link set can0 type can bitrate 100000 up
Чтобы сохранить настройки, вы можете настроить свой интерфейс в файле /etc/network/interfaces.
allow-hotplug can0
iface can0 inet manual
pre-up /sbin/ip link set $IFACE type can txqlen 512 bitrate 100000 sample-point 0.75
up /sbin/ifconfig $IFACE up
down /sbin/ifconfig $IFACE down
Полная документация находится здесь: http://elinux.org/Bringing_CAN_interface_up
Несколько вещей: эти команды хотят жить в файле.js
Вы должны установить скорость передачи с помощью ip, что-то вроде: ip link set set can0 type может битрейт 1000000 с тройной выборкой включен
Я нашел этот сайт очень полезным, чтобы заставить интерфейс работать, вам нужно отредактировать файл / etc / networks / interfaces, чтобы он сохранялся http://www.embeddedhobbyist.com/2015/09/linux-can-development/
То, что сначала привело меня на эту страницу, оказалось настолько сложным, что я создал эту учетную запись, чтобы просто вернуться сюда и объяснить: сообщение TankController отсутствует в шине Motor, изучите samples / can_definition_sample.kcd, чтобы понять, что я имею в виду. https://github.com/sebi2k1/node-can
Кроме того, когда я тестировал socketcan с помощью require('socketcan'), он продолжает возвращать undefined, что, по-видимому, нормально.
Удачи ребята
Вы также можете использовать child_process для настройки интерфейса CAN из Node.js:
const exec = require('child_process').execSync;
// ...
function initializeCAN(device, bitrate) {
let result;
// Turn off CAN bus if it is alive
exec('sudo ip link set ' + device + ' down type can');
// Turn on CAN bus
result = exec('sudo ip link set ' + device + ' up type can bitrate ' + bitrate);
if (result.toString()) {
throw Error('CAN bus can\'t be initialized');
}
}
// ...
initializeCAN('can0', 12500);