diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 800240e..3eec9d1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -39,20 +39,23 @@ jobs: python -m pip install --upgrade pip pip install --upgrade platformio - name: Run PlatformIO - run: pio run -e wemos_d1_mini32 -e wemos_d1_mini32_cob -e wemos_d1_mini32_uart -e wemos_d1_mini32_cob_uart -e lolin_wemos_s3_mini -e lolin_wemos_s3_mini_cob -e lolin_wemos_s3_mini_uart -e lolin_wemos_s3_mini_cob_uart + run: pio run -e wemos_d1_mini32 -e wemos_d1_mini32_cob -e wemos_d1_mini32_uart -e wemos_d1_mini32_cob_uart -e lolin_wemos_s3_mini -e lolin_wemos_s3_mini_cob -e lolin_wemos_s3_mini_uart -e lolin_wemos_s3_mini_cob_uart -e esp32c3_devkitm_1 -e esp32c3_devkitm_1_uart -e nodemcu-32s_uart - name: Rename firmware files run: | mv .pio/build/lolin_wemos_s3_mini/firmware_lolin_wemos_s3_mini.bin .pio/build/lolin_wemos_s3_mini/firmware_lolin_wemos_s3_mini-v${{ github.ref_name }}.bin mv .pio/build/lolin_wemos_s3_mini_cob/firmware_lolin_wemos_s3_mini_cob.bin .pio/build/lolin_wemos_s3_mini_cob/firmware_lolin_wemos_s3_mini-cob-v${{ github.ref_name }}.bin mv .pio/build/lolin_wemos_s3_mini_uart/firmware_lolin_wemos_s3_mini_uart.bin .pio/build/lolin_wemos_s3_mini_uart/firmware_lolin_wemos_s3_mini-uart-v${{ github.ref_name }}.bin mv .pio/build/lolin_wemos_s3_mini_cob_uart/firmware_lolin_wemos_s3_mini_cob_uart.bin .pio/build/lolin_wemos_s3_mini_cob_uart/firmware_lolin_wemos_s3_mini-cob_uart-v${{ github.ref_name }}.bin + mv .pio/build/esp32c3_devkitm_1/firmware_esp32c3_devkitm_1.bin .pio/build/esp32c3_devkitm_1/firmware_esp32c3_devkitm_1-v${{ github.ref_name }}.bin + mv .pio/build/esp32c3_devkitm_1_uart/firmware_esp32c3_devkitm_1_uart.bin .pio/build/esp32c3_devkitm_1_uart/firmware_esp32c3_devkitm_1_uart-v${{ github.ref_name }}.bin + mv .pio/build/nodemcu-32s_uart/firmware_nodemcu-32s_uart.bin .pio/build/nodemcu-32s_uart/firmware_nodemcu-32s_uart-v${{ github.ref_name }}.bin mv .pio/build/wemos_d1_mini32/firmware_wemos_d1_mini32.bin .pio/build/wemos_d1_mini32/firmware_wemos_d1_mini32-v${{ github.ref_name }}.bin mv .pio/build/wemos_d1_mini32_cob/firmware_wemos_d1_mini32_cob.bin .pio/build/wemos_d1_mini32_cob/firmware_wemos_d1_mini32-cob-v${{ github.ref_name }}.bin mv .pio/build/wemos_d1_mini32_uart/firmware_wemos_d1_mini32_uart.bin .pio/build/wemos_d1_mini32_uart/firmware_wemos_d1_mini32-uart-v${{ github.ref_name }}.bin mv .pio/build/wemos_d1_mini32_cob_uart/firmware_wemos_d1_mini32_cob_uart.bin .pio/build/wemos_d1_mini32_cob_uart/firmware_wemos_d1_mini32-cob_uart-v${{ github.ref_name }}.bin - name: Calculate checksums run: | - for file in $(ls .pio/build/wemos_d1_mini32*/*.bin .pio/build/lolin_wemos_s3_mini*/*.bin); do + for file in $(ls .pio/build/wemos_d1_mini32*/*.bin .pio/build/lolin_wemos_s3_mini*/*.bin .pio/build/esp32c3_devkitm_1*/*.bin .pio/build/nodemcu-32s_uart/*.bin); do sha256sum $file | cut -d " " -f 1 > $file.sha256 done - name: Release @@ -66,6 +69,9 @@ jobs: .pio/build/lolin_wemos_s3_mini_cob/firmware_lolin_wemos_s3_mini-cob-v${{ github.ref_name }}.bin .pio/build/lolin_wemos_s3_mini_uart/firmware_lolin_wemos_s3_mini-uart-v${{ github.ref_name }}.bin .pio/build/lolin_wemos_s3_mini_cob_uart/firmware_lolin_wemos_s3_mini-cob_uart-v${{ github.ref_name }}.bin + .pio/build/esp32c3_devkitm_1/firmware_esp32c3_devkitm_1-v${{ github.ref_name }}.bin + .pio/build/esp32c3_devkitm_1_uart/firmware_esp32c3_devkitm_1_uart-v${{ github.ref_name }}.bin + .pio/build/nodemcu-32s_uart/firmware_nodemcu-32s_uart-v${{ github.ref_name }}.bin .pio/build/wemos_d1_mini32/firmware_wemos_d1_mini32-v${{ github.ref_name }}.bin .pio/build/wemos_d1_mini32_cob/firmware_wemos_d1_mini32-cob-v${{ github.ref_name }}.bin .pio/build/wemos_d1_mini32_uart/firmware_wemos_d1_mini32-uart-v${{ github.ref_name }}.bin @@ -76,6 +82,9 @@ jobs: .pio/build/lolin_wemos_s3_mini_cob/firmware_lolin_wemos_s3_mini-cob-v${{ github.ref_name }}.bin.sha256 .pio/build/lolin_wemos_s3_mini_uart/firmware_lolin_wemos_s3_mini-uart-v${{ github.ref_name }}.bin.sha256 .pio/build/lolin_wemos_s3_mini_cob_uart/firmware_lolin_wemos_s3_mini-cob_uart-v${{ github.ref_name }}.bin.sha256 + .pio/build/esp32c3_devkitm_1/firmware_esp32c3_devkitm_1-v${{ github.ref_name }}.bin.sha256 + .pio/build/esp32c3_devkitm_1_uart/firmware_esp32c3_devkitm_1_uart-v${{ github.ref_name }}.bin.sha256 + .pio/build/nodemcu-32s_uart/firmware_nodemcu-32s_uart-v${{ github.ref_name }}.bin.sha256 .pio/build/wemos_d1_mini32/firmware_wemos_d1_mini32-v${{ github.ref_name }}.bin.sha256 .pio/build/wemos_d1_mini32_cob/firmware_wemos_d1_mini32-cob-v${{ github.ref_name }}.bin.sha256 .pio/build/wemos_d1_mini32_uart/firmware_wemos_d1_mini32-uart-v${{ github.ref_name }}.bin.sha256 diff --git a/.gitignore b/.gitignore index 4bafaae..138b451 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,7 @@ extensions.json /CMakeListsPrivate.txt rESCue.code-workspace .vscode/settings.json + +# Clangd related: +.cache +compile_commands.json diff --git a/platformio.ini b/platformio.ini index d820e93..3c648aa 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,10 +13,13 @@ default_envs = wemos_d1_mini32 ;default_envs = esp32doit_devkit_v1 ;default_envs = esp32doit_devkit_v1_uart ;default_envs = nodemcu-32s +;default_envs = nodemcu-32s_uart ;default_envs = avaspark-rgb ;default_envs = lolin_wemos_s3_mini ;default_envs = feather_esp32 ;default_envs = m5stack-stamps3 +;default_envs = esp32c3_devkitm_1 +;default_envs = esp32c3_devkitm_1_uart [common_env_data] lib_deps_external = @@ -46,8 +49,8 @@ build_flags= -D LIGHT_BAR_PIN=2 ; DIN of WS28xx for battery indicator -D VESC_RX_PIN=16 ; UART RX to Cheap Focer 2, connent to TX on CF2 -D VESC_TX_PIN=17 ; UART TX to Cheap Focer 2, connent to RX on CF2 - -D CAN_TX_PIN=_26 - -D CAN_RX_PIN=_27 + -D CAN_TX_PIN=26 + -D CAN_RX_PIN=27 [FEATHER-ESP32] build_flags= @@ -63,8 +66,8 @@ build_flags= -D LIGHT_BAR_PIN=13 ; DIN of WS28xx for battery indicator -D VESC_RX_PIN=7 ; UART RX to Cheap Focer 2, connent to TX on CF2 -D VESC_TX_PIN=8 ; UART TX to Cheap Focer 2, connent to RX on CF2 - -D CAN_TX_PIN=_26 - -D CAN_RX_PIN=_27 + -D CAN_TX_PIN=26 + -D CAN_RX_PIN=27 [ESP32-S3] build_flags= @@ -84,6 +87,22 @@ build_flags= -D CAN_RX_PIN=17 -D ESP32S3 +[ESP32-C3] +build_flags= + ${common_env_data.build_flags} + -D PIN_NEOPIXEL=8 ; DIN of WS28xx stripe for front- / backlight, only needed if WS28xx is used + -D PIN_FORWARD=3 ; digital signal from Cheap Focer 2 if direction is forward + -D PIN_BACKWARD=4 ; digital signal from Cheap Focer 2 if direction is backward + -D PIN_BRAKE=5 ; digital signal from Cheap Focer 2 if electric motor brakes is on + -D BUZPIN=6 ; PIN for Piezo buzzer for acoustic signals (e.g. battery warning) + -D BATTERY_PIN=1 ; analog input for battery monitor, connected to voltage divider + -D LIGHT_BAR_PIN=7 ; DIN of WS28xx for battery indicator + -D VESC_RX_PIN=20 ; UART RX to Cheap Focer 2, connent to TX on CF2 + -D VESC_TX_PIN=21 ; UART TX to Cheap Focer 2, connent to RX on CF2 + -D CAN_TX_PIN=9 + -D CAN_RX_PIN=10 + -D VESC_UART_PORT=1 ; UART port for VESC + [AVASPARK-RGB] build_flags= ${common_env_data.build_flags} @@ -99,8 +118,8 @@ build_flags= -D LIGHT_BAR_PIN=19 ; DIN of WS28xx for battery indicator ;-D VESC_RX_PIN=32 ; UART RX to Cheap Focer 2, connent to TX on CF2 ;-D VESC_TX_PIN=33 ; UART TX to Cheap Focer 2, connent to RX on CF2 - -D CAN_TX_PIN=_33 - -D CAN_RX_PIN=_32 + -D CAN_TX_PIN=33 + -D CAN_RX_PIN=32 -D PIN_BOARD_LED=16 ; Onboard LED for avaspark-rgb -D BMS_TX_PIN=23 ; Map UART RX to BMS TX Pin -D BMS_ON_PIN=25 ; Map GPIO to trigger IRF540N 100v N-channel mosfet which emulates momentary button for OWIE BMS on (battery voltage on blue wire) to ground. Connect the Source pin of the MOSFET to ground. Connect the Drain pin to the BMS's wake-up wire. Connect the Gate pin to the microcontroller's TX pin. @@ -176,6 +195,18 @@ build_flags = extra_scripts = pre:change_firmware_name.py custom_firmware_name = firmware_nodemcu-32s +[env:nodemcu-32s_uart] +platform = espressif32 +board = nodemcu-32s +framework = arduino +monitor_speed = 115200 +board_build.partitions = default.csv +lib_deps = + ${common_env_data.lib_deps_external} +build_flags = ${ESP32.build_flags} -D LED_WS28xx +extra_scripts = pre:change_firmware_name.py +custom_firmware_name = firmware_nodemcu-32s_uart + [env:avaspark-rgb] platform = espressif32 board = nodemcu-32s @@ -242,4 +273,20 @@ monitor_filters = esp32_exception_decoder ; build_type = debug extra_scripts = pre:change_firmware_name.py -custom_firmware_name = firmware_m5stack_stamps3 \ No newline at end of file +custom_firmware_name = firmware_m5stack_stamps3 + +[env:esp32c3_devkitm_1] +platform = espressif32 +board = esp32-c3-devkitm-1 +framework = arduino +monitor_speed = 115200 +board_build.partitions = default.csv +lib_deps = ${common_env_data.lib_deps_external} +build_flags = ${ESP32-C3.build_flags} -D LED_WS28xx -D CANBUS_ENABLED -D CANBUS_ONLY +extra_scripts = pre:change_firmware_name.py +custom_firmware_name = firmware_esp32c3_devkitm_1 + +[env:esp32c3_devkitm_1_uart] +extends = env:esp32c3_devkitm_1 +build_flags = ${ESP32-C3.build_flags} -D LED_WS28xx +custom_firmware_name = firmware_esp32c3_devkitm_1_uart \ No newline at end of file diff --git a/src/CanDevice.h b/src/CanDevice.h index ace07e4..205f92f 100644 --- a/src/CanDevice.h +++ b/src/CanDevice.h @@ -15,18 +15,11 @@ static const char* LOG_TAG_CANDEVICE = "CanDevice"; #define CAN_RX_PIN 27 #endif //CAN_RX_PIN -//Macros to fix actually being able to map the CAN GPIO pins in platformio.ini instead of them being hard coded in init() for TWAI_GENERAL_CONFIG_DEFAULT(); -#ifndef ESP32S3 - #define GPIO_NUM_HELPER(x) GPIO_NUM##x - #define GPIO_NUM(x) GPIO_NUM_HELPER(x) - #define GPIO_CAN_TX_PIN GPIO_NUM(CAN_TX_PIN) - #define GPIO_CAN_RX_PIN GPIO_NUM(CAN_RX_PIN) -#else - #define GPIO_NUM_HELPER(x) GPIO_NUM_##x - #define GPIO_NUM_(x) GPIO_NUM_HELPER(x) - #define GPIO_CAN_TX_PIN GPIO_NUM_(CAN_TX_PIN) - #define GPIO_CAN_RX_PIN GPIO_NUM_(CAN_RX_PIN) -#endif +// Map numeric CAN pin defines (e.g. 9) to gpio_num_t enum constants (GPIO_NUM_9). +#define GPIO_NUM_HELPER(x) GPIO_NUM_##x +#define GPIO_NUM_(x) GPIO_NUM_HELPER(x) +#define GPIO_CAN_TX_PIN GPIO_NUM_(CAN_TX_PIN) +#define GPIO_CAN_RX_PIN GPIO_NUM_(CAN_RX_PIN) class CanDevice { private: diff --git a/src/config.h b/src/config.h index 19d0643..aee5d6d 100644 --- a/src/config.h +++ b/src/config.h @@ -34,6 +34,10 @@ #define VESC_BAUD_RATE 115200 // BAUD rate of the CF2 +#ifndef VESC_UART_PORT +#define VESC_UART_PORT 2 +#endif + #define VESC_CAN_ID 25 //VESC-ID as configured in VESC as decimal #endif //__CONFIG_H__ diff --git a/src/main.cpp b/src/main.cpp index 21ad171..eb358cf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,6 +15,14 @@ const int mainBufSize = 128; char mainBuf[mainBufSize]; +#if defined(CANBUS_ENABLED) && !defined(CANBUS_ONLY) + #error "CANBUS_ENABLED and CANBUS_ONLY must both be defined for CANBUS mode. For UART mode, define neither." +#endif + +#if defined(CANBUS_ONLY) && !defined(CANBUS_ENABLED) + #error "CANBUS_ENABLED and CANBUS_ONLY must both be defined for CANBUS mode. For UART mode, define neither." +#endif + #if defined(CANBUS_ENABLED) && defined(BMS_TX_PIN) && defined(BMS_ON_PIN) #include "BMSController.h" #endif @@ -35,7 +43,7 @@ BLE_OTA_DFU ota_dfu_ble; VescData vescData; #ifndef CANBUS_ENABLED - HardwareSerial vesc(2); + HardwareSerial vesc(VESC_UART_PORT); #endif ILedController *ledController;