{"id":1508,"date":"2025-12-05T12:36:22","date_gmt":"2025-12-05T12:36:22","guid":{"rendered":"https:\/\/www.bleuio.com\/blog\/?p=1508"},"modified":"2025-12-05T14:02:51","modified_gmt":"2025-12-05T14:02:51","slug":"integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication","status":"publish","type":"post","link":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/","title":{"rendered":"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication)"},"content":{"rendered":"\n<p>In the earlier parts of this series, we combined the Adafruit Feather RP2040 with the BleuIO USB dongle to build different BLE applications: setting up the RP2040 as a USB host, reading sensor data, advertising measurements and handling secure connections.<\/p>\n\n\n\n<p>In this <strong>Part 5<\/strong>, we take the next step and create a simple two-way communication setup. Instead of only broadcasting data, we let a Python script running on your computer talk to the BleuIO dongle connected to the Feather RP2040 and control its LED in real time. At the same time, the Feather responds over the Serial Port Service (SPS), echoing messages back so you can see exactly what was sent on both sides.<\/p>\n\n\n\n<p>This project is a good starting point if you want to remotely control devices, test custom BLE command protocols or build interactive demos using BleuIO and RP2040.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What This Project Does<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Arduino project on Adafruit Feather RP2040<\/h3>\n\n\n\n<p>On the hardware side, the Adafruit Feather RP2040 is configured as a USB host for the BleuIO dongle, using the same TinyUSB and Pico PIO USB approach as in <a href=\"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Part 1 of the series<\/strong><\/a>. When the board starts, it initializes the USB host stack, detects the BleuIO dongle and sends a short sequence of AT commands. These commands disable echo, ask the dongle for its own MAC address, set a friendly advertising name (<code>BleuIO Arduino Example<\/code>) and start BLE advertising. After that, the sketch simply listens for BLE connection events and SPS messages. Depending on what text message it receives over SPS, it either echoes the message back or sends a command to change the LED behaviour on the dongle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python script on the computer<\/h3>\n\n\n\n<p>On the computer, a Python script acts as the BLE central. It uses the MAC address printed by the Feather\u2019s serial output to connect to the advertising BleuIO dongle. Once connected, it sends text commands over SPS such as <code><strong>ALERT<\/strong><\/code>, <code><strong>NORMAL<\/strong><\/code> or <code><strong>OFF<\/strong><\/code>, and reads back whatever the Feather sends in response. When the Python script sends one of these special words, the Feather generates BLEU AT commands to control the dongle\u2019s LED; for any other text, it just echoes the message. This creates a complete round-trip: you type in Python, the message travels over BLE to the RP2040 and BleuIO, and a response comes back the same way.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Requirements<\/h2>\n\n\n\n<p><strong>Hardware<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.adafruit.com\/product\/5723\" target=\"_blank\" rel=\"noreferrer noopener\">Adafruit Feather RP2040 board <\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/bleuio.com\/bluetooth-low-energy-usb-ssd025.php\" target=\"_blank\" rel=\"noreferrer noopener\">BleuIO Pro \u2013 Bluetooth Low Energy USB dongle<\/a><\/li>\n\n\n\n<li>USB cable for the Feather<\/li>\n\n\n\n<li>USB-A port or hub for the BleuIO dongle<\/li>\n\n\n\n<li>Computer running Windows, macOS or Linux<\/li>\n<\/ul>\n\n\n\n<p><strong>Software<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.arduino.cc\/en\/software\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino IDE with RP2040 board support installed <\/a><\/li>\n\n\n\n<li>Adafruit TinyUSB Library<\/li>\n\n\n\n<li>Pico PIO USB Library<\/li>\n\n\n\n<li>ArduinoJson library<\/li>\n\n\n\n<li>Python 3.x and the Python project that connects to BleuIO over SPS<\/li>\n<\/ul>\n\n\n\n<p>If you already followed <a href=\"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications\/\" target=\"_blank\" rel=\"noreferrer noopener\">Part 1,<\/a> your RP2040 USB host environment and board configuration should be ready to use. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Source Code on GitHub<\/h2>\n\n\n\n<p>You can find the complete source code for this project \u2014 both the Arduino sketch and the Python script \u2014 in our public GitHub repository: <strong>bleuio_arduino_message_transfer_example<\/strong>. Visit the repository at:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/bleuio_arduino_message_transfer_example\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/smart-sensor-devices-ab\/bleuio_arduino_message_transfer_example<\/a><\/p>\n\n\n\n<p>Feel free to clone or download the repo to get started quickly. All necessary files \u2014 including the <code>.ino<\/code>, helper headers, and the Python script \u2014 are included, so you can replicate the example or adapt it for your own project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recap: Preparing the Feather RP2040 as a USB Host<\/h2>\n\n\n\n<p>To quickly recap the setup from the earlier article: you install the Raspberry Pi RP2040 board package in the Arduino IDE, select the Feather RP2040 board, and install the Adafruit TinyUSB and Pico PIO USB libraries. You then make sure the CPU speed is set to 120 MHz or 240 MHz, since Pico PIO USB requires a clock that is a multiple of 120 MHz. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uploading the Arduino Sketch<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the <code>bleuio_arduino_connect_example.ino<\/code> and <code>usbh_helper.h<\/code> in the same Arduino sketch folder.<\/li>\n\n\n\n<li>Select <strong>Adafruit Feather RP2040<\/strong> (or your RP2040 board) under <em>Tools \u2192 Board<\/em>.  <\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"844\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image.png\" alt=\"\" class=\"wp-image-1509\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image.png 940w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image-300x269.png 300w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image-768x690.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Choose the correct COM port for the Feather.<\/li>\n\n\n\n<li>Click <strong>Upload<\/strong>.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"49\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image-1.png\" alt=\"\" class=\"wp-image-1511\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image-1.png 396w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/image-1-300x37.png 300w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/figure>\n\n\n\n<p>After upload:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>Serial Monitor<\/strong> at <strong>9600 baud<\/strong>.<\/li>\n\n\n\n<li>You should see something like:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>Connect test v1.0\nCore1 setup to run TinyUSB host with pio-usb\nSerialHost is connected to a new CDC device. Idx: 0\n\nBleuIO response:\n{\"own_mac_addr\":\"xx:xx:xx:xx:xx:xx\"}\n----\n<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Every 10 seconds (based on <code>ALIVE_TIME<\/code>) you\u2019ll see an update:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>H:M:S - 0:0:10\nown_mac_addr: xx:xx:xx:xx:xx:xx\nNot connected!\n<\/code><\/pre>\n\n\n\n<p>Initially it will say <strong>Not connected!<\/strong> because no BLE central is connected yet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Python Script (BLE Central)<\/h2>\n\n\n\n<p>The Python script acts as a <strong>BLE central<\/strong> that connects to the advertising BleuIO dongle and uses the <strong>Serial Port Service (SPS)<\/strong>.<\/p>\n\n\n\n<p>A typical flow in the Python script is:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Read the <strong>MAC address<\/strong> printed by the Arduino Serial Monitor (<code>own_mac_addr<\/code>).<\/li>\n\n\n\n<li>Use the BleuIO Python library (or BLE stack) to connect to that address.<\/li>\n\n\n\n<li>Once connected, send plain text messages over SPS:\n<ul class=\"wp-block-list\">\n<li><code>\"ALERT\"<\/code><\/li>\n\n\n\n<li><code>\"NORMAL\"<\/code><\/li>\n\n\n\n<li><code>\"OFF\"<\/code><\/li>\n\n\n\n<li>Or any other text.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>On the Python side you\u2019ll see:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connection success message.<\/li>\n\n\n\n<li>Any SPS response sent from the RP2040 (e.g. <code>[RP2040] Alert command Received: [...]<\/code> or <code>[RP2040] Echo: ...<\/code>).<\/li>\n<\/ul>\n\n\n\n<p>On the Arduino Serial Monitor you\u2019ll see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Connected!\nSPS Received!\nBleuIO response:\n{\"type\":\"SPS\",\"evt\":{\"len\":5,\"ascii\":\"ALERT\"}}\n----\nSending command: AT+SPSSEND=&#91;RP2040] Alert command Received: &#91;ALERT]\n<\/code><\/pre>\n\n\n\n<p>And the LED on the BleuIO dongle will react according to the command:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ALERT<\/code> \u2192 Blink pattern (<code>AT+LED=T=100=100<\/code>).<\/li>\n\n\n\n<li><code>NORMAL<\/code> \u2192 Toggle LED (<code>AT+LED=T<\/code>).<\/li>\n\n\n\n<li><code>OFF<\/code> \u2192 Turn LED off (<code>AT+LED=0<\/code>).<\/li>\n\n\n\n<li>Any other message \u2192 Just an echo, no LED change.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Where to Go Next<\/h2>\n\n\n\n<p>This example completes the journey from simple advertising to full two-way communication between a computer application and a BleuIO dongle hosted by an Adafruit Feather RP2040. With this pattern in place, you can replace the LED commands with your own device protocol, combine it with the sensor examples from Part 2 and Part 4, or feed the exchanged messages into larger systems for logging, dashboards or control logic. Because the communication relies on the standard Serial Port Service and BleuIO AT commands, the same structure can be reused for many other projects where a PC, an embedded board and a BLE device need to work together.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the earlier parts of this series, we combined the Adafruit Feather RP2040 with the BleuIO USB dongle to build different BLE applications: setting up the RP2040 as a USB host, reading sensor data, advertising measurements and handling secure connections. In this Part 5, we take the next step and create a simple two-way communication [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1510,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,2],"tags":[],"class_list":["post-1508","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bleuio","category-bleuio-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication) - BleuIO - Create Bluetooth Low Energy application<\/title>\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.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication) - BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"og:description\" content=\"In the earlier parts of this series, we combined the Adafruit Feather RP2040 with the BleuIO USB dongle to build different BLE applications: setting up the RP2040 as a USB host, reading sensor data, advertising measurements and handling secure connections. In this Part 5, we take the next step and create a simple two-way communication [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/\" \/>\n<meta property=\"og:site_name\" content=\"BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-05T12:36:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-05T14:02:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/adafruit-feature-rp2040-bluetooth.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"430\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"BleuIO\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/\"},\"author\":{\"name\":\"BleuIO\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"headline\":\"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication)\",\"datePublished\":\"2025-12-05T12:36:22+00:00\",\"dateModified\":\"2025-12-05T14:02:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/\"},\"wordCount\":928,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/adafruit-feature-rp2040-bluetooth.jpg\",\"articleSection\":[\"BleuIO\",\"BleuIO tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/\",\"name\":\"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication) - BleuIO - Create Bluetooth Low Energy application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/adafruit-feature-rp2040-bluetooth.jpg\",\"datePublished\":\"2025-12-05T12:36:22+00:00\",\"dateModified\":\"2025-12-05T14:02:51+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/adafruit-feature-rp2040-bluetooth.jpg\",\"contentUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/adafruit-feature-rp2040-bluetooth.jpg\",\"width\":800,\"height\":430,\"caption\":\"adafruit feature rp2040 bluetooth\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\",\"name\":\"BleuIO - Create Bluetooth Low Energy application\",\"description\":\"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\",\"name\":\"BleuIO\",\"sameAs\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/author\\\/biadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication) - BleuIO - Create Bluetooth Low Energy application","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.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/","og_locale":"en_US","og_type":"article","og_title":"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication) - BleuIO - Create Bluetooth Low Energy application","og_description":"In the earlier parts of this series, we combined the Adafruit Feather RP2040 with the BleuIO USB dongle to build different BLE applications: setting up the RP2040 as a USB host, reading sensor data, advertising measurements and handling secure connections. In this Part 5, we take the next step and create a simple two-way communication [&hellip;]","og_url":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/","og_site_name":"BleuIO - Create Bluetooth Low Energy application","article_published_time":"2025-12-05T12:36:22+00:00","article_modified_time":"2025-12-05T14:02:51+00:00","og_image":[{"width":800,"height":430,"url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/adafruit-feature-rp2040-bluetooth.jpg","type":"image\/jpeg"}],"author":"BleuIO","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#article","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/"},"author":{"name":"BleuIO","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"headline":"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication)","datePublished":"2025-12-05T12:36:22+00:00","dateModified":"2025-12-05T14:02:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/"},"wordCount":928,"commentCount":0,"image":{"@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/adafruit-feature-rp2040-bluetooth.jpg","articleSection":["BleuIO","BleuIO tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/","url":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/","name":"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication) - BleuIO - Create Bluetooth Low Energy application","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#primaryimage"},"image":{"@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/adafruit-feature-rp2040-bluetooth.jpg","datePublished":"2025-12-05T12:36:22+00:00","dateModified":"2025-12-05T14:02:51+00:00","author":{"@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"breadcrumb":{"@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#primaryimage","url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/adafruit-feature-rp2040-bluetooth.jpg","contentUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2025\/12\/adafruit-feature-rp2040-bluetooth.jpg","width":800,"height":430,"caption":"adafruit feature rp2040 bluetooth"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bleuio.com\/blog\/integrating-bleuio-with-adafruit-feather-rp2040-for-seamless-ble-applications-part-5-two-way-communication\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bleuio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Integrating BleuIO with Adafruit Feather RP2040 for Seamless BLE Applications \u2013 Part 5 (Two-Way Communication)"}]},{"@type":"WebSite","@id":"https:\/\/www.bleuio.com\/blog\/#website","url":"https:\/\/www.bleuio.com\/blog\/","name":"BleuIO - Create Bluetooth Low Energy application","description":"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bleuio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80","name":"BleuIO","sameAs":["https:\/\/www.bleuio.com\/blog"],"url":"https:\/\/www.bleuio.com\/blog\/author\/biadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/comments?post=1508"}],"version-history":[{"count":2,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1508\/revisions"}],"predecessor-version":[{"id":1513,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/1508\/revisions\/1513"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media\/1510"}],"wp:attachment":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media?parent=1508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/categories?post=1508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/tags?post=1508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}