-
• #2
This code works perfectly fine on the ESP8266, btw.
-hfc
-
• #3
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.
-
• #4
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
-
• #5
Have you tried using different pins?
-
• #6
No. I haven't -- and that's a good idea! I'll try this out and report back.
-
• #7
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.
-
• #8
@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.
-
• #9
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.
-
• #10
Just found translation "disimprove" for the german "verschlimmbessern"
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
What this causes on my ESP32s is basically this:
.. 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