Arduino MKR plante au bout d’un moment

Bonjour à tous !

Depuis quelque temps j’essaye de faire une passerelle mqtt> infrarouge avec un MKR 1010

Ça fonctionne parfaitement mais au bout de 30/40 minute, la led orange du MKr clignote lentement et l’infrarouge de fonctionne plus

J’ai testé les requêtes mqtt et il les reçoit bien ! Mais aucun signal n’est envoyé en ir

Est ce que quelqu’un a déjà rencontré ce soucis ?
Merci d’avance :slight_smile:

Bonjour et bienvenue,

Merci de prendre quelques minutes pour lire les bonnes pratiques du forum francophone et les appliquer.

On parle un peu dans le vide. Peut-être qu'en publiant ton code on y verrait un peut plus clair.

Bonjour, voici mon code,
cependant c'est un problème qui ne depend pas de ce code précisément, d'autre code avec MQTT avais le même soucis. Avec différents board je précise.

#include <ArduinoMqttClient.h>
#include <WiFiNINA.h>
char ssid[] = "Lamas";
///padd hidden
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
const char broker[] = "10.0.0.20";
int        port     = 1883;
const char topic[]  = "topic1";
const long interval = 8000;
unsigned long previousMillis = 0;
int count = 0;
#include <Arduino.h>
#include "TinyIRSender.hpp"
#define IR_SEND_PIN 3
void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    Serial.begin(9600);
    Serial.println(IR_SEND_PIN);
  while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
    Serial.print(".");
    delay(5000);
  }
  Serial.println(broker);
///credential connection hidden////
  if (!mqttClient.connect(broker, port)) {
    Serial.println(mqttClient.connectError());
    while (1);
  }
  mqttClient.onMessage(onMqttMessage);
  mqttClient.subscribe(topic);
}
void loop() {
  if ( WiFi.status() != WL_CONNECTED) {
    while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
      Serial.print("failed ... ");
      delay(4000);
    }
  Serial.println(broker);
///credential connection hidden////
  if (!mqttClient.connect(broker, port)) {
    while (1);
  }
  mqttClient.onMessage(onMqttMessage);
  mqttClient.subscribe(topic);
  }
  mqttClient.poll();


}
void onMqttMessage(int messageSize) {
int charread = mqttClient.read();
  if(charread == 49){
    Serial.print("a1");
    sendCommand(0x0, 0x7);
  }
 if(charread == 50){
    Serial.print("a2");
    sendCommand(0x0, 0x9);
  }
   if(charread == 51){
    Serial.print("a3");
    sendCommand(0x0, 0x16);
  }
   if(charread == 52){
    Serial.print("a4");
    sendCommand(0x0, 0x0D);
  }


  if(charread == 53){
    Serial.print("b1");
    sendCommand(0x0, 0x8);
  }
 if(charread == 54){
    Serial.print("b2");
    sendCommand(0x0, 0x5A);
  }
   if(charread == 56){
    Serial.print("b3");
    sendCommand(0x0, 0x42);
  }
   if(charread == 57){
    Serial.print("b4");
    sendCommand(0x0, 0x4A);
  }
  Serial.println();
}

void sendCommand(uint8_t sAddress,uint8_t sCommand){
    Serial.println(F("Send NEC with 8 bit address"));
    Serial.flush();
    sendNEC(IR_SEND_PIN, sAddress, sCommand, 4);

}

avez vous le souci sans MQTT ? ie avez vous fait un code qui ne fait qu'envoyer des requêtes IR de temps en temps en simulant une réception aléatoire de commande ? (ie sans le WiFi activé)


sinon la fonction serait plus lisible écrite comme cela (ou mettez au moins des else et utilisez la représentation sous forme de caractère plutôt que le code ASCII)

void onMqttMessage(int messageSize) {
  int charread = mqttClient.read();

  switch (charread) {
    case '1':
      Serial.print("a1");
      sendCommand(0x0, 0x7);
      break;
    case '2':
      Serial.print("a2");
      sendCommand(0x0, 0x9);
      break;
    case '3':
      Serial.print("a3");
      sendCommand(0x0, 0x16);
      break;
    case '4':
      Serial.print("a4");
      sendCommand(0x0, 0x0D);
      break;
    case '5':
      Serial.print("b1");
      sendCommand(0x0, 0x8);
      break;
    case '6':
      Serial.print("b2");
      sendCommand(0x0, 0x5A);
      break;
    case '7':
      Serial.print("b3");
      sendCommand(0x0, 0x42);
      break;
    case '8':
      Serial.print("b4");
      sendCommand(0x0, 0x4A);
      break;
    default:
      // Traitement pour les autres caractères non gérés
      break;
  }

  Serial.println();
}

et si vous voulez simplifier avec des tableaux un truc du genre:

void onMqttMessage(int messageSize) {
  int charread = mqttClient.read();

  // Tableaux de correspondance entre les caractères et les valeurs hexadécimales
  static char characters[] = {'1', '2', '3', '4', '5', '6', '7', '8'};
  static byte hexValues[] = {0x7, 0x9, 0x16, 0x0D, 0x8, 0x5A, 0x42, 0x4A};

  for (int i = 0; i < sizeof(characters); i++) {
    if (charread == characters[i]) {
      Serial.write( (i < 4) ? 'a' : 'b');
      Serial.print((i < 4) ? i+1 : i - 3);
      sendCommand(0x0, hexValues[i]);
      break; // pour sortir de la boucle une fois la correspondance trouvée
    }
  }
  Serial.println();
}

Tu veux dire que tu vois passer dans le moniteur série les a1, a2, ..., b3, b4 mais que tu ne vois pas Send NEC with 8 bit address ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.