Фрэнк25РУС
New member
Доброго времени суток. Нужна ваша помощь. Имеется связка из ESP8266 (Lolin NodeMcu V3) + модуль CAN шины MCP2515 (SPI).
Нужно установить связь между двумя 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.
Скетч приема сообщений на Nodemcu.
Нужно установить связь между двумя 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);
Код:
#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();
}
}