{"id":521,"date":"2017-11-25T15:04:11","date_gmt":"2017-11-25T14:04:11","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=521"},"modified":"2017-12-31T19:07:24","modified_gmt":"2017-12-31T18:07:24","slug":"88-ws2812_8ch-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/88-ws2812_8ch-library-stm32f4\/","title":{"rendered":"88-WS2812_8CH-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/87-dual_fatfs-library-stm32f4\/\" title=\"87-DUAL_FATFS-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 87-DUAL_FATFS-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/89-fatfs_spi-library-stm32f4\/\" title=\"89-FATFS_SPI-Library (STM32F4)\">89-FATFS_SPI-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library k\u00f6nnen bis zu 8 LED-Ketten vom Typ WS2812 betrieben werden.<\/p>\n<p>F\u00fcr eine n\u00e4here Beschreibung der WS2812 siehe meine andere Library<br \/>\n(<a title=\"78-WS2812-Library (STM32F4)\" href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=491\">78=WS2812-Lib<\/a>)<\/p>\n<p>Wenn man alle 8 Str\u00e4nge parallel legt, kann man auch Texte darstellen.<br \/>\nEinen entsprechenden Font mit 8\u00d76 Pixel habe ich dazugepackt.<\/p>\n<p>Im H-File k\u00f6nnen nicht benutzte Kan\u00e4le per Define abgeschaltet werden.<br \/>\n(Um RAM zu sparen)<\/p>\n<p>Im H-File muss die L\u00e4nge der l\u00e4ngsten LED-Kette eingetragen werden<br \/>\n(um Speicherplatz zu reservieren) Die Software versucht aber die tats\u00e4chliche<br \/>\nL\u00e4ngen aller angeschlossener Ketten zu messen (w\u00e4rend der Init-Funktion).<\/p>\n<p>Dazu m\u00fcssen die Ausg\u00e4nge der letzten LEDs von allen Ketten \u00fcber Dioden<br \/>\n(z.B. BAT46) per \u201cWired-Or\u201d mit dem externen Interrupt-Pin \u201cPD0\u2033<br \/>\nverbunden werden. Falls die L\u00e4ngenmessung bei einer Kette nicht funktioniert,<br \/>\ngeht die Software von der maximalen L\u00e4nge aus die im H-File eingestellt ist.<br \/>\nDie Init-Funktion liefert in dem Fall ein \u201cError\u201d zur\u00fcck.<br \/>\nDie gemessenen L\u00e4ngen aller Ketten steht in \u201cWS2812_CHAIN_LEN.ch1\u2033<br \/>\nbis \u201cWS2812_CHAIN_LEN.ch8\u2033<\/p>\n<p><strong>Bild :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/10\/ws2812_8ch.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-4213\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/10\/ws2812_8ch-300x179.jpg\" alt=\"ws2812_8ch\" width=\"300\" height=\"179\" \/><\/a><\/p>\n<p>Hinweis : falls ihr die automatische L\u00e4ngenmessung <span style=\"text-decoration: underline;\">nicht<\/span> benutzen wollt,<br \/>\nm\u00fcsst ihr NACH der Init-Funktion alle L\u00e4ngen manuell setzen :<\/p>\n<pre lang=\"c\" line=\"1\">\/\/ init WS2812\r\nUB_WS2812_Init();\r\n\r\n\/\/ ignore automatic chain length and\r\n\/\/ set chain lenght manually\r\nWS2812_CHAIN_LEN.ch1=5;\r\nWS2812_CHAIN_LEN.ch2=3;\r\nWS2812_CHAIN_LEN.ch3=4;\r\n<\/pre>\n<p><strong>Zur Software :<\/strong><\/p>\n<p>Alle Funktionen die LEDs betreffend, \u00e4ndern nur die Farbwerte im RAM.<br \/>\nUm die ge\u00e4nderten Werte an die LEDs zu senden, muss einmal die Funktion<br \/>\n\u201cUB_WS2812_RefreshAll\u201d aufgerufen werden.<\/p>\n<p>Bei den Shift\/Roll-Funktionen kann \u00fcber eine Bitmaske bestimmt werden,<br \/>\nwelche LED-Ketten benutzt werden sollen. Damit ist es m\u00f6glich nur eine einzelne<br \/>\nLED-Kette zu verschieben oder mehrere gleichzeitig.<\/p>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">CH1 = PC6\r\nCH2 = PB5\r\nCH3 = PB0\r\nCH4 = PB1\r\nCH5 = PE9\r\nCH6 = PE11\r\nCH7 = PE13\r\nCH8 = PE14\r\n\r\nEXTI = PD0 (zum messen der Anzahl der LEDs aller WS2812-Ketten)<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, TIM, DMA, MISC, EXTI, SYSCFG\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_WS2812_Init(void);                                                     \/\/ zum init aller WS2812-Kette(n)\r\nvoid UB_WS2812_RGB_2_HSV(WS2812_HSV_t hsv_col, WS2812_RGB_t *rgb_col);                \/\/ HSV-Wert in RGB umrechnen\r\nvoid UB_WS2812_Pixel_RGB(uint32_t x, uint8_t y, WS2812_RGB_t rgb_col);                \/\/ eine einzelne LED setzen (als RGB Wert)\r\nvoid UB_WS2812_All_RGB(uint8_t ch_maske, WS2812_RGB_t rgb_col);                       \/\/ alle LEDs der Kette(n) setzen\r\nvoid UB_WS2812_Shift_Left(uint8_t ch_maske);                                          \/\/ alle LEDs der Kette(n) einen Step links schieben\r\nvoid UB_WS2812_Shift_Right(uint8_t ch_maske);                                         \/\/ alle LEDs der Kette(n) einen Step rechts schieben\r\nvoid UB_WS2812_Rotate_Left(uint8_t ch_maske);                                         \/\/ alle LEDs der Kette(n) einen Step links rotieren\r\nvoid UB_WS2812_Rotate_Right(uint8_t ch_maske);                                        \/\/ alle LEDs der Kette(n) einen Step rechts rotieren\r\nvoid UB_WS2812_Char_RGB(uint32_t x, uint8_t ascii, WS2812_RGB_t vg, WS2812_RGB_t bg); \/\/ zeichnet ein Ascii-Zeichen (8 Ketten notwendig)\r\nvoid UB_WS2812_String_RGB(uint32_t x, char *ptr, WS2812_RGB_t vg, WS2812_RGB_t bg);   \/\/ zeichnet einen String (8 Ketten notwendig)\r\nvoid UB_WS2812_RefreshAll(void);                                                      \/\/ sendet alle Daten an die LEDs\r\nErrorStatus UB_WS2812_Check_Len(void);                                                \/\/ test der Laenge aller Ketten<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 04.10.2014\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der WS2812_8CH Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_ws2812_8ch.h\"\r\n\r\nint main(void)\r\n{\r\n  WS2812_RGB_t hg_col, vg_col;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ init aller WS2812-Ketten\r\n  \/\/ (8 Ketten mit je max 100 LEDs)\r\n  UB_WS2812_Init();\r\n\r\n  \/\/ Farbe fuer Hintergrund auf gruen setzen\r\n  hg_col.blue=0;\r\n  hg_col.green=10;\r\n  hg_col.red=0;\r\n\r\n  \/\/ Farbe fuer Vordergrund auf rot setzen\r\n  vg_col.blue=0;\r\n  vg_col.green=0;\r\n  vg_col.red=10;\r\n\r\n  \/\/ setzen aller LEDs auf Hintergrund Farbe\r\n  UB_WS2812_All_RGB(0xFF, hg_col);\r\n\r\n  \/\/ Zeichnen vom Text 'Hallo' an Position 0\r\n  UB_WS2812_String_RGB(0,\"Hallo\", vg_col, hg_col);\r\n\r\n  \/\/ Ausgabe aller Daten an die LEDs\r\n  UB_WS2812_RefreshAll();\r\n\r\n  while(1)\r\n  {\r\n    \/\/ nichts zu tun\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/10\/ub_stm32f4_ws2812_8ch_v100.zip\">ub_stm32f4_ws2812_8ch_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2014\/10\/Demo_88_WS2812_8CH.zip\">Demo_88_WS2812_8CH<\/a><\/p>\n<hr \/>\n<h3 id=\"comments-title\">7 Antworten auf <em>88-WS2812_8CH-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-2997\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-2997\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3a8455cca182a7d77ab111dd68cb0124?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Michael<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">18. M\u00e4rz 2015 um 11:24<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo Uwe,<\/p>\n<p>sagmal es ist wahrscheinlich nicht m\u00f6glich die Ausgaben noch schneller zu gestalten oder? Weil es kommt mir relativ langsam vor, wenn ich z.B. eine LED Durchlaufen lasse dann kann man zugucken beim durchlaufen wenn die LED Kette mehr als 250-300 LEDs hat.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-3003\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-3003\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">18. M\u00e4rz 2015 um 19:22<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>rechne doch mal nach. Eine LED = 30us -&gt; 300 LEDs = 9ms. Ein kompletter refresh dauert also 9ms. Wenn du eine LED von vorne nach hinten also um 300 LEDs durchlaufen lassen willst und jeden Zwischenschritt anzeigst, dauert das 9ms * 300 = 2,7 sekunden. schneller geht nur, wenn du k\u00fcrzere Ketten nimmst und diese hintereinander anordnest, oder wenn du nicht jeden Schritt anzeigst.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-3047\" class=\"comment even depth-3\">\n<div id=\"comment-3047\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3a8455cca182a7d77ab111dd68cb0124?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Michael<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">27. M\u00e4rz 2015 um 09:26<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Ja da hast du wohl Recht, das hatte ich gar nicht ber\u00fccksichtigt. Hab\u2019s nun auf max 150 LEDs beschr\u00e4nkt und dementsprechend die Programme angepasst das es trotzdem aussieht wie ein durchg\u00e4ngiger Strip.<br \/>\nTrotzdem vielen Dank f\u00fcr deine Hilfe<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-4395\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-4395\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7fa89cf356105cf1b3d066728feb37db?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">vasa<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">27. November 2015 um 07:04<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Good afternoon!<br \/>\nTrying to 12 LED strings.<br \/>\nIt will not conflict DMA and interrupt? What are the problems?<br \/>\nProject:<a href=\"https:\/\/docviewer.yandex.ru\/?url=ya-disk%3A%2F%2F%2Fdisk%2F%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%2FWS2812B.7z&amp;name=WS2812B.7z&amp;c=5657e27abf60\" rel=\"nofollow\">https:\/\/docviewer.yandex.ru\/?url=ya-disk%3A%2F%2F%2Fdisk%2F%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%2FWS2812B.7z&amp;name=WS2812B.7z&amp;c=5657e27abf60<\/a><br \/>\nThank you!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4406\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-4406\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">28. November 2015 um 11:54<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>sorry, i dont search failure in external code.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4409\" class=\"comment odd alt depth-3\">\n<div id=\"comment-4409\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/7fa89cf356105cf1b3d066728feb37db?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">vasa<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">28. November 2015 um 15:09<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>How to determine the channel interrupts and process it? I can do so and will not conflict because the interrupt handler is the same?<\/p>\n<p>if (DMA_GetITStatus(DMA1_Stream2, DMA_IT_TCIF2))<br \/>\n{}<br \/>\n=&gt; TIM3-CC4 =&gt; DMA1, Channel5, Stream2<br \/>\n=&gt; TIM5-CC1 =&gt; DMA1, Channel6, Stream2<\/p>\n<p>Thank you!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4419\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-4\">\n<div id=\"comment-4419\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">30. November 2015 um 19:45<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>you cant use two channels on the same stream at the same dma. either use dma2 or another stream. or use the channels one after the other.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library k\u00f6nnen bis zu 8 LED-Ketten vom Typ WS2812 betrieben werden. F\u00fcr eine n\u00e4here Beschreibung der WS2812 siehe meine andere Library (78=WS2812-Lib) Wenn man alle 8 Str\u00e4nge parallel legt, kann man auch Texte darstellen. Einen entsprechenden Font mit &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/88-ws2812_8ch-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":88,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[8,9,7,234],"class_list":["post-521","page","type-page","status-publish","hentry","category-stm32f4","tag-led","tag-library","tag-stm32f4","tag-ws2812"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=521"}],"version-history":[{"count":4,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/521\/revisions"}],"predecessor-version":[{"id":1791,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/521\/revisions\/1791"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}