Bonjour à tous,
Je souhaite construire un distributeur automatique de croquettes, avec un ESP8266 NodeMCU pour pouvoir l'utiliser avec mon assistant vocal.
Pour cela, je me sers de l'outil Sinric, qui me permet de faire cette communication en Alexa et mon ESP8266 relativement facilement.
J'ai d'abord commencé par réaliser un test avec une simple LED, que j'active grâce à Alexa. Jusqu'à là aucun problème, tout fonctionne.
J'ai ensuite souhaité que l'activation de cette LED enclenche la rotation de mon stepper. Et c'est là que ça se complique... Lorsque j'active ma broche, le moteur se lance. Cependant celui-ci s'arrête au bout d'environ 2sec et la carte reboot en me laissant ce message dans le moniteur série :
16:33:39.156 -> Soft WDT reset
16:33:39.156 ->
16:33:39.156 -> >>>stack>>>
16:33:39.156 ->
16:33:39.156 -> ctx: cont
16:33:39.192 -> sp: 3ffffb50 end: 3fffffc0 offset: 01b0
16:33:39.192 -> 3ffffd00: 3ffee970 000004ce 3ffeea84 402065db
16:33:39.192 -> 3ffffd10: 3ffee970 3ffeeab0 3ffeea84 4020113e
16:33:39.192 -> 3ffffd20: 3ffee970 3ffeeb2c 3fff05a4 40202b0b
16:33:39.192 -> 3ffffd30: 00000005 3fff065c 3fff065c 3fff0a2c
16:33:39.192 -> 3ffffd40: 3fff0a5c 3fff0a4c 3fff0a2c 40101620
16:33:39.192 -> 3ffffd50: 3fff0334 0018001f 00fecad0 40004e4f
16:33:39.192 -> 3ffffd60: 4010219f 82fecad0 3fff05fc 000d000f
16:33:39.227 -> 3ffffd70: 000012d0 3fff03ec 0018001f 00100790
16:33:39.227 -> 3ffffd80: 3fff05a4 00000000 00000000 00000000
16:33:39.227 -> 3ffffd90: 3fff0504 3fff05a4 3ffee994 4020c1cc
16:33:39.227 -> 3ffffda0: 3ffe98c0 7fffffff 00000000 4020c500
16:33:39.227 -> 3ffffdb0: 00000000 4bc6a7f0 2d0e5604 402054e1
16:33:39.227 -> 3ffffdc0: 007a1200 73b727a2 4bc6a700 40204f10
16:33:39.227 -> 3ffffdd0: 3ffe98cc 00000000 40100294 00005b59
16:33:39.227 -> 3ffffde0: 00000000 00000000 00000000 00000000
16:33:39.263 -> 3ffffdf0: 00000001 3ffee994 3ffffe50 4020c4d4
16:33:39.263 -> 3ffffe00: 00001370 00000002 3ffee994 401000e3
16:33:39.263 -> 3ffffe10: 3fff05a4 3ffee994 3ffffe50 402051d5
16:33:39.263 -> 3ffffe20: 00005b59 0000004d 00000020 40100a50
16:33:39.263 -> 3ffffe30: 00418937 0164d0af 00000010 0000004d
16:33:39.263 -> 3ffffe40: 3fff05a4 3ffee970 3ffee994 402053e8
16:33:39.263 -> 3ffffe50: 3fff0034 73b709df 40204ae4 4020c4b0
16:33:39.263 -> 3ffffe60: 00000000 3ffeecf4 40100294 00005b59
16:33:39.298 -> 3ffffe70: 00000000 00000000 00000000 00000000
16:33:39.298 -> 3ffffe80: 00000001 3ffee994 3ffffee0 4020544d
16:33:39.298 -> 3ffffe90: 00000001 3ffee994 3ffeec5c 401000e3
16:33:39.298 -> 3ffffea0: 3ffee9fb 3ffee994 3ffffee0 402051d5
16:33:39.298 -> 3ffffeb0: 00005b59 00000002 00000000 fffffffe
16:33:39.298 -> 3ffffec0: ffffffff 3fffc6fc 0000000c 00000000
16:33:39.298 -> 3ffffed0: 3ffee970 00000002 3ffee994 40205253
16:33:39.298 -> 3ffffee0: 3fff0124 3fffdad0 40204a98 40205434
16:33:39.333 -> 3ffffef0: 3ffee9fb 00000002 3ffeec5c 00000030
16:33:39.333 -> 3fffff00: 00000000 4bc6a7f0 3d2f1a9f 3ffeec5c
16:33:39.333 -> 3fffff10: 3ffee994 3ffee970 3ffee994 4020540d
16:33:39.333 -> 3fffff20: 3ffee9d4 3ffee970 40100294 00005b58
16:33:39.333 -> 3fffff30: 00000000 4bc6a7f0 424dd2f1 00000000
16:33:39.333 -> 3fffff40: 00000000 00000000 4bc6a7f0 3ffeec5c
16:33:39.333 -> 3fffff50: 3ffee994 3ffee994 3ffee970 4020542d
16:33:39.333 -> 3fffff60: 007a1200 73b607b7 3ffee900 4020606d
16:33:39.369 -> 3fffff70: 3ffee994 3ffee970 3ffee994 4020c524
16:33:39.369 -> 3fffff80: 00000000 00000001 3ffee970 4020622f
16:33:39.369 -> 3fffff90: 3fffdad0 00000000 3ffee970 40201353
16:33:39.369 -> 3fffffa0: 3fffdad0 00000000 3ffeec1c 402082a8
16:33:39.369 -> 3fffffb0: feefeffe feefeffe 3ffe8534 40100cdd
16:33:39.369 -> <<<stack<<<
16:33:39.405 ->
16:33:39.405 -> ets Jan 8 2013,rst cause:2, boot mode:(3,6)
16:33:39.405 ->
16:33:39.405 -> load 0x4010f000, len 1392, room 16
16:33:39.405 -> tail 0
16:33:39.405 -> chksum 0xd0
16:33:39.405 -> csum 0xd0
16:33:39.405 -> v3d128e5c
16:33:39.405 -> ~ld
Ce message m'indique donc que la raison de rst est la "cause 2". Après quelques recherches, il semblerait que ceci soit dû à une action "trop longue", qui imposerait le reboot de la carte. J'ai aussi lu que l'utilisation de la fonction yield() pouvait éventuellement résoudre le problème.
Seulement après de nombreux essais, je ne parviens pas à trouver la solution. Compte tenu du fait que le problème ne se produit qu'avec le moteur, et que les seules lignes différentes entre avec et sans le stepper font référence à la bibliothèque Stepper.h, j'ai pensé que le yield() devrait plutôt être placé directement dans cette bibliothèque. Mais mais petites connaissances en code ne m'ont pas pas permises de savoir où le placer dans le fichier .cpp ...
Je m'en remets donc à vous pour m'aiguiller sur ce petit problème. Je vous place aussi ci dessous l'extrait de code en question.
Bonne journée
if (deviceId == "5e85e5e8ce60582b5f8872f2") // Device ID of first device
{
Serial.print("Turn on device id: ");
Serial.println(deviceId);
tempo=millis();
while (millis()-tempo<1000){
digitalWrite(14, HIGH);
myStepper.setSpeed(motorSpeed); // Ligne ajoutée pour le stepper
myStepper.step(2048); // Ligne ajoutée pour le stepper
}
digitalWrite(14, LOW);
}
}