Je réalise un programme tout simple où j'allume un bandeau LED.
J'utilise la librairie FastLED.
Le bandeau LED est un WS2811 (alimentation 12V, bandeau RGB)
J'utilise une carte Arduino Nano.
Mon Bandeau LED est branché sur le PIN A4 de ma Arduino.
Ma carte Arduino utilise des capteurs à effet de Hall, qui utilisent les PIN 3, 4, 5, 6, 7, 8 et A1.
Le PIN 9 est utilisé pour un RESET.
En Hors Ligne, tout fonctionne très bien.
J'essaye de mettre ma carte en réseau.
J'utilise Node-Red.
Je me connecte via MQTT par cable Ethernet, après avoir mis la carte Arduino sur un shield.
Le réseau fonctionne correctement (test réalisé avec divers programmes téléversés dans la Arduino).
Voici mon problème :
L'instruction FastLED.show() (qui permet d'allumer le bandeau LED) empeche ma carte de se connecter au réseau.
Quand je supprime FastLED.show() de mon code, ma carte se connecte au réseau MQTT.
Quand je remplace la carte Nano par une Arduino Méga, le programme avec FastLED.show() ne pose plus de problème, la carte se connecte.
J'aimerais comprendre ce qui pose problème quand j'utilise FastLED.show sur Arduino Nano connectée à Node Red via MQTT.
Quel adaptateur ethernet ? (A4 et A5 sont utilisées pour SDA et SCL sur Uno donc impact en I2C, si c’est un shield il doit utiliser le SPI et il vaut vérifier quelles pins sont occupées)
D'après la doc que j'ai, il faut libérer les PIN 10 à 13 pour le SPI (ainsi que 9 pour le Reset).
Vu egalement, ne pas utiliser le pin 2 sur Arduino nano.
Pour le reste, je ne sais pas.
Je vais tester d'autres pin que A4 ou A5 pour mon Ruban LED.
Et pour répondre à la seconde question, le croquis pour SPI, FastLED etc, cela prend 88% de la mémoire.
Mais ça fonctionne très bien hors ligne (alors que les croquis font partie du programme)
D'après le compilateur, on utilise 86% de la mémoire dynamique.
Après, je ne vois pas le rapport avec la mémoire.
Quand je mets ma commande FastLED show en commentaire, je me connecte.
Quand je la remets dans le code, ça ne se connecte pas.
S'il s'agit d'une UNO, NANO ou autre carte ATMEGA328, 86% de 2K laisse peu de mémoire RAM dispo : 286 octets
La première chose à faire est de placer les strings constantes, s'il y en a, en FLASH :
Serial.print("blabla");
// comme ceci :
Serial.print(F("blabla"));
Comme tu ne publies pas ton code, je ne peux en dire plus.
Attention l’optimisation du compilateur peut virer des variables si elles ne sont pas utilisées donc vraiment s’assurer que tout y est et que tout est utilisé.
Ensuite oui - suivant ce que vous faites le reste de mémoire est petit… ça peut être un souci
Ce doit sûrement être un probleme de mémoire effectivement.
Mon système fonctionne avec une Arduino Méga (en utilisant les memes Pin que sur la nano)
J'ai rencontré d'autres problèmes avec des Nano mises en réseau (latences importantes, plantages à répétition).
Je suis en train de me dire que la Arduino Nano est très bien pour bosser hors ligne mais n'est pas adaptée à l'utilisation via MQTT