{"id":134,"date":"2019-04-18T09:52:59","date_gmt":"2019-04-18T07:52:59","guid":{"rendered":"https:\/\/www.geh-tech.com\/?p=134"},"modified":"2019-04-18T09:52:59","modified_gmt":"2019-04-18T07:52:59","slug":"getting-dmx-data-in-a-pic","status":"publish","type":"post","link":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/","title":{"rendered":"Getting DMX data in a PIC"},"content":{"rendered":"<h1>Introduction<\/h1>\n<p>When I need to change the functions of a fixture I use the DMX bus to drive them. This article presents you the software code I use (in C language) to decode the data. I&rsquo;m using it on PIC MCU from Microchip. It may be possible to adapt the code for other hardware.<\/p>\n<h1>DMX protocol presentation<\/h1>\n<p>Before going deeper in the code, I recommend you to have look on <a href=\"https:\/\/en.wikipedia.org\/wiki\/DMX512\">Wikipedia<\/a> website. Nevertheless here after the frame:<\/p>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/mic-to-line-amolifier\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">Mic to line amplifier<\/span><\/a><\/div><p><a href=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX_Frame.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-90 size-full\" src=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX_Frame.png\" alt=\"\" width=\"925\" height=\"251\"><\/a><\/p>\n<p>When the bus is idle, the line is in a high level. The beginning is marked with a break. The break is 88&micro;s long at minimum and 100ms maximum. After the break with have the Mark After Break of 8&micro;s at least.<\/p>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/marantz-pm350-how-to-repair-a-vintage-amp\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">Marantz PM350 : How to repair a vintage amp<\/span><\/a><\/div><p>The first data send is the &laquo;&nbsp;Start Code&nbsp;&raquo;. The start code is used to select a part or a specific function of the fixture. in the general equipment, the start code is waited at 0x00. This code is for dimmer in the standards. Other codes are available in the ESTA liste. After the start code we have 512 bytes, one for each channel. Each byte is marked with a start and 2 stops.<\/p>\n<p>It&rsquo;s an easy protocol.<\/p>\n<h1>How to get data?<\/h1>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/isolateddmx_splitter\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">Isolated DMX splitter<\/span><\/a><\/div><p>To get the data we will use the PIC&rsquo;s UART. To decode the frame, we will use a state machine.<\/p>\n<p><a href=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/StateMachine.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-91 size-full\" src=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/StateMachine.png\" alt=\"\" width=\"433\" height=\"541\"><\/a><\/p>\n<ul>\n<li>IDLE : It&rsquo;s the default state.<\/li>\n<li>When the UART get a FRAME ERROR it means that the ligne state to long at 0. It&rsquo;s the BREAK. During this period we have to read the 0x00 in the UART until we get a new FRAME ERROR. This happens when we are in the MAB.<\/li>\n<li>The state machine is then in START. As long as we detect the FRAME ERROR we are in the MAB of the DMX bus. But as soon as the data is 0x00 we get the START CODE. We can go to the DATA state.<\/li>\n<li>In DATA, we simply get the 512 channels. In the program, we only store in memory the data we have to use. When the internal counter is at 513, the FLAG is set to say that we have a new data available.<\/li>\n<\/ul>\n<h1>The code<\/h1>\n<h2>UART configuration<\/h2>\n<p>First, the UART has to be configured in receive mode at 250kpbs. To be more flexible with the Software, I do a re-naming of the registers with a #define.<\/p>\n<pre class=\"lang:c decode:true\" title=\"Register configuration\">#define DMX_ADR_RCSTA   RC1STA\n#define DMX_REG_RCSTA   0b10000100  \n\/*                        |||||||!- RX9D disabled\n                          ||||||!-- OERR Overrun Error bit disabled\n                          |||||!--- FERR Framing error enable\n                          ||||!---- ADDEN Adress detect disable\n                          |||!----- CREN Disabled &lt;== Has to be switch on to operate\n                          ||!------ SREN Don't care in slave mode\n                          |!------- RX9 8bits\n                          !-------- SPEN enabled\n *\/\n\n\/\/\n#define DMX_RX_ENABLE   RC1STAbits.CREN   \/\/used for RX switch ON\/OFF\n\n#define DMX_ADR_BAUDCN  BAUD1CON\n#define DMX_REG_BAUDCN  0b00000000  \n\/*                        |||||||!- ABDEN disabled\n                          ||||||!-- WUE disabled\n                          |||||!--- Not used\n                          ||||!---- BRG16 8bit baud generator\n                          |||!----- SCKP non inverted\n                          ||!------ Not used\n                          |!------- RCIDL cleared\n                          !-------- ABDOVF disabled\n *\/\n\n\n\/\/Baud Rate = 250kbps (@FOSC=16MHz)\n#define DMX_ADR_SPBRGL  SP1BRGL\n#define DMX_REG_SPBRGL  0\n#define DMX_ADR_SPBRGH  SP1BRGH\n#define DMX_REG_SPBRGH  0\n#define DMX_ADR_RCREG   RC1REG\n\n#define DMX_INT_RXIF    RC1IF\n#define DMX_INT_FERR    RC1STAbits.FERR\n#define DMX_INT_OERR    RC1STAbits.OERR\n\n#define DMX_BIT_RXEN    RC1IE\n<\/pre>\n<p>Than in the DMX library we have the initialization function.<\/p>\n<pre class=\"theme:ado lang:c decode:true\">void DMX_UART_Init(void)\n{\n\/* Function : DMX_UART_Init\n * Argument : None\n * Returns  : None\n * \n * Description :\n * Configure the UART and TIMER for the DMX reception\n * The UART RX has to be switched on before using it.\n *\/\n\n    \/\/configuration UART\n    DMX_ADR_TXSTA\t= DMX_REG_TXSTA;\n    DMX_ADR_RCSTA\t= DMX_REG_RCSTA;\n    DMX_ADR_BAUDCN\t= DMX_REG_BAUDCN;\n    DMX_ADR_SPBRGL\t= DMX_REG_SPBRGL;\n    DMX_ADR_SPBRGH\t= DMX_REG_SPBRGH;\n    DMX_ADR_RCREG\t= 0;\n\n    \/\/TIMER configuration for timeout detection\n    DMX_BIT_WDGIE = 0;\n    DMX_REG_WDG = 0;\n    DMX_INT_WDG = 0;\n    \n    \/\/Initialisation of DMX status\n    DMXState\t\t= DMX_BUS_IDLE;\n    DMXRx.NEW_DATA = 0;\n}    \n<\/pre>\n<p>Some functions to start and stop the UART.<\/p>\n<pre class=\"theme:github lang:c decode:true\">void DMX_UART_Start()\n{\n    char dummy = DMX_ADR_RCREG;\n    DMX_RX_Switch(1);\n    DMX_RX_INT_Switch(1);\n    DMX_Timeout_Switch(1);\n}\n\nvoid DMX_UART_Stop()\n{\n    DMX_Timeout_Switch(0);\n    DMX_RX_Switch(0);\n    DMX_RX_INT_Switch(0);\n    char dummy = DMX_ADR_RCREG;\n}<\/pre>\n<h2>The interruptions<\/h2>\n<p>To get the state machine operating, we need events. To get them, we use the IT coming from UART.<\/p>\n<pre class=\"lang:c decode:true\" title=\"IT handling\">    if(DMX_INT_RXIF){\n        DMX_UART_IT();\n    }\n\/\/DMX_INT_RXIF is UART IT Flag (RC1IF for ex)<\/pre>\n<h2>Decode function<\/h2>\n<p>Don&rsquo;t forget to add in the h. file of the library the enumerator declaration<\/p>\n<pre class=\"lang:c decode:true\">typedef enum {\n    DMX_BUS_IDLE,\n    DMX_BUS_BREAK,\n    DMX_BUS_START,\n    DMX_BUS_DATA,\n}DMX_BUS_STATE;<\/pre>\n<p>And naw we have the function<\/p>\n<pre class=\"lang:c decode:true\">\/*----------------------------------------------------------------------------*\/\n\/*                        VARIABLES GLOBALES                                  *\/\n\/*----------------------------------------------------------------------------*\/\nDMX_BUS_STATE   DMXState;\nunsigned int    count;\n\n\n\n\/***********************************************************************\/\n\/* STATE MACHINE                                                       *\/\n\/***********************************************************************\/\nvoid DMX_UART_IT()\n{\n\/* Function : DMX_UART_IT\n * Argument : None\n * Returns  : None\n * \n * Description :\n * State machine for the DMX protocol\n *\/\n    \n    \/\/Variable declaration\n    char dummy;\t\t\t\t\t\/\/is used to get UART Rx register\n    char i;\n    \n    \/\/d ut de la fonction\n    switch(DMXState)\n    {\n        case DMX_BUS_IDLE:\n            \/\/DMX is in IDLE state. The RX starts to get low. If a framing\n            \/\/error IT occurs, that means that the bus is in START\n            if(DMX_INT_FERR)\n            {\n                \/\/Framing error was detected ==&gt; BREAK condition\n                DMXState = DMX_BUS_BREAK;\n                DMX_REG_WDG = 0;\n            }\n            dummy = DMX_ADR_RCREG;\n            DMX_REG_WDG = 0;\n            break;\n        case DMX_BUS_BREAK:\n            \/\/DMX is in BREAK. The UART will receive continously null data\n            \/\/the data will be discared until a new framing error is detected\n            if(DMX_INT_FERR)\n            {\n                \/\/Framing error was detected and means MAB on the DMX bus\n                DMXState = DMX_BUS_START;\n                DMX_REG_WDG = 0;\n            }\n            dummy = DMX_ADR_RCREG;\n            break;\n        case DMX_BUS_START:\n            \/\/DMX is in MAB and continue to send FERR sequence\n            \/\/when RCREG will get a 0 value without FERR it will be the START\n            \/\/mark.\n            if(DMX_INT_FERR)\n            {\n                \/\/still in MAB\n                dummy = DMX_ADR_RCREG;\n                DMX_REG_WDG = 0;\n            }\n            else\n            {\n                \/\/get value\n                dummy = DMX_ADR_RCREG;\n                if(dummy == 0)\n                {\n                    \/\/it's the START code got to DATA\n                    DMXState = DMX_BUS_DATA;\n                    count = 1;\n                    DMX_REG_WDG = 0;\n                }\n                else\n                {\n                    \/\/wrong start code. Go to IDLE, waiting new sequence\n                    DMXState = DMX_BUS_IDLE;\n                }\n            }\n            break;\n        case DMX_BUS_DATA:\n            \/\/The bus is sending data. waiting for the selected address\n            dummy = DMX_ADR_RCREG;\n            DMX_REG_WDG = 0;\n            \n            \/\/check if in the address, the DMX bus load the new value.\n            if((count &gt;= DMXRx.DMX_ADDRESS) &amp;&amp; (count &lt;= (DMXRx.DMX_ADDRESS + CHANNEL_SIZE))){\n                i = count - DMXRx.DMX_ADDRESS;\n                \n                \/\/loading value:\n                DMXRx.DMX_DATA[i] = dummy;\n            }\n            \n            count++;\n            \/\/When the last data is received, the New DATA flag is set and\n            \/\/the state machine returns to IDLE\n            if(count == 513)\n            {   \n            \tDMXRx.NEW_DATA = 1;\n                DMXState = DMX_BUS_IDLE;\n            }\n            break;\n    }\n}\n<\/pre>\n<h2>Data structure<\/h2>\n<p>As you have seen in the code, I use the DMXRx variable. It&rsquo;s a structure who contains, the device address, a table sized for the number of channels and a flag new data.<\/p>\n<pre class=\"lang:c decode:true\">\/\/DMX Message structure\ntypedef struct{\n    unsigned int DMX_ADDRESS;\n    unsigned char DMX_DATA[CHANNEL_SIZE];\n    unsigned NEW_DATA : 1;\n}DMX_STRUCT;\n\n\/*----------------------------------------------------------------------------*\/\n\/*                        GLOBALES VARIABLES                                  *\/\n\/*----------------------------------------------------------------------------*\/\nDMX_STRUCT      DMXRx;<\/pre>\n<h1>The timeout<\/h1>\n<p>You can make the code work without timeout. On my point of view it&rsquo;s better to have. It&rsquo;s a simple counter and when it&rsquo;s higher than 100ms it push an IT who will reset the state machine and the UART.<\/p>\n<pre class=\"lang:c decode:true\">void DMX_timeout_IT()\n{\n\/* Function : DMX_timeout_IT\n * Argument : None\n * Returns  : None\n * \n * Description :\n * When the timer overflows, the interruption reset the state machine in\n * IDLE mode.\n * IT is also cleared.\n *\/\n    \/\/when the timer overflows, the timeout on the DMX is set.\n    DMXState = DMX_BUS_IDLE;\n    DMX_INT_WDG = 0;\n    \n    RC1STAbits.OERR = 0;\n    RC1STAbits.FERR = 0;\n    RC1REG = 0;\n}<\/pre>\n<h1>What&rsquo;s next?<\/h1>\n<p>In your main() function, who can have a loop and when a new data received, you can generate a PWM, analog output etc. I use the flag DMWRx.NEW_DATA to detect the new data and to update the output.<\/p>\n<p>That&rsquo;s all.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction When I need to change the functions of a fixture I use the DMX bus to drive them. This article presents you the software code I use (in C language) to decode the data. I&rsquo;m using it on PIC MCU from Microchip. It may be possible to adapt the code for other hardware. DMX<\/p>\n","protected":false},"author":1,"featured_media":89,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[8,9,11,13],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting DMX data in a PIC - GEH-TECH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting DMX data in a PIC - GEH-TECH\" \/>\n<meta property=\"og:description\" content=\"Introduction When I need to change the functions of a fixture I use the DMX bus to drive them. This article presents you the software code I use (in C language) to decode the data. I&rsquo;m using it on PIC MCU from Microchip. It may be possible to adapt the code for other hardware. DMX\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/\" \/>\n<meta property=\"og:site_name\" content=\"GEH-TECH\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-18T07:52:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"270\" \/>\n\t<meta property=\"og:image:height\" content=\"270\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"gehrhardt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"gehrhardt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/\",\"url\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/\",\"name\":\"Getting DMX data in a PIC - GEH-TECH\",\"isPartOf\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\",\"datePublished\":\"2019-04-18T07:52:59+00:00\",\"dateModified\":\"2019-04-18T07:52:59+00:00\",\"author\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#primaryimage\",\"url\":\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\",\"contentUrl\":\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\",\"width\":270,\"height\":270},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/wp2.geh-tech.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting DMX data in a PIC\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wp2.geh-tech.com\/#website\",\"url\":\"https:\/\/wp2.geh-tech.com\/\",\"name\":\"GEH-TECH\",\"description\":\"Make system simple\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wp2.geh-tech.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a\",\"name\":\"gehrhardt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g\",\"caption\":\"gehrhardt\"},\"sameAs\":[\"http:\/\/wp2.geh-tech.com\"],\"url\":\"https:\/\/www.geh-tech.com\/index.php\/author\/gehrhardt\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting DMX data in a PIC - GEH-TECH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/","og_locale":"fr_FR","og_type":"article","og_title":"Getting DMX data in a PIC - GEH-TECH","og_description":"Introduction When I need to change the functions of a fixture I use the DMX bus to drive them. This article presents you the software code I use (in C language) to decode the data. I&rsquo;m using it on PIC MCU from Microchip. It may be possible to adapt the code for other hardware. DMX","og_url":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/","og_site_name":"GEH-TECH","article_published_time":"2019-04-18T07:52:59+00:00","og_image":[{"width":270,"height":270,"url":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","type":"image\/jpeg"}],"author":"gehrhardt","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"gehrhardt","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/","url":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/","name":"Getting DMX data in a PIC - GEH-TECH","isPartOf":{"@id":"https:\/\/wp2.geh-tech.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#primaryimage"},"image":{"@id":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","datePublished":"2019-04-18T07:52:59+00:00","dateModified":"2019-04-18T07:52:59+00:00","author":{"@id":"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a"},"breadcrumb":{"@id":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#primaryimage","url":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","contentUrl":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","width":270,"height":270},{"@type":"BreadcrumbList","@id":"https:\/\/www.geh-tech.com\/index.php\/getting-dmx-data-in-a-pic\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/wp2.geh-tech.com\/"},{"@type":"ListItem","position":2,"name":"Getting DMX data in a PIC"}]},{"@type":"WebSite","@id":"https:\/\/wp2.geh-tech.com\/#website","url":"https:\/\/wp2.geh-tech.com\/","name":"GEH-TECH","description":"Make system simple","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wp2.geh-tech.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a","name":"gehrhardt","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g","caption":"gehrhardt"},"sameAs":["http:\/\/wp2.geh-tech.com"],"url":"https:\/\/www.geh-tech.com\/index.php\/author\/gehrhardt\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/posts\/134"}],"collection":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":0,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/posts\/134\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/media\/89"}],"wp:attachment":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/media?parent=134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/categories?post=134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/tags?post=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}