ESP8266 + MCP2515 не работает

Тема в разделе "ESP8266, ESP32", создана пользователем Frank[Einstein], 17 фев 2019.

  1. Доброго времени суток. Имеется связка из ESP8266 (Lolin NodeMcu V3) + модуль CAN шины MCP2515.

    Lolin.PNG MCP2515-CAN-Bus-Module-TJA1050-Receiver-Microcontroller-Development-Board.jpg

    Нужно установить связь между двумя ESP по CAN шине. Ситуация такова, что все работает при использовании вместо ESP 2-х Arduino UNO. Используя эти скетчи из примеров на ардуино все летает, сообщения отправляются и принимаются.

    Скетч на отправку
    Код (C++):

    #include <SPI.h>
    #include <mcp2515.h>


    //SCK - 13
    //SI - 11
    //SO - 12
    //CS - 10

    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);

      Serial.println("Messages sent");

      delay(100);

    }
    Скетч на прием
    Код (C++):
    #include <SPI.h>
    #include <mcp2515.h>

    struct can_frame canMsg;
    MCP2515 mcp2515(10);


    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],HEX);
          Serial.print(" ");

        }

        Serial.println();    
      }
    }
    Для ESP использую эти же скетчи, только вместо MCP2515 mcp2515(10) использую MCP2515 mcp2515(SS). Модуль CAN шины подключал к пинам SPI, использовал логический двусторонний конвертер 3.3- 5 В, пробовал так же без него, но ничего не менялось. Пробовал подключать к HSPI - вылетает ошибка при прошивке. Скетчи на ESP не работают. Скетч приема прошивается , но сообщения не принимает. Скетч отправки прошивается, но после него плата презагружается с сообщением ets Jan 8 2013,rst cause:4, boot mode: (1,7). После чего тоже ничего не работает. Прошу помощи в разрешении данной проблемы.