Hallo zusammen,
ich möchte gerne meine Heizungssteuerung umbauen:
Aktuell benutzte ich einen Arduino + Ethernetshield und sende dann per MQTT meine Befehle an FHEM.
Ich hatte mir nun überlegt die Kommunikation auf CAN-BUS umzustellen.
Habe mir zum Test 2 MCP2515 CAN Module gekauft.
Aktuell habe ich aber das Problem das ich keine CAN Botschaften empfange.
Hier hätte ich nun folgende Fragen an euch:
- Wie kann ich überprüfen ob der Sende die Botschaft richtig rausschickt?
- Die Abfrage beim Empfänger "if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK)
wird nicht ausgeführt da der 1.Ausdruck der Abfrage immer 1 ist. ERROR_OK ist aber mit 0 hinterlegt. Woran kann das liegen das der Ausdruck 1 ist.
Anbei mein Coder für Sender und Empfänger:
Sender:
#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() {
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;
mcp2515.sendMessage(&canMsg1);
/* mcp2515.sendMessage(MCP2515::TXB1,&canMsg2);
for (int i = 0; i<canMsg2.can_dlc; i++) { // print the data
Serial.print(canMsg2.data[i],HEX);
Serial.print(" ");
}
Serial.println("Messages sent");
*/
delay(1000);
}
Empfänger:
#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() {
int test = mcp2515.readMessage(&canMsg);
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(" -");
Serial.println(canMsg.can_dlc);
for (int i = 0; i<canMsg.can_dlc; i++) { // print the data
Serial.print(canMsg.data[i],HEX);
Serial.print(" ");
}
Serial.println();
delay(1000);
}
}
Könnt ihr mir weiterhelfen wie ich den Fehler herausfinden kann?
Vielen Dank
Gruß
Hardtacker