Je suis nouveau dans la programmation et l’électronique.
j'ai un esp32Wroom (devkitc v4) et deux MCP23017, j'aimerais programmer les entrées et sorties de celle ci via Platformio sur Visual Studio Code.
j'ai noté les entrées et sorties de la manières suivante:
ESP32:
GPIO 22: SCL
GPIO 21: SDA
MCP23017 (1):
1 : signal Récepteur IR 1
2 : signal Récepteur IR 2
3 : signal Récepteur IR 3
4 : signal Récepteur IR 4
5 : signal Récepteur IR 5
6 : signal Récepteur IR 6
9 : VCC
10 : GND
12 : SCL
13 : SDA
15 : GND
16 : VCC
17 : VCC
18 : VCC
23 : OUT 3.3V 1
24 : OUT 3.3V 2
25 : OUT 3.3V 3
26 : OUT 3.3V 4
27 : OUT 3.3V 5
28 : OUT 3.3V 6
MCP23017 (2):
1 : signal Récepteur IR 7
2 : signal Récepteur IR 8
3 : signal Récepteur IR 9
4 : signal Récepteur IR 10
5 : signal Récepteur IR 11
6 : signal Récepteur IR 12
9 : VCC
10 : GND
12 : SCL
13 : SDA
15 : VCC
16 : GND
17 : VCC
18 : VCC
23 : OUT 3.3V 7
24 : OUT 3.3V 8
25 : OUT 3.3V 9
26 : OUT 3.3V 10
27 : OUT 3.3V 11
28 : OUT 3.3V 12
Les OUT 3.3v seront pour active des Module MOSFET HW-517 après avoir reçu le signal infrarouge correspondant au même numéro, exemple: réception signal IR 1 activation OUT 3.3V 1 pendant 500ms.
Les Signales IR seront produit a l'aide de récepteur IR alimenter en 3.3v.
Les masses GND de l'esp32 et des mcp23017 seront commune ainsi que toutes les masses du circuit.
Les VCC seront branché avec la sortie 3.3v de l'esp32.
L'esp32 seras alimenter a l'aide du dans un premier temps via le câble USB puis seras alimenter via la broche 5V a l'aide de deux accu 18650 3000mah
J'aurais besoin de votre aide pour pouvoir codé ce circuit a l'aide de Platformio sur Visual Studio Code.
@jpbbricole @nsfactoryproject a deja du mal avec la notion de deux objets a instancier et tu ajoutes les tableaux alors qu’il n’a que deux objets a créer.
@hbachetti
Je constate une évolution dans les bibliothèques qui ne gêne pas un ancien professionel.
Je ne pense même pas qu’il le remarque tellement il est dans son domaine.
Avec la multiplication des plate-formes, mais pas que pour cette raison, le code des bibliothèques devient de plus en plus complexe, donc de moins en moins compréhensif pour un debutant.
Quand je me suis mis a la programmation, j’ouvrais les fichiers code pour prendre des idees, maintenant je n’y comprends plus rien.
Parallèlement les exemples deviennent de plus en plus rudimentaires, ce qui laisse les non spécialistes et encore plus les débutants, perplexes .
On s’eloigne de plus en plus de l’esprit de ”Wiring”.
Les datasheets aussi évoluent, le modèle Atmel, qui etait accompagné d’exemples en assembleur et en C, disparait, il ne reste plus que le texte qui est souvent peu clair pour un non professionnel.
Ca change quoi au problème, c'est toujours des objets à instancier et autant qu'il apprenne les tableaux au début, c'est tout ça de fait et, surtout, ça simplifiera son code!
En écrivant ceci, tu supposes que les MCP23017 ont des adresses I2C consécutives, et qu'elles partent de ZÉRO.
Or l'adresse par défaut est : #define MCP23XXX_ADDR 0x20 //!< Default I2C Address
Attention : la librairie AdaFruit a changé, il y a environ 2 ans.
La méthode begin() des versions 1.XXX de la librairie AdaFruit accepte un argument allant de 0 à 7. Elle ajoute elle-même 0x20 pour obtenir l'adresse I2C, tandis que la nouvelle méthode begin_I2C() doit recevoir l'adresse I2C réelle (0x20 à 0x27).
Comme dit plus haut, la librairie a radicalement changé depuis 2 ans.
Elle gère à l'heure actuelle les MCP23008, MCP23S08, MCP23017, MCP23S17, etc.
Elle nécessite également l'installation de BusIO:
Je suis d'accord avec toi, et j'ai moi-même été surpris la première fois que j'ai utilisé la nouvelle version de cette librairie, et constaté qu'il ne fallait plus utiliser les index 0 à 7 comme dans l'ancienne version.
Le manque de documentation est un constat général quand on examine les librairies ARDUINO. Il faut souvent examiner les fichier .h et .cpp pour en savoir plus.
Malheureusement pour les débutants, certaines notions ne font pas partie de leur bagage (héritage, agrégation, etc.).
Mais c'est un constat général aussi, les débutants empoignent un projet sans connaître les bases du langage.
au temps pour moi, je suis effectivement parti d'un vieil exemple
perso,
je n'utilise les librairies, telles celles d'Adafruit, uniquement pour faire un test rapide du montage ; généralement, je réécris manuellement la config du mcp23017 (ou autres), pour être certain qu'il fasse exactement ce que je veux, et oui, il faut dans ce cas effectivement lire les datasheet
j'en suis revenu du mcp23017, génial, mais (actuellement ou définitivement ?) trop cher ; dans l'objet de ce topic, j'aurais utilisé un 74hc595 + un 74hc165, c'est 10x moins cher, quite à devoir équiper ce dernier de résistances de tirage
@nsfactoryproject
En résumé :
Tu as deux objets à instancier, un par module MCP23017.
Tu dois pour chaque objet utiliser la méthode begin avec l'adresse I2C
L'adresse I2C se modifie en jouant avec les pin A0, A1, A2: soit on les relie à la masse, soit à l'alimentation.
Pour être certain de l'adresse que tu as fixée, tu as tout intérêt à utiliser un scanner I2C.
Un scanner I2C est un programme "arduino" de quelques lignes qui recherche tous les composants i2C connectés.
Le scanner donne l'adresse des composants détectés.
Tu trouveras facilement des versions sur le net, cet utilitaire est très répandu.
Si tu fais cette opération en priorité, elle te permettra :
de vérifier que les MCP23017 sont bien câblés => si tu ne vois pas tes modules I2C c'est que le câblage est à rectifier.
d'obtenir l'adresse réelle.
Tu partiras sur de bonnes bases pour écrire ton programme.