{"id":1687,"date":"2023-04-15T13:51:49","date_gmt":"2023-04-15T13:51:49","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=1687"},"modified":"2023-04-15T13:51:52","modified_gmt":"2023-04-15T13:51:52","slug":"working-with-stm32-and-acs712-current-sensor-measuring-dc-current","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=1687","title":{"rendered":"Working with STM32 and ACS712 Current Sensor: Measuring DC current"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh.jpg\" alt=\"\" class=\"wp-image-1688\" width=\"600\" height=\"600\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh.jpg 800w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh-300x300.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh-150x150.jpg 150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh-768x768.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh-750x750.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh-400x400.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/current-sensor-acs712-30a-robotics-bangladesh-250x250.jpg 250w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/figure><\/div>\n\n\n\n<p>In this guide, we shall interface ACS712 hall effect current sensor with STM32.<\/p>\n\n\n\n<p>In this guide, we shall cover the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ACS712 Sensor.<\/li><li>Connection.<\/li><li>Driver Development.<\/li><li>Code.<\/li><li>Result.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. ACS712 Sensor:<\/h2>\n\n\n\n<p>The Allegro\u00ae&nbsp;ACS712 provides economical and precise solutions for AC or DC current sensing in industrial, commercial, and communications systems. The device package allows for easy implementation by the customer. Typical applications include motor control, load detection and management, switched-mode power supplies, and overcurrent fault protection.<\/p>\n\n\n\n<p>The device consists of a precise, low-offset, linear Hall sensor circuit with a copper conduction path located near the surface of the die. Applied current flowing through this copper conduction path generates a magnetic field which is sensed by the integrated Hall IC and converted into a proportional voltage. Device accuracy is optimized through the close proximity of the magnetic signal to the Hall transducer. A precise, proportional voltage is provided by the low-offset, chopper-stabilized BiCMOS Hall IC, which is programmed for accuracy after packaging.<\/p>\n\n\n\n<p>The output of the device has a positive slope (&gt;VIOUT(Q)) when an increasing current flows through the primary copper conduction path (from pins 1 and 2, to pins 3 and 4), which is the path used for current sensing. The internal resistance of this conductive path is 1.2 m\u03a9\u00a0typical, providing low power loss. The thickness of the copper conductor allows survival of the device at up to 5\u00d7 overcurrent conditions. The terminals of the conductive path are electrically isolated from the sensor leads (pins 5 through 8). This allows the ACS712 current sensor to be used in applications requiring electrical isolation without the use of opto-isolators or other costly isolation techniques.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Typical Application:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"781\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-1024x781.png\" alt=\"\" class=\"wp-image-1689\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-1024x781.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-300x229.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-768x586.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-1150x877.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-750x572.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-400x305.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM-250x191.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.22.06-PM.png 1500w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Current ranges:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"158\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-1024x158.png\" alt=\"\" class=\"wp-image-1690\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-1024x158.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-300x46.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-768x118.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-1536x237.png 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-2048x316.png 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-1150x177.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-750x116.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-400x62.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.23.30-PM-250x39.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The one in this guide, 30A version is used.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Connection:<\/h2>\n\n\n\n<p>The connection of I2C LCD and ACS712 Current sensor module as following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"507\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-1024x507.png\" alt=\"\" class=\"wp-image-1691\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-1024x507.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-300x149.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-768x380.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-1536x761.png 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-2048x1014.png 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-1150x570.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-750x371.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-400x198.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/Screenshot-2023-04-15-at-4.31.00-PM-250x124.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><tbody><tr><td>ACS712<\/td><td>STM32F4xx<\/td><\/tr><tr><td>Vcc<\/td><td>3V3<\/td><\/tr><tr><td>Vout<\/td><td>PA1<\/td><\/tr><tr><td>GND<\/td><td>GND<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Driver development:<\/h2>\n\n\n\n<p>Since this guide uses ADC and I2C LCD:<\/p>\n\n\n\n<p>For I2C LCD guide from <a href=\"https:\/\/blog.embeddedexpert.io\/?p=655\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=655\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p>ADC Single channel single conversion from <a href=\"https:\/\/blog.embeddedexpert.io\/?p=200\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=200\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Create new source and hear file wit name of acs712.c and acs712.h respectively.<\/p>\n\n\n\n<p>Within acs712.h:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">#ifndef ACS712_H_\n#define ACS712_H_\n\n#include &quot;stdint.h&quot;\n\nvoid acs712_init();\nint32_t get_acs712_current();\n\n\n\n#endif \/* ACS712_H_ *\/<\/pre><\/div>\n\n\n\n<p>The header file contains the stdint library and two function, asc712_init and get_acs712_current.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Within acs712.c we start off by including the main stm32f4xx header file:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">#include &quot;stm32f4xx.h&quot;<\/pre><\/div>\n\n\n\n<p>also, include acs712.h header file:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">#include &quot;acs712.h&quot;<\/pre><\/div>\n\n\n\n<p>Declare the following two variables:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">uint16_t adc_data;\n\nuint32_t current;<\/pre><\/div>\n\n\n\n<p>For initializing asc712, it is the same for single channel single conversion method:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">void acs712_init()\n{\n\t\/*Enable floating point unit:  Enable CP10 and CP11 full access*\/\n\tSCB-&gt;CPACR |=(1&lt;&lt;20);\n\tSCB-&gt;CPACR |=(1&lt;&lt;21);\n\tSCB-&gt;CPACR |=(1&lt;&lt;22);\n\tSCB-&gt;CPACR |=(1&lt;&lt;23);\n\n\tRCC-&gt;AHB1ENR|=RCC_AHB1ENR_GPIOAEN; \/\/enable gpio a clock\n\tGPIOA-&gt;MODER|=GPIO_MODER_MODER1;  \/\/set the PA1 to analog mode\n\n\tRCC-&gt;APB2ENR|=RCC_APB2ENR_ADC1EN; \/\/enable adc clock\n\n\tADC1-&gt;CR2=0; \/\/disable the adc\n\n\tADC1-&gt;SQR3|=1;\n\n\tADC1-&gt;SMPR2|= (0x07&lt;&lt;ADC_SMPR2_SMP1_Pos);\n\n\tADC1-&gt;CR2|=1; \/\/enable the adc\n\n}<\/pre><\/div>\n\n\n\n<p>Now, for getting the current function:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">int32_t get_acs712_current()\n{\n\tadc_data=0;\n\tfor (int i=0;i&lt;10;i++){\n\tADC1-&gt;CR2|=ADC_CR2_SWSTART; \/\/start adc conversion\n\n\twhile(!((ADC1-&gt;SR)&amp;ADC_SR_EOC)){;}\n\n\tadc_data+=ADC1-&gt;DR;\n\t}\n\tadc_data=adc_data\/10;\n\n\tcurrent=(18.85*adc_data)-38074;\n\treturn current;\n\n}<\/pre><\/div>\n\n\n\n<p>The process as following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Reset the adc_data to zero<\/li><li>Accumulate the ADC values of 10 samples by starting the ADC, waiting for it to finish and and get the data.<\/li><li>Divide the accumulated value by 10.<\/li><li>Plug the value to the required equation.<\/li><li>Return the value of the current.<\/li><\/ul>\n\n\n\n<p>The equation is based on taking adc value of 100mA steps up to 5A (Limited by my PSU) and get the average of 10 samples and using linear regression to get the equation.<\/p>\n\n\n\n<p>For more information about linear regression, please check this article from wikipedia <a href=\"https:\/\/en.wikipedia.org\/wiki\/Linear_regression\" data-type=\"URL\" data-id=\"https:\/\/en.wikipedia.org\/wiki\/Linear_regression\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Code:<\/h2>\n\n\n\n<p>You may download the code from here:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/ACS712_Current_Sensor.zip\">ACS712_Current_Sensor<\/a><a href=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/ACS712_Current_Sensor.zip\" class=\"wp-block-file__button\" download>Download<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Results:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-1024x768.jpg\" alt=\"\" class=\"wp-image-1695\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-1024x768.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-300x225.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-768x576.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-1536x1152.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-2048x1536.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-1150x863.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-750x563.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-400x300.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2023\/04\/IMG_0589-250x188.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Happy coding \ud83d\ude42<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this guide, we shall interface ACS712 hall effect current sensor with STM32. In this guide, we shall cover the following: ACS712 Sensor. Connection. Driver Development. Code. Result. 1. ACS712 Sensor: The Allegro\u00ae&nbsp;ACS712 provides economical and precise solutions for AC or DC current sensing in industrial, commercial, and communications systems. The device package allows for [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,19,11,12],"tags":[],"class_list":["post-1687","post","type-post","status-publish","format-standard","hentry","category-embedded-systems","category-lcd","category-peripheral-drivers","category-stm32"],"_links":{"self":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1687"}],"collection":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1687"}],"version-history":[{"count":1,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1687\/revisions"}],"predecessor-version":[{"id":1696,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1687\/revisions\/1696"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}