Bonjour, je réalise actuellement un projet de rideau domotique à l'aide de moteur pas à pas, d'un ESP8266 et d'un L293D.
J'utilise le site IO Adafruit et la bibliothèque Adafruit MQTT car je suis débutant dans le domaine. Sauf que j'ai un petit soucis, je ne veux pas réaliser seulement une action simple (ON/OFF d'un interrupteur par exemple) mais contrôler un stepper durant une douzaine de tours (quelques secondes quand même) et le microcontrôleur "crash" au bout du 4è tours environ.
J'en ai déduis qu'il y avait certainement un temps d'action maximum à ne pas dépasser avant qu'il se remette en mode "écoute" de la requête d'une publication MQTT car lorsque que je mets un "delay" avant de faire tourner le moteur, le moteur tourne moins longtemps.
Il y a t-il un moyen d'allonger ce temps?
Merci de vos réponses et voici mon code
#include <Stepper.h>
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define WLAN_SSID "****"
#define WLAN_PASS "****"
#define relay D1
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "****"
#define AIO_KEY "****"
const int stepsPerRevolution = 48;
Stepper Stepper1(stepsPerRevolution, 5, 4, 0, 2);
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe rideau1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rideau1");
Adafruit_MQTT_Subscribe rideau2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rideau2");
int r1open = 1;
int r2open = 1;
void MQTT_connect();
void setup() {
Serial.begin(115200);
delay(10);
Stepper1.setSpeed(90);
Serial.println(F("Adafruit MQTT demo"));
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println(WiFi.localIP());
mqtt.subscribe(&rideau1);
mqtt.subscribe(&rideau2);
}
uint32_t x=0;
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &rideau1) {
Serial.print(F("Got: "));
Serial.println((char *)rideau1.lastread);
uint16_t state1 = atoi((char *)rideau1.lastread);
if(state1 == 1){
if (r1open==0){
Stepper1.step(12*stepsPerRevolution);
r1open = 1;
}
}
else{
if (r1open==1){
Stepper1.step(-12*stepsPerRevolution);
r1open = 0;
}
}
}
if (subscription == &rideau2) {
Serial.print(F("Got: "));
Serial.println((char *)rideau2.lastread);
uint16_t state2 = atoi((char *)rideau2.lastread);
if(state2 == 1){
}else{
}
}
}
}
void MQTT_connect() {
int8_t ret;
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) {
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000);
retries--;
if (retries == 0) {
while (1);
}
}
Serial.println("MQTT Connected!");
}