Интернет-магазин «Неглупый Дом»
В другом проекте два одинаковых модуля MCP2515 обмениваются данными. Здесь — особенность CAN на практике: на одной шине CAN-H/CAN-L могут работать узлы на РАЗНЫХ чипах с разным интерфейсом к Arduino — один через SPI (MCP2515), другой через I2C (TJA1050-I2C).
CAN — стандарт физического и канального уровня: любой согласованный по электрическим параметрам узел участвует в шине независимо от внутреннего интерфейса (SPI/I2C) хост-контроллера. MCP2515 общается по SPI, как и в проекте с двумя одинаковыми узлами. Модуль TJA1050-I2C устроен иначе — I2C-интерфейс к CAN-контроллеру менее стандартизирован, точные имена функций уточняйте по документации вашей платы.
Логика кадра (идентификатор, приоритет, целостность) одинакова для обоих узлов — именно поэтому они могут обмениваться данными несмотря на разные внутренние интерфейсы.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.
#include <SPI.h>
#include <mcp_can.h>
MCP_CAN CAN(10);
void setup() {
Serial.begin(9600);
while (CAN.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) delay(500);
CAN.setMode(MCP_NORMAL);
}
void loop() {
byte data[1] = {42};
CAN.sendMsgBuf(0x100, 0, 1, data);
delay(1000);
}
// ВНИМАНИЕ: точные имена функций для вашего TJA1050-I2C модуля могут
// отличаться — менее стандартизированный интерфейс, чем MCP2515.
// Ниже ОБЩАЯ логика, не гарантированно точный API.
#include <Wire.h>
// #include <ваша_библиотека_TJA1050_I2C.h>
void setup() {
Serial.begin(9600);
Wire.begin();
// инициализация по документации конкретной платы
}
void loop() {
// псевдокод — замените на реальные вызовы библиотеки:
// if (canMessageAvailable()) { ... }
delay(100);
}
Библиотека mcp_can для MCP2515 — реальная и документированная. Для TJA1050-I2C используйте библиотеку из комплекта вашей платы — единого стандарта для таких мостов нет.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу: 223 ₽ 201 ₽ (экономия 22 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.