Hallo zusammen,
ich bin komplett neu im Feld des ESP32 ( & auch Arduino).
Ich versuche gerade zwei ESP32 über CAN zu verbinden.
Dazu habe ich zwei MCP2515 Module, die ich so verpinnt habe mit den
ESP32:
CS to 5
SO to 19
SCK to 18
SI to 23
(INT to 2) INT weiß ich nicht genau, wei ich setzen soll, eigentlihc an
zwei, aber wenn der stecker dort sitzt, kann ich den sketch nicht mehr
hochladen.Die Arduino IDE versucht dann zu connecten, sagt dann aber
Error.
Ich benutze dazu die Bibliothek von Coryjfowler
https://github.com/coryjfowler/MCP_CAN_lib
und folgenden Code
(Ich habe CS auf 5 gesetzt, ist das so richtig?)
ESP32 Sender:
1
#include <mcp_can.h>
2
#include <SPI.h>
3
4
MCP_CAN CAN0(5); // Set CS to pin 5
5
6
void setup()
7
{
8
Serial.begin(115200);
9
10
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
if((rxId & 0x40000000) == 0x40000000){ // Determine if message is a remote request frame.
47
sprintf(msgString, " REMOTE REQUEST FRAME");
48
Serial.print(msgString);
49
} else {
50
for(byte i = 0; i<len; i++){
51
sprintf(msgString, " 0x%.2X", rxBuf[i]);
52
Serial.print(msgString);
53
}
54
}
55
56
Serial.println();
57
}
58
}
Leider erhalte ich immer vom Sender
"Error Sending message"
Und vom Receiver:
"Standard ID: 0x000 DLC: 0 Data:"
Ich bin sehr neu auf dem Gebiet und weiß nicht so recht, was ich alles
beachten muß. Meine Internetrecherche hat mir für CAN und ESP32 auch
nicht viel gebracht.
Vielleicht kann mir hier jemadn helfen.
Vielen Dank!
Shannah schrieb:> ESP32 Sender:> if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
Dieses Modul hat also einen 8MHz Quarz.
Warum muss es denn gleich 500kBps sein und für den Anfang nicht was
kleines wie 33kBps?
Shannah schrieb:> Und für den Receiver:> if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK)
Hier hat das Modul nun 16MHz. Hast du wirklich zwei unterschiedliche
gekauft?
Shannah schrieb:> Vielleicht kann mir hier jemadn helfen.
Die mit der Bibliothek mitgelieferten Beispiele laufen?
Dann baue darauf auf und guck dir dazu die Signale auf dem Bus an.
Kurze Frage: ist CAN0 wirklich der am MCP der ESP32 hat doch einen
eingebauten CAN Controller. Eventuell wird der angesprochen? Eigentlich
reicht nur der CAN Treiber direkt an den CAN RX und TX Pins?
Grüße Jochen
Thomas F. schrieb:> Shannah schrieb:> ESP32 Sender:> if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) == CAN_OK)>> Dieses Modul hat also einen 8MHz Quarz.> Warum muss es denn gleich 500kBps sein und für den Anfang nicht was> kleines wie 33kBps?>> Shannah schrieb:> Und für den Receiver:> if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK)>> Hier hat das Modul nun 16MHz. Hast du wirklich zwei unterschiedliche> gekauft?
Ich habe 2x 8Mhz, da habe ich wohl beim Kopieren des Codes etwas
übersehen. Bei meinen ganzen Versuchen, bin ich kurzzeitig etwas
durcheinander gekommen.
Wolfgang schrieb:> Shannah schrieb:> Vielleicht kann mir hier jemadn helfen.>> Die mit der Bibliothek mitgelieferten Beispiele laufen?> Dann baue darauf auf und guck dir dazu die Signale auf dem Bus an.
Nein, sie funktionieren leider auch nicht. Die Initialisierung des MCP
2515 klappt wohl, zumindest geht er in die If Bedingung und gibt mir den
Erfolg im seriellen Monitor aus. Aber senden klappt nicht und/ oder
empfangen.
Shannah schrieb:> Ich habe 2x 8Mhz, da habe ich wohl beim Kopieren des Codes etwas> übersehen. Bei meinen ganzen Versuchen, bin ich kurzzeitig etwas> durcheinander gekommen.
Läuft es denn jetzt nach der Korrektur?
Wolfgang schrieb:> Shannah schrieb:>> Aber senden klappt nicht und/ oder empfangen.>> Was sagt ein LA/DSO zu den Signalen auf dem Bus?
Das habe ich bisher nocht nicht gemessen, dazu müßte ich mir ein
Oszilloskop leihen. Werde ich in Angriff nehmen.
Helmut -. schrieb:> Sind Terminierungswiderstände am CAN-Bus?
Nein, in den Beispielen, die ich im Internet gefunden habe, waren keine
vorhanden, deshalb habe ich auch keine gesetzt.
Shannah schrieb:> dazu müßte ich mir ein Oszilloskop leihen
Kauf Dir ein DSO-138. Das ist zwar ein Spielzeug, aber dennoch für viele
Aufgaben (wie dieser) hilfreich.
Stefan F. schrieb:> Kauf Dir ein DSO-138. Das ist zwar ein Spielzeug, aber dennoch für viele> Aufgaben (wie dieser) hilfreich.
Aber ausgerechnet für diese Aufgabe hier eher nicht. Mit der Bandbreite
von 200kHz und einer Speichertiefe von 1024 Punkten, ist man bei
Datentelegrammen sehr schnell am Ende, gerade wenn es um mehr als die
Symbolrate geht. Bei 500kb/s wird das schon gar nichts bzw. ist nur noch
Krampferei.
Mit einem kleiner LA für keine 7€ ist man da deutlich besser bedient.
https://www.ebay.de/itm/202437260818
Inzwischen habe ich es geschafft, dass zwei Arduino UNO über zwei
MCP2515 Module kommunizieren, dass klappt auch wunderbar.
Mit dem ESP32 läuft es leider immer noch nicht. Leider bin ich (noch)
nicht so technisch bewandert, könnte es daran liegen, dass das MCP2515
Modul 5v benötigt, mein ESP32 Wroom32 allerdings ein 3,v, V
Mikrocontroller ist?Eventuell bräuchte ich somit einen Wandler...
Juhuuu! Nach x-Versuchen habe ich endlich eine Bibliothek gefunden, die
mir mein Projekt ermöglicht.
Nur noch Anpassungen im Code mußte ich machen, und nun klappt es auch
mit den 2 ESP32 und den 2 MCP2515 Modulen :)
DAnke euch allen für eure Hilfe, das hat mir sehr geholfen mich an den
richtigen Stellen mit den Sachen auseinander zu setzen:)
Wolfgang schrieb:> Bei 500kb/s wird das schon gar nichts bzw. ist nur noch> Krampferei.
Stimmt. Die Bitrate hat er allerdings unter Kontrolle, er kann eine
niedrigere benutzen.
Mit dem Logic Analyzer kann er die Signalpegel/Qualität nicht prüfen,
die hier in Frage gestellt wurden. Aber zusätzlich zum Oszilloskop wäre
so ein Ding sehr hilfreich.
Hallo Shanna,
ich vermute du hast den Bus nicht abgeschlossen, bei 2 steuergeräten
must du an beide Enden 120 Ohm setzen. An den MCP2515 gibt es auch ein
Brücke die genau das bewirkt. Messbar ist das ganze wenn schaltung
Stromlos, dann must auf dem Canbus 60 ohm messen.
Am ESP32 geht auch nur ein SN65HVD Modul wo nur an P4 RX und P5 TX
angeschlossen wird und die Bibliothek ESP32-protocol-demo-master
braucht.
Gerade heute zum laufen gebracht. :-)
Habe im Auto einen ESP8266 laufen, der Motorcan 500kB daten abfragt und
auf einer webseite darstellt. SD-karte und Uhr auch dran.
Gruß Uli
Hi,
Cool das es geklappt hat, hänge grad am gleichen Problemfall.
Könntest du sagen welche Bibliothek du benutzt hast und welche
Änderungen du vorgenommen hast damit die Übertragung klappt ?
Danke MFG
Ist das die typische Qualität in diesem Forum?
- 19 Beiträge
- Am 16.12.2019 verkündet der Initiator "Juchhu...", ohne zu sagen,
welche
Bibliothek er gefunden hat.
- Danach kommen noch 3 (unnötige) Beiträge mit der Frage "welche
Bibiliothek
hast Du gefunden?" als krönenden Abschluss.
Einfach toll. Ich suche eigentlich nach Lösungen für mein Problem.