{"id":3522,"date":"2017-01-27T10:43:41","date_gmt":"2017-01-27T09:43:41","guid":{"rendered":"http:\/\/www.generationrobots.com\/blog\/?p=3522"},"modified":"2023-03-29T09:48:08","modified_gmt":"2023-03-29T07:48:08","slug":"analyse-de-trame-i2c-a-laide-de-lanalyseur-logique-saleae-sur-du-lego-mindstorms","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/fr\/analyse-de-trame-i2c-a-laide-de-lanalyseur-logique-saleae-sur-du-lego-mindstorms\/","title":{"rendered":"Analyse de trame I2C \u00e0 l&rsquo;aide de l&rsquo;analyseur logique Saleae sur du Lego Mindstorms"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-utilisation-d-un-analyseur-logique-usb-16-voies-100mhz-afin-d-espionner-le-bus-i2c-de-la-brique-lego-nxt\">Utilisation d&rsquo;un Analyseur Logique USB 16 voies 100MHz afin d&rsquo;espionner le bus I2C de la brique Lego NXT<\/h2>\n\n\n\n<p>Ce tutoriel pr\u00e9sente une utilisation de l&rsquo;analyseur Logique USB 16 voies 100MHz d\u00e9velopp\u00e9 par la soci\u00e9t\u00e9 Saleae. Nous allons ici espionner une communication I2C entre une brique intelligente Lego Mindstorms NXT et un capteur Ultrasons NXT. Ce capteur sonar \u00e0 ultrasons NXT est fourni en standard dans le kit robotique Lego Mindstorms NXT. <br \/>En raison de son niveau de technicit\u00e9, cet article s\u2019adresse aux personnes ayant des comp\u00e9tences en \u00e9lectronique essentiellement.<\/p>\n\n\n\n<p>Sans plus tarder plongeons nous dans l&rsquo;univers merveilleux des communications \u00e9lectroniques gr\u00e2ce \u00e0 l&rsquo;I2C.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-mais-avant-tout-qu-est-ce-que-l-i2c\">Mais avant tout, qu&rsquo;est ce que l&rsquo;I2C ?<\/h2>\n\n\n\n<p>Pour ceux qui ne le savent pas encore, l&rsquo;I2C est un bus de communication mis au point par la soci\u00e9t\u00e9 Philips en 1982. L\u2019i2C est aujourd\u2019hui un standard de communication tr\u00e8s populaire. Il n\u2019est donc pas \u00e9tonnant que Lego ait choisi de l\u2019utiliser au sein de sa brique intelligente NXT. Toutes les communications entre la brique intelligente Lego Mindstorms NXT et les capteurs s&rsquo;effectuent gr\u00e2ce au protocole I2C (la communication avec les moteurs utilisent le PWM et non pas l&rsquo;I2C). La bonne compr\u00e9hension de ce dernier est donc indispensable aux roboticiens vers\u00e9s dans l&rsquo;\u00e9lectronique et qui souhaitent concevoir leur propres capteurs ou connecter leur propre circuit au robot Lego Mindstorms NXT.<\/p>\n\n\n\n<p>L\u2019I2C est un bus de donn\u00e9es s\u00e9rie synchrone bidirectionnel half-duplex. Il permet une communication simple et efficace entre un microcontr\u00f4leur et un o\u00f9 plusieurs actionneurs ou capteurs. Sans trop entrer dans les d\u00e9tails, mais sans omettre les points importants \u00e0 retenir afin que chacun d&rsquo;entre vous puissent \u00e9laborer ses propres capteurs, int\u00e9ressons nous aux grandes lignes de cette communication lors du dialogue entre notre brique et ces actionneurs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-fonctionnement-du-protocole-i2c-sur-le-mode-maitre-esclave\">Fonctionnement du protocole I2C sur le mode ma\u00eetre-esclave<\/h3>\n\n\n\n<p>Un \u00e9change I2C fonctionne sur le principe ma\u00eetre-esclave. Dans le cadre d&rsquo;une transaction I2C entre la brique NXT et ses capteurs, la brique NXT est n\u00e9cessairement ma\u00eetre et les capteurs n\u00e9cessairement esclaves (m\u00eame si ils peuvent technologiquement se comporter en ma\u00eetre), c&rsquo;est \u00e0 dire que l&rsquo;\u00e9tablissement d&rsquo;une communication entre la brique NXT et ses capteurs doit toujours provenir d&rsquo;une demande de la brique.<\/p>\n\n\n\n<p>Le sch\u00e9ma ci-dessous d\u00e9crit le comportement ma\u00eetre-esclave de la brique Lego NXT.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/I2C-Lego-NXT-Maitre-Esclave.jpg\" alt=\"Communication I2C entre une brique Lego Mindstorms NXT et son capteur \u00e0 ultrasons\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Comme le pr\u00e9sente le sch\u00e9ma ci-dessus, quatre fils sont n\u00e9cessaires \u00e0 la communication entre le capteur et la brique NXT (les c\u00e2bles de connexion NXT que vous utilisez contiennent ces 4 fils) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gnd (ground), c&rsquo;est la r\u00e9f\u00e9rence des potentiels.<\/li>\n\n\n\n<li>Vcc, il permet d\u2019alimenter le capteur.<\/li>\n\n\n\n<li>SCL, c&rsquo;est la ligne d&rsquo;horloge, elle synchronise la transaction entre les deux entit\u00e9s.<\/li>\n\n\n\n<li>SDA, c&rsquo;est la ligne de donn\u00e9es, c&rsquo;est par cette ligne que transitent les informations \u00e9chang\u00e9e entre les deux entit\u00e9s.<\/li>\n<\/ul>\n\n\n\n<p>Ce sont ces deux derni\u00e8res lignes qui vont nous int\u00e9resser lors de l\u2019espionnage du bus.<\/p>\n\n\n\n<p>Comment fonctionne le protocole I2C ? La base se nomme une transaction. Elle d\u00e9bute par un bit de start et se termine par un bit de stop. Entre ces deux bits, c&rsquo;est la communication proprement dite. Dans le cas du mode ma\u00eetre-esclave, c&rsquo;est toujours le ma\u00eetre qui commence la transaction. La premi\u00e8re transaction va constituer pour le ma\u00eetre \u00e0 \u00e9crire sur son bus de connexion l&rsquo;adresse I2C du capteur \u00e0 qui il s&rsquo;adresse. Quand vous branchez le capteur sonar \u00e0 ultrasons NXT sur le port num\u00e9ro 1 (par exemple), il n&rsquo;y a qu&rsquo;un seul capteur et donc pas de risque de conflit. Mais si vous utilisez un multiplexeur de capteurs, vous pouvez brancher plusieurs capteurs sur un m\u00eame port et donc, \u00e0 ce niveau, la bonne connaissance de l&rsquo;adresse I2C du capteur est n\u00e9cessaire.<\/p>\n\n\n\n<p>L&rsquo;image suivante pr\u00e9sente une vue d&rsquo;une telle premi\u00e8re transaction \u00e0 l&rsquo;aide du logiciel fourni avec l&rsquo;analyseur logique USB 16 voies 100MHz de Saleae. La ligne du haut repr\u00e9sente le potentiel du fil SCL (horloge) et la ligne du bas, le potentiel du fil SDA (donn\u00e9es).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Transaction-I2C-vue-Analyseur-logique-Saleae.jpg\" alt=\"Visualisation d'une transaction I2C \u00e0 l'aide de l'analyseur logique Saleae.\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Comme le pr\u00e9sente l&rsquo;image ci-dessus, une transaction d\u00e9but avec un bit de start caract\u00e9ris\u00e9 par un front descendant du signal de donn\u00e9es alors que l&rsquo;horloge est \u00e0 l&rsquo;\u00e9tat haut. Viennent ensuite 8 bits de donn\u00e9es. Les 6 premiers bits sont \u00e0 0 (le potentiel SDA est bas), le 7\u00e8me est \u00e0 1 et enfin le 8\u00e8me est \u00e0 0. Qu&rsquo;est ce que cela signifie ? Cela signifie que l&rsquo;on a \u00e9crit 0x02, c&rsquo;est \u00e0 dire l&rsquo;adresse I2C du capteur Ultrasons NXT. Comme nous \u00e9voqu\u00e9 plus haut, la premi\u00e8re chose que fait le ma\u00eetre, c&rsquo;est d&rsquo;indiquer sur le bus de donn\u00e9es l&rsquo;adresse I2C du capteur auquel il souhaite s&rsquo;adresser. Enfin, le 8\u00e8me bit est \u00e0 0, indiquant qu&rsquo;il s&rsquo;agit d&rsquo;une \u00e9criture.<\/p>\n\n\n\n<p>Le 9\u00e8me bit est \u00e0 0 et c&rsquo;est l&rsquo;ACK (aknowledgment), c&rsquo;est \u00e0 dire la r\u00e9ponse du capteur dont l&rsquo;adresse est 0x02 disant qu&rsquo;il est bien pr\u00e9sent et pr\u00eat \u00e0 r\u00e9pondre aux autres demandes de la brique NXT.<\/p>\n\n\n\n<p>L&rsquo;image pr\u00e9sente \u00e9galement un des avantages de l&rsquo;analyseur Logique de Saleae. En effet, celui-ci \u00e9crit en toute lettre l&rsquo;interpr\u00e9tation que nous venons de faire en lisant les potentiels sur la zone interm\u00e9diaire entre les deux potentiels. Il a \u00e9crit \u00ab\u00a0Setup Write [&lsquo;2&rsquo;] + ACK\u00a0\u00bb ce qui est exactement la transaction que nous venons de d\u00e9crire.<\/p>\n\n\n\n<p>A pr\u00e9sent que nous en savons plus sur l&rsquo;I2C et que nous avons m\u00eame pr\u00e9sent\u00e9 l&rsquo;interface de l&rsquo;analyseur logique Saleae, voyons comment r\u00e9aliser physiquement le circuit qui permet d&rsquo;obtenir ces informations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-l-analyseur-logique-saleae-pour-espionner-la-communication-i2c\">L&rsquo;analyseur logique Saleae pour espionner la communication I2C<\/h3>\n\n\n\n<p>Le sch\u00e9ma suivant pr\u00e9sente le mode de connexion de l&rsquo;analyseur logique Saleae pour qu&rsquo;il fournisse des informations sur la communication I2C entre la brique Lego Mindstorms NXT et le capteur sonar \u00e0 ultrasons Lego NXT.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Branchement-analyseur-logique-Saleae.jpg\" alt=\"Connexion de l'analyseur logique Saleae sur un circuit Lego NXT\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Une fois le circuit r\u00e9alis\u00e9, il faut t\u00e9l\u00e9charger et installer le logiciel fourni avec l&rsquo;analyseur logique Saleae. Ce logiciel est disponible \u00e0 l&rsquo;adresse <a class=\"catalogue\" title=\"Logiciel de capture du signal avec l'analyseur logique Saleae\" href=\"http:\/\/www.saleae.com\/downloads\" target=\"_blank\" rel=\"noopener\">http:\/\/www.saleae.com\/downloads<\/a><\/p>\n\n\n\n<p>Une fois le logiciel install\u00e9, branchez l&rsquo;analyseur logique Saleae \u00e0 votre PC \u00e0 l&rsquo;aide du cordon USB fourni. Lancez le logiciel. La led de votre analyseur logique Saleae doit alors se mettre \u00e0 clignoter. L&rsquo;interface du logiciel de capture est la suivante :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Interface-logiciel-capture-Saleae.jpg\" alt=\"Interface du logiciel de capture du signal de l'analyseur logique Saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Configurons \u00e0 pr\u00e9sent l&rsquo;analyseur logique Saleae de manni\u00e8re \u00e0 ce qu&rsquo;il effectue une capture de l&rsquo;I2C propre.<\/p>\n\n\n\n<p>Tout d&rsquo;abord, r\u00e9glons la plage des tensions mesur\u00e9es. Allez dans <em>Option\/Logic16 Input Voltages<\/em> et choisissez \u00ab\u00a03.6V to 5V\u00a0\u00bb.<\/p>\n\n\n\n<p>Ensuite, afin d&rsquo;am\u00e9liorer la lisibilit\u00e9 de la mesure, rendez-vous dans <em>Option\/Display in Ascii<\/em> et choisissez \u00ab\u00a0Ascii\u00a0\u00bb.<\/p>\n\n\n\n<p>Ceci \u00e9tant fait, il ne nous reste plus qu&rsquo;\u00e0 configurer le logiciel en I2C afin qu&rsquo;il se charge de tout. Pour cela allez dans <em>Analyzers<\/em> et choisissez le mode I2C.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Choix-Protocole-I2C-Analyseur-logique-Saleae.JPG\" alt=\"Choix du protocole I2C avec l'analyseur logique Saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Une nouvelle fen\u00eatre devrait appara\u00eetre \u00e0 votre \u00e9cran :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Changement-nom-channels-Analyseur-logique-Saleae.JPG\" alt=\"adaptation du nom des channels dans l'analyseur logique Saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Faites bien attention \u00e0 faire correspondre SDA et SCL aux bons canaux, ceci d\u00e9pend bien \u00e9videment de votre c\u00e2blage. Choisissez le nom que vous souhaitez donner \u00e0 vos canaux puis cliquez sur Rename.<\/p>\n\n\n\n<p>A pr\u00e9sent, nous devons choisir le temps d&rsquo;acquisition des donn\u00e9es. Comme le pr\u00e9sente l&rsquo;impage ci-dessous, nous choisissons 100M de mesures \u00e0 16 MHz ce qui correspond \u00e0 6.25 secondes d&rsquo;analyse. Pour une communication I2C un minimum de 2 MHz est conseill\u00e9, mais pas forcement n\u00e9cessaire. Mais bon, plus nous sommes rapide, moins nous risquons de rater des informations.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Frequence-sampling-signal-analyseur-logique-Saleae.jpg\" alt=\"Choix de la fr\u00e9quence d'\u00e9chantillonage avec l'analyseur logique Saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Et bien \u00e7a y est, nous sommes enfin pr\u00eat \u00e0 teste notre analyseur logique. Enfin plus ou moins, car certes nous sommes pr\u00e8s \u00e0 lancer une acquisition, mais une acquisition de quoi ? Comment faire pour demander au capteur de nous envoyer son num\u00e9ro de version ? <br \/>Le code NXC suivant effectue cela. Pour rappel, NXC est un langage C pour Lego Mindstorms NXT. Le langage utilis\u00e9 n&rsquo;est pas important ici car l&rsquo;analyseur logique ne fait aucune hypoth\u00e8se sur la nature du programme qui g\u00e9n\u00e8re une communication, il ne fait qu&rsquo;intercepteur la communication et l&rsquo;analyser. Nous aurions ainsi pu proposer un programme r\u00e9alis\u00e9 dans n&rsquo;importe quel langage.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Source-NXC-demande-version-capteur.JPG\" alt=\"code NXC permettant d'afficher la version d'un capteur sonar\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Vous pouvez maintenant cliquer sur start dans Saleae logic, et lancer l\u2019ex\u00e9cution du programme sur votre brique. Une pop-up avec un curseur apparait alors au centre de votre \u00e9cran du logiciel de capture de l&rsquo;analyseur logique Saleae. Cela signifie que l&rsquo;analyse des transactions I2C est en cours.<\/p>\n\n\n\n<p>Une fois l&rsquo;analyse termin\u00e9e, faites rouler la molette de votre souris vers le bas afin de prendre un maximum de recul par rapport \u00e0 la trame compl\u00e8te (la molette de la souris effectue un zoom arri\u00e8re ce qui est tr\u00e8s pratique). Vous devriez voir sur votre \u00e9cran une zone diff\u00e9rente.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Trame-I2C-dans-Analyseur-Logique-Saleae.jpg\" alt=\"Zoom arri\u00e8re sur une trame I2C avec l'analyseur logique Saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Placer le curseur de votre souris sur la zone entour\u00e9e en rouge et zoomez (faites rouler la molette vers l&rsquo;avant). Votre \u00e9cran ressemble alors \u00e0 l&rsquo;image suivante :<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Trame-I2C-precise-dans-Analyseur-Logique-Saleae.jpg\" alt=\"Trame I2C analys\u00e9e \u00e0 l'aide de l'analyseur logique Saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Ce que vous visualisez est la transaction I2C qu&rsquo;il y a eue entre votre brique Lego NXT et votre capteur Ultrason. On peut ici v\u00e9rifier que les informations plac\u00e9es dans inBuff sont bien transmises, en effet, inBuff[0]=0x02, c&rsquo;est l&rsquo;adresse d&rsquo;\u00e9criture du capteur Ultrason. InBuff[1] est ensuite transmis, il permet de se positionner sur le registre 0 car c&rsquo;est celui qui contient la version du capteur. Cette trame, est le fruit de l&rsquo;utilisation de la fonction NXC I2CBytes, elle s&rsquo;occupe de l&rsquo;envoi du signal de start (caract\u00e9ris\u00e9 par le cercle vert), suivi de l&rsquo;envoi de inbuff puis du signal de stop, caract\u00e9ris\u00e9 par un carr\u00e9 rouge sur la capture.<\/p>\n\n\n\n<p>Une fois cette premi\u00e8re transaction effectu\u00e9e, une seconde transaction I2C est initi\u00e9e par l&rsquo;envoi d&rsquo;un signal de re-start (second cercle vert) suivi de l&rsquo;adresse de lecture du capteur ultrason (0x03), puis elle attend en retour un nombre de donn\u00e9es \u00e9gal au contenu de la variable size (ici 4). On peut voir ici que lors de la r\u00e9ception de la derni\u00e8re donn\u00e9e, la brique transmet non pas un ACK, mais un NAK, cela signifie que la brique n&rsquo;attend plus rien de son esclave, la transmission s\u2019arr\u00eate par l&rsquo;envoi d&rsquo;un signal de stop, c&rsquo;est \u00e0 dire un front montant de la ligne de donn\u00e9e alors que l&rsquo;horloge est \u00e0 l&rsquo;\u00e9tat haut.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h3>\n\n\n\n<p>Gr\u00e2ce \u00e0 cet exemple relativement simple, on peut ais\u00e9ment comprendre l&rsquo;utilit\u00e9 d&rsquo;un analyseur de trame tel que l&rsquo;analyseur logique Saleae, car m\u00eame si certains d&rsquo;entre vous n&rsquo;en voient pas encore l&rsquo;utilit\u00e9, ce petit bijou technologique vous permettra de debugger bon nombre de vos programmes, car il vous offre un contr\u00f4le facile, et rapide de l\u2019int\u00e9grit\u00e9 d&rsquo;une transaction entre un ou plusieurs de vos contr\u00f4leurs ou actionneurs. Il est aujourd&rsquo;hui un alli\u00e9 de premier choix d\u00e8s que l&rsquo;on souhaite s&rsquo;initier aux communications \u00e9lectroniques, par la simplicit\u00e9 de son interface, mais surtout par le service qu&rsquo;il vous rend, en d\u00e9cortiquant pour vous la plupart des standards de communication \u00e9lectroniques tel que l&rsquo;I2C,SPI,1-Wire et bien d&rsquo;autres, vous laissant ainsi un chronogramme clair, lisible, enregistrable et facilement interpr\u00e9table.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Utilisation d&rsquo;un Analyseur Logique USB 16 voies 100MHz afin d&rsquo;espionner le bus I2C de la brique Lego NXT Ce tutoriel pr\u00e9sente une utilisation de l&rsquo;analyseur Logique USB 16 voies 100MHz d\u00e9velopp\u00e9 par la soci\u00e9t\u00e9 Saleae. Nous allons ici espionner une communication I2C entre une brique intelligente Lego Mindstorms NXT et un capteur Ultrasons NXT. Ce[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/fr\/analyse-de-trame-i2c-a-laide-de-lanalyseur-logique-saleae-sur-du-lego-mindstorms\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":3524,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128],"tags":[],"class_list":["post-3522","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-education"],"_links":{"self":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/3522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/comments?post=3522"}],"version-history":[{"count":2,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/3522\/revisions"}],"predecessor-version":[{"id":12724,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/3522\/revisions\/12724"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/3524"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=3522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=3522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=3522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}