M5StampS3 / M5Dial and CAN
-
Has anyone got the CAN unit to work with the ESP32 S3 devices?
I end up with a load of compiled messages when I try using the ported Atom examples using Platformio
It looks like the problem is in CAN.c and the TWAI driver
see
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/twai.htmlError Messages
"In file included from C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_reg.h:21,
from src/CAN.c:38:
src/CAN.c: In function 'CAN_init':
src/CAN.c:169:29: error: 'DPORT_PERIP_CLK_EN_REG' undeclared (first use in this function); did
you mean 'SYSTEM_PERIP_CLK_EN1_REG'?
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (*((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:88:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask)))
^~~~~~~~~~~~~~~~~~~~
src/CAN.c:169:5: note: in expansion of macro 'DPORT_SET_PERI_REG_MASK'
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~~
src/CAN.c:169:29: note: each undeclared identifier is reported only once for each function it appears in
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:88:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask)))
^~~~~~~~~~~~~~~~~~~~
src/CAN.c:169:5: note: in expansion of macro 'DPORT_SET_PERI_REG_MASK'
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~~
src/CAN.c:169:53: error: 'DPORT_CAN_CLK_EN' undeclared (first use in this function); did you mean 'DPORT_REG_CLR_BIT'?
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:88: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:88:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask)))
^~~~~~~~~~~~~~~~~~~~
src/CAN.c:169:5: note: in expansion of macro 'DPORT_SET_PERI_REG_MASK'
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~~
src/CAN.c:170:31: error: 'DPORT_PERIP_RST_EN_REG' undeclared (first use in this function); did
you mean 'SYSTEM_PERIP_RST_EN0_REG'?
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:85:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_CLEAR_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)&(~(mask))))
^~~~~~~~~~~~~~~~~~~~
src/CAN.c:170:5: note: in expansion of macro 'DPORT_CLEAR_PERI_REG_MASK'
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~~~~~~~~~~~~~
src/CAN.c:170:55: error: 'DPORT_CAN_RST' undeclared (first use in this function); did you mean
'DPORT_DATE_REG'?
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:88: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:85:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_CLEAR_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)&(~(mask))))
^~~~~~~~~~~~~~~~~~~~
src/CAN.c:170:5: note: in expansion of macro 'DPORT_CLEAR_PERI_REG_MASK'
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~~~~~~~~~~~~~
src/CAN.c:175:40: error: 'CAN_TX_IDX' undeclared (first use in this function); did you mean 'TWAI_TX_IDX'?
gpio_matrix_out(CAN_cfg.tx_pin_id, CAN_TX_IDX, 0, 0);
^~~~~~~~~~
TWAI_TX_IDX
src/CAN.c:180:39: error: 'CAN_RX_IDX' undeclared (first use in this function); did you mean 'TWAI_RX_IDX'?
gpio_matrix_in(CAN_cfg.rx_pin_id, CAN_RX_IDX, 0);
^~~~~~~~~~
TWAI_RX_IDX
src/CAN.c:252:20: error: 'ETS_CAN_INTR_SOURCE' undeclared (first use in this function)
esp_intr_alloc(ETS_CAN_INTR_SOURCE, 0, CAN_isr, NULL, NULL);
^~~~~~~~~~~~~~~~~~~
Compiling .pio\build\m5stack-stamps3\src\main.cpp.o
Compiling .pio\build\m5stack-stamps3\lib421\ESP32CAN\CAN.c.o
In file included from .pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:37:
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/esp_hw_support/include/esp_intr.h:8:2: warning: #warning esp_intr.h is deprecated, please include esp_intr_alloc.h instead [-Wcpp]
#warning esp_intr.h is deprecated, please include esp_intr_alloc.h instead
^~~~~~~
In file included from C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_reg.h:21,
from .pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:38:
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c: In function 'CAN_init':
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:173:26: error: 'DPORT_PERIP_CLK_EN_REG' undeclared (first use in this function); did you mean 'SYSTEM_PERIP_CLK_EN1_REG'?
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:88:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask)))
^~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:173:2: note: in expansion of macro 'DPORT_SET_PERI_REG_MASK'
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:173:26: note: each undeclared identifier is reported only once for each function it appears in
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:88:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask)))
^~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:173:2: note: in expansion of macro 'DPORT_SET_PERI_REG_MASK'
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:173:50: error: 'DPORT_CAN_CLK_EN' undeclared (first use in this function); did you mean 'DPORT_REG_CLR_BIT'?
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:88: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:88:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_SET_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)|(mask)))
^~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:173:2: note: in expansion of macro 'DPORT_SET_PERI_REG_MASK'
DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_CAN_CLK_EN);
^~~~~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:174:28: error: 'DPORT_PERIP_RST_EN_REG' undeclared (first use in this function); did you mean 'SYSTEM_PERIP_RST_EN0_REG'?
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:67: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t )(addr))) = (uint32_t)(val)
^~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:85:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_CLEAR_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)&(~(mask))))
^~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:174:2: note: in expansion of macro 'DPORT_CLEAR_PERI_REG_MASK'
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:174:52: error: 'DPORT_CAN_RST' undeclared (first use in this function); did you mean 'DPORT_DATE_REG'?
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:75:88: note: in definition of macro '_DPORT_WRITE_PERI_REG'
#define _DPORT_WRITE_PERI_REG(addr, val) (((volatile uint32_t *)(addr))) = (uint32_t)(val)
^~~
C:/Users/simon/.platformio/packages/framework-arduinoespressif32@src-e2e946657dbcd16e4aabb8a644a06175/tools/sdk/esp32s3/include/soc/esp32s3/include/soc/dport_access.h:85:46: note: in expansion of macro 'DPORT_WRITE_PERI_REG'
#define DPORT_CLEAR_PERI_REG_MASK(reg, mask) DPORT_WRITE_PERI_REG((reg), (DPORT_READ_PERI_REG(reg)&(~(mask))))
^~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:174:2: note: in expansion of macro 'DPORT_CLEAR_PERI_REG_MASK'
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_CAN_RST);
^~~~~~~~~~~~~~~~~~~~~~~~~
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:179:37: error: 'CAN_TX_IDX' undeclared (first use in this function); did you mean 'TWAI_TX_IDX'?
gpio_matrix_out(CAN_cfg.tx_pin_id, CAN_TX_IDX, 0, 0);
^~~~~~~~~~
TWAI_TX_IDX
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:184:36: error: 'CAN_RX_IDX' undeclared (first use in this function); did you mean 'TWAI_RX_IDX'?
gpio_matrix_in(CAN_cfg.rx_pin_id, CAN_RX_IDX, 0);
^~~~~~~~~~
TWAI_RX_IDX
.pio/libdeps/m5stack-stamps3/ESP32CAN/src/CAN.c:254:17: error: 'ETS_CAN_INTR_SOURCE' undeclared (first use in this function)
esp_intr_alloc(ETS_CAN_INTR_SOURCE, 0, CAN_isr, NULL, NULL);
^~~~~~~~~~~~~~~~~~~
*** [.pio\build\m5stack-stamps3\src\CAN.c.o] Error 1
*** [.pio\build\m5stack-stamps3\lib421\ESP32CAN\CAN.c.o] Error 1
================================= [FAILED] Took 16.27 seconds ================================="Source code
"
/**- @file encoder.ino
- @author SeanKwok (shaoxiang@m5stack.com)
- @brief M5Dial Encoder Test
- @version 0.2
- @date 2023-10-18
- @Hardwares: M5Dial
- https://shop.m5stack.com/products/m5stack-dial-esp32-s3-smart-rotary-knob-w-1-28-round-touch-screen
- https://docs.m5stack.com/en/core/M5Dial
- https://github.com/m5stack/M5Dial
- @Platform Version: Arduino M5Stack Board Manager v2.0.7
- @Dependent Library:
- M5GFX: https://github.com/m5stack/M5GFX
- M5Unified: https://github.com/m5stack/M5Unified
- CANBus Unit(CA-IS3050G) Grove cable connected
- https://shop.m5stack.com/products/canbus-unitca-is3050g
- https://docs.m5stack.com/en/unit/can?ref=kmjp2x8a
- https://github.com/m5stack/M5Stack/tree/master/examples/Unit/CAN
*/
#include "M5Dial.h"
#include <M5Unified.h>
#include <M5GFX.h>
#include <ESP32CAN.h>
#include <CAN_config.h>
#include "driver/twai.h"/****** comment out to make sender ********/
#define CAN_RECIEVER // Remove to make sender#define Use_PortB // Remove to use Port A (Red)
#define CAN_MSG_ID 0x001
CAN_device_t CAN_cfg; // CAN Config.
unsigned long previousMillis = 0; // will store last time a CAN Message was sent // send. 将存储上次发送CAN消息的时间。
const int interval = 80; // interval at which send CAN Messages (milliseconds).const int rx_queue_size = 10; // Receive Queue size.
int LedNumberCount = 0;
int waitCANData = 0;uint8_t msgcnt = 0;
void setup()
{auto cfg = M5.config(); M5Dial.begin(cfg, true, false); M5Dial.Display.setTextColor(GREEN); M5Dial.Display.setTextDatum(middle_center); M5Dial.Display.setFont(&fonts::Orbitron_Light_32); M5Dial.Display.setTextSize(1); M5Dial.Display.drawString(String("Dial CAN"), M5Dial.Display.width() / 2, M5Dial.Display.height() / 2); M5.Lcd.println("M5Stack Core2 and CAN Bus adaptor"); // Print a string on the screen. M5.Lcd.setTextColor(ORANGE);// M5.Lcd.println("* sending a string to be converted to upper case, ");
// M5.Lcd.println(" receiving response and display it on Terminal. *");Serial.println("Basic Demo - ESP32-Arduino-CAN"); Serial.println("M5Stack CoreS3 and CAN Bus adaptor"); Serial.println("* sending a string to be converted to upper case, *"); Serial.println("* receiving response and display it on a Terminal. *"); /* set CAN pins */ // GROVE connector GPIO pins#ifdef Use_PortB
// Port B
CAN_cfg.tx_pin_id = GPIO_NUM_1; //
CAN_cfg.rx_pin_id = GPIO_NUM_2;
#else
// Port A Red Port (Shared with I2C)
CAN_cfg.tx_pin_id = GPIO_NUM_15; // SCL
CAN_cfg.rx_pin_id = GPIO_NUM_13; // SDA
#endifCAN_cfg.speed = CAN_SPEED_500KBPS; CAN_cfg.rx_queue = xQueueCreate(rx_queue_size, sizeof(CAN_frame_t)); ESP32Can.CANInit(); Serial.println("CAN Installed");#ifdef CAN_RECIEVER
Serial.println("Set as RECIEVER");
//M5.Lcd.println("* Set as RECIEVER ");
#else
Serial.println("Set as SENDER");
M5.Lcd.println(" Set as SENDER *");
#endif}
void loop()
{
unsigned long currentMillis = millis();#ifdef CAN_RECIEVER
// recieve CAN Message CAN_frame_t rx_frame; if (xQueueReceive(CAN_cfg.rx_queue, &rx_frame, 3 * portTICK_PERIOD_MS) == pdTRUE) { if (rx_frame.FIR.B.FF == CAN_frame_std) { Serial.printf("New standard frame"); } else { Serial.printf("New extended frame"); } if (rx_frame.FIR.B.RTR == CAN_RTR) { Serial.printf(" RTR from 0x%08X, DLC %d\r\n", rx_frame.MsgID, rx_frame.FIR.B.DLC); } else { Serial.printf(" from 0x%08X, DLC %d, Data ", rx_frame.MsgID, rx_frame.FIR.B.DLC); for (int i = 0; i < rx_frame.FIR.B.DLC; i++) { Serial.printf("0x%02X ", rx_frame.data.u8[i]); } Serial.printf("\n"); if (rx_frame.data.u8[0] == 0x01) { CAN_frame_t tx_frame; tx_frame.FIR.B.FF = CAN_frame_std; tx_frame.MsgID = CAN_MSG_ID; tx_frame.FIR.B.DLC = 8; tx_frame.data.u8[0] = 0x02; tx_frame.data.u8[1] = rx_frame.data.u8[1]; tx_frame.data.u8[2] = 0x00; tx_frame.data.u8[3] = 0x00; tx_frame.data.u8[4] = 0x00; tx_frame.data.u8[5] = 0x00; tx_frame.data.u8[6] = 0x00; tx_frame.data.u8[7] = 0x00; ESP32Can.CANWriteFrame(&tx_frame); } } }#else
// Send CAN Message
if (currentMillis - previousMillis >= interval)
{
ESP32Can.CANInit();
previousMillis = currentMillis;
CAN_frame_t tx_frame;
tx_frame.FIR.B.FF = CAN_frame_std;
tx_frame.MsgID = CAN_MSG_ID;
tx_frame.FIR.B.DLC = 8;
tx_frame.data.u8[0] = 0x01;
tx_frame.data.u8[1] = msgcnt;
tx_frame.data.u8[2] = 0x00;
tx_frame.data.u8[3] = 0x00;
tx_frame.data.u8[4] = 0x00;
tx_frame.data.u8[5] = 0x00;
tx_frame.data.u8[6] = 0x00;
tx_frame.data.u8[7] = 0x00;ESP32Can.CANWriteFrame(&tx_frame); ESP32Can.CANStop(); msgcnt++; if (msgcnt > 29) { msgcnt = 0; } } CAN_frame_t rx_frame; if (xQueueReceive(CAN_cfg.rx_queue, &rx_frame, 3 * portTICK_PERIOD_MS) == pdTRUE) { if (rx_frame.FIR.B.FF == CAN_frame_std) { Serial.printf("New standard frame"); } else { Serial.printf("New extended frame"); } if (rx_frame.FIR.B.RTR == CAN_RTR) { Serial.printf(" RTR from 0x%08X, DLC %d\r\n", rx_frame.MsgID, rx_frame.FIR.B.DLC); } else { Serial.printf(" from 0x%08X, DLC %d, Data ", rx_frame.MsgID, rx_frame.FIR.B.DLC); for (int i = 0; i < rx_frame.FIR.B.DLC; i++) { Serial.printf("0x%02X ", rx_frame.data.u8[i]); } Serial.printf("\n"); if (rx_frame.data.u8[0] == 0x02) { if (rx_frame.data.u8[1] < 25) { Serial.println("x"); //M5.dis.drawpix(rx_frame.data.u8[1], CRGB(100, 0, 0)); } else if (rx_frame.data.u8[1] > 27) { Serial.println("y"); //M5.dis.fillpix(CRGB(0, 0, 20)); } waitCANData = 0; } } }#endif
// waitCANData
M5.update();
if (M5.BtnA.isPressed())
{
M5.Lcd.fillScreen(YELLOW);
esp_restart();
}
delay(10);
}
"Platformio.ini
"
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_deps =
m5stack/M5Dial@^1.0.2
m5stack/M5Unified@^0.1.11
m5stack/M5GFX@^0.1.11
miwagner/ESP32CAN@^0.0.1
platform_packages = framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.14.zip
lib_ldf_mode = deep+
upload_speed = 1500000
upload_port = COM7
monitor_speed = 115200
monitor_port = COM7
" -
-
Hi Felix
Do you know if there is any plan to develop/recommend one as the M5Dial is perfect for Automotive applications?Yours Simon M.
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login