• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266 + MCP2515

Доброго времени суток. Нужна ваша помощь. Имеется связка из ESP8266 (Lolin NodeMcu V3) + модуль CAN шины MCP2515 (SPI).
Lolin.PNG MCP2515-CAN-Bus-Module-TJA1050-Receiver-Microcontroller-Development-Board.jpg
Нужно установить связь между двумя ESP по CAN шине. Сначала собрал все на 2-х Arduino UNO, все работает, сообщения отправляются и принимаются. Сейчас пытаюсь принять на ESP сообщения с Arduino. Ничего не работает. Модуль CAN шины подключен к ESP8266 через логический преобразователь 5 - 3.3В. Оба модуля CAN шины запитаны от 5В (гугл говорит, что на 3.3 ничего не заработает, ну в общем то оно никак не работает). Использую на Nodemcu SPI пины D5-D8. Причем, если подключаю пин D8, то плата отказывается прошиваться с ошибкой error: espcomm_open failed. Отсоединяю провод D8 или замыкаю его на землю, все снова прошивается. Скетчи брал из примеров к библиотеке.

Скетч отправки сообщений на Arduino.

Код:
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {

  canMsg1.can_id  = 0x0F6;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;
 
  while (!Serial);
  Serial.begin(115200);
  SPI.begin();
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
 
  Serial.println("Example: Write to CAN");
}

void loop() {
 
  mcp2515.sendMessage(&canMsg1);
  mcp2515.sendMessage(&canMsg2);

  Serial.println("Messages sent");
 
  delay(100);
Скетч приема сообщений на Nodemcu.

Код:
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(15);


void setup() {
  Serial.begin(115200);
  SPI.begin();
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
 
  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC   DATA");
}

void loop() {
 
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
    
    Serial.print(canMsg.can_id, HEX); // print ID
    Serial.print(" ");
    Serial.print(canMsg.can_dlc, HEX); // print DLC
    Serial.print(" ");
  
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
      
      Serial.print(canMsg.data[i]);
      Serial.print(" ");

    }

    Serial.println();    
  }

}
 

Сергей_Ф

Moderator
Команда форума
подключаю пин D8
это gpio15, для нормальной работы на нём должен быть 0 при старте.
Модуль CAN шины подключен к ESP8266 через логический преобразователь 5 - 3.3В
Как подключены? Схему в студию. Питания +3,3 и +5 не забыли на преобразователь подать? Земли?
 

nikolz

Well-known member
Доброго времени суток. Нужна ваша помощь. Имеется связка из ESP8266 (Lolin NodeMcu V3) + модуль CAN шины MCP2515 (SPI).
Посмотреть вложение 7171 Посмотреть вложение 7172
Нужно установить связь между двумя ESP по CAN шине. Сначала собрал все на 2-х Arduino UNO, все работает, сообщения отправляются и принимаются. Сейчас пытаюсь принять на ESP сообщения с Arduino. Ничего не работает. Модуль CAN шины подключен к ESP8266 через логический преобразователь 5 - 3.3В. Оба модуля CAN шины запитаны от 5В (гугл говорит, что на 3.3 ничего не заработает, ну в общем то оно никак не работает). Использую на Nodemcu SPI пины D5-D8. Причем, если подключаю пин D8, то плата отказывается прошиваться с ошибкой error: espcomm_open failed. Отсоединяю провод D8 или замыкаю его на землю, все снова прошивается. Скетчи брал из примеров к библиотеке.

Скетч отправки сообщений на Arduino.

Код:
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
struct can_frame canMsg2;
MCP2515 mcp2515(10);


void setup() {

  canMsg1.can_id  = 0x0F6;
  canMsg1.can_dlc = 8;
  canMsg1.data[0] = 0x8E;
  canMsg1.data[1] = 0x87;
  canMsg1.data[2] = 0x32;
  canMsg1.data[3] = 0xFA;
  canMsg1.data[4] = 0x26;
  canMsg1.data[5] = 0x8E;
  canMsg1.data[6] = 0xBE;
  canMsg1.data[7] = 0x86;

  canMsg2.can_id  = 0x036;
  canMsg2.can_dlc = 8;
  canMsg2.data[0] = 0x0E;
  canMsg2.data[1] = 0x00;
  canMsg2.data[2] = 0x00;
  canMsg2.data[3] = 0x08;
  canMsg2.data[4] = 0x01;
  canMsg2.data[5] = 0x00;
  canMsg2.data[6] = 0x00;
  canMsg2.data[7] = 0xA0;
 
  while (!Serial);
  Serial.begin(115200);
  SPI.begin();
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
 
  Serial.println("Example: Write to CAN");
}

void loop() {
 
  mcp2515.sendMessage(&canMsg1);
  mcp2515.sendMessage(&canMsg2);

  Serial.println("Messages sent");
 
  delay(100);
Скетч приема сообщений на Nodemcu.

Код:
#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg;
MCP2515 mcp2515(15);


void setup() {
  Serial.begin(115200);
  SPI.begin();
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_125KBPS, MCP_8MHZ);
  mcp2515.setNormalMode();
 
  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC   DATA");
}

void loop() {
 
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
   
    Serial.print(canMsg.can_id, HEX); // print ID
    Serial.print(" ");
    Serial.print(canMsg.can_dlc, HEX); // print DLC
    Serial.print(" ");
 
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
     
      Serial.print(canMsg.data[i]);
      Serial.print(" ");

    }

    Serial.println();   
  }

}
уж сколько раз твердили миру...
выкиньте преобразователи
MCP2515 работает от 3.3 и ESP тоже ничего не надо согласовывать.
 

Fayton

Member
НОВАЯ версия CANSAN-V3
Реализован полноценный канхакер(LAWICEL) в режиме работы по USB! Тоько скорость сана и битность выставятся через морду..
Работает одновременно с мордой.
Добавлен вывод байт бомбера в статус.
Увеличил скорость работы.

CANSAN-V3.zip
 

Fayton

Member
Новая версия CANSAN-V4
Добавил CAN PLAYER (МАГНИТОФОН :)) с кнопками REC stop PLAY
Вывод сохраненного в PLAYER на странице

И повторю все функции Wifi CANHACKER - CANSAN
1 бомбер
2 один динамический сендер
3 один статический сендер
4 IF to SEND чекер для удаления ошибок
5 полноценный канхакер(CANHACKER) в режиме работы по USB или Bluetooth
6 Встроенный рекордер для записи и воспроизведения CAN
7 Смена SSID и PASSWORD
8 Установка таймера работы для клиента
9 Удобная мобильная версия встроенного сайта
Пароль по дефолту 12345678
SSID по дефолту CANSan
Адрес встроенного сайта 192.168.4.1

Последнюю прошивку выложу под видео с обзором на моем канале!
 

Fayton

Member
Добрый день!
Заинтересовал Ваш проект.
Зашил в Lolin NodeMcu V3 без Can модуля, wifi не появился
пробовал разные версии 2, 4, 5

у кого ни будь завелось?
Возможно не установлена подтяжки или установлена перемычка Wi-Fi.
Залейте последнюю версию. Она есть под видео на моем канале.
 

Fayton

Member
Добрый день!
Заинтересовал Ваш проект.
Зашил в Lolin NodeMcu V3 без Can модуля, wifi не появился
пробовал разные версии 2, 4, 5

у кого ни будь завелось?
Возможно не установлена подтяжки или установлена перемычка Wi-Fi.
Залейте последнюю версию. Она есть под видео на моем канале.
 

pvvx

Активный участник сообщества

Fayton

Member
CanSan-v6 Новые супер возможности! Сохранение файла плеера редактирование и загрузка. Теперь можно делится наработками и не только! С Новым Годом!
 

Вложения

  • 109.6 KB Просмотры: 27
Сверху Снизу