Установить/обновить
1. Подключите устройство CAN к контактам H и L платы контроллера.
2. Открываем конфигурационный файл:
sudo nano /boot/config.txt
3. Затем добавляем в него следующие строчки:
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25,spimaxfrequency=1000000
4. Устанавливаем пакет can-utils:
sudo apt install can-utils
5. Сохраняем изменения комбинацией Ctrl+O, выходим из файла Ctrl+X, затем перезагружаем устройство:
sudo reboot
Запуск и остановка CAN
1. Запуск шины:
sudo ip link set can0 up type can bitrate 500000
где 500000 — величина битрейда
2. После запуска шины вбиваем команду:
ifconfig can0
3. Если интерфейс работает корректно, то должен поступить примерно такой ответ:
can0: flags=193<UP,RUNNING,NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 18476 bytes 147808 (144.3 KiB)
RX errors 0 dropped 28 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4. Остановка шины:
sudo ip link set can0 down
Прослушивание шины
1. Для прослушивания сигналов, передаваемых по шине, вбейте следующую команду:
candump can0
В ответ должны поступить примерно такие сообщения:
can0 0000100F [8] 00 A5 00 00 00 00 00 00
can0 0000100F [8] 00 A5 00 00 00 00 00 00
can0 0000100F [8] 00 A5 00 00 00 00 00 00
can0 0000100F [8] 00 A5 00 00 00 00 00 00
Пример отправки команды
1. Пример команды:
cansend can0 00001010#00A5000000000000
Автозапуск при загрузке
1. Открываем конфигурационный файл:
sudo nano /etc/network/interfaces
2. Затем добавляем в него следующие строчки:
allow-hotplug can0
iface can0 can static
bitrate 250000
up /sbin/ip link set $IFACE down
up /sbin/ip link set $IFACE up txqueuelen 1000 type can bitrate 250000 sample-point 0.7 triple-sampling off restart-ms 500
Связка с NodeRed
1. Если NodeRed у вас не установлен, то перейдите по этой ссылке.
2. Для установки node-red-contrib-canbus скачайте доработанную версию по этой ссылке. Оригинал версии взят с сайта GitHub.
3. Распакуйте скачанный архив в директорию Linux.
4. Установите архив на устройство:
cd ~/.node-red
npm i путь_к_директории/node-red-contrib-canbus
rm -rf node_modules
npm i
5. Сохраняем изменения комбинацией Ctrl+O, выходим из файла Ctrl+X, затем перезагружаем устройство:
sudo reboot
Тестовый поток NodeRed
Импортируйте тестовый проект в NodeRed:
[{"id":"73a93f72.2489","type":"canconfig","z":0,"channel":"vcan0","bitrate":"100000"},{"id":"6e1ca89c.d417b","type":"cansend","z":"21e7592e.177786","config":"73a93f72.2489","canid":"","payload":"","x":570,"y":204,"wires":[]},{"id":"fa2cf7a7.55afe","type":"candump","z":"21e7592e.177786","name":"candump","vconfig":"73a93f72.2489","x":138,"y":104,"wires":[["f2631912.a5ca18"]]},{"id":"233b31e6.9f3d26","type":"inject","z":"21e7592e.177786","name":"","topic":"","payload":"200#abxy","payloadType":"string","repeat":"","crontab":"","once":false,"x":155,"y":203,"wires":[["7dc36d2.f427d14","fc78a840.c0006"]]},{"id":"f2631912.a5ca18","type":"debug","z":"21e7592e.177786","name":"","active":true,"console":"false","complete":"true","x":521,"y":108,"wires":[]},{"id":"3c5d3978.ef7fbe","type":"inject","z":"21e7592e.177786","name":"","topic":"","payload":"abcd","payloadType":"string","repeat":"","crontab":"","once":false,"x":149,"y":381,"wires":[["935e9142.7c2f9"]]},{"id":"935e9142.7c2f9","type":"function","z":"21e7592e.177786","name":"","func":"var msg;\nmsg.canid=129;\nreturn msg;","outputs":1,"noerr":0,"x":324,"y":384,"wires":[["7dc36d2.f427d14"]]},{"id":"1eb03187.f054de","type":"inject","z":"21e7592e.177786","name":"blank","topic":"","payload":"","payloadType":"none","repeat":"","crontab":"","once":false,"x":151,"y":288,"wires":[[]]},{"id":"7dc36d2.f427d14","type":"cansend","z":"21e7592e.177786","config":"73a93f72.2489","canid":"130","payload":"","x":575,"y":345,"wires":[]},{"id":"73fe1cf1.7d1bbc","type":"cansend","z":"21e7592e.177786","config":"73a93f72.2489","canid":"","payload":"hello","x":578,"y":274,"wires":[]},{"id":"fc78a840.c0006","type":"cansend","z":"21e7592e.177786","config":"73a93f72.2489","canid":"130","payload":"hello","x":581,"y":404,"wires":[]}]