{"id":1914,"date":"2020-05-07T08:21:52","date_gmt":"2020-05-07T08:21:52","guid":{"rendered":"https:\/\/www.sabulo.com\/sb\/?p=1914"},"modified":"2020-05-07T11:11:44","modified_gmt":"2020-05-07T11:11:44","slug":"the-donald-duck-hypnotizing-machine-with-iot","status":"publish","type":"post","link":"https:\/\/www.sabulo.com\/sb\/3d-printing-2\/the-donald-duck-hypnotizing-machine-with-iot\/","title":{"rendered":"The Donald Duck hypnotizing machine with IoT"},"content":{"rendered":"\n<p><em>Note &#8211; <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/HeikkiHietala\/esp32-motor-control-over-Internet\" target=\"_blank\">the full<\/a><a href=\"https:\/\/github.com\/HeikkiHietala\/esp32-motor-control-over-Internet\" target=\"_blank\" rel=\"noreferrer noopener\"> <\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/HeikkiHietala\/esp32-motor-control-over-Internet\" target=\"_blank\">code is available on my GitHub page<\/a>, so I will only illustrate portions of it here.<\/em><\/p>\n\n\n\n<p>There is a classic story by Carl Barks, in which Donald Duck comes into possession of a hypnotizing gun. As I seem to remember it, the nephews collected cereal labels or something to get that gizmo, and while they played around with it, Donald got hypnotized with it. Inevitably he would confiscate the thing and use it for his not-so-clever purposes. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"338\" src=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/akuroope.png?resize=825%2C338&#038;ssl=1\" alt=\"\" class=\"wp-image-1915\" srcset=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/akuroope.png?w=860&amp;ssl=1 860w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/akuroope.png?resize=300%2C123&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/akuroope.png?resize=768%2C314&amp;ssl=1 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><figcaption>The phrase &#8220;PIM &#8211; you&#8217;re hypnotized&#8221; is a classic in Finland, everyone knows it. See the disc with the helix &#8211; it will be recreated in Blender and 3D printed. Image (c) Sanomaprint  <\/figcaption><\/figure><\/div>\n\n\n\n<p>Why I happened to remember this is that I taught myself remote control of an ESP32 and a motor, and had to figure out some method of using it. This system has a user interface on my web server, written in PHP, and the device goes over there twice a second to see what direction to spin the disc, and at what speed. I really cannot think of a simpler example for this, so let&#8217;s get started.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"487\" src=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donaldIoT.png?resize=825%2C487&#038;ssl=1\" alt=\"\" class=\"wp-image-1918\" srcset=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donaldIoT.png?w=938&amp;ssl=1 938w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donaldIoT.png?resize=300%2C177&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donaldIoT.png?resize=768%2C454&amp;ssl=1 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><figcaption>The evil contraption booting up<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">The L298H bridge<\/h3>\n\n\n\n<p>The L298H bridge is a self-contained device for running two motors, solenoids, or other such devices. You can also use a single Integrated Circuit, called L293D, if you wish, but this bridge is handy in the sense that it has connectors for all you want to hook up to it, unlike the L293D, which has to be soldered or embedded in a breadboard. You can see the L293D in action in this <a rel=\"noreferrer noopener\" href=\"https:\/\/www.sabulo.com\/sb\/esp32-development-board\/using-the-udp-protocol-with-an-esp32-and-android-studio-part-1\/\" target=\"_blank\">other 4 part  blog post that drives a motor and a servo with an Android app and UDP protocol.<\/a> It also has a very nice way of handling up to 12V of voltage, which is very useful for motor management &#8211; Arduinos and other such things can only deliver 5V and it&#8217;s not a good idea at all to drive motors directly. <\/p>\n\n\n\n<p>The complete set looks like this:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"796\" src=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/l298H-4tronix.jpg?resize=825%2C796&#038;ssl=1\" alt=\"\" class=\"wp-image-1916\" srcset=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/l298H-4tronix.jpg?w=1000&amp;ssl=1 1000w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/l298H-4tronix.jpg?resize=300%2C290&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/l298H-4tronix.jpg?resize=768%2C741&amp;ssl=1 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><figcaption>Image courtesy of 4tronix, Inc.<\/figcaption><\/figure><\/div>\n\n\n\n<p>The relevant parts are the VCC, GND and 5V connectors there. To the VCC connector, plug in 9V from battery or 12V from a power adapter. The 5V is output that goes into your ESP32 VIN pin. Make sure to share the ground connector among all devices you plug in here. The other two screw connectors are for Motor 1 and Motor 2. Plug in the wires here, it doesn&#8217;t matter which way initially, as you can always reverse the wires if the motors turn the wrong way from your point of view.<\/p>\n\n\n\n<p>The eight pins above the power management connectors are where the magic happens. You will be leading in three wires per motor from ESP32. One is ENA, short for Enable motor A, then IN1, IN2, IN3, and IN4, and ENB at the other end. There are also two 5V pins if you find them handier than the screw connector. Enable is needed to govern the power management and speed of the motor. IN1 and IN2 refer to the rotation direction of the motor, if one is HIGH and the other LOW, it turns one way, and reversed, the other. With both LOW you can be sure the motor won&#8217;t run at all.<\/p>\n\n\n\n<p>There are two LEDs in this system too. Their purpose is to indicate the state of the evil machine. When it is booting up, and the ESP32 is connecting to the Internet, the blue LED is on. When connection is made, the blue one is turned off and the green LED turned on. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Connection scheme<\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1235\" height=\"798\" src=\"https:\/\/i1.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-scheme.png?fit=825%2C533&amp;ssl=1\" alt=\"\" class=\"wp-image-1920\" srcset=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-scheme.png?w=1235&amp;ssl=1 1235w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-scheme.png?resize=300%2C194&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-scheme.png?resize=1024%2C662&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-scheme.png?resize=768%2C496&amp;ssl=1 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><figcaption>Connections for one motor. If two, hook up with a similar method. The Arduino Micro is merely a placeholder, as the Fritzing scheme tool does not have an ESP32 in it<\/figcaption><\/figure><\/div>\n\n\n\n<p>This image may help you understand how it&#8217;s connected, but this picture and seeing the code will show you the details.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"825\" height=\"835\" src=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-esp32-1.png?resize=825%2C835&#038;ssl=1\" alt=\"\" class=\"wp-image-1922\" srcset=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-esp32-1.png?w=829&amp;ssl=1 829w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-esp32-1.png?resize=296%2C300&amp;ssl=1 296w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/donald-esp32-1.png?resize=768%2C777&amp;ssl=1 768w\" sizes=\"auto, (max-width: 825px) 100vw, 825px\" \/><figcaption>ESP32, L298H, motor, and LEDS in a repurposed box &#8211; hence the mess.<\/figcaption><\/figure><\/div>\n\n\n\n<p>The battery is just out of the picture here. Its plus wire is led via the switch to the VCC connector of the L298H. Its ground is led to the GND connector. The ESP32 VIN pin is connected to the +5V pin of the bridge, and its ground is in the bridge ground. The LED grounds go to the other ground in the ESP32, and their positive pins into ESP32 pins 4 and 15, as shown in the code snippet below. The motor1pin1 and 2 go into the respective pins on the  bridge.  <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ Motor A\nint motor1Pin1 = 27;\nint motor1Pin2 = 26;\nint enable1Pin = 14;\nint SpeedVariable = 0;\nint mySwitch = 0;\nint myBootLed = 4; \/\/this led shows the machine is booting and connecting to Internet\nint myNetLed = 15; \/\/this led shows the machine is connected to Internet\n\nint driveValue = 0; \/\/speed\n\n\/\/ Setting PWM properties\nconst int freq = 30000;\nconst int pwmChannel = 0;\nconst int resolution = 8;\nint dutyCycle = 200;<\/pre>\n\n\n\n<p>The PWM (pulse width modulation) settings are related to the speed control. The driveValue is the speed at which the motor is to be turned. The actual speed control is done via changing the length of a pulse that is sent to the bridge via the ENA pin. The ESP32 has 16 PWM channels, so you can in theory run 16 LEDs or other devices that listen to such commands.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {<br>pinMode(motor1Pin1, OUTPUT);<br>pinMode(motor1Pin2, OUTPUT);<br>pinMode(enable1Pin, OUTPUT);<br>pinMode(myNetLed, OUTPUT);<br>pinMode(myBootLed, OUTPUT);<br>digitalWrite(myBootLed,HIGH);<br>\/\/ configure LED PWM functionalitites<br>ledcSetup(pwmChannel, freq, resolution);<br><br>\/\/ attach the channel to the GPIO to be controlled<br>ledcAttachPin(enable1Pin, pwmChannel);<\/pre>\n\n\n\n<p>Here the pins are set as output, and the enable1pin is set up to the power management. The actual turning of the motor is governed by a function called driveTrain (for historical purposes, this used to be a system for driving a LEGO train two ways):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void driveTrain(int mySpeed){\nUSE_SERIAL.println(mySpeed);\nif (mySpeed &lt; 0){ \ndigitalWrite(motor1Pin1, HIGH); \ndigitalWrite(motor1Pin2, LOW); \ndriveValue = map(abs(mySpeed),10, 100, 210, 240);\nledcWrite(pwmChannel, abs(driveValue)); \n} \nelse if (mySpeed > 0) {\ndigitalWrite(motor1Pin1, LOW);\ndigitalWrite(motor1Pin2, HIGH);\ndriveValue = map(abs(mySpeed),10, 100, 210, 240);\nledcWrite(pwmChannel, abs(driveValue));\n}\nelse {\ndigitalWrite(motor1Pin1, LOW);\ndigitalWrite(motor1Pin2, LOW);\n}\nreturn;\n}<\/pre>\n\n\n\n<p>Note the use of the sign of the speed value: if less than 0, let&#8217;s turn motor1pin1 high and the other low. If larger than 0, the other way round, and if exactly 0, set both low to ensure the motor doesn&#8217;t run. The actual speed is derived using the <strong>map()<\/strong> function. Given the value to map, its low and high values, and the new mapped low and high values, this function gives you the value needed to use in the <strong>ledcWrite()<\/strong> function, thus ready to be sent to the bridge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Web interface<\/h3>\n\n\n\n<p>The Web interface lives on my server. To use such an interface, your server must be able to run PHP, and since that is a feature on my hosting provider, it&#8217;s easy. You can find free PHP hosting platforms everywhere, but they have ads or other methods of making money. <\/p>\n\n\n\n<p>This is how the user interface looks:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"714\" height=\"321\" src=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/speed-control.png?resize=714%2C321&#038;ssl=1\" alt=\"\" class=\"wp-image-1923\" srcset=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/speed-control.png?w=714&amp;ssl=1 714w, https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/uploads\/2020\/05\/speed-control.png?resize=300%2C135&amp;ssl=1 300w\" sizes=\"auto, (max-width: 714px) 100vw, 714px\" \/><figcaption>Three states of the user interface<\/figcaption><\/figure><\/div>\n\n\n\n<p>The Github page has the source code for this simple interface. It saves the desired speed in a text file, which is then read by the ESp32 twice a second, or at whatever frequency you want.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Installation instructions<\/h3>\n\n\n\n<p>To get yourself this setup, do the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Go to <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/HeikkiHietala\/esp32-motor-control-over-Internet\" target=\"_blank\">my Github page<\/a><\/li><li>Use the Clone or Download button and download a ZIP file<\/li><li>Unzip it into a directory of your choice<\/li><li>Copy the files from the PHP folder onto your webserver, for example into a folder called <strong>speed<\/strong><\/li><li>Edit the INO file so that it has your own WLAN data<\/li><li>Flash your ESP32 with the edited INO file. <\/li><\/ul>\n\n\n\n<p>Now when you go to http:\/\/&lt;yourserver.com&gt;\/speed, you see the interface. Turn on your ESP32. After a while, the boot led goes off and the Internet led turns on. Now you can use the user interface to turn the motor in either direction, as illustrated in this video.<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"The Donald Duck hypnotizing machine on IoT\" width=\"825\" height=\"464\" src=\"https:\/\/www.youtube.com\/embed\/sizY2kcHO2Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption>Be careful not to get hypnotized.<\/figcaption><\/figure>\n<div class=\"pvc_clear\"><\/div><p id=\"pvc_stats_1914\" class=\"pvc_stats all  \" data-element-id=\"1914\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/i0.wp.com\/www.sabulo.com\/sb\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif?resize=16%2C16&#038;ssl=1\" border=0 \/><\/p><div class=\"pvc_clear\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Note &#8211; the full code is available on my GitHub page, so I will only illustrate portions of it here. &hellip; <a href=\"https:\/\/www.sabulo.com\/sb\/3d-printing-2\/the-donald-duck-hypnotizing-machine-with-iot\/\" class=\"more-link\">More <span class=\"screen-reader-text\">The Donald Duck hypnotizing machine with IoT<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_1914\" class=\"pvc_stats all  \" data-element-id=\"1914\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.sabulo.com\/sb\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"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":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[4,64,74,93,94],"tags":[],"class_list":["post-1914","post","type-post","status-publish","format-standard","hentry","category-3d-printing-2","category-esp32-development-board","category-internet-of-things-iot","category-iot-web-interface","category-l298h-bridge"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6vhqE-uS","_links":{"self":[{"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/posts\/1914","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/comments?post=1914"}],"version-history":[{"count":6,"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/posts\/1914\/revisions"}],"predecessor-version":[{"id":1927,"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/posts\/1914\/revisions\/1927"}],"wp:attachment":[{"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/media?parent=1914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/categories?post=1914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sabulo.com\/sb\/wp-json\/wp\/v2\/tags?post=1914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}