So I moved direction to gpio16 instead. Now I'm also getting a direction indicator on the NodeMCUs inbuilt LED that is connected to gpio16.
I also had problem with gpio15 not being pulldowned enough when connected to DRV8825. So for now I removed it and shorted sleep and reset together to be controlled by the same pin.
Found out that fault (that I pulled up) is connected to the sleep pin on the DRV8825. So have to remove it and see if it will work after.
Test code:
// Test sketch for drv8825 on NodeMCU v1.0// pinout definition for generic ESP-12E#define stepPin 3#define directionPin 16#define sleepPin 15#define resetPin 13#define m2_Pin 12#define m1_Pin 14#define m0_Pin 4#define enablePin 5#define faultPin 2#define endswitchPin 0#define MOTOR_STEPS 200voidsetStepSize() { //Going to add more later// Full step
digitalWrite(m0_Pin, LOW);
digitalWrite(m1_Pin, LOW);
digitalWrite(m2_Pin, LOW);
}
voidsetup() {
// REMEMBER THAT YOU CAN'T USE SERIAL FROM THIS POINT// DRV8825 has inbuilt pulldown resistors for all input pins. No need to set it.
pinMode(stepPin, OUTPUT);
pinMode(directionPin, OUTPUT);
pinMode(sleepPin, OUTPUT);
pinMode(resetPin, OUTPUT);
pinMode(m2_Pin, OUTPUT);
pinMode(m1_Pin, OUTPUT);
pinMode(m0_Pin, OUTPUT);
pinMode(enablePin, OUTPUT);
setStepSize();
digitalWrite(resetPin, HIGH);
digitalWrite(sleepPin, HIGH);
digitalWrite(enablePin, LOW);
}
voidloop() {
// put your main code here, to run repeatedly:
digitalWrite(directionPin, HIGH);
for (int i = 0; i < MOTOR_STEPS; i++) {
digitalWrite(stepPin, LOW);
delay(10); //10 ms
digitalWrite(stepPin, HIGH);
delay(10); //10 ms
}
digitalWrite(directionPin, LOW);
for (int i = 0; i < MOTOR_STEPS; i++) {
digitalWrite(stepPin, LOW);
delay(10); //10 ms
digitalWrite(stepPin, HIGH);
delay(10); //10 ms
}
delay(1000);
}
After flashing the code the motor is spinning 360 degrees and back again, wait 1 s and repeat.
This means that we need 8 outputs that doesn't have fixed pullups and can handle boot with pulldowns on the pins. And 2 interrupt inputs with at least one that has a pullup.
As seen in the list below this means that D3 and D4 need to be inputs and one of the serial lines as output.
NodeMCU v1.0 Amica ESP-12E:
Pin
Function
Status
Can be used as
D0
GPIO16
Not usable with deepsleep, Hi-Z DIO, no interrupt
Output
D1
GPIO5
Hi-Z DIO
Output, Input, Interrupt
D2
GPIO4
Hi-Z DIO
Output, Input, Interrupt
D3
GPIO0
No Hi-Z DIO (prefere pullup)
Input, Interrupt
D4
GPIO2
Don’t connect to ground at boot time (prefere pullup)
Input, Interrupt
D5
GPIO14
Hi-Z DIO
Output, Input, Interrupt
D6
GPIO12
Hi-Z DIO
Output, Input, Interrupt
D7
GPIO13
Hi-Z DIO
Output, Input, Interrupt
D8
GPIO15
Can't have pullup (only pulldown DIO)
Output
RX
GPIO3
Not usable during Serial transmission
Output, Input, Interrupt (if serial not used)
TX
GPIO1
Not usable during Serial transmission, Don’t connect to ground at boot time
While the ESP-12E (for me) would stop working due to EMI/EMF from the steppers, it was never damaged. The worst problem was that there is very little "science" to fix this. Twisting the stepper leads, using ferrite beads and moving the ESP-12E away from the steppers worked but I don't really know which worked the best or why. It not like any or all of these measures will always work or are always necessary. It was trial and error and very little science.
The ultrasonic sensor and servo problem was back EMF and could be measured so specific things could be done to fix it. First was to block the back EMF going back through the power supply and upsetting the ESP-12E and the second was to absorb/store the back EMF current.
There were two problems with the ultrasonics sensors however, the first was that back EMF would destroy them and the second was that they did not work very well anyway.
So perhaps the ESP-12E is just "too" sensitive to EMI/EMF to be useful in this area. If I was contemplating using the ESP-12E again, I would start with separate power supplies for the ESP-12E and the Steppers, and an opto-isolator interface. In addition to separation of the steppers from the ESP-12E, and twisted steppers power leads.
I had problems with electrical interference and back EMF from the stepper motors upsetting the ESP-12E. You may find some of the designs interesting. I was running two steppers for the drive and a servo/ultrasonic sensor. AlanX
While the ESP-12E (for me) would stop working due to EMI/EMF from the steppers, it was never damaged. The worst problem was that there is very little "science" to fix this. Twisting the stepper leads, using ferrite beads and moving the ESP-12E away from the steppers worked but I don't really know which worked the best or why. It not like any or all of these measures will always work or are always necessary. It was trial and error and very little science.
The ultrasonic sensor and servo problem was back EMF and could be measured so specific things could be done to fix it. First was to block the back EMF going back through the power supply and upsetting the ESP-12E and the second was to absorb/store the back EMF current.
There were two problems with the ultrasonics sensors however, the first was that back EMF would destroy them and the second was that they did not work very well anyway.
Having said all this I have completed other stepper projects using Arduinos that worked flawlessly without any additional EMF/EMI precautions (refer to https://hackaday.io/project/29585-little-monster-scanner and https://hackaday.io/project/28478-a-better-turret).
So perhaps the ESP-12E is just "too" sensitive to EMI/EMF to be useful in this area. If I was contemplating using the ESP-12E again, I would start with separate power supplies for the ESP-12E and the Steppers, and an opto-isolator interface. In addition to separation of the steppers from the ESP-12E, and twisted steppers power leads.
Anyway best of luck, regards AlanX