{"id":1039,"date":"2022-06-22T14:23:34","date_gmt":"2022-06-22T14:23:34","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=1039"},"modified":"2022-06-22T14:26:47","modified_gmt":"2022-06-22T14:26:47","slug":"working-with-stm32-and-liquid-crystal-display-custom-character","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=1039","title":{"rendered":"Working with STM32 and Liquid Crystal display: Custom Character"},"content":{"rendered":"\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\/2022\/06\/IMG_8672-1024x768.jpg\" alt=\"\" class=\"wp-image-1040\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-1024x768.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-300x225.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-768x576.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-1536x1152.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-2048x1536.jpg 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-1150x863.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-750x563.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-400x300.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/IMG_8672-250x188.jpg 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>In the previous guide (<a rel=\"noreferrer noopener\" href=\"https:\/\/blog.embeddedexpert.io\/?p=655\" data-type=\"URL\" data-id=\"https:\/\/blog.embeddedexpert.io\/?p=655\" target=\"_blank\">here<\/a>), the usage of Liquid Crystal Display with I2C is presented, in this guide, the usage of custom character capability of the LCD shall be discussed.<\/p>\n\n\n\n<p>The following will be covered:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Custom Character of LCD.<\/li><li>Code.<\/li><li>Demo.<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Custom Character of LCD:<\/h2>\n\n\n\n<p>The LCD 1602 have 16 blocks of 40 pixels each. These 40 pixels are divided into 5 columns and 8 rows, and we will use these 5 columns and 8 rows to draw a 5\u00d78 custom character.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"671\" height=\"616\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_2.jpeg\" alt=\"\" class=\"wp-image-1041\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_2.jpeg 671w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_2-300x275.jpeg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_2-400x367.jpeg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_2-250x230.jpeg 250w\" sizes=\"(max-width: 671px) 100vw, 671px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>As per the LCD 1602 datasheet, the IC contains the Character Generator ROM (<strong>CGROM<\/strong>) and Character Generator RAM (<strong>CGRAM<\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"318\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-1024x318.jpeg\" alt=\"\" class=\"wp-image-1042\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-1024x318.jpeg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-300x93.jpeg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-768x238.jpeg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-1150x357.jpeg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-750x233.jpeg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-400x124.jpeg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3-250x78.jpeg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_3.jpeg 1163w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>The CGROM is where the characters patterns are predefined and each character have fixed address associated with it, which helps us access these characters. Basically all the ascii characters we use in the LCD are defined here in the CGROM. This is shown below in the figure 3.<\/p>\n\n\n\n<p>The CGRAM is where the user can save the custom character patterns. In total we can store up to 8 patterns of 5\u00d78 dots. We can later access these characters by calling the address of the corresponding character. The CGRAM addresses for custom characters are shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"923\" height=\"804\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4.jpeg\" alt=\"\" class=\"wp-image-1043\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4.jpeg 923w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4-300x261.jpeg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4-768x669.jpeg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4-750x653.jpeg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4-400x348.jpeg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/lcdcc_4-250x218.jpeg 250w\" sizes=\"(max-width: 923px) 100vw, 923px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"has-black-color has-white-background-color has-text-color has-background wp-block-list\"><li>As shown in the figure above, the\u00a0<strong><mark>red <\/mark><\/strong><mark>box<\/mark>\u00a0is the location of the CGRAM. There are totally 8 bytes (CGRAM1 \u2013 CGRAM8).<\/li><li>The\u00a0<strong><mark>yellow <\/mark><\/strong><mark>box<\/mark>\u00a0represents the location of the CGROM<\/li><li>The\u00a0<strong><mark>blue box<\/mark><\/strong>\u00a0represents the address of these locations.<\/li><\/ul>\n\n\n\n<p>We will first display the character in the CGROM and then create the custom characters, store them in the CGRAM and display them.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Code:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>In order to display custom character, first the custom character has to be stored in the proper location:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-1024x550.png\" alt=\"\" class=\"wp-image-1044\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-1024x550.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-300x161.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-768x413.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-1536x825.png 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-2048x1100.png 2048w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-1150x618.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-750x403.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-400x215.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-22-at-5.00.37-PM-250x134.png 250w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>From the datasheet, the CGRAM address starts at 0x80 and each one is offset by 8 for each character. The maximum can be is 8 character, hence the start address is 0x80 and the end address is 0x80+56.<\/p>\n\n\n\n<p>Hence, we can start develop the code:<\/p>\n\n\n\n<p>To start off, we declare a function which takes two arguments, number and the character as a pointer:<\/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 create_custom_char (uint8_t loc, char * data){\n\n\n}<\/pre><\/div>\n\n\n\n<p>then switch statement for the location:<\/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;}\">switch (loc)\n\t\t{\n\tcase 0:lcd_send_cmd(0x40);break;\n\tcase 1:lcd_send_cmd(0x40+8);break;\n\tcase 2:lcd_send_cmd(0x40+16);break;\n\tcase 3:lcd_send_cmd(0x40+24);break;\n\tcase 4:lcd_send_cmd(0x40+32);break;\n\tcase 5:lcd_send_cmd(0x40+40);break;\n\tcase 6:lcd_send_cmd(0x40+48);break;\n\tcase 7:lcd_send_cmd(0x40+56);break;\n\tdefault : break;\n\t}<\/pre><\/div>\n\n\n\n<p>Then, create an array to hold the character:<\/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;}\">uint8_t cc_data[8];\n\tfor (int i=0;i&lt;8;i++)\n\t\t{\n\t\tcc_data[i]=*data++;\n\t\t}<\/pre><\/div>\n\n\n\n<p>Then send those character as following:<\/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;}\">for (int i=0;i&lt;8;i++)\n\t\t\t{\n\t\t\tlcd_send_data(cc_data[i]);\n\t\t\t}<\/pre><\/div>\n\n\n\n<p>To display the character, it is as simple as calling the memory location:<\/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;}\">\nvoid display_custom_char (uint8_t loc)\n\t{\n\tswitch (loc)\n\t\t\t{\n\t\tcase 0:lcd_send_data(0);break;\n\t\tcase 1:lcd_send_data(1);break;\n\t\tcase 2:lcd_send_data(2);break;\n\t\tcase 3:lcd_send_data(3);break;\n\t\tcase 4:lcd_send_data(4);break;\n\t\tcase 5:lcd_send_data(5);break;\n\t\tcase 6:lcd_send_data(6);break;\n\t\tcase 7:lcd_send_data(7);break;\n\t\tdefault: break;\n\t}\n}<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>In main 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;}\">char cc1[8] = {0x00, 0x00, 0x0A, 0x00, 0x11, 0x0E, 0x00, 0x00};  \/\/ smiley\nchar cc2[8] = {0x0E, 0x0E, 0x04, 0x0E, 0x15, 0x04, 0x0A, 0x0A};  \/\/ Robo\nchar cc3[8] = {0x08, 0x0C, 0x0E, 0x0F, 0x0E, 0x0C, 0x08, 0x00};  \/\/ arrow\nchar cc4[8] = {0x00, 0x04, 0x0E, 0x0E, 0x0E, 0x1F, 0x04, 0x00};  \/\/ bell\nchar cc5[8] = {0x00, 0x00, 0x0A, 0x15, 0x11, 0x0E, 0x04, 0x00};  \/\/ Heart\nchar cc6[8] = {0x00, 0x0E, 0x11, 0x11, 0x11, 0x0A, 0x1B, 0x00};  \/\/ omega\nchar cc7[8] = {0x0E, 0x10, 0x17, 0x12, 0x12, 0x12, 0x10, 0x0E};  \/\/ CT\nchar cc8[8] = {0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x1F, 0x00};  \/\/ +-\n\n<\/pre><\/div>\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;}\">\tcreate_custom_char(0,cc1);\n\tcreate_custom_char(1,cc2);\n\tcreate_custom_char(2,cc3);\n\tcreate_custom_char(3,cc4);\n\tcreate_custom_char(5,cc6);\n\tcreate_custom_char(6,cc7);\n\tcreate_custom_char(7,cc8);<\/pre><\/div>\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;}\">\t\tsetCursor(0, 0);\n\t\tlcd_send_string(&quot;Custom characters&quot;);\n\t\tdelay(200);\n\t\tsetCursor(0, 1);\n\t\tfor (int i=0; i&lt;8; i++) {display_custom_char(i); delay(300);}\n\t\tdelay(700);\n\t\tlcd_clear();\n\t\tdelay(200);<\/pre><\/div>\n\n\n\n<p>Note: those function available within the previous guide.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Demo:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Custom Character Generation for Liquid Crystal Display\" width=\"1170\" height=\"658\" src=\"https:\/\/www.youtube.com\/embed\/OLUWPzmBImU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Happy coding \ud83d\ude42<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the previous guide (here), the usage of Liquid Crystal Display with I2C is presented, in this guide, the usage of custom character capability of the LCD shall be discussed. The following will be covered: Custom Character of LCD. Code. Demo. 1. Custom Character of LCD: The LCD 1602 have 16 blocks of 40 pixels [&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-1039","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\/1039"}],"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=1039"}],"version-history":[{"count":2,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1039\/revisions"}],"predecessor-version":[{"id":1046,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/1039\/revisions\/1046"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}