{"id":759,"date":"2017-11-27T21:22:25","date_gmt":"2017-11-27T20:22:25","guid":{"rendered":"http:\/\/www.daniel.slask.pl\/?p=759"},"modified":"2021-02-12T20:39:21","modified_gmt":"2021-02-12T19:39:21","slug":"realizacja-stacji-meteo-czesc-3-program","status":"publish","type":"post","link":"https:\/\/daniel.slask.pl\/m\/realizacja-stacji-meteo-czesc-3-program\/","title":{"rendered":"Realizacja stacji Meteo. Cz\u0119\u015b\u0107 3 &#8211; program"},"content":{"rendered":"\n<p>W tej cz\u0119\u015bci om\u00f3wi\u0119 w kilku s\u0142owach programow\u0105 obs\u0142ug\u0119 czujnik\u00f3w kt\u00f3re zosta\u0142y wykorzystane w stacji meteo &#8211; pr\u0119dko\u015bci i kierunku wiatru, ilo\u015bci opadu, temperatury, ci\u015bnienia, oraz wilgotno\u015bci. Przedstawiony zostanie r\u00f3wnie\u017c szkielet programu.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Obs\u0142uga czujnika pr\u0119dko\u015bci wiatru.<\/strong><\/span><\/p>\n\n\n\n<p>Podczas jednego obrotu czujnika pr\u0119dko\u015bci wiatru wyzwalane s\u0105 dwa impulsy. Do zliczania tych impuls\u00f3w zosta\u0142 wykorzystany mechanizm wykrywania zboczy, a dok\u0142adnie przerwania zewn\u0119trze reaguj\u0105ce na zbocze narastaj\u0105ce. Wykorzystywane jest przerwania zewn\u0119trznego INT1. Konfiguracja wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/dla czujnika pr\u0119dko\u015bci wiatru\nEICRA |= (1&lt;&lt;ISC11);\t\t\t\t\/\/reakcja na zbocze opadaj\u0105ce\nEIMSK |= (1&lt;&lt;INT1);\t\t\t\t\/\/aktywacja przerwania dla int1<\/code><\/pre>\n\n\n\n<p>Natomiast obs\u0142uga przerwania:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/*****\tprzerwanie zewn\u0119trzne od pr\u0119dko\u015bci wiatru\nISR (INT1_vect){\n\tif(!bool_meteo.hold_speed){\n\t\tds_counter_wind++;\n\t\tbool_meteo.hold_speed = 1;\n\t}\n}<\/code><\/pre>\n\n\n\n<p>Zliczanie zatrzymywane jest do momentu, kiedy nie nast\u0105pi wys\u0142anie danych. Po wys\u0142aniu danych ponownie uruchamiane jest liczenie impuls\u00f3w.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Obs\u0142uga wska\u017anika kierunku wiatru.<\/strong><\/span><\/p>\n\n\n\n<p>Jak ju\u017c by\u0142o wspomniane w <a href=\"http:\/\/www.daniel.slask.pl\/?p=630\" target=\"_blank\" rel=\"noopener noreferrer\">pierwszej cz\u0119\u015bci<\/a> serii wpis\u00f3w o stacji meteo, ka\u017cdy kierunek ma swoj\u0105 warto\u015b\u0107 rezystancji (poprzez kontaktron zwierane s\u0105 odpowiednie rezystory), dlatego do pomiaru potrzebne jest skonfigurowanie odpowiednio przetwornika ADC. Konfiguracja wraz z komentarzami przedstawia si\u0119 nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/**********\tinicjalizacja ADC\n\/\/dla czujnika kierunku wiatru\nDIDR0 |= (1&lt;&lt;ADC0D);\t\t\t\/\/wy\u0142\u0105czenie funkcji tryby cyfrowego dla tego pinu\nADMUX &amp;= ~(1&lt;&lt;ADLAR);\t\t\t\/\/wyr\u00f3wnanie do prawej\nADMUX |= (1&lt;&lt;REFS0);\t\t\t\/\/napi\u0119cie zasilania jako odniesienia\nADCSRA |= (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2);\t\/\/preskaler 64 - mniej ni\u017c 200khz\nADCSRA |= (1&lt;&lt;ADEN);\t\t\t\/\/w\u0142\u0105czenie ADC<\/code><\/pre>\n\n\n\n<p>Nast\u0119pnie co okre\u015blony czas (co oko\u0142o 5s) dokonywany jest pomiar z wej\u015bcia analogowego. Podczas test\u00f3w stacji meteo, sprawdzi\u0142em ile wynosi odczytana warto\u015b\u0107 ADC dla ka\u017cdego z 16 mo\u017cliwych kierunk\u00f3w. Na podstawie tego utworzy\u0142em tabel\u0119 z 3 kolumnami, gdzie w pierwszej kolumnie znajdowa\u0142a si\u0119 dolna warto\u015b\u0107 ADC, w drugiej g\u00f3rna, a w trzeciej przypisany kierunek. Dzi\u0119ki ustaleniu dolnej i g\u00f3rnej warto\u015bci uk\u0142ad jest mniej wra\u017cliwy na zmian\u0119 rezystancji, kt\u00f3ra mo\u017ce zmienia\u0107 si\u0119 pod wp\u0142ywem, np. temperatury. Tak wygl\u0105da wykorzystywana tabela:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">DS_WIND_DIR const ds_direction[16] PROGMEM = {\n\t\t{740,799,\"N\"},\n\t\t{310,419,\"NNE\"},\n\t\t{420,499,\"NE\"},\n\t\t{75,87,\"ENE\"},\n\t\t{88,109,\"E\"},\n\t\t{20,74,\"ESE\"},\n\t\t{160,209,\"SE\"},\n\t\t{110,159,\"SSE\"},\n\t\t{260,309,\"S\"},\n\t\t{210,259,\"SSW\"},\n\t\t{600,639,\"SW\"},\n\t\t{500,599,\"WSW\"},\n\t\t{910,1000,\"W\"},\n\t\t{800,849,\"WNW\"},\n\t\t{850,909,\"NW\"},\n\t\t{640,739,\"NNW\"},\n};<\/code><\/pre>\n\n\n\n<p>Podczas normalnej pracy stacji meteo, odczytywana jest bie\u017c\u0105ca warto\u015b\u0107 z przetwornika ADC i sprawdzana jest w kt\u00f3rym zakresie si\u0119 ona znajduje &#8211; dany zakres ma przypisany jeden kierunek.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Obs\u0142uga czujnika ilo\u015bci opadu.<\/strong><\/span><\/p>\n\n\n\n<p>Pomiar ilo\u015bci opadu polega na zmianie stanu sygna\u0142u wej\u015bciowego &#8211; zmiana ta nast\u0105pi gdy w korytku znajdzie si\u0119 odpowiednia ilo\u015b\u0107 wody, kt\u00f3ra w przeliczeniu jest r\u00f3wna <em>0,2794 mm \/ metr<\/em> kwadratowy opadu. Ilo\u015b\u0107 zmian sygna\u0142\u00f3w liczona jest poprzez wykorzystanie przerwania zewn\u0119trznego INT0, reaguj\u0105cego r\u00f3wnie\u017c na zbocze narastaj\u0105ce.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/dla czujnika ilo\u015bci opadu\nEICRA |= (1&lt;&lt;ISC11);\t\t\t\t\/\/reakcja na zmian\u0119 sygna\u0142u\nEIMSK |= (1&lt;&lt;INT0);\t\t\t\t\/\/aktywacja przerwania dla int1<\/code><\/pre>\n\n\n\n<p>Zliczanie impuls\u00f3w wykonywane jest do momentu wys\u0142ania danych do prezentera. Po wys\u0142aniu danych ilo\u015b\u0107 impuls\u00f3w jest resetowana. Obs\u0142uga tego przerwania prezentowana jest nast\u0119puj\u0105co:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">\/\/*****\tprzerwanie zewn\u0119trzne od ilosci opadu\nISR (INT0_vect){\nds_counter_rain++;\n}<\/code><\/pre>\n\n\n\n<p>Przy omawianiu prezentera przedstawi\u0119 spos\u00f3b obliczanie ilo\u015bci opadu na metr kwadratowy.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Czujnik ci\u015bnienia BMP180.<\/strong><\/span><\/p>\n\n\n\n<p>Obs\u0142uga czujnika ci\u015bnienia zosta\u0142a opisana w osobnym artykule do kt\u00f3rego gor\u0105co zach\u0119cam &#8211; <a href=\"http:\/\/www.daniel.slask.pl\/?p=387\" target=\"_blank\" rel=\"noopener noreferrer\">czujnik BMP180<\/a>.<\/p>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">Czujnik wilgotno\u015bci DHT22.<\/span><\/strong><\/p>\n\n\n\n<p>R\u00f3wnie\u017c obs\u0142uga tego czujnika zosta\u0142a zaprezentowana w innym artykule &#8211; czujnik <a href=\"http:\/\/www.daniel.slask.pl\/?p=635\" target=\"_blank\" rel=\"noopener noreferrer\">wilgotno\u015bci DHT22<\/a>.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\"><strong>Obs\u0142uga RFM69 do komunikacji bezprzewodowej.<\/strong><\/span><\/p>\n\n\n\n<p>Biblioteka do obs\u0142ugi uk\u0142adu RFM69 zosta\u0142 zaczerpni\u0119ta z tzw greenbooka &#8211; <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.atnel.pl\/jezyk-c-pasja-programowania.html\" target=\"_blank\" rel=\"noopener noreferrer\">J\u0119zyk C Pasja programowania mikrokontroler\u00f3w 8-bitowych<\/a><\/span>,<\/strong> wydawnictwa Atnel. Biblioteka ta zosta\u0142a obszernie opisana w wymienionej ksi\u0105\u017cce, a autor bardzo si\u0119 przy\u0142o\u017cy\u0142 do niej &#8211; jest skuteczna i prosta w obs\u0142udze. Zach\u0119cam do zapoznania si\u0119 z t\u0105 ksi\u0105\u017ck\u0105, oraz z bibliotekami opisanymi w niej.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">sprintf(buf, \"%04u;%02i;%04i;%03i;%04u;%03i;%01i;%03i;%01i;%01i;%03i;%01i;%s;%01i;\",\\\n\t\t\t\t\t(unsigned)ds_bmp180.bmp180_pressure_cell,ds_bmp180.bmp180_pressure_frac,(unsigned)humidity,imp,\\\n\t\t\t\t\t(unsigned)adc_dir,imp_rain_gauge,sens_temp[0].subzero,sens_temp[0].cel,sens_temp[0].cel_fract_bits,\\\n\t\t\t\t\tsens_temp[1].subzero,sens_temp[1].cel,sens_temp[1].cel_fract_bits,voltage,connect_on);<\/code><\/pre>\n\n\n\n<p>Zastosowany uk\u0142ad wykorzystuje cz\u0119stotliwo\u015b\u0107 433MHZ, a stacji meteo zosta\u0142 przydzielony w\u0142asny adres &#8211; w do\u015b\u0107 prosty spos\u00f3b dzi\u0119ki zastosowanej bibliotece. Nast\u0119pnie co okre\u015blony czas wysy\u0142any jest pakiet danych do urz\u0105dze\u0144 prezentuj\u0105cych warunki atmosferyczne.<\/p>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">A do czego jest stosowany UART?<\/span><\/strong><\/p>\n\n\n\n<p>Jak ju\u017c wiecie, uk\u0142ad zasilany jest z baterii li-ion, kt\u00f3ra natomiast \u0142adowana jest poprzez ogniwo fotowoltaiczne (pisa\u0142em o tym w jednym we wcze\u015bniejszych artyku\u0142ach &#8211; pod tym <a href=\"http:\/\/www.daniel.slask.pl\/?p=784\">adresem<\/a>). \u0141adowaniem zajmuje si\u0119 uk\u0142ad firmy <strong>ATNEL<\/strong> &#8211; <strong><a href=\"http:\/\/www.atnel.pl\/atb-digi-lion2.html\">DIGI-LION<\/a><\/strong>, kt\u00f3ry w\u0142a\u015bnie posiada wyj\u015bcie magistrali UART. Modu\u0142 ten wysy\u0142a napi\u0119cie jakie panuje na ogniwie Li-ion, do stacji meteo, kt\u00f3ra to z kolei wysy\u0142a dane do prezentera. Dzi\u0119ki temu jest mo\u017cliwo\u015b\u0107 bie\u017c\u0105cego podgl\u0105du warto\u015bci napi\u0119cia na tym ogniwie.<\/p>\n\n\n\n<p>Dodatkowo stacja meteo posiada botloader kt\u00f3ry umo\u017cliwia \u0142atwe i szybkie wgranie nowego oprogramowania. W przysz\u0142o\u015bci, mam zamiar doda\u0107 mo\u017cliwo\u015b\u0107 konfiguracji stacji meteo komendami AT.<\/p>\n\n\n\n<p><strong><span style=\"text-decoration: underline;\">Szkielet programu&nbsp; &#8211; g\u0142\u00f3wna p\u0119tla programu.<\/span><\/strong><\/p>\n\n\n\n<p>Poni\u017cej przedstawiam g\u0142\u00f3wn\u0105 p\u0119tl\u0119 programu. Przed p\u0119tl\u0105 programu znajduje si\u0119 konfiguracja wszystkich peryferi\u00f3w pod\u0142\u0105czonych do mikrokontrolera.<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">while(1){\n\tif(frequency_1hz == (TIME_MEAS-2)  &amp;&amp; status == 0){\n\t\tstatus = 1;\n\t\t\/\/start odczytu kierunku wiatru\n\t\tpomiar_adc(0);\n\t\t\/\/\u017c\u0105danie wykonania pomiaru temperatury dla wszystkich czujnik\u00f3w\n\t\tDS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );\n\n\t}else if(frequency_1hz == (TIME_MEAS-1) &amp;&amp; status == 1){\n\t\tstatus = 2;\n\n\t\t\/\/odczyt wilgotno\u015bci i temperatury z dht22\n\t\tds_read_dht(&amp;humidity, &amp;temperature);\n\n\t\t\/\/odczyt ci\u015bnienia i temperatury z bmp180\n\t\tds_bmp180_start(BMP180_OSS_8);\n\n\t\t\/\/przeliczenie pr\u0119dko\u015bci i ilosci opadu\n\t\timp = ds_speed_wind( &amp;speed_wind);\t\t\/\/przeliczenie pr\u0119dko\u015bci wiatru\n\t\timp_rain_gauge = ds_rain_gauge( &amp;rain_gauge);\n\n\t\t\/\/odczyt temperatury z dw\u00f3ch czujnik\u00f3w\n\t\t\tswitch(meteo_conf_ram.nr_sensor_temperatur){\n\t\tcase 2:\n\tDS18X20_read_meas(meteo_conf_ram.sensors[1], &amp;sens_temp[1].subzero, &amp;sens_temp[1].cel, &amp;sens_temp[1].cel_fract_bits);\n\t\tcase 1:\n\tDS18X20_read_meas(meteo_conf_ram.sensors[0], &amp;sens_temp[0].subzero, &amp;sens_temp[0].cel, &amp;sens_temp[0].cel_fract_bits);\n\t\tdefault:\n\tbreak;\n\t}\n\tuint16_t adc_dir = odczyt_adc();\n\t\/\/przygotowanie ramki danych do wys\u0142ania\n\tconnect_on = 1;\n\tsprintf(buf, \"%04u;%02i;%04i;%03i;%04u;%03i;%01i;%03i;%01i;%01i;%03i;%01i;%s;%01i;\",\\\n\t\t\t\t(unsigned)ds_bmp180.bmp180_pressure_cell,ds_bmp180.bmp180_pressure_frac,(unsigned)humidity,imp,\\\n\t\t\t\t(unsigned)adc_dir,imp_rain_gauge,sens_temp[0].subzero,sens_temp[0].cel,sens_temp[0].cel_fract_bits,\\\n\t\t\t\tsens_temp[1].subzero,sens_temp[1].cel,sens_temp[1].cel_fract_bits,voltage,connect_on);\n\n\t}else if(frequency_1hz == (TIME_MEAS)  &amp;&amp; status == 2){\n\t\tstatus = 0;\n\t\tfrequency_1hz = 0;\t\t\/\/wyzerowanie przerwania co 1hz;\n\n\t\t\/\/wysy\u0142amy\n\t\trfm69_transmit(1,buf,0);\n\n\t\t\/\/usypiamy rfm69\n\t\trfm69_sleep();\n\t}\n\t\/\/odczyt ci\u015bnienia\n\tds_bmp180_measure();\n\n\t\/\/Odbi\u00f3r danych z uart - z digi-lion\n\tUART_EVENT(buf_uart);\n\n\t\/\/u\u015bpienie\n\tsleep_mode();\n}<\/code><\/pre>\n\n\n\n<p>Jak mo\u017cna zauwa\u017cy\u0107, p\u0119tla programu jest do\u015b\u0107 kr\u00f3tka &#8211; wszystko obs\u0142ugiwane jest w kolejnych krokach, co odpowiedni czas (w tym przypadku co 1Hz). W pierwszym kroku rozpoczynany jest pomiar <em>ADC<\/em> z kt\u00f3rego odczytywany jest kierunek wiatru, oraz wysy\u0142ane jest \u017c\u0105danie pomiaru dla czujnik\u00f3w temperatury <em>DS18B20<\/em>. Nast\u0119pny krok polega na odczytaniu danych z czujnika wilgotno\u015bci <em>DHT22<\/em>, oraz wys\u0142aniu \u017c\u0105daniu pomiaru do czujnika ci\u015bnienia <em>BMP180<\/em>. W tym kroku odczytywana i obliczana jest pr\u0119dko\u015b\u0107 i kierunek wiatru, ilo\u015b\u0107 opadu, oraz dokonywany jest odczyt temperatury z czujnik\u00f3w <em>DS18B20<\/em>. Ostatnim etapem w tym kroku jest przygotowanie ramki danych do wys\u0142ania drog\u0105 bezprzewodow\u0105, kt\u00f3re to wys\u0142anie odbywa si\u0119 w ostatnim kroku.Wykorzystany jest do tego modu\u0142 <em>RFM69<\/em>. Po wys\u0142aniu danych usypiany jest uk\u0142ad <em>RFM69<\/em> aby zaoszcz\u0119dzi\u0107 energi\u0119. Co obieg p\u0119tli, odczytywane jest ci\u015bnienie, oraz obs\u0142ugiwana jest komunikacja <em>UART<\/em>. Dodatkowa w celu zaoszcz\u0119dzenia energii usypiany jest mikrokontroler. Wykorzystywany jest tryb <strong>IDLE<\/strong> &#8211; uk\u0142ad jest wybudzany przy ka\u017cdej mo\u017cliwej okazji (jest to minimalny spos\u00f3b na oszcz\u0119dzanie energii, ale wystarczy \ud83d\ude09 )<\/p>\n\n\n\n<p>Jak mo\u017cna zauwa\u017cy\u0107 niekt\u00f3re biblioteki do obs\u0142ugi odpowiednich urz\u0105dze\u0144 s\u0105 mojego autorstwa a niekt\u00f3re zosta\u0142y zaczerpni\u0119te z ksi\u0105\u017cek firmy <em><strong>Atnel<\/strong><\/em>. Podczas pisania programu, jedn\u0105 z najwa\u017cniejszych rzeczy, s\u0105 dobrze napisane biblioteki, kt\u00f3re umo\u017cliwiaj\u0105 pewn\u0105 komunikacj\u0119 z wykorzystywanymi urz\u0105dzeniami, oraz \u0142atwo\u015b\u0107 ich obs\u0142ugi.<\/p>\n\n\n\n<p>Pozdrawiam i zach\u0119cam do komentowania.<\/p>\n\n\n\n<p>W przypadku pyta\u0144 lub znalezienia b\u0142\u0119d\u00f3w &#8211; piszcie.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tej cz\u0119\u015bci om\u00f3wi\u0119 w kilku s\u0142owach programow\u0105 obs\u0142ug\u0119 czujnik\u00f3w kt\u00f3re zosta\u0142y wykorzystane w stacji meteo &#8211; pr\u0119dko\u015bci i kierunku wiatru, ilo\u015bci opadu, temperatury, ci\u015bnienia, oraz wilgotno\u015bci. Przedstawiony zostanie r\u00f3wnie\u017c szkielet programu. Obs\u0142uga czujnika pr\u0119dko\u015bci wiatru. Podczas jednego obrotu czujnika&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/daniel.slask.pl\/m\/realizacja-stacji-meteo-czesc-3-program\/\">Wi\u0119cej<\/a><\/p>\n","protected":false},"author":1,"featured_media":965,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[23,6,3],"tags":[12,44,41,106,14,45,40,142,132,139,160,51,140,103,133,102,47,159,141,104],"views":905,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2017\/11\/Art_3.jpg","jetpack_shortlink":"https:\/\/wp.me\/pcPgV3-cf","_links":{"self":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/759"}],"collection":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/comments?post=759"}],"version-history":[{"count":19,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/759\/revisions"}],"predecessor-version":[{"id":1632,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/759\/revisions\/1632"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media\/965"}],"wp:attachment":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media?parent=759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/categories?post=759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/tags?post=759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}