{"id":42,"date":"2023-12-09T19:14:26","date_gmt":"2023-12-09T11:14:26","guid":{"rendered":"http:\/\/www.ikaros.love\/?p=42"},"modified":"2023-12-09T19:14:26","modified_gmt":"2023-12-09T11:14:26","slug":"%e6%a0%91%e8%8e%93%e6%b4%be4b%e6%8e%a7%e5%88%b6pca9685%e6%a8%a1%e5%9d%97%e8%af%a6%e6%83%85%e4%b8%8e%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82","status":"publish","type":"post","link":"https:\/\/www.ikaros.love\/?p=42","title":{"rendered":"\u6811\u8393\u6d3e4b\u63a7\u5236pca9685\u6a21\u5757\u8be6\u60c5\u4e0e\u6280\u672f\u7ec6\u8282"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/www.ikaros.love\/wp-content\/uploads\/2023\/12\/1-1.jpg\" alt=\"\" class=\"wp-image-43\" srcset=\"https:\/\/www.ikaros.love\/wp-content\/uploads\/2023\/12\/1-1.jpg 640w, https:\/\/www.ikaros.love\/wp-content\/uploads\/2023\/12\/1-1-300x225.jpg 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>\u914d\u7f6e\u8be6\u60c5\uff1a<\/p>\n\n\n\n<p>\u6811\u8393\u6d3e4b\u63a7\u5236pca9685\u6a21\u5757\uff0c\u5730\u5740\u662f0x41 \uff0c\u5728pca9685\u6a21\u5757\u76840\u548c1\u53f7\u8f93\u51fa\u53e3\u63a5\u5165mg90s\u8235\u673a<\/p>\n\n\n\n<p>\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;wiringPi.h>\r\n#include &lt;wiringPiI2C.h>\r\n#include &lt;stdio.h>\r\n#include &lt;unistd.h>\r\n\r\n\/\/ PCA9685 registers\r\n#define MODE1 0x00\r\n#define PRESCALE 0xFE\r\n#define LED0_ON_L 0x06\r\n#define LED_ON_STEP 4\r\n\r\n\/\/ PCA9685 constants\r\n#define PCA9685_ADDRESS 0x41\r\n#define FREQUENCY 50\r\n#define PWM_RANGE 4096\r\n\r\n\/\/ MG90S constants\r\n#define MG90S_MIN_PULSE_WIDTH 600\r\n#define MG90S_MAX_PULSE_WIDTH 2400\r\n#define MG90S_DEGREE_RANGE 180\r\n\r\n\/\/ Function to initialize PCA9685\r\nint initPCA9685(int fd) {\r\n    wiringPiI2CWriteReg8(fd, MODE1, 0x00); \/\/ Reset PCA9685\r\n    usleep(10000);\r\n\r\n    int prescaleval = (25000000 \/ (PWM_RANGE * FREQUENCY)) - 1;\r\n    wiringPiI2CWriteReg8(fd, MODE1, 0x10); \/\/ Sleep mode\r\n    wiringPiI2CWriteReg8(fd, PRESCALE, (prescaleval &amp; 0xFF)); \/\/ Set the prescaler\r\n    wiringPiI2CWriteReg8(fd, MODE1, 0x00); \/\/ Wake up\r\n\r\n    return fd;\r\n}\r\n\r\n\/\/ Function to set the PWM pulse for a specific servo\r\nvoid setServoPulse(int fd, int channel, int pulse) {\r\n    int on = 0;\r\n    int off = pulse * PWM_RANGE \/ 20000; \/\/ 20ms base\r\n    wiringPiI2CWriteReg8(fd, LED0_ON_L + LED_ON_STEP * channel, on &amp; 0xFF);\r\n    wiringPiI2CWriteReg8(fd, LED0_ON_L + LED_ON_STEP * channel + 1, on >> 8);\r\n    wiringPiI2CWriteReg8(fd, LED0_ON_L + LED_ON_STEP * channel + 2, off &amp; 0xFF);\r\n    wiringPiI2CWriteReg8(fd, LED0_ON_L + LED_ON_STEP * channel + 3, off >> 8);\r\n}\r\n\r\n\/\/ Function to move the servo to a specific degree\r\nvoid moveServo(int fd, int channel, int degree) {\r\n    if (degree &lt; 0) {\r\n        degree = 0;\r\n    } else if (degree > MG90S_DEGREE_RANGE) {\r\n        degree = MG90S_DEGREE_RANGE;\r\n    }\r\n\r\n    int pulseWidth = MG90S_MIN_PULSE_WIDTH + (degree * (MG90S_MAX_PULSE_WIDTH - MG90S_MIN_PULSE_WIDTH) \/ MG90S_DEGREE_RANGE);\r\n    setServoPulse(fd, channel, pulseWidth);\r\n}\r\n\r\nint main() {\r\n    wiringPiSetup();\r\n\r\n    int fd = wiringPiI2CSetup(PCA9685_ADDRESS);\r\n    if (fd == -1) {\r\n        printf(\"Error initializing I2C\\n\");\r\n        return 1;\r\n    }\r\n\r\n    initPCA9685(fd);\r\n\r\n    while (1) {\r\n        \/\/ Move servo on channel 0\r\n        moveServo(fd, 0, 0);\r\n        usleep(1000000); \/\/ Wait for 1 second\r\n\r\n        moveServo(fd, 0, 180);\r\n        usleep(1000000); \/\/ Wait for 1 second\r\n\r\n        \/\/ Move servo on channel 1\r\n        moveServo(fd, 1, 0);\r\n        usleep(1000000); \/\/ Wait for 1 second\r\n\r\n        moveServo(fd, 1, 180);\r\n        usleep(1000000); \/\/ Wait for 1 second\r\n    }\r\n\r\n    return 0;\r\n}\r\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ee3\u7801\u8be6\u89e3\uff1a<\/h2>\n\n\n\n<p><strong>\u5bc4\u5b58\u5668\u8be6\u89e3\uff1a<\/strong><\/p>\n\n\n\n<p>PCA9685 \u6a21\u5757\u7684\u5bc4\u5b58\u5668\u5730\u5740\uff0c\u6bcf\u4e2a\u5bc4\u5b58\u5668\u5b58\u50a8\u7740\u4e0d\u540c\u7684\u914d\u7f6e\u4fe1\u606f\u3002\u4ee5\u4e0b\u662f\u8fd9\u4e9b\u5bc4\u5b58\u5668\u7684\u7b80\u8981\u89e3\u91ca\uff1a<\/p>\n\n\n\n<p>\u5b50\u5730\u5740\u5bc4\u5b58\u5668\uff1a<\/p>\n\n\n\n<p>PCA9685_SUBADR1 (0x2)<br>PCA9685_SUBADR2 (0x3)<br>PCA9685_SUBADR3 (0x4)<br>\u8fd9\u4e9b\u5bc4\u5b58\u5668\u7528\u4e8e\u8bbe\u7f6e PCA9685 \u6a21\u5757\u7684\u4ece\u8bbe\u5907\u5730\u5740\u3002\u4f60\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u8fd9\u4e9b\u5bc4\u5b58\u5668\uff0c\u4f7f PCA9685 \u54cd\u5e94\u591a\u4e2a I2C \u5730\u5740\u3002<\/p>\n\n\n\n<p>\u63a7\u5236\u6a21\u5f0f\u5bc4\u5b58\u5668\uff1a<\/p>\n\n\n\n<p>PCA9685_MODE1 (0x0)<br>\u8fd9\u4e2a\u5bc4\u5b58\u5668\u7528\u4e8e\u914d\u7f6e PCA9685 \u7684\u63a7\u5236\u6a21\u5f0f\u3002\u901a\u8fc7\u8bbe\u7f6e\u4e0d\u540c\u7684\u4f4d\uff0c\u4f60\u53ef\u4ee5\u63a7\u5236 PCA9685 \u7684\u5de5\u4f5c\u6a21\u5f0f\uff0c\u6bd4\u5982\u542f\u7528\/\u7981\u7528\u81ea\u52a8\u9012\u589e\u3001\u8bbe\u7f6e\u8f93\u51fa\u9a71\u52a8\u80fd\u529b\u7b49\u3002<\/p>\n\n\n\n<p>\u9884\u5206\u9891\u5668\u5bc4\u5b58\u5668\uff1a<\/p>\n\n\n\n<p>PCA9685_PRESCALE (0xFE)<br>\u901a\u8fc7\u8bbe\u7f6e\u8fd9\u4e2a\u5bc4\u5b58\u5668\uff0c\u53ef\u4ee5\u8c03\u6574 PCA9685 \u7684\u65f6\u949f\u9884\u5206\u9891\u5668\uff0c\u4ece\u800c\u5f71\u54cd PWM \u7684\u9891\u7387\u3002<\/p>\n\n\n\n<p>LED\u5bc4\u5b58\u5668\uff1a<\/p>\n\n\n\n<p>LED0_ON_L (0x6)<br>LED0_ON_H (0x7)<br>LED0_OFF_L (0x8)<br>LED0_OFF_H (0x9)<br>\u8fd9\u4e9b\u5bc4\u5b58\u5668\u7528\u4e8e\u914d\u7f6e\u6bcf\u4e2a PWM \u901a\u9053\u7684 PWM \u8109\u51b2\u5bbd\u5ea6\u3002\u6bcf\u4e2a\u901a\u9053\u6709\u4e24\u4e2a\u5bc4\u5b58\u5668\uff0c\u5206\u522b\u7528\u4e8e\u8bbe\u7f6e PWM \u8109\u51b2\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u4f4d\u7f6e\u3002<\/p>\n\n\n\n<p>\u5168\u5c40 LED\u5bc4\u5b58\u5668\uff1a<\/p>\n\n\n\n<p>ALLLED_ON_L (0xFA)<br>ALLLED_ON_H (0xFB)<br>ALLLED_OFF_L (0xFC)<br>ALLLED_OFF_H (0xFD)<br>\u8fd9\u4e9b\u5bc4\u5b58\u5668\u7528\u4e8e\u914d\u7f6e\u6240\u6709\u901a\u9053\u7684 PWM \u8109\u51b2\u5bbd\u5ea6\u3002\u4e0e\u5355\u4e2a\u901a\u9053\u7684\u5bc4\u5b58\u5668\u7c7b\u4f3c\uff0c\u6bcf\u4e2a\u901a\u9053\u6709\u4e24\u4e2a\u5bc4\u5b58\u5668\uff0c\u5206\u522b\u7528\u4e8e\u8bbe\u7f6e PWM \u8109\u51b2\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u4f4d\u7f6e\u3002<\/p>\n\n\n\n<p>\u5728\u63a7\u5236 PCA9685 \u8fdb\u884c\u8235\u673a\u63a7\u5236\u65f6\uff0c\u901a\u5e38\u4f1a\u7528\u5230 LED0_ON_L\u3001LED0_ON_H\u3001LED0_OFF_L \u548c LED0_OFF_H \u8fd9\u51e0\u4e2a\u5bc4\u5b58\u5668\uff0c\u56e0\u4e3a\u5b83\u4eec\u63a7\u5236\u5355\u4e2a\u901a\u9053\u7684 PWM \u8109\u51b2\u3002<\/p>\n\n\n\n<p><strong>pca9685\u5404\u4e2a\u5de5\u4f5c\u6a21\u5f0f\u7684\u4e0d\u540c\u8be6\u89e3\uff1a<\/strong><\/p>\n\n\n\n<p>\u5728 PCA9685 \u6a21\u5757\u4e2d\uff0c\u5de5\u4f5c\u6a21\u5f0f\u4e3b\u8981\u901a\u8fc7\u63a7\u5236\u6a21\u5f0f\u5bc4\u5b58\u5668\uff08MODE1\uff09\u7684\u8bbe\u7f6e\u6765\u5b9e\u73b0\u3002\u4e0b\u9762\u8be6\u7ec6\u89e3\u91ca PCA9685 \u6a21\u5757\u7684\u4e0d\u540c\u5de5\u4f5c\u6a21\u5f0f\uff1a<\/p>\n\n\n\n<p>MODE1 \u5bc4\u5b58\u5668\uff080x00\uff09<br>MODE1 \u5bc4\u5b58\u5668\u63a7\u5236 PCA9685 \u7684\u5404\u79cd\u914d\u7f6e\u548c\u5de5\u4f5c\u6a21\u5f0f\u3002\u4e0b\u9762\u662f MODE1 \u5bc4\u5b58\u5668\u4e2d\u5404\u4e2a\u4f4d\u7684\u542b\u4e49\uff1a<\/p>\n\n\n\n<p>Bit 7 (SLEEP):<\/p>\n\n\n\n<p>0: PCA9685 \u5904\u4e8e\u6b63\u5e38\u5de5\u4f5c\u6a21\u5f0f\u3002<br>1: PCA9685 \u8fdb\u5165\u7761\u7720\u6a21\u5f0f\u3002\u5728\u7761\u7720\u6a21\u5f0f\u4e0b\uff0c\u6240\u6709 PWM \u8f93\u51fa\u5c06\u88ab\u5173\u95ed\uff0c\u8bbe\u5907\u8fdb\u5165\u4f4e\u529f\u8017\u72b6\u6001\u3002<br>Bit 6 (SUB1):<\/p>\n\n\n\n<p>\u7528\u4e8e\u542f\u7528\/\u7981\u7528 PCA9685 \u7684 I2C \u4ece\u8bbe\u5907\u5730\u5740 1\u3002<br>Bit 5 (SUB2):<\/p>\n\n\n\n<p>\u7528\u4e8e\u542f\u7528\/\u7981\u7528 PCA9685 \u7684 I2C \u4ece\u8bbe\u5907\u5730\u5740 2\u3002<br>Bit 4 (SUB3):<\/p>\n\n\n\n<p>\u7528\u4e8e\u542f\u7528\/\u7981\u7528 PCA9685 \u7684 I2C \u4ece\u8bbe\u5907\u5730\u5740 3\u3002<br>Bit 3 (ALLCALL):<\/p>\n\n\n\n<p>0: \u7981\u7528 PCA9685 \u7684\u5168\u5c40 I2C \u5730\u5740\u3002<br>1: \u542f\u7528 PCA9685 \u7684\u5168\u5c40 I2C \u5730\u5740\u3002\u542f\u7528\u540e\uff0cI2C \u603b\u7ebf\u4e0a\u7684\u6240\u6709\u8bbe\u5907\u90fd\u53ef\u4ee5\u54cd\u5e94\u8fd9\u4e2a\u5730\u5740\u3002<br>Bits 2-0 (AI2, AI1, SLEEP):<\/p>\n\n\n\n<p>\u8fd9\u4e9b\u4f4d\u63a7\u5236\u81ea\u52a8\u9012\u589e\u529f\u80fd\u548c\u5916\u90e8\u65f6\u949f\u6e90\u7684\u9009\u62e9\u3002<\/p>\n\n\n\n<p><strong>\u81ea\u52a8\u9012\u589e\u529f\u80fd\u8be6\u89e3\uff1a<\/strong><\/p>\n\n\n\n<p>PCA9685 \u6a21\u5757\u7684\u81ea\u52a8\u9012\u589e\u529f\u80fd\u5141\u8bb8\u4f60\u6309\u987a\u5e8f\u9012\u589e PWM \u901a\u9053\u5bc4\u5b58\u5668\u7684\u5730\u5740\u3002\u901a\u8fc7\u914d\u7f6e MODE1 \u5bc4\u5b58\u5668\u4e2d\u7684 AI\uff08Auto-Increment\uff09\u4f4d\uff0c\u53ef\u4ee5\u63a7\u5236\u662f\u5426\u542f\u7528\u8fd9\u4e00\u529f\u80fd\u3002<\/p>\n\n\n\n<p>\u5728 PCA9685 \u6a21\u5757\u4e2d\uff0cMODE1 \u5bc4\u5b58\u5668\u7684 AI \u4f4d\u662f\u7b2c 5 \u4f4d\uff08\u4ece\u53f3\u6570\u7b2c 3 \u4f4d\uff09\u3002\u4ee5\u4e0b\u662f\u8be5\u4f4d\u7684\u542b\u4e49\uff1a<\/p>\n\n\n\n<p>Bit 2 (AI):<br>0: \u7981\u7528\u81ea\u52a8\u9012\u589e\u529f\u80fd\u3002<br>1: \u542f\u7528\u81ea\u52a8\u9012\u589e\u529f\u80fd\u3002<br>\u5982\u679c\u542f\u7528\u4e86\u81ea\u52a8\u9012\u589e\u529f\u80fd\uff0c\u5199\u5165 PWM \u901a\u9053\u5bc4\u5b58\u5668\u65f6\uff0cPCA9685 \u5c06\u81ea\u52a8\u9012\u589e\u5230\u4e0b\u4e00\u4e2a PWM \u901a\u9053\u5bc4\u5b58\u5668\u7684\u5730\u5740\u3002\u8fd9\u5bf9\u4e8e\u4f9d\u6b21\u8bbe\u7f6e\u591a\u4e2a PWM \u901a\u9053\u975e\u5e38\u65b9\u4fbf\uff0c\u800c\u4e0d\u5fc5\u6bcf\u6b21\u90fd\u624b\u52a8\u6307\u5b9a\u5730\u5740\u3002<\/p>\n\n\n\n<p>\u5728\u521d\u59cb\u5316 PCA9685 \u6a21\u5757\u65f6\uff0c\u5982\u679c\u4f60\u60f3\u4f7f\u7528\u81ea\u52a8\u9012\u589e\u529f\u80fd\uff0c\u53ef\u4ee5\u5c06 MODE1 \u5bc4\u5b58\u5668\u7684 AI \u4f4d\u8bbe\u7f6e\u4e3a 1\u3002\u5728\u793a\u4f8b\u4ee3\u7801\u4e2d\uff0c\u8fd9\u662f\u5728\u8bbe\u7f6e\u9884\u5206\u9891\u5668\u4e4b\u524d\u8fdb\u5165\u7761\u7720\u6a21\u5f0f\u4e4b\u540e\u7684\u64cd\u4f5c\uff1a<\/p>\n\n\n\n<p><strong>\u53c2\u6570#define PRESCALE 0xFE\u542b\u4e49\uff1a<\/strong><\/p>\n\n\n\n<p>\u5728PCA9685\u6a21\u5757\u4e2d\uff0c<code>PRESCALE<\/code> \u5bc4\u5b58\u5668\u7528\u4e8e\u8bbe\u7f6e\u65f6\u949f\u9884\u5206\u9891\u5668\u7684\u503c\uff0c\u4ece\u800c\u5f71\u54cdPWM\u8f93\u51fa\u7684\u9891\u7387\u3002<code>PRESCALE<\/code> \u5bc4\u5b58\u5668\u7684\u5730\u5740\u662f <code>0xFE<\/code>\u3002<\/p>\n\n\n\n<p>\u5177\u4f53\u6765\u8bf4\uff0c\u65f6\u949f\u9891\u7387\u662f\u901a\u8fc7\u4ee5\u4e0b\u516c\u5f0f\u8ba1\u7b97\u7684\uff1a<\/p>\n\n\n\n<p>Clock\u00a0frequency=Oscillator\u00a0frequency\/(4096\u00d7(prescale\u00a0value+1))<\/p>\n\n\n\n<p>\u5176\u4e2d\uff1a<\/p>\n\n\n\n<ul><li>Oscillator frequency \u662f PCA9685 \u5185\u90e8\u632f\u8361\u5668\u7684\u9891\u7387\uff0c\u901a\u5e38\u4e3a 25MHz\u3002<\/li><li>Prescale value \u662f <code>PRESCALE<\/code> \u5bc4\u5b58\u5668\u7684\u503c\u3002<\/li><\/ul>\n\n\n\n<p>\u901a\u8fc7\u8c03\u6574 <code>PRESCALE<\/code> \u5bc4\u5b58\u5668\u7684\u503c\uff0c\u4f60\u53ef\u4ee5\u6539\u53d8\u65f6\u949f\u9891\u7387\uff0c\u4ece\u800c\u5f71\u54cd PWM \u8f93\u51fa\u7684\u9891\u7387\u3002\u5728\u793a\u4f8b\u4ee3\u7801\u4e2d\uff0c\u65f6\u949f\u9891\u7387\u88ab\u8bbe\u7f6e\u4e3a 50\u2009Hz50Hz\uff0c\u5bf9\u5e94\u7684 <code>PRESCALE<\/code> \u503c\u901a\u8fc7\u4ee5\u4e0b\u8ba1\u7b97\u5f97\u5230\uff1a<\/p>\n\n\n\n<p>prescale\u00a0value= Oscillator\u00a0frequency\/(4096\u00d7desired\u00a0PWM\u00a0frequency)\u22121<\/p>\n\n\n\n<p>\u5c06 <code>PRESCALE<\/code> \u8bbe\u7f6e\u4e3a\u8ba1\u7b97\u5f97\u5230\u7684\u503c\uff0c\u5c31\u53ef\u4ee5\u4f7f PCA9685 \u4ea7\u751f\u671f\u671b\u7684 PWM \u9891\u7387\u3002<\/p>\n\n\n\n<p>\u5728\u4ee3\u7801\u4e2d\uff0c\u6709\u4ee5\u4e0b\u884c\u7528\u4e8e\u8bbe\u7f6e <code>PRESCALE<\/code> \u5bc4\u5b58\u5668\u7684\u503c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wiringPiI2CWriteReg8(fd, PRESCALE, (prescaleval &amp; 0xFF)); \/\/ Set the prescaler\r\n<\/code><\/pre>\n\n\n\n<p>\u5176\u4e2d <code>(prescaleval &amp; 0xFF)<\/code> \u786e\u4fdd\u53ea\u6709\u4f4e8\u4f4d\u7684\u503c\u88ab\u5199\u5165\u5bc4\u5b58\u5668\uff0c\u56e0\u4e3a <code>PRESCALE<\/code> \u5bc4\u5b58\u5668\u53ea\u5360\u4e00\u4e2a\u5b57\u8282\u3002<\/p>\n\n\n\n<p><strong>\u4fee\u6539\u8fd0\u52a8\u6a21\u5f0f\u4e3a\u53cd\u590d\u6446\u52a8\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while (1) {\r\n    \/\/ Move servo on channel 0 from 0 to 180 degrees\r\n    for (int degree = 0; degree &lt;= 180; degree++) {\r\n        moveServo(fd, 0, degree);\r\n        usleep(10000); \/\/ Small delay between steps, adjust as needed\r\n    }\r\n\r\n    \/\/ Move servo on channel 0 from 180 to 0 degrees\r\n    for (int degree = 180; degree >= 0; degree--) {\r\n        moveServo(fd, 0, degree);\r\n        usleep(10000); \/\/ Small delay between steps, adjust as needed\r\n    }\r\n\r\n    \/\/ Move servo on channel 1 from 0 to 180 degrees\r\n    for (int degree = 0; degree &lt;= 180; degree++) {\r\n        moveServo(fd, 1, degree);\r\n        usleep(10000); \/\/ Small delay between steps, adjust as needed\r\n    }\r\n\r\n    \/\/ Move servo on channel 1 from 180 to 0 degrees\r\n    for (int degree = 180; degree >= 0; degree--) {\r\n        moveServo(fd, 1, degree);\r\n        usleep(10000); \/\/ Small delay between steps, adjust as needed\r\n    }\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u914d\u7f6e\u8be6\u60c5\uff1a \u6811\u8393\u6d3e4b\u63a7\u5236pca&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":23,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[19,20,21],"_links":{"self":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts\/42"}],"collection":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=42"}],"version-history":[{"count":1,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts\/42\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/posts\/42\/revisions\/44"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=\/wp\/v2\/media\/23"}],"wp:attachment":[{"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ikaros.love\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}