Rotary Encoder Module Causes Restart

Posted on
  • Hey Gang,

    I know there have been a few goes in Github around the "watch" function (which the rotary encoder module uses behind the scenes), on the ESP32, and generally it works fine for buttons. But when using a full encoder module, such as this one:

    https://www.ebay.com/p/5pcs-Ky-040-Rotary-Encoder-Module-for-Arduino-AVR-Pic/1386840178

    I get continual restarts on 2v01 (it was the same on previous versions, so its not a regression).

    So lets take the standard code from the Espruino example page :

    https://www.espruino.com/Encoder

    var step = 0;
    require("Encoder").connect(D26,D25,function (direction) {
      step += direction;
      console.log("encoder step ",step);
    });
    

    What this causes on my ESP32s is basically this:

      >reset()
    =undefined
    WARNING: gap set scan error code = 103
    WARNING: set rssi scan not implemeted yet
     ____                 _
    |  __|___ ___ ___ _ _|_|___ ___
    |  __|_ -| . |  _| | | |   | . |
    |____|___|  _|_| |___|_|_|_|___|
             |_| espruino.com
     2v01 (c) 2018 G.Williams
    Espruino is Open Source. Our work is supported
    only by sales of official boards and donations:
    http://espruino.com/Donate
    >load()
    =undefined
    WARNING: gap set scan error code = 103
    WARNING: set rssi scan not implemeted yet
    encoder step  1
    encoder step  2
    encoder step  3
    encoder step  4
    encoder step  5
    encoder step  6
    encoder step  7
    encoder step  8
    encoder step  9
    /mnt/c/Users/rhys/esp32/V3.1/EspruinoBuildTools/esp32/build/esp-idf/components/freertos/queue.c:1616 (xQueueReceiveFromISR)- assert failed!
    abort() was called at PC 0x40093110 on core 0
    Backtrace: 0x400962cb:0x3ffbd810 0x40096423:0x3ffbd830 0x40093110:0x3ffbd850 0x40084b72:0x3ffbd870 0x40084c71:0x3ffbd8b0 0x40084d1f:0x3ffbd8d0 0x4012def9:0x3ffbd8f0 0x4008501c:0x3ffbd910 0x40084ecc:0x3ffbd940 0x40084fe7:0x3ffbd960 0x400836a9:0x3ffbd980 0x401d3003:0x3ffbd970 0x7ffffffc:0x4009497c
    Rebooting...
    ets Jun  8 2016 00:22:57
    rst:0xc (SW_CPU_RESET),boot:0x17 (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:2
    load:0x3fff0018,len:4
    load:0x3fff001c,len:2588
    load:0x40078000,len:7192
    load:0x40080000,len:5288
    entry 0x40080278
    E (518) spiram: SPI RAM enabled but initialization failed. Bailing out.
    WARNING: Bluetooth is disabled per ESP32.enableBLE(false)
    ERROR: Wifi: event_handler STA_START: esp_wifi_connect: 12298(SSID is invalid)
    encoder step  -1
    encoder step  -2
    encoder step  -3
    encoder step  -4
    encoder step  -5
    encoder step  -6
    encoder step  -7
    encoder step  -8
    encoder step  -9
    encoder step  -10
    encoder step  -11
    encoder step  -12
    encoder step  -13
    encoder step  -14
    encoder step  -15
    encoder step  -16
    encoder step  -17
    encoder step  -18
    encoder step  -19
    encoder step  -20
    encoder step  -21
    encoder step  -22
    encoder step  -23
    encoder step  -24
    encoder step  -25
    encoder step  -26
    encoder step  -27
    encoder step  -28
    encoder step  -29
    encoder step  -30
    New interpreter error: FIFO_FULL
    encoder step  -31
    encoder step  -32
    encoder step  -33
    encoder step  -34
    encoder step  -35
    encoder step  -36
    encoder step  -37
    encoder step  -38
    encoder step  -39
    encoder step  -40
    encoder step  -41
    encoder step  -42
    encoder step  -43
    encoder step  -44
    encoder step  -45
    encoder step  -46
    encoder step  -47
    encoder step  -48
    encoder step  -49
    encoder step  -50
    encoder step  -51
    encoder step  -52
    encoder step  -53
    encoder step  -54
    > 
    

    .. and these restarts continue until I stop rotating the encoder, after which the ESP32 restarts a last time and continues normal functioning. So any ideas?

    Thanks :)

    -=hfc

  • This code works perfectly fine on the ESP8266, btw.

    -hfc

  • Feels like a jitter to me, caused may be by auto-flipping pin modes...

    Try to set pin mode before using the pins...

    ESP826, ESP32 and the various STMs are all different hardware. The GPIO HW and how the are 'operated' have impact on Espruino behavior.

  • No, we've been through this before here:

    http://forum.espruino.com/conversations/325755/

    I can wire up an ESP8266 to a rotary encoder and spin it as fast as I can, and nothing bad happens like a reset.

    Using this code:

    var step = 0;
    pinMode(NodeMCU.D8,"input_pullup");
    pinMode(NodeMCU.D2,"input_pullup");
    require("Encoder").connect(NodeMCU.D2,NodeMCU.D8,function (direction) {
      step += direction;
      print(step);
     
    });
    

    I can do this as long as I want. True I get a "New interpreter error: FIFO_FULL" error, but it doesn't affect anything.

     ____                 _
    |  __|___ ___ ___ _ _|_|___ ___
    |  __|_ -| . |  _| | | |   | . |
    |____|___|  _|_| |___|_|_|_|___|
             |_| espruino.com
     1v99 (c) 2018 G.Williams
    Espruino is Open Source. Our work is supported
    only by sales of official boards and donations:
    http://espruino.com/Donate
    Flash map 4MB:1024/1024, manuf 0x1c chip 0x3016
    >load()
    =undefined
    ERROR: Pin state not supported
    ERROR: Pin state not supported
    1
    0
    1
    0
    1
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    111
    112
    113
    114
    New interpreter error: FIFO_FULL
    115
    116
    117
    118
    119
    120
    121
    

    So this is about a clear difference between the ESP8266 and the ESP32. It works on the ESP8266, it doesn't on the ESP32.

    -=hfc

  • Have you tried using different pins?

  • No. I haven't -- and that's a good idea! I'll try this out and report back.

  • I tried it out and it worked (rotation with no crashing). However after, I started adding some intervals for other stuff and the quality of the readings degraded significantly -- it couldn't really figure out when a rotation was happening or not. I would spin it, and the value wouldn't change, but sometimes it would -- kind of unreliable. I guess this is because its using software interrupts? For my build the encoder is important, so I'll probably dedicate a small mcu like an ATTINY85 or an ESP-01 with Arduino on it, just to read the rotation. Then feed that into my ESP32.

  • @ungryforcodes

    dedicate a small mcu like an ATTINY85 ... just to read the rotation.

    The right choice... ESP32's underlaying OS / layer (underneath Espruino) to connect to HW interrupts is what's messing with you - my wild guess. R is not always real (Time), especially when the application is not implemented within it.

  • Yeah I think the ESP32 SDK has been going a bit weird lately -- and you're right its becoming increasingly hard to build something reliable on top of it. Its a bit strange that at version 3 -- Espressif is still introducing breaking changes to their API etc. I also get lots of memory errors and failures when doing http / https requests.

    Anyways lets hope as the SDK matures things will get sorted out.

  • Just found translation "disimprove" for the german "verschlimmbessern"

  • @JumJum, machtest du einen falschen Fehler?... wrong error.. goes into the same category.

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

Rotary Encoder Module Causes Restart

Posted by Avatar for hungryforcodes @hungryforcodes

Actions