Hallo miteinander,
mein letzter Auftritt hier ist schon etwas her....der ein oder andere erinnert sich bestimmt an das Rennbahn-Projekt, war ja auch was über Monate bzw. Jahre dauerte. Aber wenn jemand meint ich wäre fertig.... ![]()
Aber nun zu meinem Problem:
Ich habe...
1 x ESP32 Wroom-32 (AZ-......) ich glaub der Name ist hier nicht gern gesehen.
1 x TCA9548A I2C IIC 8 Channel
3 x 0,96 Zoll 128 x 64 12864 Pixel OLED
1 x MCP2515 CAN Bus Shield
Der Sketch ist abgespeck, aber es sollte das wichtigste vorhanden sein.
Nun zum Problem, sobald ich die Lib für den MCP2515 aktiviere rebootet der EPS32 ständig.
Hier die Fehlermeldung:
Rebooting...
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1412
load:0x40078000,len:13400
load:0x40080400,len:3640
entry 0x400805f0
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400d237f PS : 0x00060d30 A0 : 0x800d2a6c A1 : 0x3ffb27a0
A2 : 0x00000000 A3 : 0xffffffff A4 : 0xffffffff A5 : 0xffffffff
A6 : 0xffffffff A7 : 0x00000008 A8 : 0x800896fa A9 : 0x3ffb2780
A10 : 0x00000001 A11 : 0x0000164d A12 : 0x00001275 A13 : 0xb33fffff
A14 : 0x00000001 A15 : 0x00000001 SAR : 0x00000017 EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000004 LBEG : 0x400d31b4 LEND : 0x400d321a LCOUNT : 0x0000000b
Backtrace:0x400d237c:0x3ffb27a0 0x400d2a69:0x3ffb27c0 0x400d112f:0x3ffb27e0 0x400d542b:0x3ffb2820
Da ich Aufgrund Speicher und Möglichkeiten mit der u8g2-Lib, auf den mir noch unbekannten ESP32 gekommen bin hänge ich nun an diesem Problem.....
Ist die Lib nicht für ESP32 geeignet...? Ober habe ich das MCP2515 CAN Bus Shield falsch angeschlossen? Ich komme nicht dahinter. ![]()
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <SPI.h>
#include <mcp_can.h> // https://github.com/coryjfowler/MCP_CAN_lib
#include <TimeLibB.h> // auf deutsch umgeschriebene TimeLib von Paul Stoffregen
// CAN BUS
MCP_CAN CAN0(5);
// MCP2515 - ESP32
// SCK - 18
// SI - 23
// SO - 19
// CS - 5
// INT - nicht angeschlossen
// Multiplexer- ESP32
// SDA - 21
// SCL - 22
#define TCA9548A 0x70
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCA9548A);
Wire.write(1 << i);
Wire.endTransmission();
}
//
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
uint32_t TimeForAnzeige = 0;
bool Chaos = true;
void setup()
{
for (int i = 0; i <= 7; i++) {
tcaselect(i);
u8g2.begin();
}
Wire.begin();
Serial.begin(115200);
{
tcaselect(7); //multiplex the OLED on Channel 7
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_4x6_mf);
u8g2.setDrawColor(2);
u8g2.drawStr(110, 5, "RTL"); // Spalte, Zeile
u8g2.sendBuffer();
delay(1000);
}
{
tcaselect(1); //multiplex the OLED on Channel 1
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_samim_16_t_all);
u8g2.drawStr(20, 50, "2"); // Spalte, Zeile
u8g2.sendBuffer();
delay(1000);
}
{
tcaselect(2); //multiplex the OLED on Channel 2
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_samim_16_t_all);
u8g2.drawStr(20, 50, "D U N L O P"); // Spalte, Zeile
u8g2.sendBuffer();
delay(1000);
}
// CAN BUS
while (CAN_OK != CAN0.begin(MCP_STDEXT, CAN_125KBPS, MCP_8MHZ)) // init can bus : masks and filters disabled, baudrate, Quarz vom MCP2551
{
Serial.println("CAN BUS Shield init fail");
Serial.println(" Init CAN BUS Shield again");
//delay(100);
}
Serial.println("CAN BUS Shield init ok!");
CAN0.setMode(MCP_NORMAL); // Change to normal mode to allow messages to be transmitted
}
void loop()
{
OledVorne();
}
void OledVorne()
{
if (Chaos == true)
{
// OledAusgabe(Text,Channel)
OledAusgabe(1, 2);// Text (4=Bild Unfall,5=Text Unfall,6=Datum,7=Uhrzeit
OledAusgabe(7, 7);// Channel (1=Oled-Rechts, 2=Oled-Vorne, 7=Oled-Links)
OledAusgabe(8, 1);
}
}
void OledAusgabe(byte Text, byte Channel)
{
tcaselect(Channel);// An welcher Anzeige ausgegeben werden soll
switch (Text) // Was an dieser Anzeige ausgegeben werden soll
{
case 1: // Smiley
// u8g2.clearBuffer();
// u8g2.drawXBM(20, 5, SmileyBreite, SmileyHoehe, Smiley);
// u8g2.sendBuffer();
break;
case 2: // Daumen Hoch
// u8g2.clearBuffer();
// u8g2.drawXBM(20, 1, DaumenBreite, DaumenHoehe, Daumen_Hoch);
// u8g2.sendBuffer();
break;
case 3: // Werbung Dunlop
// u8g2.clearBuffer();
// u8g2.drawXBM(30, 1, DunlopBreite, DunlopHoehe, Dunlop);
// u8g2.sendBuffer();
break;
case 4: // Bild Unfall
// u8g2.clearBuffer();
// u8g2.drawXBM(20, 0, AutoUnfallB, AutoUnfallH, AutoUnfall);
// u8g2.sendBuffer();
break;
case 5: // Text Unfall
if (millis() - TimeForAnzeige >= 2000)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_samim_16_t_all);
u8g2.drawStr(8, 40, " A C H T U N G !"); // Spalte, Zeile
u8g2.sendBuffer();
TimeForAnzeige = millis();
}
else
{
if (millis() - TimeForAnzeige >= 1000) {
u8g2.clearBuffer();
u8g2.drawStr(8, 40, " U N F A L L !"); // Spalte, Zeile
//u8g2.drawXBM(20, 0, AutoUnfallB, AutoUnfallH, AutoUnfall);
u8g2.sendBuffer();
}
}
break;
case 6: // Datum
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_samim_16_t_all);
u8g2.setCursor(24, 20);
if (day() < 10) {
u8g2.print("0");
}
u8g2.print(day(), DEC);
u8g2.print('.');
if (month() < 10) {
u8g2.print("0");
}
u8g2.print(month(), DEC);
u8g2.print('.');
u8g2.print(year(), DEC);
//u8g2.drawStr(8, 40, minute()); // Spalte, Zeile
u8g2.sendBuffer();
break;
case 7: // Uhrzeit
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_samim_16_t_all);
u8g2.setCursor(24, 30);
if (hour() < 10) {
u8g2.print("0");
}
u8g2.print(hour(), DEC);
u8g2.print(':');
if (minute() < 10) {
u8g2.print("0");
}
u8g2.print(minute(), DEC);
u8g2.print(':');
if (second() < 10) {
u8g2.print("0");
}
u8g2.print(second(), DEC);
//u8g2.drawStr(8, 40, minute()); // Spalte, Zeile
u8g2.sendBuffer();
break;
case 8: // an der Spitze
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_4x6_mf);
u8g2.drawStr(115, 8, "RTL"); // Spalte, Zeile
u8g2.setFont(u8g2_font_9x15_mf);
u8g2.drawStr(10, 30, "an der Spitze"); // Spalte, Zeile
u8g2.setFont(u8g2_font_helvB10_tf);
//u8g2.drawUTF8(10, 60, F); // Spalte, Zeile
u8g2.drawUTF8(10, 60, "Fahrer[1]" ); // Spalte, Zeile
u8g2.sendBuffer();
break;
}
}
void leseCanBus()
{
unsigned long rxId = 0;
byte len = 0;
byte rxBuf[8];
char text[32] = {0};
if (CAN_MSGAVAIL == CAN0.checkReceive()) // check if data coming
{
char msg[2][30];
CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
byte teil = rxId & 0xF;
byte num = (rxId & 0xF0) / 16;
memcpy(msg[num] + teil * len, rxBuf, len);
if (teil == 2) {
snprintf(text, sizeof(text), msg[num]);
//strcpy (text, msg[num]);
Serial.println(text);
//AuswertungEmpfang(text);
}
}
}
