{"id":3182,"date":"2023-11-08T07:06:50","date_gmt":"2023-11-08T06:06:50","guid":{"rendered":"https:\/\/www.macerobotics.com\/?p=3182"},"modified":"2023-11-08T07:06:50","modified_gmt":"2023-11-08T06:06:50","slug":"apprendre-le-micropython-avec-la-carte-raspberry-pi-pico","status":"publish","type":"post","link":"https:\/\/www.macerobotics.com\/?p=3182","title":{"rendered":"Apprendre le microPython avec la carte Raspberry Pi Pico"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p>Ce tutoriel a pour objectif d&#8217;apprendre la programmation en langage <strong>microPython<\/strong> en utilisant la carte Raspberry Pi Pico. Cette carte est \u00e9quip\u00e9 d&#8217;un microcontr\u00f4leur RP2040. Le langage microPython est le portage du langage Python adapt\u00e9 aux microcontr\u00f4leurs.<\/p>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Raspberry_Pi_Pico_oblique.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3558 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Raspberry_Pi_Pico_oblique.jpg\" alt=\"\" width=\"293\" height=\"251\"><\/a><\/p>\n<h1>Mat\u00e9riels &amp; Logiciel n\u00e9cessaire<\/h1>\n<ul>\n<li>Une carte Raspberry Pi Pico<\/li>\n<li>Une c\u00e2ble micro-usb<\/li>\n<li>Un PC avec le logiciel Thonny (<a class=\"lienArticle https\" href=\"https:\/\/thonny.org\/\">thonny.org)<\/a><\/li>\n<\/ul>\n<h1>Pr\u00e9sentation de la carte Raspberry Pi Pico<\/h1>\n<p>Voici le pinout de la carte Pico :<\/p>\n<h1><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/pinout_pico.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3496 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/pinout_pico.png\" alt=\"\" width=\"740\" height=\"495\"><\/a><\/h1>\n<h1>Le microcontr\u00f4leur RP2040<\/h1>\n<p>Voici l&#8217;architecture du microcontr\u00f4leur RP2040 :<\/p>\n<ul>\n<li>2 c\u0153ur ARM Cortex M0+ \u00e0 48 Mhz (32 bits)<\/li>\n<li>264 KB RAM<\/li>\n<li>2MB de m\u00e9moire flash<\/li>\n<li>26 GPIO, PWM, SPI, I2C, UART<\/li>\n<li>USB 1.1<\/li>\n<\/ul>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Capture-decran-2023-11-06-080909.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3556 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Capture-decran-2023-11-06-080909.png\" alt=\"\" width=\"633\" height=\"367\"><\/a><\/p>\n<h1>Installation du logiciel IDE Thonny<\/h1>\n<p>Voir la page : <a class=\"lienArticle https\" href=\"https:\/\/thonny.org\/\">thonny.org<\/a><\/p>\n<h1>Premier programme, Hello avec le shell<\/h1>\n<p>Un premier exemple tr\u00e8s simple d\u2019affichage de texte avec la fonction <strong>print()<\/strong> :<\/p>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Capture-decran-2023-11-06-085902.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3563\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Capture-decran-2023-11-06-085902.png\" alt=\"\" width=\"670\" height=\"142\"><\/a><\/p>\n<h1>Gestion d&#8217;une led avec le shell<\/h1>\n<p>Un exemple de programmer pour allumer une led.<\/p>\n<ul>\n<li>La led est connect\u00e9 sur la pin n\u00b02 (GP2)<\/li>\n<\/ul>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/DSC02370.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3579 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/DSC02370.jpg\" alt=\"\" width=\"380\" height=\"214\"><\/a><\/p>\n<p>Vous pouvez essayer de taper ces lignes de code dans le shell :<\/p>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/shell.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3498\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/shell.png\" alt=\"\" width=\"553\" height=\"238\"><\/a><\/p>\n<h1>Et la lumi\u00e8re fut, allumer et \u00e9teindre une led !<\/h1>\n<p>Un exemple tr\u00e8s simple de programme pour allumer une led :<\/p>\n<ul>\n<li>La led doit \u00eatre connect\u00e9e sur la GPIO n\u00b02<\/li>\n<\/ul>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin<br \/>\nled = Pin(2, Pin.OUT) # configuration de la pin 2 en sortie<br \/>\nled.value(1) # mise \u00e0 l&#8217;\u00e9tat haut de la pin 2, la led s&#8217;allume !<br \/>\n[\/code]<\/p>\n<p>Un exemple simple de programme pour allumer une led pendant 2 secondes et ensuite l&#8217;\u00e9teindre :<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin<br \/>\nimport time<\/p>\n<p>led = Pin(2, Pin.OUT) # configuration de la pin 2 en sortie<\/p>\n<p>while True: # boucle infini<br \/>\n  led.value(1)<br \/>\n  time.sleep(2) # pause de 2 secondes<br \/>\n  led.value(0)<br \/>\n  time.sleep(1) # pause de 1 seconde<br \/>\n[\/code]<\/p>\n<p>Un autre exemple avec l&#8217;utilisation de la fonction <strong>toggle()<\/strong>:<\/p>\n<ul>\n<li>La led va clignoter toutes les 2 secondes<\/li>\n<\/ul>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin<br \/>\nimport time<\/p>\n<p>led = Pin(2, Pin.OUT)<\/p>\n<p>while True:<br \/>\n  led.toggle()<br \/>\n  time.sleep(2)<br \/>\n[\/code]<\/p>\n<h1>Utilisation du shell, print<\/h1>\n<p>Utilisation de la fonction <strong>print()<\/strong> pour afficher du texte dans le shell :<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin<br \/>\nimport time<\/p>\n<p>print(&quot;Hello Raspberry Pi Pico ! &quot;)<br \/>\n[\/code]<\/p>\n<p>Le r\u00e9sultat dans le shell :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3507\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/shell-1.png\" alt=\"\" width=\"1196\" height=\"440\"><\/p>\n<h1>Gestion d&#8217;un bouton poussoir<\/h1>\n<p>Un exemple pour lire le mani\u00e8re continue l&#8217;\u00e9tat d&#8217;un bouton poussoir connecter sur la pin 3 de la carte Raspberry Pi Pico :<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin, ADC, PWM<br \/>\nimport time<\/p>\n<p>bouton = Pin(3, Pin.IN, Pin.PULL_UP) # configuration pin 3 en entr\u00e9e<\/p>\n<p>while True:<br \/>\n  valeur = bouton.value() #Lecture de l&#8217;\u00e9tat du bouton<br \/>\n  print(valeur)<br \/>\n  time.sleep(1)<br \/>\n[\/code]<\/p>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/DSC02294.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3511 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/DSC02294.jpg\" alt=\"\" width=\"684\" height=\"385\"><\/a><\/p>\n<p>R\u00e9sultat sur le shell de l&#8217;appuie sur le bouton poussoir, passage de l&#8217;\u00e9tat haut \u00e0 l&#8217;\u00e9tat bas :<\/p>\n<ul>\n<li>Bouton non appuy\u00e9 : \u00e9tat haut (1)<\/li>\n<li>Bouton appuy\u00e9 : \u00e9tat haut (0)<\/li>\n<\/ul>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/Capture-decran-2023-10-06-173747.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3509\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/Capture-decran-2023-10-06-173747.png\" alt=\"\" width=\"1842\" height=\"462\"><\/a><\/p>\n<p>Un autre exemple pour g\u00e9rer l&#8217;allumage de la led avec le bouton :<\/p>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/DSC02295.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3514 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/DSC02295.jpg\" alt=\"\" width=\"762\" height=\"429\"><\/a><\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin, ADC, PWM<br \/>\nimport time<\/p>\n<p>led = Pin(2, Pin.OUT)<br \/>\nbouton = Pin(3, Pin.IN, Pin.PULL_UP)<\/p>\n<p>while True:<br \/>\n  valeur = bouton.value()<\/p>\n<p>  if valeur == 1:<br \/>\n    led.value(1)<br \/>\n    print(&quot;Bouton OFF&quot;)<br \/>\n  else:<br \/>\n    print(&quot;Bouton ON&quot;)<br \/>\n    led.value(0)<br \/>\ntime.sleep(0.5)<br \/>\n[\/code]<\/p>\n<h1>Gestion d&#8217;une entr\u00e9e analogique<\/h1>\n<p>Un exemple pour lire une entr\u00e9e analogique :<\/p>\n<p>[code language=&#8221;python&#8221;]<\/p>\n<p>from machine import Pin, ADC<br \/>\nimport time<\/p>\n<p>adc = ADC(Pin(26)) # configuration pin 26 en entr\u00e9e analogique<\/p>\n<p>while 1:<br \/>\n  print(&quot;Valeur adc = &quot;, adc.read_u16())<br \/>\n  time.sleep(0.2)<\/p>\n<p>[\/code]<\/p>\n<p>Le r\u00e9sultat de la lecture de l&#8217;entr\u00e9e analogique avec le Plotter :<\/p>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/entree_ana.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3541\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/10\/entree_ana.png\" alt=\"\" width=\"1726\" height=\"919\"><\/a><\/p>\n<h1>\u00c9criture\/lecture d&#8217;un fichier texte<\/h1>\n<p>Un exemple tr\u00e8s simple d\u2019\u00e9criture dans un&nbsp; fichier :<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nimport time<\/p>\n<p>file = open(&quot;test.txt&quot;, &quot;w&quot;) # Ouverture du fichier texte.txt en mode ecriture<\/p>\n<p>file.write(&quot;Ecriture dans le fichier&quot;) # ecriture dans le fichier<\/p>\n<p>file.close() # fermeture du fichier<br \/>\n[\/code]<\/p>\n<p>\u00c9criture en boucle d&#8217;une variable :<\/p>\n<ul>\n<li><strong>str()<\/strong> : permet de convertir en chaine de caract\u00e8re<\/li>\n<li><strong>&#8216;\\n&#8217;<\/strong> : permet le saut d&#8217;une ligne<\/li>\n<\/ul>\n<p>[code language=&#8221;python&#8221;]<br \/>\nimport time<\/p>\n<p>file = open(&quot;test.txt&quot;, &quot;w&quot;)<\/p>\n<p>compteur = 0<\/p>\n<p>while compteur &amp;lt; 10:<br \/>\n  file.write(&quot;Bonjour, compteur = &quot;)<br \/>\n  file.write(str(compteur) + &quot;\\n&quot;)<br \/>\n  print(compteur)<br \/>\n  compteur+=1<\/p>\n<p>file.close()<br \/>\n[\/code]<\/p>\n<h1>Gestion d&#8217;un signal PWM<\/h1>\n<ul>\n<li><strong>PWM<\/strong> : Pulse With Modulation ou modulation de la largeur d&#8217;impulsion<\/li>\n<\/ul>\n<p>C&#8217;est quoi un signal PWM ?<\/p>\n<figure id=\"attachment_3575\" aria-describedby=\"caption-attachment-3575\" style=\"width: 542px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Duty_Cycle_Examples.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3575 size-full\" title=\"Signal PWM\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/Duty_Cycle_Examples.png\" alt=\"\" width=\"542\" height=\"342\"><\/a><figcaption id=\"caption-attachment-3575\" class=\"wp-caption-text\"><small><em>This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license. (https:\/\/en.wikipedia.org\/wiki\/Pulse-width_modulation)<br \/><\/em><\/small><\/figcaption><\/figure>\n<p>Un exemple sur la pin 4, d&#8217;un signal PWM. Ce signal PWM permet par exemple de contr\u00f4ler l&#8217;intensit\u00e9 lumineuse d&#8217;une led ou encore la commande en vitesse d&#8217;un moteur \u00e0 courant continu.<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin, ADC, PWM<br \/>\nimport time<\/p>\n<p>signal = Pin(4, mode=Pin.OUT)<br \/>\nsignal = PWM(Pin(4))<\/p>\n<p>signal.freq(500) # fr\u00e9quence de 500 Hz<br \/>\nsignal.duty_u16(32000) # rapport cyclique<br \/>\n[\/code]<\/p>\n<p>Un autre exemple de g\u00e9n\u00e9ration d&#8217;un signal PWM :<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin, ADC, PWM<br \/>\nimport time<\/p>\n<p>signal = Pin(4, mode=Pin.OUT)<br \/>\nsignal = PWM(Pin(4))<\/p>\n<p>signal.freq(500)<\/p>\n<p>for rapport in range(0,65_536):<br \/>\n  signal.duty_u16(rapport)<br \/>\n  print(rapport)<br \/>\n  time.sleep(0.001)<br \/>\n[\/code]<\/p>\n<h1>Contr\u00f4le d&#8217;un servomoteur<\/h1>\n<p>Maintenant, passons au contr\u00f4le d&#8217;un servomoteur en microPython.<\/p>\n<p>Connexion du servomoteur :<\/p>\n<ul>\n<li><strong>Fil rouge<\/strong> : +5V<\/li>\n<li><strong>Fil noir<\/strong> : GND<\/li>\n<li><strong>Fil orange<\/strong> : GPIO 4<\/li>\n<\/ul>\n<p><a href=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/DSC02369.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3570 aligncenter\" src=\"http:\/\/fr.macerobotics.com\/wp-content\/uploads\/sites\/4\/2023\/11\/DSC02369.jpg\" alt=\"\" width=\"499\" height=\"281\"><\/a><\/p>\n<p>Un exemple de programme pour le contr\u00f4le d&#8217;un servomoteur :<\/p>\n<ul>\n<li>Configuration de la GPIO 4 en signal PWM<\/li>\n<li>Pour le contr\u00f4le d&#8217;un servomoteur la fr\u00e9quence doit \u00eatre de 50 Hz<\/li>\n<li>Le contr\u00f4le angulaire d&#8217;un servomoteur varie en fonction du rapport cyclique (entre 1 et 2 ms environ, d\u00e9pends du type de servomoteurs)<\/li>\n<\/ul>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin, PWM<br \/>\nimport time<\/p>\n<p>servo = Pin(4, mode=Pin.OUT)<br \/>\nservo = PWM(Pin(4))<\/p>\n<p>servo.freq(50)<\/p>\n<p>while True:<br \/>\n  servo.duty_u16(2314)<br \/>\n  time.sleep(2)<br \/>\n  servo.duty_u16(7600)<br \/>\n  time.sleep(2)<br \/>\n[\/code]<\/p>\n<h1>Allumer une led avec un timer !<\/h1>\n<p>Un exemple d&#8217;utilisation d&#8217;un timer pour faire clignoter la led interne de la carte Raspberry Pi PICO toutes les secondes :<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin, Timer<\/p>\n<p>led = Pin(&quot;LED&quot;, Pin.OUT)<\/p>\n<p>timer_led = Timer()<\/p>\n<p>def mon_timer_led(timer):<br \/>\n  global led<br \/>\n  led.toggle()<\/p>\n<p>timer_led.init(freq=1, mode=Timer.PERIODIC, callback=mon_timer_led)<br \/>\n[\/code]<\/p>\n<h1>Interruption mat\u00e9rielle avec un bouton poussoir<\/h1>\n<p>Un exemple de programme pour g\u00e9rer l\u2019appui d&#8217;un bouton poussoir avec une interruption mat\u00e9rielle (IRQ). Une interruption mat\u00e9rielle est d\u00e9clench\u00e9e par une entr\u00e9e (GPIO) du microcontr\u00f4leur. Dans cet exemple, l&#8217;entr\u00e9e 3 est configur\u00e9e en interruption.<\/p>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom machine import Pin<br \/>\nimport time<\/p>\n<p>def mon_interruption(pin):<br \/>\nprint(&quot;Bouton ON&quot;)<\/p>\n<p>bouton = Pin(3, Pin.IN, Pin.PULL_UP) # configuration du bouton sur l&#8217;ent\u00e9e 3<\/p>\n<p>bouton.irq(trigger=Pin.IRQ_FALLING,handler=mon_interruption)<\/p>\n<p># boucle infini<br \/>\nwhile True:<br \/>\n  print(&quot;Boucle infini, attendre &#8230;&quot;) # attendre l&#8217;appuie sur le bouton<br \/>\n  time.sleep(1)<br \/>\n[\/code]<\/p>\n<h1>Programmation multicore<\/h1>\n<p>Le microcontr\u00f4leur RP2040 poss\u00e9d\u00e9 2 c\u0153urs de processeur (ARM Cortex M0+)&nbsp; de 133 Mhz:<\/p>\n<ul>\n<li><strong>Core0<br \/>\n<\/strong><\/li>\n<li><strong>Core1<\/strong><\/li>\n<\/ul>\n<p>[code language=&#8221;python&#8221;]<br \/>\nfrom time import sleep<br \/>\nimport _thread<\/p>\n<p>def core0_thread():<br \/>\n  compteur= 0<br \/>\n  while True:<br \/>\n    print(&quot;Hello, Je suis le core0 : &quot;, compteur)<br \/>\n    compteur+= 1<br \/>\n    sleep(1)<\/p>\n<p>def core1_thread():<br \/>\n  compteur= 1<br \/>\n  while True:<br \/>\n    print(&quot;Hello, Je suis le core1 : &quot;, compteur)<br \/>\n    compteur+= 1<br \/>\n    sleep(3)<\/p>\n<p>thread_core1 = _thread.start_new_thread(core1_thread, ())<\/p>\n<p>core0_thread()<\/p>\n<p>[\/code]<\/p>\n<p>&nbsp;<\/p>\n<p>Fin du Tuto !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Ce tutoriel a pour objectif d&#8217;apprendre la programmation en langage microPython en utilisant la carte Raspberry Pi Pico. Cette carte est \u00e9quip\u00e9 d&#8217;un microcontr\u00f4leur RP2040. Le langage microPython est le portage du langage Python adapt\u00e9 aux microcontr\u00f4leurs. Mat\u00e9riels &amp; Logiciel n\u00e9cessaire Une carte Raspberry Pi Pico Une c\u00e2ble micro-usb Un PC avec le logiciel &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[88,68,26],"tags":[],"class_list":["post-3182","post","type-post","status-publish","format-standard","hentry","category-micropython","category-python","category-tutoriel"],"_links":{"self":[{"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts\/3182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3182"}],"version-history":[{"count":1,"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts\/3182\/revisions"}],"predecessor-version":[{"id":3183,"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=\/wp\/v2\/posts\/3182\/revisions\/3183"}],"wp:attachment":[{"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.macerobotics.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}