0

MRMS ESP32: Arduino, IMU, eFuse, BT, WiFi, CAN Bus (mrm-esp32) limitations

×
GPIO Input Output Warning
0 Yes, but pulled up Yes, but read warning Outputs PWM signal at boot
1 TX pin Yes, but read warning Debug output at boot
2 Yes Yes Used for on-board LED. 0 Ohm resistor can be removed and then the pin will be completely free.
3 Yes, but read warning RX pin High at boot
4 Yes, but only if CAN Bus not used. Yes, but only if CAN Bus not used.
5 Yes, but only if CAN Bus not used. Yes, but only if CAN Bus not used. Outputs PWM signal at boot
6 No No Usually used for integrated SPI flash.
7 No No Usually used for integrated SPI flash.
8 No No Usually used for integrated SPI flash.
9 No No Usually used for integrated SPI flash.
10 No No Usually used for integrated SPI flash.
11 No No Connected to the integrated SPI flash
12 Yes, but read warning Yes Boot fail if pulled high
13 Yes Yes outputs PWM signal at boot
14 Yes Yes outputs PWM signal at boot
15 Yes Yes Used for on-board LED. 0 Ohm resistor can be removed and then the pin will be completely free.
16 Yes Yes
17 Yes Yes
18 Yes Yes
19 Yes Yes
21 Yes Yes In use for SDA. Therefore, good for I2C, but cannot be used for other purposes.
22 Yes Yes In use for SCL. Therefore, good for I2C, but cannot be used for other purposes.
23 Yes Yes
25 Yes Yes
26 Yes Yes
27 Yes Yes
32 Yes Yes
33 Yes Yes
34 Yes, but no software pull-up or pull-down No Input only
35 Yes, but no software pull-up or pull-down No Input only
36 Yes, but no software pull-up or pull-down No Input only
39 Yes, but no software pull-up or pull-down No Input only

Green - no limitations, orange some limitations, red - should be avoided.

All output pins are PWM capable, so 34 - 39 are not. All GPIOs pins are interrupt capable.

Here is good reference.

There is a serious limitation to the number of available analog input pins that occurs when You use radio part, WiFi or Bluetooth, as it consumes ADC2. In that case only ADC1 pins remain available, 6 of them: GPIO 32, 33, 34, 35, 36, 39.

Another serious drawback of ESP32's ADC is that it doesn't read small input values. Until up to 0.15 V, the reading will be about 0. To solve this problem, ML-R sensors with analog output offer different versions of firmware:

  • output starts with 0 V,
  • minimum output is increased to be ESP32 compatible,
  • minimum output is increased to be Fischertechnik compatible.
Fischertechnik's ADC characteristic is even much worse than ESP32's, more than 5 times, demanding a quite high minimum voltage.

There is another problem with ESP32's ADC, at the upper bound: measurements between around 3.2 and up to 3.3 V are the same. This is a smaller problem as the measurements do not reach the maximum so often but can still be problematic. For example, MRMS IR ball finder 2, direction + distance (mrm-ir-finder2) delivers IR source's position, reporting angles 0 - 360º. Gaps towards the 360º values are not desirable. ML-R different versions of firmware take care about these problems.