Подключение CAN модуля MCP2515 к ESP32

Введение

Необходимые детали

Компонент Количество Купить
1 Отладочная плата ESP32 2 шт Авито | AliExpress | RobotChip
2 Модуль контроллера шины CAN на MCP2515 2 шт Авито | AliExpress | RobotChip
3 Датчик DS18B20 в металлической гильзе 1 шт Авито | AliExpress | RobotChip
4 Провод DuPont 18 шт Авито | AliExpress | RobotChip
6 OLED-дисплей 1 шт Авито | AliExpress | RobotChip
6 Резистор 4.7 кОм 1 шт Авито | AliExpress | RobotChip

Описание

В этой статье мы будем работать в среде Arduino IDE. Поддержку плат ESP32 легко добавить через встроенный Boards Manager (подробную инструкцию я давал в прошлой публикации).

Шина CAN — это надежный стандарт связи, который чаще всего применяется в автомобилях и промышленности. Главное ее преимущество перед привычными протоколами (UART, SPI, I2C) заключается в стабильной работе на больших расстояниях. Если стандартные интерфейсы начинают терять данные уже через несколько метров кабеля, то CAN сохраняет работоспособность линий длиной до километра. Скорость передачи составляет от 50 Кбит/с до 1 Мбит/с; чем она выше, тем короче может быть шина (от 1000 м при 50 Кбит/с до 40 м при 1 Мбит/с).

Сегодня соберем практическую схему обмена данными по шине CAN. Мы возьмем две платы ESP32 с модулями MCP2515: первая ESP32 будет считывать показания температуры с датчика DS18B20 и транслировать их в сеть, а вторая — принимать сигнал и выводить значения на небольшой экран OLED. Посмотрим, как подружить эти компоненты между собой.

Подключение

Давайте перейдем от теории к практике и соберем схему для теста протокола CAN. Наша задача — подключить модуль MCP2515 к ESP32 через интерфейс SPI и настроить отправку температуры с датчика DS18B20. Подключение компонентов не представляет сложности. Схема соединения ESP32 и модуля MCP2515 одинакова как для передатчика, так и для приёмника:

  • Питание: VCC и GND подключаются к выводам 5V и GND на плате ESP32.
  • Шина SPI: выводы CS, SO (MISO), SI (MOSI) и SCK подключаются к пинам GPIO 5, 19, 23 и 18 соответственно.

На стороне передатчика дополнительно подключается датчик DS18B20:

  • Питание VCC и GND датчика подключаются к контактам 3.3V и GND.
  • Сигнальный вывод (DATA) подключается к пину GPIO 21.
  • Также необходимо установить подтягивающий резистор номиналом 4,7 кОм между линией DATA и питанием 3.3V.

На стороне приёмника остаётся подключить OLED-дисплей по шине I²C:

  • Выводы питания VCC и GND дисплея подключаются к контактам 3.3V и GND.
  • Сигнальные выводы шины I²C SCL и SDA OLED дисплея подключаем к пинам GPIO 22, а SDA к GPIO 21.

Для работы необходимо установить перемычку на одной из моделей MCP2515 (на разъеме J1). Так же, распивнока модулей ESP32 разная, учитывайте при подключении.

Установка библиотек

Для работы, будем использовать библиотеку «DallasTemperature», «MCP2515», «Adafruit_SSD1306» и «OneWireNg» скачать можно используя интегрированную среду разработки Arduino IDE», для этого откройте «Скетч → Подключение библиотеки → Менеджер библиотек…», так же выложу библиотеки в конце статьи.

В строке поиска введите «DallasTemperature» и нажмите «Установить »

Далее, установим следующую библиотеку, в строке поиска введите «MCP2515», найдите библиотеку «ACAN2515 от Pierre Molinaro» и нажмите «Установить »

Далее, установим следующую библиотеку, в строке поиска введите «Adafruit_SSD1306», найдите библиотеку «Adafruit SSD1306 от Adafruit » и нажмите «Установить »

Для работы библиотеки необходимо установить зависимые библиотеки, нажимаем «Установить все»

Так как библиотека «OneWire» на написание статьи не работала с ESP32 (03.09.2026), нужно установить дополнительную библиотеку «OneWireNg», найдите библиотеку и нажмите «Установить».

Программа для передатчика

Ниже приведён исходный код передатчика, загрузите скетч в плату ESP32.

Программа для приемника

Ниже приведён исходный код приемника, загрузите скетч в плату ESP32.

Если все правильно сделали при открытия мониторинга порта увидим отправка и получения команд.

Описание программы передатчика

В начале программы подключаем библиотеки и объявление объектов

Далее настраиваем датчик DS18B20, указываем вывод GPIO21, создаем объект управления шиной OneWire и передает его библиотеке DallasTemperature.

Указываем библиотеке, что вывод CS модуля MCP2515 подключен к пину GPIO5.

В функции setup() запускается последовательный порт на скорости 115200 бод, инициализируется шина SPI и настраивается модуль MCP2515 (сброс, установка скорости 500 кбит/с для кварца 8 МГц и перевод в режим Normal Mode), после чего производится инициализация датчиков OneWire.

В функции loop() запускается преобразование температуры на всех датчиках OneWire, считывается значение первого устройства (индекс 0) в градусах Цельсия ( float), после чего число умножается на 100 и приводится к целому типу для передачи по CAN-шине/

CAN формируется с идентификатором 0x036, длиной данных (DLC) 2 байта, где в массив data упаковывается целое число через старший ( highByte) и младший ( lowByte) байты.

Отправляем данные с паузой 1000 мкс

Описание программы приемника

Первым делом подключаем библиотеки для работы с модулем CAN и работы с OLED дисплеем.

Указываем разрешение экрана и создает объект.

Указываем библиотеке, что вывод CS модуля MCP2515 подключен к пину GPIO5.

В функции setup() запускается последовательный порт на скорости 115200 бод, инициализируется шина SPI и настраивается модуль MCP2515 (сброс, установка скорости 500 кбит/с для кварца 8 МГц и перевод в режим Normal Mode).

Инициализирует дисплей по адресу 0x3C, очищает видеобуфер микроконтроллера и устанавливает белый цвет текста.

В функции loop() выполняется постоянная проверка наличия данных в приемном буфере MCP2515; если сообщение получено, оно копируется в переменную canMsg.

Полезные ссылки

Описание Скачать
1 Библиотека DallasTemperature DallasTemperature v.1.1.15.zip
2 Библиотека ACAN2515 ACAN2515 v.2.1.5.zip
3 Библиотека Adafruit_SSD1306 Adafruit_SSD1306 v.2.5.17.zip
4 Библиотека OneWireNg OneWireNg v.0.14.1
5 Библиотека Adafruit GFX Library Adafruit GFX Library v.1.12.6
6 Библиотека Adafruit BusIO Adafruit BusIO v.1.14.7

О нас Сергей

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *