{"id":39968,"date":"2021-01-25T16:27:18","date_gmt":"2021-01-25T08:27:18","guid":{"rendered":"\/blog\/?p=39968"},"modified":"2021-09-29T16:25:15","modified_gmt":"2021-09-29T08:25:15","slug":"programmable-io-with-raspberry-pi-pico","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/","title":{"rendered":"Programmable I\/O with Raspberry Pi Pico"},"content":{"rendered":"\n<p>The Raspberry Pi Foundation has just announced the brand new <a href=\"https:\/\/www.raspberrypi.org\/documentation\/pico\/getting-started\/\">Raspberry Pi Pico<\/a> microcontroller board, with programmable I\/O as one of its highlight features. Read our full coverage on the Raspberry Pi Pico release at <a href=\"https:\/\/blog.seeedstudio.com\/blog\/2021\/01\/21\/raspberry-pi-pico-the-first-microcontroller-released-by-raspberry-pi-foundation-based-on-the-new-rp2040-mcu\/\">Raspberry Pi Pico, the first microcontroller released by Raspberry Pi Foundation, based on the new RP2040 MCU<\/a>.<\/p>\n\n\n\n<p>In this article, we will focus on the programmable I\/O feature on the Raspberry Pi Pico. We\u2019ll cover what it is, how it works, and what it can be used for.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/mhaAAXpj5lrlblNReRQkQV1punH_Z9KHfMr6fgrA0BQ670jAWxy-Qc0qOmUZarBob9W-kOQG0QqG_EkDmTq8kvSMPc5m_oXTwMfJANdovNWCRSLgKEizJB2P1iLUJ34FUIOZCpcA\" alt=\"\" width=\"640\" height=\"360\"\/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Raspberry Pi Pico and Programmable I\/O<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Programmable I\/O or PIO stands for \u201cprogrammable input-output\u201d. Programmable I\/O refers to input-output pins which can process data ingoing or outgoing data without requiring a CPU.<\/p>\n\n\n\n<p>The Raspberry Pi Pico features 8 Raspberry Pi Programmable I\/O (PIO) state machines. State machines are essentially simple processors that can be programmed with a special form of assembly language to separately handle data.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What can Programmable I\/O be used for?<\/strong><\/h3>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Microcontroller units (MCUs) like the Raspberry Pi Pico are small and perfect for many embedded electronics purposes. However, because they are small, they also have limited processing power and memory. Hence, resource management is very important for microcontrollers.<\/p>\n\n\n\n<p>The programmable I\/O on any MCU becomes extremely useful when we have a process that requires continuous instructions. For example, fading an LED, while a simple task, requires constant input to vary the PWM (pulse width modulation) duty cycle gradually. Yet, this can also be done easily with a state machine!<\/p>\n\n\n\n<p>Thus, programmable I\/O can transfer the burden of simple but resource-intensive tasks from the CPU to the state machine. That way, we can make better use of our microcontroller\u2019s main processing power and resources to improve our devices!<\/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>State Machine Infrastructure<\/strong><\/h3>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Each state machine on the Raspberry Pi Pico has 2 First-In-First-Out (FIFO) structures: One for incoming data, and another for outgoing data. In FIFO structures, the data that is written in first will then be the first to be read out. FIFO structures are also known as queues, since they work similarly to a queue of people.<\/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\/01\/Copy-of-Clean-6-1030x442.png\" alt=\"\" class=\"wp-image-39974\" width=\"800\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1030x442.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-300x129.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-768x329.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1536x659.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-2048x878.png 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1024x439.png 1024w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure><\/div>\n\n\n\n<p>The input FIFO is also known as the RX FIFO, since it receives data to be read by the state machine. On the other hand, the output FIFO is also known as the TX FIFO, since it holds data to be transmitted out.<\/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>Programmable I\/O Benefits<\/strong><\/h3>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>When we want to send data to a pin via a state machine, we first push the data to the FIFO input. When the state machine is ready to process the data, it will pull it from the queue and perform the instruction.<\/p>\n\n\n\n<p>The key benefit here is that we can decouple the need for the central CPU from the execution of the instruction, since it has been \u201cdelegated\u201d to the PIO\u2019s state machine.<\/p>\n\n\n\n<p>Although each FIFO can only hold up to four words of data (each of 32 bits), we can link them with direct memory access (DMA) to transmit larger amounts. This way, we can once again free up the CPU from having to \u201cbabysit\u201d the process.<\/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>Shift &amp; Scratch Registers<\/strong><\/h3>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The FIFOs are linked to the state machine via the input and output shift registers (ISR \/ OSR).<\/p>\n\n\n\n<p>Separately, each state machine also has two scratch registers called X and Y. Scratch registers are for storing temporary data. Think of them as variables for use when programming our PIO.<\/p>\n\n\n\n<p>Adjusting our previous schematic, the complete structure becomes as follows. Cool!<\/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\/01\/Copy-of-Clean-6-1-1030x512.png\" alt=\"\" class=\"wp-image-39978\" width=\"800\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1-1030x512.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1-300x149.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1-768x382.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1-1536x764.png 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1-2048x1019.png 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/Copy-of-Clean-6-1-1024x509.png 1024w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/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>Using Programmable I\/O with MicroPython<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The Raspberry Pi Pico comes with its official MicroPython port, so we can use the beginner-friendly Python programming language to program our Raspberry Pi Pico\u2019s state machines.<\/p>\n\n\n\n<p>The following section is based on Ben Everad\u2019s <a href=\"https:\/\/hackspace.raspberrypi.org\/articles\/pio1\">Flashing lights with MicroPython and Programmable I\/O part 1 Tutorial<\/a>. We\u2019ll use it to demonstrate how we can program a state machine to fade an LED with MicroPython &#8211; working all without the help of our CPU!<\/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>State Machine Instructions<\/strong><\/h3>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>We can issue nine different instructions to the state machines:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>IN<\/strong> &#8211; Shifts 1 word of 32 bits at a time into the ISR from another location<\/li><li><strong>OUT<\/strong> &#8211; Shifts 1 word of 32 bits from the OSR to another location<\/li><li><strong>PUSH<\/strong> &#8211; Sends data to the RX (input) FIFO<\/li><li><strong>PULL<\/strong> &#8211; Gets data from the TX (output) FIFO<\/li><li><strong>MOV<\/strong> &#8211; Moves data from one location to another<\/li><li><strong>IRQ<\/strong> &#8211; Sets or clears interrupt flag<\/li><li><strong>SET<\/strong> &#8211; Writes data to destination<\/li><li><strong>WAIT<\/strong> &#8211; Pauses until a defined action happens<\/li><li><strong>JMP <\/strong>&#8211; Jumps to a different point in the code<\/li><\/ul>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>MicroPython Code<\/strong><\/h3>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>First, let\u2019s look at the MicroPython code:<\/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>from rp2 import PIO, StateMachine, asm_pio\nfrom machine import Pin\nimport time\n\n@asm_pio(set_init=PIO.OUT_LOW)\ndef led_off():\n&nbsp;&nbsp;&nbsp;&nbsp;set(pins, 0)\n\n@asm_pio(set_init=PIO.OUT_LOW)\ndef led_on():\n&nbsp;&nbsp;&nbsp;&nbsp;set(pins, 1)\n\nsm1 = StateMachine(1, led_off, freq=20000, set_base=Pin(25))\nsm2 = StateMachine(2, led_on, freq=20002, set_base=Pin(25))\n\nsm1.active(1)\nsm2.active(1)<\/code><\/pre>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The <em>@asm_pio<\/em> decorator is used to let the MicroPython compiler recognise the function that follows as written in PIO assembly. We can also use the decorator to define the initial state of the pin. In this case, it\u2019s set to low.<\/p>\n\n\n\n<p>Each state machine is defined with a StateMachine() object, which is initialised with a number of inputs. In this case, we only defined the<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>state machine number,<\/li><li>programme to be run,<\/li><li>frequency that we want the program to be run at,<\/li><li>and the target pin for the program.<\/li><\/ul>\n\n\n\n<p>With this code, one state machine continuously sets the LED Pin\u2019s state to 1 (Pin 25), whereas the other continuously sets it to 0. However, because they are running at slightly different frequencies, the proportion of time spent in the on state vs the off state will vary. The result is a pattern that fades in, then out.<\/p>\n\n\n\n<p>The last two lines simply activate each of the state machines, so our program will proceed to run. That\u2019s it!<\/p>\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\">Pre-Order Your Raspberry Pi Pico<\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The Raspberry Pi Pico comes in at an extremely affordable price of only $4 and is available for preorder from the Seeed online store.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.seeedstudio.com\/Raspberry-Pi-Pico-p-4832.html\">Pre-order yours now!<\/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>Summary<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>We\u2019ve gone through the basics of programmable I\/O, and how we can use it on the new Raspberry Pi Pico. To read more about programmable I\/O, we recommend the following articles:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Programmed_input\u2013output\">Programmed Input-Output on Wikipedia<\/a><\/li><li><a href=\"http:\/\/inputoutput5822.weebly.com\/programmed-io.html\">Programmed I\/O on I\/O Techniques<\/a><\/li><\/ul>\n\n\n\n<p>For the full documentation of the Raspberry Pi Pico and more information on what can be done with this flexible microcontroller board, please visit the <a href=\"https:\/\/www.raspberrypi.org\/documentation\/pico\/getting-started\/\">official documentation<\/a>.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Raspberry Pi Foundation has just announced the brand new Raspberry Pi Pico microcontroller board,<\/p>\n","protected":false},"author":3537,"featured_media":39970,"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":[1352,3640],"class_list":["post-39968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-micropython","tag-raspberry-pi-pico"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Programmable I\/O with Raspberry Pi Pico - Latest News from Seeed Studio<\/title>\n<meta name=\"description\" content=\"The Raspberry Pi Pico has just been announced with programmable I\/O support. Get introduced to programmable I\/O and what it can do!\" \/>\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\/01\/25\/programmable-io-with-raspberry-pi-pico\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programmable I\/O with Raspberry Pi Pico - Latest News from Seeed Studio\" \/>\n<meta property=\"og:description\" content=\"The Raspberry Pi Pico has just been announced with programmable I\/O support. Get introduced to programmable I\/O and what it can do!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-25T08:27:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-09-29T08:25:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\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=\"5 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\/01\/25\/programmable-io-with-raspberry-pi-pico\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/\",\"name\":\"Programmable I\/O with Raspberry Pi Pico - Latest News from Seeed Studio\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png\",\"datePublished\":\"2021-01-25T08:27:18+00:00\",\"dateModified\":\"2021-09-29T08:25:15+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094\"},\"description\":\"The Raspberry Pi Pico has just been announced with programmable I\/O support. Get introduced to programmable I\/O and what it can do!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmable I\/O with Raspberry Pi Pico\"}]},{\"@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":"Programmable I\/O with Raspberry Pi Pico - Latest News from Seeed Studio","description":"The Raspberry Pi Pico has just been announced with programmable I\/O support. Get introduced to programmable I\/O and what it can do!","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\/01\/25\/programmable-io-with-raspberry-pi-pico\/","og_locale":"en_US","og_type":"article","og_title":"Programmable I\/O with Raspberry Pi Pico - Latest News from Seeed Studio","og_description":"The Raspberry Pi Pico has just been announced with programmable I\/O support. Get introduced to programmable I\/O and what it can do!","og_url":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2021-01-25T08:27:18+00:00","article_modified_time":"2021-09-29T08:25:15+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png","type":"image\/png"}],"author":"Jonathan Tan","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jonathan Tan","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/","url":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/","name":"Programmable I\/O with Raspberry Pi Pico - Latest News from Seeed Studio","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png","datePublished":"2021-01-25T08:27:18+00:00","dateModified":"2021-09-29T08:25:15+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094"},"description":"The Raspberry Pi Pico has just been announced with programmable I\/O support. Get introduced to programmable I\/O and what it can do!","breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/01\/25\/programmable-io-with-raspberry-pi-pico\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Programmable I\/O with Raspberry Pi Pico"}]},{"@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":"Lily","views":31851,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png",1280,720,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-80x80.png",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-300x169.png",300,169,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-768x432.png",640,360,true],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-1030x579.png",640,360,true],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png",1280,720,false],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png",1280,720,false],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png",32,18,false],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3.png",1280,720,false],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-936x720.png",936,720,true],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-1024x576.png",1024,576,true],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-720x380.png",720,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/01\/ezgif.com-webp-to-png-3-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\/39968","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=39968"}],"version-history":[{"count":19,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/39968\/revisions"}],"predecessor-version":[{"id":41275,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/39968\/revisions\/41275"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/39970"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=39968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=39968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=39968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}