{"id":40680,"date":"2021-02-20T14:53:55","date_gmt":"2021-02-20T06:53:55","guid":{"rendered":"\/blog\/?p=40680"},"modified":"2021-02-20T14:53:58","modified_gmt":"2021-02-20T06:53:58","slug":"make-a-universal-arduino-ir-remote-with-seeeduino-xiao","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/","title":{"rendered":"Make a Universal Arduino IR Remote with Seeeduino XIAO!"},"content":{"rendered":"\n<p>Make your very own universal Arduino IR Remote with Seeeduino XIAO! This is a simple project that will allow you to create an infrared (IR) remote to control any appliance with an IR receiver in your house, such as your TV or music player.<\/p>\n\n\n\n<p>Follow today\u2019s tutorial for a step-by-step guide on how to build this project for yourself!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1030\" height=\"601\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1030x601.png\" alt=\"\" class=\"wp-image-40708\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1030x601.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-300x175.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-768x448.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1536x896.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-2048x1195.png 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1024x597.png 1024w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Building with Seeeduino XIAO &amp; Grove<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To tackle this project, we can make use of the Seeeduino XIAO and it&#8217;s Seeeduino XIAO Expansion Board!<\/p>\n\n\n\n<p>The expansion board features convenient Grove connectors which we can use to plug-and-play with compatible Grove modules without soldering or messy wiring. The pinout of the Seeeduino XIAO&#8217;s expansion board is shown below. As we can see, it packs a great variety of connectors and even has an onboard LED display!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/02\/pinpinpin4-1030x1030.jpg\" alt=\"\" class=\"wp-image-40682\" width=\"750\" height=\"860\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Things You&#8217;ll Need:<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Household appliance with an IR receiver that you want to control<\/li><li>The IR remote for that household appliance<\/li><\/ul>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Parts You&#8217;ll Need:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html\">Seeeduino XIAO<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-XIAO-Expansion-board-p-4746.html\">Seeeduino XIAO Expansion Board<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Grove-Infrared-Emitter.html\">Grove Infrared Emitter<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Grove-Infrared-Receiver.html\">Grove Infrared Receiver<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Grove-12-Channel-Capacitive-Touch-Keypad-ATtiny1616-p-4068.html\">Grove 12-Channel Capacitive Touch Keypad<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is \u201cInfrared\u201d?<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Infrared light is similar to the light that we see all of us, except it has a different frequency and wavelength. Since it lies outside the visible light spectrum, it\u2019s invisible to humans and great for achieving discreet wireless transmission!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/02\/Arduino-IR-Tutorial-Electromagnetic-Spectrum-Diagram-1024x478-1.png\" alt=\"\" class=\"wp-image-40684\" width=\"700\" height=\"419\" \/><figcaption>Source: Circuit Basics<\/figcaption><\/figure><\/div>\n\n\n\n<p>However, because infrared is a type of light, it will require a clear line between the transmitter and the receiver for communication to work. This means that unlike BLE or WiFi, our IR signals cannot pass through walls or other opaque materials.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How does Infrared Communication work?<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Infrared communication is achieved by transmitting a pattern of infrared light from an infrared emitter to an infrared receiver.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-1030x291.png\" alt=\"\" class=\"wp-image-40695\" width=\"900\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-1030x291.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-300x85.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-768x217.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-1536x434.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-2048x579.png 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-25-2-1024x289.png 1024w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure><\/div>\n\n\n\n<p>Infrared signals consist of a series of modulated pulses of light waves with \u201cHIGH\u201d and \u201cLOW\u201d states. In IR communication, the specific pattern of HIGHs and LOWs are used to create the \u2018message\u2019 that we want to send, similar to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Morse_code\">morse code<\/a>. Infrared signals typically have a header to mark the beginning of the signal, such as a long mark followed by a space.<\/p>\n\n\n\n<p>IR light is emitted by anything that produces heat, including the sun, our light bulbs, and us! In order to tackle the issue of IR signal noise, this series of light pulses are only transmitted at a specific frequency. For most transmitters, this frequency is defined to be 38 kHz, since this frequency of IR light is rarely found in nature and thus distinguishable from noise. IR receivers usually equipped with a filter to only receive 38kHz signals.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>IR Communication: Transmission Protocols<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Because storing the precise timing of the entire signal as 16 bit integers takes up too much memory, IR signals are usually stored as binary numbers of up to 32 bits. At transmission, an IR emitter converts this binary number into the actual IR signal, whereas on the other hand, an IR receiver will decode the received IR signal into the corresponding binary number.<\/p>\n\n\n\n<p>The pattern through which the IR signal is converted to and from binary is known as the transmission protocols. Some of the more common protocols include Sony, NEC, Matsushita, and RC5.<\/p>\n\n\n\n<p>In the NEC protocol, for example, logical \u20181\u2019 starts with a 562.5 \u00b5s long HIGH pulse of 38 kHz, followed by a 1687.5 \u00b5s long LOW pulse. Meanwhile, logical \u20180\u2019 is transmitted with a 562.5 \u00b5s long HIGH pulse followed by a 562.5 \u00b5s long LOW pulse:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/MfOsnRfBlJ1FFwRkcyO47prB6ZjGZFIeR-zREfUUt_fpiCUAUh4msrknL_RkLGmnVWRh2VkUKGcvoPJSL5tJdGJeXyl1GMzeyWdYjT6JADE9nsVOI8sN5qst7tAjCCuFW9FUsdlz\" alt=\"Arduino IR Remote Receiver Tutorial - NEC Protocol\" width=\"750\" height=\"353\" \/><figcaption><strong>Source: Circuit Basics<\/strong><\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>IR Communication: Hexadecimal Codes<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Each button we press on our IR remote corresponds to a unique hexadecimal code. This is what is converted into the IR signal and transmitted from our remote to the receiver on the target device.<\/p>\n\n\n\n<p>Since we are building our very own IR remote today, we need to obtain and store the specific IR codes used to control our target device in our program. This information may be included in the datasheet that comes with the device that you want to control.<\/p>\n\n\n\n<p>If not, however, we can simply use an IR Receiver with our Seeeduino XIAO to read the IR codes for our remote controls directly.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Universal Arduino IR Remote: <strong>Hardware<\/strong> Setup<\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>First, set up your Seeeduino XIAO, the expansion board, and its Grove modules according to the schematic below. If this is your first time working with the Seeeduino XIAO, I highly recommend you first quickly go through the <a href=\"https:\/\/wiki.seeedstudio.com\/Seeeduino-XIAO\/#getting-started\">getting started guide on the Seeed Wiki<\/a>.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/69YEOSLgcBfhFP0-RtWIhKST5qqCAkA-GXpcSav7lQfFKYYk6ONonXpdxnkVkC_UxAt6mEwn2rG6qN_te7zsQOW9AoDg26mtg69H5IyTAwU6XSiGZig1Dhxyen6qZ9wUMRC9P7IA\" alt=\"\" width=\"1000\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Next, connect your Seeeduino XIAO to your PC via the USB Type-C cable and that\u2019s all we have to do for the hardware! Thanks to the Grove Ecosystem, there\u2019s really no need to fuss over the hardware wiring for our projects any longer. Simply plug, program, and play!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Installing the Required Libraries<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Today\u2019s tutorial will make use of the following libraries, which you can download from their respective repositories:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/Seeed-Studio\/Seeed_Arduino_IR\">Seeed Arduino IR library<\/a><\/li><li><a href=\"https:\/\/github.com\/olikraus\/U8g2_Arduino\">u8g2 OLED library<\/a><\/li><\/ul>\n\n\n\n<p>If you are new to installing Arduino libraries, please follow the <a href=\"https:\/\/wiki.seeedstudio.com\/How_to_install_Arduino_Library\/\">detailed visual guide on the Seeed Wiki<\/a>.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Finding the IR Codes for our Target Device<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The first official step for our project is to determine the codes that we should be sending to our target device. Fortunately, the Seeed Arduino IR library that we just installed already comes with code to help us do that!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Setting Up Our Seeeduino XIAO as an IR Signal Decoder<\/strong><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>In your Arduino IDE, navigate to File &gt; Examples &gt; Seeed Arduino IR, and open the comboDump example. The Arduino code should open in a new window. What you see before you is a short program that will allow your Seeeduino XIAO to receive IR signals that you transmit to it, decode them and display them in your serial monitor.<\/p>\n\n\n\n<p>Before we use the code, we have to edit the pin for our IR receiver. Edit the IRrecv declaration line to the pin number that your IR receiver is attached to. For us, since we are using D5, we will use 5.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;IRLibRecv.h&gt;\nIRrecv myReceiver(5);  \/\/pin number for the receiver &lt;- Change this to our pin number<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Then, change the parameter in the myDecoder.dumpResults() function to false. This will reduce the amount of detail that is displayed to us by the IR signal decode, since we won\u2019t need that today.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>myDecoder.dumpResults(false);<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Finally, upload the code to your Seeeduino XIAO with the button shown below.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/ES-eRJxy_t8OcEqGYIuVS1Q9bDS19KyRMIhBjgQQCku4LwU51RNtMcSs75UG0Wed1JE0uBJVJRNu2QCT0epWn8iOR3vICnk3sX4FJF_AipQtODpNaWw_-rKO_ozwyF2_SanVIb19\" alt=\"\" width=\"560\" height=\"162\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Then, open the Arduino Serial Monitor with the magnifying glass button on the right. If all goes well, you should see &#8220;Ready to receive IR signals&#8221; printed out. This indicates that our serial connection between the Seeeduino XIAO and the computer has been established.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Getting the IR Codes from our Base Remote<\/strong><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>By this point, I hope you\u2019ve decided on a device that you want your universal Arduino IR remote to control. Whatever it is, grab it\u2019s original remote &#8211; For example, if you want to control your music player, you will need to use the music player\u2019s remote to get the IR codes.<\/p>\n\n\n\n<p>With the program on your Seeeduino XIAO still running and the Serial Monitor open, press the button that you want to get the IR code for on the remote. Make sure to direct it straight at your IR receiver for the best results!<\/p>\n\n\n\n<p>On your Serial Monitor, the following may be printed out:<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>Decoded NEC(1): Value:FD807F (32 bits)<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The letters that come immediately after \u201cDecoded\u201d indicate the protocol used. In the example above, the protocol is NEC. The \u201cValue\u201d is the hex code of the IR signal received by our receiver, which is \u201cFD807F\u201d in this case.<\/p>\n\n\n\n<p>In essence, if this was the result from us pressing the power button on our music player\u2019s remote, then this is the same hex code that we must transmit on our Seeeduino XIAO IR remote to turn our music player on. Quite straightforward, right?<\/p>\n\n\n\n<p>Now, all you have to do is to repeat the steps until you have the hex codes for all the controls that you want to have on your Seeeduino remote.<\/p>\n\n\n\n<p>This is <strong>an example<\/strong> of what you should end up with. Your own codes will almost certainly be different!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Power<\/td><td>40BF12ED<\/td><\/tr><tr><td>Play \/ Pause<\/td><td>40BFF20D<\/td><\/tr><tr><td>Volume Up<\/td><td>40BFA05F<\/td><\/tr><tr><td>Volume Down<\/td><td>40BFF00F<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Note:<\/strong> For the best results, ensure that there are no other IR signals being actively sent around your room. Otherwise, the hex codes obtained may not be accurate.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Writing the Remote Program<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Now that we\u2019ve collected the hex codes that we want to transmit for each button, we will have to write our Arduino code for our Seeeduino XIAO. The basic idea is that upon each button press, the Seeeduino XIAO will transmit a given IR signal based on a predefined hex code.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>First, copy the entire code below into a new Arduino sketch.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Set Up Display Libraries\n#include &lt;Arduino.h&gt;\n#include &lt;U8x8lib.h&gt;\n \nU8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(\/* reset=*\/ U8X8_PIN_NONE);\n\n\/\/ Function for printing callbacks \nvoid displayScreen(String message) {\n    u8x8.clearDisplay();\n    u8x8.setFont(u8x8_font_chroma48medium8_r);\n    u8x8.setCursor(0, 0);\n    u8x8.print(message);\n} \n\n\/\/ Set Up Key Control Libraries\n#include \"SoftwareSerial.h\"\n#if defined(ARDUINO_ARCH_AVR)\n#define SERIAL Serial\nSoftwareSerial mySerial(2,3);\n#define TRANS_SERIAL mySerial\n#elif defined(ARDUINO_ARCH_SAMD)\n#define SERIAL SerialUSB\n#define TRANS_SERIAL Serial\n#else\n#endif\n\n\n\/\/ Set Up IR Libraries\n#include &lt;IRLibSendBase.h&gt;    \/\/ First include the send base\n\/\/Now include only the protocols you wish to actually use.\n\/\/The lowest numbered protocol should be first but remainder \n\/\/can be any order.\n#include &lt;IRLib_P01_NEC.h&gt;\n#include &lt;IRLib_P02_Sony.h&gt;   \n#include &lt;IRLibCombo.h&gt;     \/\/ After all protocols, include this\n\/\/ All of the above automatically creates a universal sending\n\/\/ class called \"IRsend\" containing only the protocols you want.\n\n\/\/ Now declare an instance of that sender.\nIRsend mySender;\n\n#define IR_SEND_PWM_PIN D0\n\nvoid setup() {\n    \/\/ Setup Display\n    u8x8.begin();\n    u8x8.setFlipMode(1);\n\n    \/\/ Setup UART Serial for Buttons\n    TRANS_SERIAL.begin(9600);\n\n}\n\nvoid loop() {\n    sendControls();\n}\n\nvoid sendControls() {\n    while(TRANS_SERIAL.available()) {\n        uint8_t data = TRANS_SERIAL.read();\n        switch(data) {\n            case 0xE1 :\n                mySender.send(NEC, 0x40bf12ed, 20);\n                displayScreen(\"Power\");\n                break;\n            case 0xE2 :\n                mySender.send(NEC, 0x40bff20d, 20);\n                displayScreen(\"Play\/Pause\");\n                break;\n            case 0xE3 :\n                mySender.send(NEC, 0x40bfa05f, 20);\n                displayScreen(\"Volume Up\");\n                break;\n            case 0xE4 :\n                mySender.send(NEC, 0x40bff00f, 20);\n                displayScreen(\"Volume Down\");\n                break;\n            default:\n                break;\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>If you connected your IR transmitter differently from the previously shown schematic, you\u2019ll have to edit your IR emitter&#8217;s pin declaration.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#define IR_SEND_PWM_PIN D0<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Then, to edit this code to work on your Seeduino XIAO for your target device, you will have to edit the sendControls() function.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>void sendControls() {\n    while(TRANS_SERIAL.available()) {\n        uint8_t data = TRANS_SERIAL.read();\n        switch(data) {\n            case 0xE1 :\n                My_Sender.send(NEC, 0x40bf12ed, 20);\n                displayScreen(\"Power\");\n                break;\n            case 0xE2 :\n                My_Sender.send(NEC, 0x40bff20d, 20);\n                displayScreen(\"Play\/Pause\");\n                break;\n            case 0xE3 :\n                My_Sender.send(NEC, 0x40bfa05f, 20);\n                displayScreen(\"Volume Up\");\n                break;\n            case 0xE4 :\n                My_Sender.send(NEC, 0x40bff00f, 20);\n                displayScreen(\"Volume Down\");\n                break;\n            default:\n                break;\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Each case represents the behaviour that we want our remote to have for each button press. 0xE1 represents button number 1 on our Grove 12-Channel Capacitive Touch Keypad, 0xE2 for 2, 0xE3 for 3 and so on.<\/p>\n\n\n\n<p>Let\u2019s take the first case as an example:<\/p>\n\n\n\n<p>When the \u201c1\u201d button on our keypad is pressed, we will trigger case 0xE1. First, the corresponding IR signal is sent!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>mySender.send(NEC, 0x40bf12ed, 20);<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The mySender.send() function takes in 3 parameters: Protocol, Command, No. of Bits. This protocol should correspond to the one you\u2019ve found earlier while decoding your original remote\u2019s IR codes.<\/p>\n\n\n\n<p>You\u2019ll also notice that our hex codes have an additional \u201c0x\u201d appended at the head. This is for Arduino to recognise that the code is in hexadecimal format. Finally, the final input refers to the number of bits that a protocol uses. In general, 20 is okay and you can leave it as is.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Flash the Final Program!<\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Once you&#8217;re done editing the code, remember to flash the final product to your Seeeduino XIAO! You&#8217;ll now have a working universal Arduino IR remote in your hands. If you find that your remote doesn&#8217;t control your target devices as intended, you may have to repeat the decoding process to obtain the hex codes, taking care to avoid external IR noise this time.<\/p>\n\n\n\n<p>In this example, I\u2019ve only used 4 of the 12 keys on the touchpad, so you can definitely add more commands to your remote! What\u2019s interesting is that you could add different hex codes for controlling different devices into your program. That way, your Seeeduino XIAO IR remote can be used to control multiple devices!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Summary<\/strong><\/h2>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>And that wraps up our tutorial on how to create a universal Arduino IR remote with Seeeduino XIAO! You\u2019ll find that the Seeeduino XIAO, even with its expansion board, still provides a great form factor for small electronics like this IR remote project. In addition, the expansion board offers a JST 2.0 connector, so you can add a <a href=\"https:\/\/www.seeedstudio.com\/Polymer-Lithium-Ion-Battery-2200mAh-3-7V-p-1709.html\">3.7V LiPo battery<\/a> to make this project mobile!<\/p>\n\n\n\n<p>What will you control with your brand new remote? Let us know in the comments!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>For more Seeeduino XIAO project ideas, check out the following links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.seeedstudio.com\/blog\/2020\/05\/08\/seeeduino-xiao-community-projects-collection-whats-your-next-project-idea-made-by-seeeeduino-xiao\/\">Seeeduino XIAO Resources Roundup<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/blog\/2020\/07\/20\/how-to-make-a-fruit-piano-on-seeeduino-xiaos-q-touch-function-m\/\">How to Make a Fruit Piano on Seeeduino XIAO\u2019s Q-Touch Function<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Also be sure to take a look at our <a href=\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/18\/seeeduino-xiao-2021-recap-update\/\">Seeeduino XIAO 2021 Recap and Update<\/a>!<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Make your very own universal Arduino IR Remote with Seeeduino XIAO! This is a simple<\/p>\n","protected":false},"author":3537,"featured_media":40708,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[2982,3682],"class_list":["post-40680","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-seeeduino-xiao","tag-seeeduino-xiao-projects"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Make a Universal Arduino IR Remote with Seeeduino XIAO! - Latest News from Seeed Studio<\/title>\n<meta name=\"description\" content=\"Follow our step by step tutorial with provided code to build a universal Arduino IR Remote with Seeeduino XIAO and the Grove Ecosystem!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Make a Universal Arduino IR Remote with Seeeduino XIAO! - Latest News from Seeed Studio\" \/>\n<meta property=\"og:description\" content=\"Follow our step by step tutorial with provided code to build a universal Arduino IR Remote with Seeeduino XIAO and the Grove Ecosystem!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-20T06:53:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-20T06:53:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3000\" \/>\n\t<meta property=\"og:image:height\" content=\"1750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jonathan Tan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Tan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/\",\"name\":\"Make a Universal Arduino IR Remote with Seeeduino XIAO! - Latest News from Seeed Studio\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png\",\"datePublished\":\"2021-02-20T06:53:55+00:00\",\"dateModified\":\"2021-02-20T06:53:58+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094\"},\"description\":\"Follow our step by step tutorial with provided code to build a universal Arduino IR Remote with Seeeduino XIAO and the Grove Ecosystem!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png\",\"width\":3000,\"height\":1750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Make a Universal Arduino IR Remote with Seeeduino XIAO!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/\",\"name\":\"Latest News from Seeed Studio\",\"description\":\"Emerging IoT, AI and Autonomous Applications on the Edge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094\",\"name\":\"Jonathan Tan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g\",\"caption\":\"Jonathan Tan\"},\"url\":\"https:\/\/www.seeedstudio.com\/blog\/author\/jonathan-tan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Make a Universal Arduino IR Remote with Seeeduino XIAO! - Latest News from Seeed Studio","description":"Follow our step by step tutorial with provided code to build a universal Arduino IR Remote with Seeeduino XIAO and the Grove Ecosystem!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/","og_locale":"en_US","og_type":"article","og_title":"Make a Universal Arduino IR Remote with Seeeduino XIAO! - Latest News from Seeed Studio","og_description":"Follow our step by step tutorial with provided code to build a universal Arduino IR Remote with Seeeduino XIAO and the Grove Ecosystem!","og_url":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2021-02-20T06:53:55+00:00","article_modified_time":"2021-02-20T06:53:58+00:00","og_image":[{"width":3000,"height":1750,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png","type":"image\/png"}],"author":"Jonathan Tan","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jonathan Tan","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/","url":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/","name":"Make a Universal Arduino IR Remote with Seeeduino XIAO! - Latest News from Seeed Studio","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png","datePublished":"2021-02-20T06:53:55+00:00","dateModified":"2021-02-20T06:53:58+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094"},"description":"Follow our step by step tutorial with provided code to build a universal Arduino IR Remote with Seeeduino XIAO and the Grove Ecosystem!","breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png","width":3000,"height":1750},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/20\/make-a-universal-arduino-ir-remote-with-seeeduino-xiao\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Make a Universal Arduino IR Remote with Seeeduino XIAO!"}]},{"@type":"WebSite","@id":"https:\/\/www.seeedstudio.com\/blog\/#website","url":"https:\/\/www.seeedstudio.com\/blog\/","name":"Latest News from Seeed Studio","description":"Emerging IoT, AI and Autonomous Applications on the Edge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094","name":"Jonathan Tan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g","caption":"Jonathan Tan"},"url":"https:\/\/www.seeedstudio.com\/blog\/author\/jonathan-tan\/"}]}},"modified_by":"Jonathan Tan","views":7705,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png",3000,1750,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-80x80.png",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-300x175.png",300,175,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-768x448.png",640,373,true],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1030x601.png",640,373,true],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1536x896.png",1536,896,true],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-2048x1195.png",2048,1195,true],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27.png",32,19,false],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1536x1020.png",1536,1020,true],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-936x897.png",936,897,true],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-1024x597.png",1024,597,true],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-720x380.png",720,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/02\/Copy-of-Clean-27-675x450.png",675,450,true]},"author_info":{"display_name":"Jonathan Tan","author_link":"https:\/\/www.seeedstudio.com\/blog\/author\/jonathan-tan\/"},"category_info":"<a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/news\/\" rel=\"category tag\">News<\/a>","tag_info":"News","comment_count":"0","_links":{"self":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/40680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/users\/3537"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=40680"}],"version-history":[{"count":23,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/40680\/revisions"}],"predecessor-version":[{"id":40871,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/40680\/revisions\/40871"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/40708"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=40680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=40680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=40680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}