Le zoo des connecteurs : les écosystèmes I2C
I2C est une interface merveilleuse. Avec quatre fils et seulement deux GPIO, vous pouvez connecter un grand nombre de capteurs et d'appareils - en parallèle, en plus ! Vous verrez I2C utilisé pratiquement partout, dans chaque téléphone, ordinateur portable, ordinateur de bureau et tout appareil contenant plus de quelques circuits intégrés - et la plupart des microcontrôleurs ont un support I2C intégré à leur matériel. En conséquence, il existe une myriade d'appareils intéressants et utiles avec lesquels vous pouvez utiliser I2C. De temps en temps, les entreprises faisant face aux fabricants créent des interfaces plug-and-play pour les dérivations d'appareils I2C qu'elles produisent, avec des brochages et des connecteurs standardisés.
Suivre un brochage standard est bien mieux que d'inventer le vôtre, et votre expérience avec des brochages d'en-tête de broche incohérents sur des modules I2C génériques en provenance de Chine le reflétera sûrement. Ne serait-il pas merveilleux si vous pouviez simplement brancher un seul connecteur porteur d'I2C dans un breakout MPU9050, MLX90614 ou HMC5883L que vous avez acheté pour quelques dollars, par opposition à l'obstacle habituel de regarder la sérigraphie du module, souder des en-têtes de broches dessus et en disposant soigneusement les en-têtes femelles sur les bonnes broches ?
Comme pour toute norme, en ce qui concerne les conventions I2C sur un connecteur, vous devineriez correctement qu'il y en a plus d'une, et elles ont toutes leurs avantages et leurs inconvénients. Il n'y en a pas tout à fait quinze, mais il y en a bien six et demi ! Ils sont pour la plupart inter-compatibles, et leur utilisation signifie que vous pouvez accéder facilement à des périphériques assez puissants. Commençons par les deux écosystèmes qui ne présentent que des différences mineures, et que vous rencontrerez le plus !
Il existe deux écosystèmes de modules I2C basés sur des connecteurs JST-SH (pas de 1 mm) à quatre broches, et ils sont très interchangeables ! L'un d'eux est le QWIIC de Sparkfun, et l'autre est le STEMMA QT d'Adafruit (prononcé « cutie »). Les deux sont simples à ajouter à votre PCB, tant que vous avez quelques connecteurs JST-SH à quatre broches prêts. De plus, les connecteurs Adafruit et Sparkfun ont le même brochage !
Les connecteurs utilisés sont JST-SH, montage en surface, au pas de 1 mm. Leur famille JST est SR/SH et le numéro de pièce de la pièce JST d'origine est SM04B-SRSS-TB, mais vous pouvez trouver des connecteurs tiers bon marché avec les mêmes dimensions sur LCSC en utilisant les termes de recherche "1x4P SH 1mm". QWIIC et STEMMA ont des pages auxquelles se référer lorsque vous créez vos propres conceptions. Maintenant, quelles sont les différences entre les deux ?
QWIIC se limite à 3,3 V côté hôte (c'est-à-dire carte MCU, fournissant de l'énergie) et côté appareil (c'est-à-dire capteur, consommant de l'énergie) - une décision raisonnable, simplifiant beaucoup les choses. Une écrasante majorité des appareils avec lesquels nous travaillons de nos jours sont de 3,3 V, au point où les problèmes de changement de niveau sont pour la plupart inconnus. Peut-être que le passage éventuel à 1,8 V bouleversera cela, mais nous n'en sommes pas encore là, et des facteurs tels que les tensions directes des LED nécessiteront une sorte de référence supérieure à 1,8 V dans notre projet lorsque nous y arriverons, de toute façon. Ainsi, une alimentation de 3,3 V et deux signaux I2C de niveau logique de 3,3 V sur un seul connecteur - clair et simple. Il y a de fortes chances que vous puissiez déjà ajouter QWIIC à votre capteur ou carte MCU - sans aucun composant supplémentaire requis, mais le connecteur lui-même !
En revanche, STEMMA QT est conçu pour développer la valeur éducative et pratique possible, conformément aux autres offres d'Adafruit. En tant que tel, il permet des hôtes 5 V - avec des appareils conçus pour fonctionner dans la plage de puissance et de niveau logique 3,3 V-5 V, en veillant à ce que votre Arduino Uno ne soit pas exclu du jeu. Ceci est possible car chaque module dispose d'un régulateur de tension à faible chute comme l'AP2112K ou le MIC5219, ce qui permet de maintenir les choses à près de -3,3 V lorsque vous alimentez la carte avec 3,3 V. Le raisonnement est simple - à part les hôtes 5 V comme Arduino Uno , vous pouvez également chaîner vos appareils STEMMA avec des appareils gourmands en énergie, comme des servos I2C ou des bandes RVB. En bref, brancher quoi que ce soit sur quoi que ce soit, avec n'importe quel type de chaîne, ne devrait pas entraîner d'échappement de fumée magique - un événement rarement sur la liste TODO d'un projet de fabricant. Un autre avantage de STEMMA QT est la standardisation des tailles de carte de périphérique, vous permettant d'intégrer facilement mécaniquement de nouveaux capteurs dans le projet avant même qu'ils ne vous parviennent, et de générer des hacks astucieux comme cette prise hotswap imprimable en 3D STEMMA Qt !
Pour résumer la situation de compatibilité de tension - tous les appareils STEMMA QT fonctionneront avec les hôtes QWIIC ; et tous les appareils QWIIC fonctionneront avec des hôtes STEMMA Qt 3,3 V ; par conséquent, tout hôte QWIIC est également techniquement un hôte STEMMA QT. Les appareils QWIIC seront farouchement incompatibles avec les hôtes 5 V STEMMA QT, mais ces hôtes sont rares, et il vous suffit d'être à l'affût lors de l'interfaçage des appareils QWIIC avec les hôtes STEMMA. Un autre problème mineur avec ces deux normes est le manque de signaux d'interruption - que je développerai ci-dessous, dans la section "Breakout Garden". Pour l'instant, regardons la grande sœur de STEMMA QT !
Oh, d'accord, enchaînement ! QWIIC et STEMMA QT sont compatibles avec le chaînage - de nombreux modules offrant un deuxième connecteur JST-SH sur le côté opposé de la carte, avec les mêmes signaux traversés. Cela vous permet de câbler vos projets de manière confortable, sans avoir à localiser un endroit dans votre projet où vous pouvez placer votre MCU sans l'avoir trop loin de tous vos capteurs, ou sans recourir à des planches à pain pour diviser votre bus I2C en plusieurs talons. De nombreuses cartes hôtes proposent également plusieurs prises câblées en parallèle, et il existe des cartes "séparatrices" disponibles qui transforment un seul câble JST-SH avec I2C en, disons, trois prises supplémentaires.
Tant que vos adresses ne sont pas en conflit, vous pourrez généralement bien câbler un bus I2C pour un projet de cette manière. Oh, et assurez-vous de ne pas surcharger votre bus I2C avec tous les pullups ajoutés en parallèle - ils ont tendance à être de 10 kΩ pour STEMMA QT et de 2,2 kΩ pour QWIIC, et au moins dans le cas de QWIIC, il semble que vous êtes généralement capable de coupez deux cavaliers de trace avec un couteau xacto pour déconnecter les tractions sur n'importe quel module. Avec toutes les cartes Raspberry Pi non basées sur Pico ayant des pullups intégrés de 1,8 kΩ sur leurs ports I2C, vous devrez peut-être le faire assez tôt lorsque vous chaînez des appareils.
STEMMA a le même brochage que STEMMA QT et QWIIC, mais un connecteur différent et plus grand. Il est également flexible en ce qui concerne les tensions que vous pouvez émettre du côté hôte et, à son tour, doit pouvoir accepter du côté de l'appareil. La plupart des avantages de la section STEMMA QT s'appliquent à STEMMA, à l'exception de la compatibilité QWIIC et de la taille physique réduite.
Les connecteurs STEMMA sont des connecteurs JST PH avec un pas de 2 mm, le numéro de pièce JST étant S4B-PH-SM4-TB, et des connecteurs tiers bon marché disponibles avec les termes de recherche "1x4P PH 2mm". Ils sont un peu plus faciles à attaquer avec un fer à souder que les connecteurs SH à pas de 1 mm, et pour les cartes plus grandes, ils conviennent bien.
JST-PH est l'un de ces cas où les douilles à montage en surface s'avèrent beaucoup plus résistantes que celles à trou traversant. Avec un mécanisme de rétention plus résistant, vos ongles ne suffiront plus - vous voudrez probablement utiliser votre fidèle paire de coupe-bordures bleues pour les débrancher ! Le STEMMA porteur d'I2C a également un homologue GPIO et STEMMA analogique, utilisant des connecteurs JST PH à 3 broches pour des choses comme les bandes WS2812 - où la compatibilité 5 V devient exceptionnellement pratique. Cependant, les connecteurs à 4 broches sont fermement réservés à I2C, et une telle cohérence est difficile à ne pas apprécier dans les environnements éducatifs et de prototypage - en consultant les dizaines de tutoriels d'Adafruit impliquant des appareils STEMMA, les sections "Câblage" de ceux-ci sont très simples ! Sur certains hôtes STEMMA, vous pourrez également recâbler le port à 3,3 V ou 5 V via un cavalier à souder.
La norme de connecteur Grove, la plus ancienne de toutes, est maintenant en quelque sorte un mouton noir parmi les écosystèmes de connecteurs I2C, et est ici à moitié comme un morceau d'histoire, à moitié comme un récit édifiant. Contrairement aux principes des écosystèmes open source, Grove utilise un connecteur propriétaire, qui oblige les fabricants à se démener pour son identification correcte alors qu'ils essaient de trouver une source qui n'est pas SeeedStudio. Contrairement à toutes les autres normes répertoriées ici, lorsque vous voyez un connecteur Grove à 4 broches, vous ne savez pas si c'est pour I2C, UART, deux GPIO numériques ou quelque chose d'analogique, ce qui ruine toute l'idée "plug and play".
Pour ceux d'entre vous qui ont la malchance d'avoir à s'interfacer avec Grove, il utilise également une plage de tensions possibles de 3,3 V à 5 V, mais est moins intéressé à annoncer explicitement celle qui est utilisée, ou à vous laisser changer cela - les deux choses que STEMMA fait sans casser une sueur. Il utilise le même brochage pour I2C que QWIIC/STEMMA. Si vous avez un câble compatible STEMMA (JST-PH), vous pouvez le poncer un peu pour l'adapter à un connecteur Grove.
En d'autres termes, il y a une bonne raison pour laquelle les connecteurs Grove ne sont pas utilisés plus souvent. Je n'ai pas pu m'empêcher de remarquer que Tom's Hardware, lors de la rédaction de la section conclusion de son propre article de présentation de l'écosystème de connecteurs I2C, n'a pas réussi à trouver un avantage de Grove qui n'était pas générique pour tous les autres écosystèmes dont il parlait. À moins que vous ne vouliez vous résigner à payer SeeedStudio pour chaque connecteur et câble dont vous avez besoin, et que vous soyez d'accord pour ne jamais être compatible avec les écosystèmes de connecteurs qui valent la peine d'investir des efforts, je vous recommande fortement d'éviter d'utiliser Grove sur vos cartes. Passons plutôt du temps sur l'option suivante – sous-estimée.
L'écosystème Breakout Garden de Pimoroni utilise un brochage élégant - prenant une rangée de cinq broches de l'en-tête Raspberry Pi GPIO, broches 1 à 9, y compris 3,3 V, SDA, SCL, une broche GPIO et, bien sûr, GND - dans cet ordre . Ils ne détiennent certainement pas de brevet pour ce brochage - de nombreux hackers, moi y compris, utilisent ce brochage depuis des lustres sur nos cartes équipées d'I2C. Un tel brochage, pour commencer, signifie que vous pouvez brancher directement n'importe quelle carte Breakout Garden sur un Raspberry Pi.
Vous n'êtes pas limité à cela non plus - Pimoroni propose également de jolis connecteurs coulissants qui vous permettent d'échanger à chaud les modules Breakout Garden. Et, si vous ne voulez pas utiliser les prises coulissantes, soudez simplement les connecteurs mâles coudés et traitez-les comme n'importe quel autre module. Les modules Breakout Garden ont généralement une plage de tension d'entrée de 3,3 V à 5 V. Ils revendiquent également une protection contre l'inversion de polarité sur chaque module, donc, inévitablement brancher un module à l'envers ne devrait pas retarder votre projet.
Avec le brochage Breakout Garden, vous obtenez également un GPIO supplémentaire, qui est le plus souvent soit NC, soit utilisé comme broche d'interruption. Les broches d'interruption sont sous-estimées lorsque vous travaillez avec des périphériques I2C - elles vous permettent de décharger votre CPU et votre bus I2C, en évitant les interrogations et en laissant votre périphérique I2C vous signaler quand il veut votre attention, ce qui n'est pas possible via le bus I2C seul. Pour quelques modules, comme ce pilote d'actionneur haptique, le GPIO est plutôt utilisé comme broche "déclencheur", pour la synchronisation des actions. Cela nuit quelque peu au concept de chaînage, bien sûr – pour être juste, cependant, il en va de même pour la prise hotswap encombrante. Non pas que vous ne puissiez pas connecter les cartes Breakout Garden en parallèle - après tout, la broche INT est généralement désactivée pour les appareils I2C, ce qui sera absolument utile, étant donné la décision déroutante de câbler toutes les broches INT ensemble sur leur 6-socket CHAPEAU Raspberry Pi.
L'ajout d'un support de base pour une connexion de type "Breakout Garden" dans votre projet est aussi simple que l'ajout d'un en-tête de broche à cinq broches de 2,54 mm (0,1 ″) - et avec cela, vous obtenez instantanément la compatibilité de l'en-tête Raspberry Pi GPIO. Lorsqu'il s'agit de créer vos propres modules, je n'ai trouvé aucune dimension ni aucun module officiel "comment créer", donc vous n'êtes probablement pas censé le faire - ce qui ne signifie pas que vous ne pouvez pas faire de rétro-ingénierie les schémas et les dimensions, puis essayez quand même, mais c'est sûr que c'est assez décourageant. Si vous souhaitez ajouter une prise Breakout Garden, elles ont deux rangées de broches distantes d'exactement 5,08 mm (0,2 ″) et offrent une connectivité plug & play pratique, mais avec un coût de 1 £ par prise (hors expédition), les prises coulissantes sont les plus chères à utiliser de toutes.
Vous êtes à la recherche d'accessoires JST-SH ? Vous ne pouvez vraiment pas vous tromper avec les connecteurs SMD ; Cependant, vous pouvez absolument vous tromper en ce qui concerne les câbles pré-sertis. Le sertissage de JST-SH avec son pas de 1 mm est loin d'être facile, et acheter vos propres câbles est votre meilleur pari - sauf lorsqu'ils sont mal câblés. Il y a un an, je préparais un projet et j'ai acheté un faisceau de câbles JST-SH, illustré à droite. En y regardant de plus près, quelque chose se sentait mal.
Il s'est avéré que leurs extrémités de câble étaient câblées dans la direction opposée, le brochage de l'un étant inversé par rapport à celui de l'autre - avec des conséquences probablement désastreuses lorsqu'il était utilisé comme interconnexion. Les câbles que j'ai achetés nécessiteront un recâblage minutieux avec des pincettes, et la prochaine fois que vous achèterez des câbles JST-SH tiers afin de pouvoir câbler votre prochain projet, vous saurez inspecter les images avant d'appuyer sur "Acheter maintenant" bouton.
Si vous avez déjà travaillé avec des pièces DFRobot, vous avez peut-être également vu des connecteurs JST-PH à 4 broches (ou 3 broches) sur leurs cartes – ils proviennent de leur écosystème appelé Gravity. Curieusement, Adafruit affirme que STEMMA est compatible avec Gravity, à l'exception de leurs appareils non I2C - puisque Gravity fait la même chose que Grove, où un connecteur à 4 broches ne garantit pas I2C. Cependant, en vérifiant le brochage des appareils Gravity I2C, il semble que chaque broche se trouve à un endroit différent, en particulier, la masse et l'alimentation étant inversées. Tout comme STEMMA, ils utilisent des connecteurs à 3 broches pour les appareils numériques et analogiques. La partie amusante est qu'ils ont également réussi à changer le brochage pour ceux-ci à un moment donné, inversant également la polarité de la broche d'alimentation - tout en utilisant toujours le même connecteur, un non-non pour les normes de connecteur. Procéder avec prudence!
EasyC est fondamentalement QWIIC copié sur un T, avec le même brochage, connecteurs, capacités de chaînage et limite de tension de 3,3 V – mais sans mentionner QWIIC de quelque manière que ce soit dans leurs pages Web et ressources, ce qui est une déception. L'interopérabilité de différents écosystèmes fait partie de ce qui les rend précieux, et sans doute, vous pourriez être plus enclin à acheter chez eux si vous saviez que la norme qu'ils utilisent est largement acceptée - par opposition au "brochage aléatoire sur un connecteur" . EasyC est piloté par une société e-radionica basée en Croatie, produisant un assortiment de taille moyenne de modules utiles, y compris un certain nombre de clones et de remixes de modules chinois - à des prix européens. Les fichiers de conception de leurs modules ne sont pas liés aux fichiers de produit, mais au moins certains d'entre eux semblent être sur leur GitHub ! Chose intéressante, ils stockent également un câble "EasyC" de 5 cm qui, après une inspection plus approfondie, a le même câblage inversé que les câbles dont j'ai parlé dans la section précédente. Peut-être qu'il serait justifié de réfléchir un peu plus à l'écosystème EasyC.
Parfois, nous voyons des entreprises tenter une chose JST-SH, mais pas tout à fait y arriver. Un exemple de cela est une carte assez récente de Lolin, la Lolin D1 Mini Pro, avec un connecteur JST-SH à 4 broches étiqueté "I2C". Vous pourriez être pardonné de penser qu'il s'agit d'un brochage de type QWIIC ; étant donné que ce connecteur est marqué "I2C", on pourrait dire qu'ils ont été trompés, poignardés dans le dos et très probablement trompés. Au lieu du brochage GND-VCC-SDA-SCL, cette carte utilise GND-SDA-SCL-VCC, et il semble qu'il y ait même quelques accessoires comme des boucliers fabriqués avec ce brochage à l'esprit. C'est comme si quelqu'un envoyait une lettre à Lolin disant "hé, tu devrais mettre I2C sur un connecteur JST-SH" et refusait ensuite de donner plus de détails. Heureusement, avec les broches GND correspondantes, la probabilité de détruire des choses n'est pas aussi extrême.
Laquelle des normes devez-vous suivre lors de la conception de vos propres cartes ? Je vous ai fourni toutes les informations dont vous pourriez avoir besoin pour prendre vos propres décisions, mais si vous recherchez une recommandation ou une ligne directrice, je me ferai un plaisir de vous en fournir une également.
Personnellement, je n'utilise pas de connecteurs STEMMA (JST-PH) pleine grandeur, car trop souvent, ils sont assez volumineux pour que le PCB lui-même semble petit, et peuvent rendre les petites cartes un peu encombrantes en raison de leur hauteur - plus, ils peuvent être plus difficiles à débrancher. Les connecteurs JST-SH, cependant, sont beaucoup trop attrayants en raison de la perspective d'être compatibles avec deux écosystèmes à la fois, tant que j'évite les hôtes 5V. Et - un simple en-tête à 5 broches de brochage standard offre une quantité surprenante d'avantages pour la rapidité avec laquelle vous pouvez l'ajouter !
En bref, je vous recommande de combiner un connecteur à broches de type Breakout Garden et le connecteur QWIIC/STEMMA QT JST-SH sur vos cartes. De cette façon, vous aurez toujours une compatibilité avec trois des quatre écosystèmes dont il faut parler, et connecter votre carte I2C à un Raspberry Pi sera aussi simple que d'obtenir cinq câbles de démarrage. Avec cette combinaison, vous n'aurez plus jamais à penser aux brochages d'en-tête I2C, et vous aurez un signal d'interruption à portée de main pour les moments où vous pourriez vraiment en utiliser un.
Faut-il ajouter un changement de niveau ? Pas si vous n'utilisez pas 5 V dans vos projets, et surtout pas si vous faites une percée pour un circuit intégré qui a une large gamme de tensions d'entrée, comme, par exemple, les EEPROM et RTC I2C. Personnellement, je travaille principalement avec 3,3 V, et je n'ai pas de bobines de régulateurs AP2112 à saupoudrer sur chaque carte que je fabrique - heureusement, je n'ai pas non plus d'hôtes 5V I2C. Si vous souhaitez rendre vos appareils compatibles 5 V, vous ne pouvez pas vous tromper avec la solution MOSFET classique, incroyablement élégante et peu coûteuse pour le changement de niveau I2C !
Parmi ceux-ci, QWIIC, STEMMA et Breakout Garden ont jusqu'à présent résisté à l'épreuve du temps, avec des entreprises d'électronique amateur qui les soutiennent jusqu'ici. Il n'est que juste que nous profitions des normes qu'ils ont créées. Espérons que les informations et les instructions fournies nous rapprochent des journées d'interopérabilité universelle, lorsque la carte MCU d'un pirate peut s'interfacer de manière transparente avec les capteurs d'un autre pirate. À partir de là, un jour, nos breakouts SSD1306 OLED préférés pourraient commencer à arriver dans nos boîtes aux lettres équipées d'un connecteur JST-SH et d'un câble supplémentaire. Aujourd'hui n'est pas ce jour-là, mais avec chaque empreinte JST-SH que nous ajoutons à notre PCB, je pense que nous y reviendrons bientôt.