...bump
This commit is contained in:
parent
5d3cbea388
commit
e912b7ec50
|
|
@ -450,450 +450,6 @@
|
||||||
"RMT_CLK_SRC_DEFAULT = SOC_MOD_CLK_APB",
|
"RMT_CLK_SRC_DEFAULT = SOC_MOD_CLK_APB",
|
||||||
"USBCON"
|
"USBCON"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Arduino",
|
|
||||||
"compilerPath": "/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/bin/xtensa-esp32-elf-g++",
|
|
||||||
"compilerArgs": [
|
|
||||||
"-MMD",
|
|
||||||
"-w",
|
|
||||||
"-Werror=return-type",
|
|
||||||
"-iprefix"
|
|
||||||
],
|
|
||||||
"intelliSenseMode": "gcc-x64",
|
|
||||||
"includePath": [
|
|
||||||
"/home/derdoktor667/Github/DShotRMT/examples/dshot300",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp32-arduino-libs/idf-release_v5.5-b66b5448-v1/esp32/qio_qspi/include",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/hardware/esp32/3.3.0/cores/esp32",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/hardware/esp32/3.3.0/variants/esp32",
|
|
||||||
"/home/derdoktor667/Arduino/libraries/DShotRMT/src",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/xtensa-esp-elf/include/c++/14.2.0",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/xtensa-esp-elf/include/c++/14.2.0/xtensa-esp-elf/esp32",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/xtensa-esp-elf/include/c++/14.2.0/backward",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/lib/gcc/xtensa-esp-elf/14.2.0/include",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/lib/gcc/xtensa-esp-elf/14.2.0/include-fixed",
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/tools/esp-x32/2411/xtensa-esp-elf/include"
|
|
||||||
],
|
|
||||||
"forcedInclude": [
|
|
||||||
"/home/derdoktor667/.arduino15/packages/esp32/hardware/esp32/3.3.0/cores/esp32/Arduino.h"
|
|
||||||
],
|
|
||||||
"cStandard": "c11",
|
|
||||||
"cppStandard": "c++11",
|
|
||||||
"defines": [
|
|
||||||
"F_CPU=240000000L",
|
|
||||||
"ARDUINO=10607",
|
|
||||||
"ARDUINO_ESP32_DEV",
|
|
||||||
"ARDUINO_ARCH_ESP32",
|
|
||||||
"ARDUINO_BOARD=\"ESP32_DEV\"",
|
|
||||||
"ARDUINO_VARIANT=\"esp32\"",
|
|
||||||
"ARDUINO_PARTITION_default",
|
|
||||||
"ARDUINO_HOST_OS=\"linux\"",
|
|
||||||
"ARDUINO_FQBN=\"esp32:esp32:esp32:JTAGAdapter=default,PSRAM=disabled,PartitionScheme=default,CPUFreq=240,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,LoopCore=1,EventsCore=1,DebugLevel=none,EraseFlash=all,ZigbeeMode=default\"",
|
|
||||||
"ESP32=ESP32",
|
|
||||||
"CORE_DEBUG_LEVEL=0",
|
|
||||||
"ARDUINO_RUNNING_CORE=1",
|
|
||||||
"ARDUINO_EVENT_RUNNING_CORE=1",
|
|
||||||
"ARDUINO_USB_CDC_ON_BOOT=0",
|
|
||||||
"__DBL_MIN_EXP__=(-1021)",
|
|
||||||
"__XCHAL_HAVE_FP=1",
|
|
||||||
"__cpp_nontype_template_parameter_auto=201606L",
|
|
||||||
"__UINT_LEAST16_MAX__=0xffff",
|
|
||||||
"__ATOMIC_ACQUIRE=2",
|
|
||||||
"__FLT_MIN__=1.1754943508222875e-38F",
|
|
||||||
"__GCC_IEC_559_COMPLEX=0",
|
|
||||||
"__XCHAL_HAVE_PREDICTED_BRANCHES=0",
|
|
||||||
"__cpp_aggregate_nsdmi=201304L",
|
|
||||||
"__UINT_LEAST8_TYPE__=unsigned char",
|
|
||||||
"__INTMAX_C(c)=c ## LL",
|
|
||||||
"__XCHAL_HAVE_ADDX=1",
|
|
||||||
"__CHAR_BIT__=8",
|
|
||||||
"__XCHAL_DCACHE_LINESIZE=16",
|
|
||||||
"__XTENSA_MARCH_EARLIEST=260003",
|
|
||||||
"__XCHAL_DCACHE_LINEWIDTH=4",
|
|
||||||
"__UINT8_MAX__=0xff",
|
|
||||||
"__WINT_MAX__=0xffffffffU",
|
|
||||||
"__FLT32_MIN_EXP__=(-125)",
|
|
||||||
"__cpp_static_assert=201411L",
|
|
||||||
"__ORDER_LITTLE_ENDIAN__=1234",
|
|
||||||
"__SIZE_MAX__=0xffffffffU",
|
|
||||||
"__WCHAR_MAX__=0xffff",
|
|
||||||
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1",
|
|
||||||
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1",
|
|
||||||
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1",
|
|
||||||
"__DBL_DENORM_MIN__=double(4.9406564584124654e-324L)",
|
|
||||||
"__GCC_ATOMIC_CHAR_LOCK_FREE=2",
|
|
||||||
"__GCC_IEC_559=0",
|
|
||||||
"__FLT32X_DECIMAL_DIG__=17",
|
|
||||||
"__FLT_EVAL_METHOD__=0",
|
|
||||||
"__cpp_binary_literals=201304L",
|
|
||||||
"__FLT64_DECIMAL_DIG__=17",
|
|
||||||
"__cpp_noexcept_function_type=201510L",
|
|
||||||
"__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2",
|
|
||||||
"__cpp_variadic_templates=200704L",
|
|
||||||
"__UINT_FAST64_MAX__=0xffffffffffffffffULL",
|
|
||||||
"__SIG_ATOMIC_TYPE__=int",
|
|
||||||
"__DBL_MIN_10_EXP__=(-307)",
|
|
||||||
"__FINITE_MATH_ONLY__=0",
|
|
||||||
"__cpp_variable_templates=201304L",
|
|
||||||
"__XCHAL_HAVE_L32R=1",
|
|
||||||
"__FLT32X_MAX_EXP__=1024",
|
|
||||||
"__GNUC_PATCHLEVEL__=0",
|
|
||||||
"__FLT32_HAS_DENORM__=1",
|
|
||||||
"__UINT_FAST8_MAX__=0xffffffffU",
|
|
||||||
"__cpp_rvalue_reference=200610L",
|
|
||||||
"__XCHAL_HAVE_LOOPS=1",
|
|
||||||
"__cpp_nested_namespace_definitions=201411L",
|
|
||||||
"__XCHAL_DEBUGLEVEL=6",
|
|
||||||
"__INT8_C(c)=c",
|
|
||||||
"__XCHAL_HAVE_DFP_RECIP=0",
|
|
||||||
"__INT_LEAST8_WIDTH__=8",
|
|
||||||
"__cpp_variadic_using=201611L",
|
|
||||||
"__UINT_LEAST64_MAX__=0xffffffffffffffffULL",
|
|
||||||
"__INT_LEAST8_MAX__=0x7f",
|
|
||||||
"__cpp_attributes=200809L",
|
|
||||||
"__cpp_capture_star_this=201603L",
|
|
||||||
"__SHRT_MAX__=0x7fff",
|
|
||||||
"__LDBL_MAX__=1.7976931348623157e+308L",
|
|
||||||
"__cpp_if_constexpr=201606L",
|
|
||||||
"__XCHAL_ICACHE_LINESIZE=16",
|
|
||||||
"__LDBL_IS_IEC_60559__=1",
|
|
||||||
"__UINT_LEAST8_MAX__=0xff",
|
|
||||||
"__GCC_ATOMIC_BOOL_LOCK_FREE=2",
|
|
||||||
"__UINTMAX_TYPE__=long long unsigned int",
|
|
||||||
"__cpp_nsdmi=200809L",
|
|
||||||
"__FLT_EVAL_METHOD_TS_18661_3__=0",
|
|
||||||
"__UINT32_MAX__=0xffffffffUL",
|
|
||||||
"__GXX_EXPERIMENTAL_CXX0X__=1",
|
|
||||||
"__LDBL_MAX_EXP__=1024",
|
|
||||||
"__WINT_MIN__=0U",
|
|
||||||
"__FLT32X_IS_IEC_60559__=1",
|
|
||||||
"__XCHAL_HAVE_THREADPTR=1",
|
|
||||||
"__INT_LEAST16_WIDTH__=16",
|
|
||||||
"__SCHAR_MAX__=0x7f",
|
|
||||||
"__WCHAR_MIN__=0",
|
|
||||||
"__XCHAL_ICACHE_LINEWIDTH=4",
|
|
||||||
"__INT64_C(c)=c ## LL",
|
|
||||||
"__GCC_ATOMIC_POINTER_LOCK_FREE=2",
|
|
||||||
"__ATOMIC_SEQ_CST=5",
|
|
||||||
"__SIZEOF_INT__=4",
|
|
||||||
"__FLT32X_MANT_DIG__=53",
|
|
||||||
"__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2",
|
|
||||||
"__cpp_aligned_new=201606L",
|
|
||||||
"__XCHAL_HAVE_FP_RECIP=1",
|
|
||||||
"__FLT32_MAX_10_EXP__=38",
|
|
||||||
"__STDC_HOSTED__=1",
|
|
||||||
"__XCHAL_HAVE_MUL32=1",
|
|
||||||
"__XTENSA_EL__=1",
|
|
||||||
"__cpp_decltype_auto=201304L",
|
|
||||||
"__DBL_DIG__=15",
|
|
||||||
"__XCHAL_HAVE_MUL16=1",
|
|
||||||
"__FLT_EPSILON__=1.1920928955078125e-7F",
|
|
||||||
"__GXX_WEAK__=1",
|
|
||||||
"__SHRT_WIDTH__=16",
|
|
||||||
"__FLT32_IS_IEC_60559__=1",
|
|
||||||
"__LDBL_MIN__=2.2250738585072014e-308L",
|
|
||||||
"__DBL_IS_IEC_60559__=1",
|
|
||||||
"__cpp_threadsafe_static_init=200806L",
|
|
||||||
"__cpp_enumerator_attributes=201411L",
|
|
||||||
"__XCHAL_HAVE_MMU=0",
|
|
||||||
"__FLT32X_HAS_INFINITY__=1",
|
|
||||||
"__INT32_MAX__=0x7fffffffL",
|
|
||||||
"__XCHAL_HAVE_DIV32=1",
|
|
||||||
"__INT_WIDTH__=32",
|
|
||||||
"__XTENSA_MARCH_LATEST=260003",
|
|
||||||
"__DECIMAL_DIG__=17",
|
|
||||||
"__FLT64_EPSILON__=2.2204460492503131e-16F64",
|
|
||||||
"__INT16_MAX__=0x7fff",
|
|
||||||
"__FLT64_MIN_EXP__=(-1021)",
|
|
||||||
"__XCHAL_DCACHE_SIZE=0",
|
|
||||||
"__LDBL_HAS_QUIET_NAN__=1",
|
|
||||||
"__cpp_return_type_deduction=201304L",
|
|
||||||
"__XCHAL_HAVE_BOOLEANS=1",
|
|
||||||
"__FLT64_MANT_DIG__=53",
|
|
||||||
"__XTHAL_ABI_WINDOWED=0",
|
|
||||||
"__GNUC__=14",
|
|
||||||
"__GXX_RTTI=1",
|
|
||||||
"__FLT_HAS_DENORM__=1",
|
|
||||||
"__SIZEOF_LONG_DOUBLE__=8",
|
|
||||||
"__XCHAL_HAVE_CONST16=0",
|
|
||||||
"__BIGGEST_ALIGNMENT__=16",
|
|
||||||
"__STDC_UTF_16__=1",
|
|
||||||
"__FLT64_MAX_10_EXP__=308",
|
|
||||||
"__cpp_delegating_constructors=200604L",
|
|
||||||
"__DBL_MAX__=double(1.7976931348623157e+308L)",
|
|
||||||
"__cpp_raw_strings=200710L",
|
|
||||||
"__INT_FAST32_MAX__=0x7fffffff",
|
|
||||||
"__DBL_HAS_INFINITY__=1",
|
|
||||||
"__cpp_deduction_guides=201703L",
|
|
||||||
"__HAVE_SPECULATION_SAFE_VALUE=1",
|
|
||||||
"__cpp_fold_expressions=201603L",
|
|
||||||
"__INTPTR_WIDTH__=32",
|
|
||||||
"__UINT_LEAST32_MAX__=0xffffffffUL",
|
|
||||||
"__FLT32X_HAS_DENORM__=1",
|
|
||||||
"__INT_FAST16_TYPE__=int",
|
|
||||||
"__XCHAL_HAVE_RELEASE_SYNC=1",
|
|
||||||
"__LDBL_HAS_DENORM__=1",
|
|
||||||
"__cplusplus=201703L",
|
|
||||||
"__cpp_ref_qualifiers=200710L",
|
|
||||||
"__INT_LEAST32_MAX__=0x7fffffffL",
|
|
||||||
"__DEPRECATED=1",
|
|
||||||
"__cpp_rvalue_references=200610L",
|
|
||||||
"__DBL_MAX_EXP__=1024",
|
|
||||||
"__WCHAR_WIDTH__=16",
|
|
||||||
"__FLT32_MAX__=3.4028234663852886e+38F32",
|
|
||||||
"__GCC_ATOMIC_LONG_LOCK_FREE=2",
|
|
||||||
"__PTRDIFF_MAX__=0x7fffffff",
|
|
||||||
"__FLT32_HAS_QUIET_NAN__=1",
|
|
||||||
"__GNUG__=14",
|
|
||||||
"__LONG_LONG_MAX__=0x7fffffffffffffffLL",
|
|
||||||
"__SIZEOF_SIZE_T__=4",
|
|
||||||
"__SIZEOF_WINT_T__=4",
|
|
||||||
"__FLT32X_DIG__=15",
|
|
||||||
"__LONG_LONG_WIDTH__=64",
|
|
||||||
"__cpp_initializer_lists=200806L",
|
|
||||||
"__FLT32_MAX_EXP__=128",
|
|
||||||
"__XCHAL_HAVE_MINMAX=1",
|
|
||||||
"__cpp_hex_float=201603L",
|
|
||||||
"__XCHAL_NUM_IBREAK=2",
|
|
||||||
"__GXX_ABI_VERSION=1019",
|
|
||||||
"__FLT_MIN_EXP__=(-125)",
|
|
||||||
"__cpp_lambdas=200907L",
|
|
||||||
"__INT_FAST64_TYPE__=long long int",
|
|
||||||
"__FP_FAST_FMAF=1",
|
|
||||||
"__FLT64_DENORM_MIN__=4.9406564584124654e-324F64",
|
|
||||||
"__DBL_MIN__=double(2.2250738585072014e-308L)",
|
|
||||||
"__SIZEOF_POINTER__=4",
|
|
||||||
"__DBL_HAS_QUIET_NAN__=1",
|
|
||||||
"__FLT32X_EPSILON__=2.2204460492503131e-16F32x",
|
|
||||||
"__XSHAL_HAVE_TEXT_SECTION_LITERALS=1",
|
|
||||||
"__FLT64_MIN_10_EXP__=(-307)",
|
|
||||||
"__REGISTER_PREFIX__",
|
|
||||||
"__UINT16_MAX__=0xffff",
|
|
||||||
"__XSHAL_USE_ABSOLUTE_LITERALS=0",
|
|
||||||
"__LDBL_HAS_INFINITY__=1",
|
|
||||||
"__FLT32_MIN__=1.1754943508222875e-38F32",
|
|
||||||
"__UINT8_TYPE__=unsigned char",
|
|
||||||
"__FLT_DIG__=6",
|
|
||||||
"__NO_INLINE__=1",
|
|
||||||
"__DEC_EVAL_METHOD__=2",
|
|
||||||
"__FLT_MANT_DIG__=24",
|
|
||||||
"__LDBL_DECIMAL_DIG__=17",
|
|
||||||
"__VERSION__=\"14.2.0\"",
|
|
||||||
"__UINT64_C(c)=c ## ULL",
|
|
||||||
"__XCHAL_NUM_AREGS=64",
|
|
||||||
"__cpp_unicode_characters=201411L",
|
|
||||||
"__XCHAL_HAVE_XEA3=0",
|
|
||||||
"__GCC_ATOMIC_INT_LOCK_FREE=2",
|
|
||||||
"__XCHAL_HAVE_DENSITY=1",
|
|
||||||
"__FLT32_MANT_DIG__=24",
|
|
||||||
"__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__",
|
|
||||||
"__XCHAL_HAVE_CLAMPS=0",
|
|
||||||
"__XCHAL_HAVE_DFP_RSQRT=0",
|
|
||||||
"__cpp_aggregate_bases=201603L",
|
|
||||||
"__XCHAL_HAVE_NSA=1",
|
|
||||||
"__XCHAL_HAVE_WINDOWED=1",
|
|
||||||
"__SCHAR_WIDTH__=8",
|
|
||||||
"__INT32_C(c)=c ## L",
|
|
||||||
"__ORDER_PDP_ENDIAN__=3412",
|
|
||||||
"__INT_FAST32_TYPE__=int",
|
|
||||||
"__UINT_LEAST16_TYPE__=short unsigned int",
|
|
||||||
"__DBL_HAS_DENORM__=1",
|
|
||||||
"__XCHAL_HAVE_DEBUG=1",
|
|
||||||
"__cpp_rtti=199711L",
|
|
||||||
"__SIZE_TYPE__=unsigned int",
|
|
||||||
"__UINT64_MAX__=0xffffffffffffffffULL",
|
|
||||||
"__FLT_IS_IEC_60559__=1",
|
|
||||||
"__GNUC_WIDE_EXECUTION_CHARSET_NAME=\"UTF-16LE\"",
|
|
||||||
"__INT8_TYPE__=signed char",
|
|
||||||
"__cpp_digit_separators=201309L",
|
|
||||||
"__ELF__=1",
|
|
||||||
"__XSHAL_ABI=0",
|
|
||||||
"__xtensa__=1",
|
|
||||||
"__FLT_RADIX__=2",
|
|
||||||
"__INT_LEAST16_TYPE__=short int",
|
|
||||||
"__LDBL_EPSILON__=2.2204460492503131e-16L",
|
|
||||||
"__UINTMAX_C(c)=c ## ULL",
|
|
||||||
"__FLT32X_MIN__=2.2250738585072014e-308F32x",
|
|
||||||
"__XCHAL_HAVE_DFP_SQRT=0",
|
|
||||||
"__SIG_ATOMIC_MAX__=0x7fffffff",
|
|
||||||
"__XCHAL_HAVE_MAC16=1",
|
|
||||||
"__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2",
|
|
||||||
"__USER_LABEL_PREFIX__",
|
|
||||||
"__SIZEOF_PTRDIFF_T__=4",
|
|
||||||
"__XCHAL_MMU_MIN_PTE_PAGE_SIZE=1",
|
|
||||||
"__XCHAL_DCACHE_IS_WRITEBACK=0",
|
|
||||||
"__SIZEOF_LONG__=4",
|
|
||||||
"__LDBL_DIG__=15",
|
|
||||||
"__FLT64_IS_IEC_60559__=1",
|
|
||||||
"__XCHAL_MAX_INSTRUCTION_SIZE=3",
|
|
||||||
"__FLT32X_MIN_EXP__=(-1021)",
|
|
||||||
"__INT_FAST16_MAX__=0x7fffffff",
|
|
||||||
"__GCC_CONSTRUCTIVE_SIZE=32",
|
|
||||||
"__FLT64_DIG__=15",
|
|
||||||
"__UINT_FAST32_MAX__=0xffffffffU",
|
|
||||||
"__UINT_LEAST64_TYPE__=long long unsigned int",
|
|
||||||
"__FLT_HAS_QUIET_NAN__=1",
|
|
||||||
"__FLT_MAX_10_EXP__=38",
|
|
||||||
"__FLT_HAS_INFINITY__=1",
|
|
||||||
"__GNUC_EXECUTION_CHARSET_NAME=\"UTF-8\"",
|
|
||||||
"__CHAR_UNSIGNED__=1",
|
|
||||||
"__cpp_unicode_literals=200710L",
|
|
||||||
"__UINT_FAST16_TYPE__=unsigned int",
|
|
||||||
"__INT_FAST32_WIDTH__=32",
|
|
||||||
"__CHAR16_TYPE__=short unsigned int",
|
|
||||||
"__PRAGMA_REDEFINE_EXTNAME=1",
|
|
||||||
"__SIZE_WIDTH__=32",
|
|
||||||
"__INT_LEAST16_MAX__=0x7fff",
|
|
||||||
"__INT64_MAX__=0x7fffffffffffffffLL",
|
|
||||||
"__FLT32_DENORM_MIN__=1.4012984643248171e-45F32",
|
|
||||||
"__SIG_ATOMIC_WIDTH__=32",
|
|
||||||
"__INT_LEAST64_TYPE__=long long int",
|
|
||||||
"__INT16_TYPE__=short int",
|
|
||||||
"__INT_LEAST8_TYPE__=signed char",
|
|
||||||
"__cpp_structured_bindings=201606L",
|
|
||||||
"__INT_FAST8_MAX__=0x7fffffff",
|
|
||||||
"__INTPTR_MAX__=0x7fffffff",
|
|
||||||
"__cpp_sized_deallocation=201309L",
|
|
||||||
"__cpp_guaranteed_copy_elision=201606L",
|
|
||||||
"__FLT64_HAS_QUIET_NAN__=1",
|
|
||||||
"__FLT32_MIN_10_EXP__=(-37)",
|
|
||||||
"__EXCEPTIONS=1",
|
|
||||||
"__UINT16_C(c)=c",
|
|
||||||
"__XCHAL_M_STAGE=3",
|
|
||||||
"__PTRDIFF_WIDTH__=32",
|
|
||||||
"__LDBL_MANT_DIG__=53",
|
|
||||||
"__cpp_range_based_for=201603L",
|
|
||||||
"__FLT64_HAS_INFINITY__=1",
|
|
||||||
"__STDCPP_DEFAULT_NEW_ALIGNMENT__=8",
|
|
||||||
"__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)",
|
|
||||||
"__XCHAL_ICACHE_SIZE=0",
|
|
||||||
"__cpp_nontype_template_args=201411L",
|
|
||||||
"__INTPTR_TYPE__=int",
|
|
||||||
"__UINT16_TYPE__=short unsigned int",
|
|
||||||
"__WCHAR_TYPE__=short unsigned int",
|
|
||||||
"__XCHAL_HAVE_DEPBITS=0",
|
|
||||||
"__SIZEOF_FLOAT__=4",
|
|
||||||
"__UINTPTR_MAX__=0xffffffffU",
|
|
||||||
"__INT_FAST64_WIDTH__=64",
|
|
||||||
"__cpp_decltype=200707L",
|
|
||||||
"__FLT32_DECIMAL_DIG__=9",
|
|
||||||
"__INT_FAST64_MAX__=0x7fffffffffffffffLL",
|
|
||||||
"__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1",
|
|
||||||
"__FLT_NORM_MAX__=3.4028234663852886e+38F",
|
|
||||||
"__XCHAL_HAVE_DFP=0",
|
|
||||||
"__FLT32_HAS_INFINITY__=1",
|
|
||||||
"__UINT_FAST64_TYPE__=long long unsigned int",
|
|
||||||
"__cpp_inline_variables=201606L",
|
|
||||||
"__INT_MAX__=0x7fffffff",
|
|
||||||
"__XCHAL_HAVE_EXCLUSIVE=0",
|
|
||||||
"__STDCPP_THREADS__=1",
|
|
||||||
"__INT64_TYPE__=long long int",
|
|
||||||
"__XCHAL_HAVE_DFP_DIV=0",
|
|
||||||
"__FLT_MAX_EXP__=128",
|
|
||||||
"__XCHAL_INST_FETCH_WIDTH=4",
|
|
||||||
"__DBL_MANT_DIG__=53",
|
|
||||||
"__cpp_inheriting_constructors=201511L",
|
|
||||||
"__INT_LEAST64_MAX__=0x7fffffffffffffffLL",
|
|
||||||
"__FP_FAST_FMAF32=1",
|
|
||||||
"__WINT_TYPE__=unsigned int",
|
|
||||||
"__UINT_LEAST32_TYPE__=long unsigned int",
|
|
||||||
"__SIZEOF_SHORT__=2",
|
|
||||||
"__FLT32_NORM_MAX__=3.4028234663852886e+38F32",
|
|
||||||
"__LDBL_MIN_EXP__=(-1021)",
|
|
||||||
"__XCHAL_HAVE_S32C1I=1",
|
|
||||||
"__FLT64_MAX__=1.7976931348623157e+308F64",
|
|
||||||
"__WINT_WIDTH__=32",
|
|
||||||
"__cpp_template_auto=201606L",
|
|
||||||
"__INT_LEAST64_WIDTH__=64",
|
|
||||||
"__FLT32X_MAX_10_EXP__=308",
|
|
||||||
"__cpp_namespace_attributes=201411L",
|
|
||||||
"__WCHAR_UNSIGNED__=1",
|
|
||||||
"__LDBL_MAX_10_EXP__=308",
|
|
||||||
"__ATOMIC_RELAXED=0",
|
|
||||||
"__DBL_EPSILON__=double(2.2204460492503131e-16L)",
|
|
||||||
"__XCHAL_HAVE_SEXT=1",
|
|
||||||
"__INT_LEAST32_TYPE__=long int",
|
|
||||||
"__XTENSA_WINDOWED_ABI__=1",
|
|
||||||
"__UINT8_C(c)=c",
|
|
||||||
"__FLT64_MAX_EXP__=1024",
|
|
||||||
"__SIZEOF_WCHAR_T__=2",
|
|
||||||
"__XCHAL_HAVE_FP_POSTINC=1",
|
|
||||||
"__FLT64_NORM_MAX__=1.7976931348623157e+308F64",
|
|
||||||
"__INTMAX_MAX__=0x7fffffffffffffffLL",
|
|
||||||
"__INT_FAST8_TYPE__=int",
|
|
||||||
"__XCHAL_HAVE_MUL32_HIGH=1",
|
|
||||||
"__GNUC_STDC_INLINE__=1",
|
|
||||||
"__FLT64_HAS_DENORM__=1",
|
|
||||||
"__FLT32_EPSILON__=1.1920928955078125e-7F32",
|
|
||||||
"__DBL_DECIMAL_DIG__=17",
|
|
||||||
"__STDC_UTF_32__=1",
|
|
||||||
"__XCHAL_HAVE_FP_DIV=1",
|
|
||||||
"__INT_FAST8_WIDTH__=32",
|
|
||||||
"__FLT32X_MAX__=1.7976931348623157e+308F32x",
|
|
||||||
"__DBL_NORM_MAX__=double(1.7976931348623157e+308L)",
|
|
||||||
"__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__",
|
|
||||||
"__GCC_DESTRUCTIVE_SIZE=32",
|
|
||||||
"__XTENSA__=1",
|
|
||||||
"__INTMAX_WIDTH__=64",
|
|
||||||
"__ORDER_BIG_ENDIAN__=4321",
|
|
||||||
"__XTHAL_ABI_CALL0=1",
|
|
||||||
"__cpp_runtime_arrays=198712L",
|
|
||||||
"__FLT32_DIG__=6",
|
|
||||||
"__UINT64_TYPE__=long long unsigned int",
|
|
||||||
"__UINT32_C(c)=c ## UL",
|
|
||||||
"__cpp_alias_templates=200704L",
|
|
||||||
"__FLT_DENORM_MIN__=1.4012984643248171e-45F",
|
|
||||||
"__INT8_MAX__=0x7f",
|
|
||||||
"__LONG_WIDTH__=32",
|
|
||||||
"__UINT_FAST32_TYPE__=unsigned int",
|
|
||||||
"__FLT32X_NORM_MAX__=1.7976931348623157e+308F32x",
|
|
||||||
"__CHAR32_TYPE__=long unsigned int",
|
|
||||||
"__FLT_MAX__=3.4028234663852886e+38F",
|
|
||||||
"__cpp_constexpr=201603L",
|
|
||||||
"__XCHAL_HAVE_FP_RSQRT=1",
|
|
||||||
"__INT32_TYPE__=long int",
|
|
||||||
"__SIZEOF_DOUBLE__=8",
|
|
||||||
"__cpp_exceptions=199711L",
|
|
||||||
"__FLT_MIN_10_EXP__=(-37)",
|
|
||||||
"__FLT64_MIN__=2.2250738585072014e-308F64",
|
|
||||||
"__INT_LEAST32_WIDTH__=32",
|
|
||||||
"__INTMAX_TYPE__=long long int",
|
|
||||||
"__XCHAL_HAVE_ABS=1",
|
|
||||||
"__FLT32X_HAS_QUIET_NAN__=1",
|
|
||||||
"__ATOMIC_CONSUME=1",
|
|
||||||
"__XCHAL_NUM_DBREAK=2",
|
|
||||||
"__XCHAL_HAVE_WIDE_BRANCHES=0",
|
|
||||||
"__GNUC_MINOR__=2",
|
|
||||||
"__INT_FAST16_WIDTH__=32",
|
|
||||||
"__UINTMAX_MAX__=0xffffffffffffffffULL",
|
|
||||||
"__FLT32X_DENORM_MIN__=4.9406564584124654e-324F32x",
|
|
||||||
"__cpp_template_template_args=201611L",
|
|
||||||
"__DBL_MAX_10_EXP__=308",
|
|
||||||
"__LDBL_DENORM_MIN__=4.9406564584124654e-324L",
|
|
||||||
"__INT16_C(c)=c",
|
|
||||||
"__STDC__=1",
|
|
||||||
"__PTRDIFF_TYPE__=int",
|
|
||||||
"__LONG_MAX__=0x7fffffffL",
|
|
||||||
"__XCHAL_HAVE_FP_SQRT=1",
|
|
||||||
"__UINT32_TYPE__=long unsigned int",
|
|
||||||
"__FLT32X_MIN_10_EXP__=(-307)",
|
|
||||||
"__UINTPTR_TYPE__=unsigned int",
|
|
||||||
"__LDBL_MIN_10_EXP__=(-307)",
|
|
||||||
"__cpp_generic_lambdas=201304L",
|
|
||||||
"__SIZEOF_LONG_LONG__=8",
|
|
||||||
"__cpp_user_defined_literals=200809L",
|
|
||||||
"__GCC_ATOMIC_LLONG_LOCK_FREE=1",
|
|
||||||
"__FLT_DECIMAL_DIG__=9",
|
|
||||||
"__UINT_FAST16_MAX__=0xffffffffU",
|
|
||||||
"__LDBL_NORM_MAX__=1.7976931348623157e+308L",
|
|
||||||
"__GCC_ATOMIC_SHORT_LOCK_FREE=2",
|
|
||||||
"__XCHAL_HAVE_BE=0",
|
|
||||||
"__UINT_FAST8_TYPE__=unsigned int",
|
|
||||||
"__cpp_init_captures=201304L",
|
|
||||||
"__ATOMIC_ACQ_REL=4",
|
|
||||||
"__ATOMIC_RELEASE=3",
|
|
||||||
"USBCON"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
332
README.md
332
README.md
|
|
@ -1,44 +1,92 @@
|
||||||
|
# DShotRMT - ESP32 RMT DShot Driver
|
||||||
|
|
||||||
[](https://github.com/derdoktor667/DShotRMT/actions/workflows/ci.yml)
|
[](https://github.com/derdoktor667/DShotRMT/actions/workflows/ci.yml)
|
||||||
|
|
||||||
# DShotRMT - ESP32 Library (Rewrite for ESP-IDF 5)
|
A C++ library for generating DShot signals on ESP32 microcontrollers using the RMT (Remote Control) peripheral. It's designed for both Arduino and ESP-IDF projects, providing a simple and efficient way to control brushless motors.
|
||||||
|
|
||||||
A simple Arduino IDE / C++ library for generating DShot signals on the ESP32 (`fqbn: esp32:esp32:esp32`) using the ESP-IDF 5 RMT encoder API (`rmt_tx.h` / `rmt_rx.h`).
|
This library is a rewrite using the modern ESP-IDF 5 RMT encoder API (`rmt_tx.h` / `rmt_rx.h`) for improved performance and flexibility. The legacy version using the old `rmt.h` API is available in the `oldAPI` branch.
|
||||||
Supports all standard DShot modes (150, 300, 600, 1200) and features signal generation and frame transmission with configurable timing.
|
|
||||||
|
|
||||||
**Now with BiDirectional DShot support, advanced command management, and modern web control interface!**
|
## 🚀 Core Features
|
||||||
|
|
||||||
> The legacy version (using the old `rmt.h` API) is still available in the `oldAPI` branch.
|
- **Multiple DShot Modes:** Supports DSHOT150, DSHOT300, DSHOT600, and DSHOT1200.
|
||||||
|
- **Bidirectional DShot:** Full support for RPM telemetry feedback.
|
||||||
---
|
- **Hardware-Timed Signals:** Precise signal generation using the ESP32 RMT peripheral, ensuring stable and reliable motor control.
|
||||||
|
- **Simple API:** Easy-to-use C++ class for sending throttle commands and receiving telemetry data.
|
||||||
## 🚀 Features
|
- **Efficient and Lightweight:** The core library has no external dependencies.
|
||||||
|
- **Arduino and ESP-IDF Compatible:** Can be used in both Arduino and ESP-IDF projects.
|
||||||
- **All DShot Modes:** DSHOT150, DSHOT300 (default), DSHOT600, DSHOT1200
|
|
||||||
- **BiDirectional DShot:** Full support for RPM telemetry feedback
|
|
||||||
- **Web Control Interface:** Modern responsive web UI with WiFi access point
|
|
||||||
- **Safety Features:** Arming/disarming system with motor lockout protection
|
|
||||||
- **Dual Control Options:** Web interface and serial console control
|
|
||||||
- **Real-time Telemetry:** Live RPM monitoring and data display
|
|
||||||
- **Hardware-Timed Signals:** Independent, precise signal generation using ESP32 RMT peripheral
|
|
||||||
- **Configurable Timing:** Ensures ESCs can reliably detect frame boundaries
|
|
||||||
- **Error Handling:** Comprehensive result reporting with success/failure status
|
|
||||||
- **Simple API:** Easy integration into your Arduino or ESP-IDF project
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
### Arduino IDE
|
### Arduino IDE
|
||||||
1. Search "Arduino Library Manager" for "DShotRMT"
|
|
||||||
|
|
||||||
or
|
1. Open the Arduino Library Manager (`Sketch` > `Include Library` > `Manage Libraries...`).
|
||||||
|
2. Search for "DShotRMT" and click "Install".
|
||||||
1. Clone this repository or download as ZIP
|
3. Alternatively, you can clone this repository or download it as a ZIP file and place it in your Arduino libraries folder (`~/Arduino/libraries/DShotRMT/`).
|
||||||
2. Place in your Arduino libraries folder (`~/Arduino/libraries/DShotRMT/`)
|
|
||||||
3. Restart Arduino IDE
|
|
||||||
|
|
||||||
### PlatformIO
|
### PlatformIO
|
||||||
Add to your `platformio.ini`:
|
|
||||||
|
Add the following to your `platformio.ini` file:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
lib_deps =
|
||||||
|
https://github.com/derdoktor667/DShotRMT.git
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚡ Quick Start
|
||||||
|
|
||||||
|
Here's a basic example of how to use the `DShotRMT` library to control a motor:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <DShotRMT.h>
|
||||||
|
|
||||||
|
// Define the GPIO pin connected to the motor ESC
|
||||||
|
const gpio_num_t MOTOR_PIN = GPIO_NUM_27;
|
||||||
|
|
||||||
|
// Create a DShotRMT instance for DSHOT300
|
||||||
|
DShotRMT motor(MOTOR_PIN, DSHOT300);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// Initialize the DShot motor
|
||||||
|
motor.begin();
|
||||||
|
|
||||||
|
Serial.println("Motor initialized. Sending low throttle for 5 seconds...");
|
||||||
|
|
||||||
|
// Send a low throttle command for 5 seconds
|
||||||
|
for (int i = 0; i < 500; i++) {
|
||||||
|
motor.sendThrottle(100);
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println("Stopping motor.");
|
||||||
|
motor.sendThrottle(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Your main code here
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎮 Examples
|
||||||
|
|
||||||
|
The `examples` folder contains more advanced examples:
|
||||||
|
|
||||||
|
- **`dshot300`:** A simple example demonstrating how to send DShot commands and receive telemetry via the serial monitor.
|
||||||
|
- **`web_control`:** A full-featured web application for controlling a motor from a web browser. It creates a WiFi access point and serves a web page with a throttle slider and arming switch.
|
||||||
|
- **`web_client`:** A variation of the `web_control` example that connects to an existing WiFi network instead of creating its own access point.
|
||||||
|
|
||||||
|
### Dependencies for Web Examples
|
||||||
|
|
||||||
|
The `web_control` and `web_client` examples require the following additional libraries:
|
||||||
|
|
||||||
|
- [ArduinoJson](https://github.com/bblanchon/ArduinoJson)
|
||||||
|
- [ESPAsyncWebServer](https://github.com/ESP32Async/ESPAsyncWebServer)
|
||||||
|
- [AsyncTCP](https://github.com/ESP32Async/AsyncTCP)
|
||||||
|
|
||||||
|
You can install these libraries using the Arduino Library Manager or by adding them to your `platformio.ini` file:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
lib_deps =
|
lib_deps =
|
||||||
https://github.com/derdoktor667/DShotRMT.git
|
https://github.com/derdoktor667/DShotRMT.git
|
||||||
|
|
@ -47,228 +95,22 @@ lib_deps =
|
||||||
https://github.com/ESP32Async/AsyncTCP
|
https://github.com/ESP32Async/AsyncTCP
|
||||||
```
|
```
|
||||||
|
|
||||||
### Manual Installation
|
## 📚 API Reference
|
||||||
```sh
|
|
||||||
git clone https://github.com/derdoktor667/DShotRMT.git
|
|
||||||
```
|
|
||||||
|
|
||||||
### Dependencies
|
The main class is `DShotRMT`. Here are the most important methods:
|
||||||
|
|
||||||
There are no dependencies for the main library. The extended
|
- `DShotRMT(gpio_num_t gpio, dshot_mode_t mode, bool is_bidirectional = false)`: Constructor to create a new DShotRMT instance.
|
||||||
example sketches are using these libraries:
|
- `begin()`: Initializes the RMT peripheral and the DShot encoder.
|
||||||
|
- `sendThrottle(uint16_t throttle)`: Sends a throttle value (48-2047) to the motor.
|
||||||
|
- `sendCommand(uint16_t command)`: Sends a DShot command (0-47) to the motor.
|
||||||
|
- `getTelemetry(uint16_t magnet_count)`: Receives and parses telemetry data from the motor (for bidirectional DShot).
|
||||||
|
|
||||||
**Web Interface Examples (web_control.ino / web_client.ino):**
|
For more details, please refer to the `DShotRMT.h` header file.
|
||||||
```ini
|
|
||||||
lib_deps =
|
|
||||||
https://github.com/derdoktor667/DShotRMT
|
|
||||||
https://github.com/bblanchon/ArduinoJson
|
|
||||||
https://github.com/ESP32Async/ESPAsyncWebServer
|
|
||||||
https://github.com/ESP32Async/AsyncTCP
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚡ Quick Start
|
|
||||||
|
|
||||||
### Basic Usage (DShotRMT)
|
|
||||||
|
|
||||||
```cpp
|
|
||||||
// Generate "dshot300" example sketch with Arduino IDE / CLI.
|
|
||||||
```
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🌐 Web Control Interface
|
|
||||||
|
|
||||||
The DShotRMT library now includes a modern web interface for wireless motor control:
|
|
||||||
|
|
||||||
### Features
|
|
||||||
- **Responsive Design:** Works on mobile phones, tablets, and desktop computers
|
|
||||||
- **WiFi Access Point:** Creates hotspot "DShotRMT Control" (Password: 12345678)
|
|
||||||
- **Safety System:** Arming/disarming switch prevents accidental motor activation
|
|
||||||
- **Real-time Control:** Instant throttle response via WebSocket communication
|
|
||||||
- **Live Telemetry:** Real-time RPM display (bidirectional mode only)
|
|
||||||
- **Auto-reconnect:** Automatically reconnects on connection loss
|
|
||||||
|
|
||||||
### Web Interface Access
|
|
||||||
1. Connect to WiFi network: **"DShotRMT Control"**
|
|
||||||
2. Password: **12345678**
|
|
||||||
3. Open browser and navigate to: **http://10.10.10.1**
|
|
||||||
|
|
||||||
### Web Client Mode
|
|
||||||
1. Setup SSID and Password in web_client.ino
|
|
||||||
2. Open serial for IP
|
|
||||||
3. Open browser, http://IP
|
|
||||||
|
|
||||||
### Safety Features
|
|
||||||
- Motor control is **disabled by default** (disarmed state)
|
|
||||||
- Toggle the **ARMING SWITCH** to enable motor control
|
|
||||||
- Throttle slider is **locked** when disarmed
|
|
||||||
- **Emergency stop** resets all values to safe state
|
|
||||||
|
|
||||||
### Technical Implementation
|
|
||||||
- **AsyncWebServer** for HTTP requests
|
|
||||||
- **WebSocket** communication for real-time data
|
|
||||||
- **JSON** message format for data exchange
|
|
||||||
- **WiFi SoftAP** mode for standalone operation
|
|
||||||
- **Automatic client cleanup** prevents memory leaks
|
|
||||||
|
|
||||||
### ⚠️ Known Issus
|
|
||||||
Make sure you are using these libraries for [ESPAsyncWebServer](https://github.com/ESP32Async/ESPAsyncWebServer) and [AsyncTCP](https://github.com/ESP32Async/AsyncTCP) to use "web_control.ino" example sketch.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📚 Extras
|
|
||||||
|
|
||||||
### Basic DShot Control with Web Interface (`web_control.ino`)
|
|
||||||
- **Web Control Interface:** Modern responsive web UI accessible at `http://10.10.10.1`
|
|
||||||
- **WiFi Access Point:** Creates hotspot "DShotRMT Control" for wireless control
|
|
||||||
- **Safety Features:** Arming/disarming system with motor safety lockout
|
|
||||||
- **Real-time Data:** Live RPM telemetry display (bidirectional mode)
|
|
||||||
- **Dual Control:** Both web interface and serial console control
|
|
||||||
- **WebSocket Communication:** Real-time bidirectional data exchange
|
|
||||||
|
|
||||||
**Web Interface Features:**
|
|
||||||
- Responsive design optimized for mobile and desktop
|
|
||||||
- Visual arming switch with safety lockout
|
|
||||||
- Smooth throttle slider with real-time feedback
|
|
||||||
- Live RPM monitoring display
|
|
||||||
- Automatic reconnection on connection loss
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔧 Hardware Configuration
|
|
||||||
|
|
||||||
### Supported DShot Modes
|
|
||||||
|
|
||||||
| DSHOT | Bitrate | TH1 | TH0 | Bit Time (µs) | Frame Time (µs) |
|
|
||||||
|-------|-------------|-------|--------|---------------|-----------------|
|
|
||||||
| 150 | 150 kbit/s | 5.00 | 2.50 | 6.67 | ~106.72 |
|
|
||||||
| **300** | **300 kbit/s** | **2.50** | **1.25** | **3.33** | **~53.28** |
|
|
||||||
| 600 | 600 kbit/s | 1.25 | 0.625 | 1.67 | ~26.72 |
|
|
||||||
|
|
||||||
For DShot, T1H length is always double T0H length.
|
|
||||||
|
|
||||||
### GPIO Configuration
|
|
||||||
```cpp
|
|
||||||
// Using GPIO number
|
|
||||||
DShotRMT motor(17, DSHOT300);
|
|
||||||
|
|
||||||
// Using GPIO enum
|
|
||||||
DShotRMT motor(GPIO_NUM_17, DSHOT300);
|
|
||||||
|
|
||||||
// With bidirectional support
|
|
||||||
DShotRMT motor(17, DSHOT300, true);
|
|
||||||
|
|
||||||
// Also possible, defaults (17, DSHOT300, false)
|
|
||||||
DShotRMT motor();
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 DShot Commands (experimental)
|
|
||||||
|
|
||||||
| Command | Value | Description | Usage |
|
|
||||||
|---------|-------|-------------|-------|
|
|
||||||
| MOTOR_STOP | 0 | Stop motor | Always available |
|
|
||||||
| BEACON 1 - 5 | 1 - 5 | Motor beeping | Motor identification |
|
|
||||||
| ESC_INFO | 6 | Request ESC info | Get ESC version/settings |
|
|
||||||
| SPIN_DIRECTION_1/2 | 7 - 8 | Set spin direction | Motor configuration |
|
|
||||||
| 3D_MODE_OFF/ON | 9 - 10 | 3D mode control | Bidirectional flight |
|
|
||||||
| SAVE_SETTINGS | 12 | Save to EEPROM | Permanent configuration |
|
|
||||||
| EXTENDED_TELEMETRY_ENABLE/DISABLE | 13 - 14 | Telemetry control | Data transmission |
|
|
||||||
| SPIN_DIRECTION_NORMAL/REVERSED | 20 - 21 | Spin direction | Alias commands |
|
|
||||||
| LED 0-3_ON/OFF | 22 - 29 | LED control | BLHeli32 only |
|
|
||||||
| AUDIO_STREAM_MODE | 30 | Audio mode toggle | KISS ESCs |
|
|
||||||
| SILENT_MODE | 31 | Silent mode toggle | KISS ESCs |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📚 DShot Protocol Details
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### Packet Structure
|
|
||||||
Each DShot frame consists of 16 bits:
|
|
||||||
- **11 bits:** Throttle/command value (0-2047)
|
|
||||||
- **1 bit:** Telemetry request flag
|
|
||||||
- **4 bits:** CRC checksum
|
|
||||||
|
|
||||||
### Checksum Calculation
|
|
||||||
```cpp
|
|
||||||
// Standard DShot CRC
|
|
||||||
uint16_t crc = (data ^ (data >> 4) ^ (data >> 8)) & 0x0F;
|
|
||||||
|
|
||||||
// Bidirectional DShot (inverted CRC)
|
|
||||||
uint16_t crc = (~(data ^ (data >> 4) ^ (data >> 8))) & 0x0F;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Bidirectional DShot
|
|
||||||
- **Inverted Logic:** High/low levels are inverted
|
|
||||||
- **GCR Encoding:** Telemetry uses Group Code Recording
|
|
||||||
- **21-bit Response:** 1 start + 16 data + 4 CRC bits
|
|
||||||
- **eRPM Data:** Electrical RPM transmitted back to controller
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🛠️ ESP32 RMT Peripheral
|
|
||||||
|
|
||||||
The library utilizes the ESP32's RMT (Remote Control) peripheral for precise signal generation:
|
|
||||||
|
|
||||||
### Advantages
|
|
||||||
- **Hardware Timing:** No CPU intervention during transmission
|
|
||||||
- **Concurrent Operation:** Multiple channels can run simultaneously
|
|
||||||
- **DMA Support:** Efficient, automatic memory-to-peripheral transfers
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📖 References & Documentation
|
|
||||||
|
|
||||||
### DShot Protocol
|
|
||||||
- [DSHOT – the missing Handbook](https://brushlesswhoop.com/dshot-and-bidirectional-dshot/)
|
|
||||||
- [DSHOT in the Dark](https://dmrlawson.co.uk/index.php/2017/12/04/dshot-in-the-dark/)
|
|
||||||
- [Betaflight DShot Implementation](https://github.com/betaflight/betaflight)
|
|
||||||
|
|
||||||
### ESP32 Documentation
|
|
||||||
- [ESP32 Technical Reference Manual](https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf)
|
|
||||||
- [ESP-IDF RMT Driver](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/rmt.html)
|
|
||||||
- [Arduino ESP32 Core](https://github.com/espressif/arduino-esp32)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🤝 Contributing
|
## 🤝 Contributing
|
||||||
|
|
||||||
We welcome contributions! Please:
|
Contributions are welcome! Please fork the repository, create a feature branch, and submit a pull request.
|
||||||
|
|
||||||
1. Fork the repository
|
|
||||||
2. Create a feature branch
|
|
||||||
3. Make your changes with tests
|
|
||||||
4. Submit a pull request
|
|
||||||
|
|
||||||
### Development Guidelines
|
|
||||||
- Follow existing code style
|
|
||||||
- Add documentation for new features
|
|
||||||
- Include examples where appropriate
|
|
||||||
- Test with real hardware when possible
|
|
||||||
|
|
||||||
### Reporting Issues
|
|
||||||
When reporting issues, please include:
|
|
||||||
- ESP32 board type and version
|
|
||||||
- Arduino/ESP-IDF version
|
|
||||||
- ESC type and firmware
|
|
||||||
- Complete error messages
|
|
||||||
- Minimal reproduction code
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📄 License
|
## 📄 License
|
||||||
|
|
||||||
MIT License – see [LICENSE](LICENSE)
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 👤 Author
|
|
||||||
|
|
||||||
**Wastl Kraus**
|
|
||||||
- GitHub: [@derdoktor667](https://github.com/derdoktor667)
|
|
||||||
- Website: [wir-sind-die-matrix.de](https://wir-sind-die-matrix.de)
|
|
||||||
|
|
@ -14,14 +14,14 @@ static constexpr auto &USB_SERIAL = Serial0;
|
||||||
static constexpr auto USB_SERIAL_BAUD = 115200;
|
static constexpr auto USB_SERIAL_BAUD = 115200;
|
||||||
|
|
||||||
// Motor configuration - Pin number or GPIO_PIN
|
// Motor configuration - Pin number or GPIO_PIN
|
||||||
static constexpr gpio_num_t MOTOR01_PIN = GPIO_NUM_17;
|
static constexpr gpio_num_t MOTOR01_PIN = GPIO_NUM_27;
|
||||||
// static constexpr auto MOTOR01_PIN = 17;
|
// static constexpr auto MOTOR01_PIN = 17;
|
||||||
|
|
||||||
// Supported: DSHOT150, DSHOT300, DSHOT600, (DSHOT1200)
|
// Supported: DSHOT150, DSHOT300, DSHOT600, (DSHOT1200)
|
||||||
static constexpr dshot_mode_t DSHOT_MODE = DSHOT300;
|
static constexpr dshot_mode_t DSHOT_MODE = DSHOT300;
|
||||||
|
|
||||||
// BiDirectional DShot Support (default: false)
|
// BiDirectional DShot Support (default: false)
|
||||||
static constexpr auto IS_BIDIRECTIONAL = false;
|
static constexpr auto IS_BIDIRECTIONAL = true;
|
||||||
|
|
||||||
// Motor magnet count for RPM calculation
|
// Motor magnet count for RPM calculation
|
||||||
static constexpr auto MOTOR01_MAGNET_COUNT = 14;
|
static constexpr auto MOTOR01_MAGNET_COUNT = 14;
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,9 @@ DShotRMT::DShotRMT(gpio_num_t gpio, dshot_mode_t mode, bool is_bidirectional)
|
||||||
// Pre-calculate timing and bit positions for performance
|
// Pre-calculate timing and bit positions for performance
|
||||||
_preCalculateRMTTicks();
|
_preCalculateRMTTicks();
|
||||||
_preCalculateBitPositions();
|
_preCalculateBitPositions();
|
||||||
|
|
||||||
|
// Activate internal pullup resistor
|
||||||
|
gpio_set_pull_mode(_gpio, GPIO_PULLUP_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Constructor using pin number
|
// Constructor using pin number
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue