{"id":612,"date":"2024-03-29T15:29:09","date_gmt":"2024-03-29T15:29:09","guid":{"rendered":"https:\/\/www.bleuio.com\/blog\/?p=612"},"modified":"2024-03-29T15:39:07","modified_gmt":"2024-03-29T15:39:07","slug":"plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab","status":"publish","type":"post","link":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/","title":{"rendered":"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB"},"content":{"rendered":"\n<p>With the rise of IoT devices, Bluetooth Low Energy (BLE) technology has emerged as a convenient solution for wireless data transmission. In this tutorial, we&#8217;ll explore how to read real-time air quality data from a BLE <a href=\"https:\/\/www.hibouair.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">air quality monitoring device called HibouAir<\/a>, and plot it using <strong>MATLAB<\/strong>. To accomplish this, we&#8217;ll utilize the <strong>BleuIO BLE USB dongle<\/strong>, which simplifies BLE application development with its AT command interface.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Project Components:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/www.bleuio.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">BleuIO BLE USB Dongle<\/a><\/strong>: The BleuIO dongle serves as our BLE interface, allowing us to communicate with BLE devices using simple AT commands. Its plug-and-play nature and versatile features make it an ideal choice for BLE application development.<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/www.hibouair.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">HibouAir Air Quality Monitoring Device<\/a><\/strong>: HibouAir is a BLE-enabled air quality monitoring device that measures various parameters such as CO2, temperature, humidity, VOCs, and more. It provides real-time data transmission via BLE, making it suitable for IoT applications.<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/www.mathworks.com\/products\/matlab.html\" target=\"_blank\" rel=\"noreferrer noopener\">MATLAB<\/a><\/strong>: MATLAB is a powerful computing environment widely used for data analysis, visualization, and algorithm development. We&#8217;ll leverage MATLAB&#8217;s capabilities to read data from the BleuIO dongle, decode BLE advertisements from HibouAir, and plot the air quality data in real-time.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Project Implementation:<\/h3>\n\n\n\n<p><strong>Step 1: Setting up the Hardware<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connect the BleuIO BLE USB dongle to your computer&#8217;s USB port.<\/li>\n\n\n\n<li>Power on the HibouAir air quality monitoring device.<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 2: Writing MATLAB Code<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define the serial port parameters in MATLAB to establish communication with the BleuIO dongle.<\/li>\n\n\n\n<li>Scan for a specific HibouAir device with its MAC address to get air quality advertised data.<\/li>\n\n\n\n<li>Implement functions to decode BLE advertisement data from HibouAir, including parsing CO2, temperature, humidity, and other relevant parameters.<\/li>\n\n\n\n<li>Write code to continuously scan for BLE advertisements, extract air quality data, and plot co2 value real-time using MATLAB&#8217;s plotting functions.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How This Project Can Be Helpful for Engineers, Developers, and Analysts<\/strong><\/h3>\n\n\n\n<p><strong>Environmental Monitoring:<\/strong> Engineers and analysts can use this project to create efficient environmental monitoring systems. By integrating BLE air quality monitors with MATLAB&#8217;s data analysis tools, they can assess air quality, detect anomalies, and optimize environmental control systems.<\/p>\n\n\n\n<p><strong>Use Case:<\/strong> A civil engineering firm employs this setup to monitor indoor air quality in commercial buildings, identifying areas needing ventilation improvements.<\/p>\n\n\n\n<p><strong>IoT Development:<\/strong> Developers can leverage this project to build IoT applications across various industries. By connecting BLE monitors with cloud platforms and mobile apps, they enable remote monitoring and predictive maintenance.<\/p>\n\n\n\n<p><strong>Use Case:<\/strong> A startup develops a mobile app for real-time air quality monitoring in urban environments, using BLE devices and MATLAB for data analysis.<\/p>\n\n\n\n<p><strong>Research and Analysis:<\/strong> Analysts and researchers can utilize this project to study air quality&#8217;s impact on human health and the environment. BLE monitors and MATLAB enable them to collect data, perform statistical analysis, and communicate research findings effectively.<\/p>\n\n\n\n<p><strong>Use Case:<\/strong> Environmental scientists deploy BLE monitors to measure traffic-related air pollution in urban areas, using MATLAB to analyze data and inform urban planning decisions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Complete MATLAB Code:<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>% Define the serial port parameters\r\nportName = 'COM8';  % Change this to match your dongle's port identifier\r\nbaudRate = 57600;   % Change this to match your dongle's baud rate\r\nmacaddress = '220069'; % Change this to match the desired MAC address\r\n\r\n% Define adv_data_decode function if not defined already\r\nfunction env_data = adv_data_decode(data)\r\n    % Initialize output structure\r\n    env_data = struct();\r\n    \r\n    % Find the position of the start of advertisement data\r\n    pos = strfind(data, '5B070');\r\n\r\n    % Convert hexadecimal data to decimal values\r\n    temp_hex = convertNumber(data, pos+22, 4);\r\n    if temp_hex > 1000\r\n        temp_hex = (temp_hex - (65535 + 1)) \/ 10;\r\n    else\r\n        temp_hex = temp_hex \/ 10;\r\n    end\r\n\r\n    % Decode the advertisement data\r\n    env_data.boardID = data(pos + 8 : pos + 8 + 5);\r\n    env_data.type = hex2dec(data(pos + 6 : pos + 6 + 1));\r\n    env_data.light = convertNumber(data, pos + 14, 4);\r\n    env_data.pressure = convertNumber(data, pos + 18, 4) \/ 10;\r\n    env_data.temperature = temp_hex;\r\n    env_data.humidity = convertNumber(data, pos + 26, 4) \/ 10;\r\n    env_data.voc = convertNumber(data, pos + 30, 4);\r\n    env_data.co2 = hex2dec(data(pos + 46 : pos + 46 + 3));\r\n    env_data.ts = datetime('now', 'Format', 'yyyy-MM-dd HH:mm:ss');\r\nend\r\n\r\nfunction num = convertNumber(data, start, len)\r\n    % Convert hexadecimal string to decimal number\r\n    hex_str = data(start : start + len - 1);\r\n    num = typecast(uint32(hex2dec(hex_str)), 'int32');\r\nend\r\n\r\n% Create a function to handle the scanning and decoding\r\nfunction scanAndDecode(~, ~, s, macaddress, hObject)\r\n    try\r\n        % Retrieve stored data from the figure's appdata\r\n        fig = ancestor(hObject, 'figure');\r\n        storedData = guidata(fig);\r\n        timeArray = storedData.timeArray;\r\n        co2Array = storedData.co2Array;\r\n        \r\n        % Send the commands\r\n        writeline(s, \"AT+CENTRAL\");\r\n        write(s,13,\"char\");\r\n        writeline(s, \"AT+FINDSCANDATA=\"+macaddress+\"=4\");\r\n        write(s,13,\"char\");\r\n        \r\n        % Pause for 4 seconds (assuming this is the time needed for scanning)\r\n        pause(4);\r\n        \r\n        % Read the response\r\n        response = '';\r\n        while s.NumBytesAvailable > 0\r\n            response = response + readline(s);\r\n        end\r\n\r\n        % Extract advertisement data from the last string\r\n        lastLine = strsplit(response, newline);\r\n        lastLine = lastLine{end};  % Get the last line\r\n        advData = regexp(lastLine, '\\&#91;ADV\\]:\\s+(\\w+)', 'tokens');\r\n\r\n        % Display the advertisement data\r\n        if ~isempty(advData)\r\n            theData = adv_data_decode(advData{1}{1});\r\n            disp(theData.co2); % Display CO2 data for example\r\n            \r\n            % Append new data points to arrays\r\n            timeArray = &#91;timeArray, datenum(theData.ts)]; % Convert datetime to serial date number\r\n            co2Array = &#91;co2Array, theData.co2];\r\n            \r\n            % Update stored data in the figure's appdata\r\n            storedData.timeArray = timeArray;\r\n            storedData.co2Array = co2Array;\r\n            guidata(fig, storedData);\r\n            \r\n            % Update plot with new data points\r\n            set(hObject, 'XData', timeArray, 'YData', co2Array);\r\n            % Set x-axis to display time in the format of hours, minutes, and seconds\r\n            datetick('x', 'HH:MM:SS');\r\n            drawnow;\r\n        else\r\n            disp('No advertisement data found.');\r\n        end\r\n\r\n    catch e\r\n        % Display any errors that occur\r\n        disp(\"An error occurred: \" + e.message);\r\n    end\r\nend\r\n\r\ntry\r\n    % Create a serial port object\r\n    s = serialport(portName, baudRate,\"Timeout\",2);\r\n    configureTerminator(s, \"LF\");\r\n\r\n    % Create a figure for plotting\r\n    fig = figure;\r\n    plotHandle = plot(NaN, NaN, 'o-');\r\n    xlabel('Time');\r\n    ylabel('CO2 Value');\r\n    title('CO2 Value vs. Time');\r\n\r\n    % Store data in the figure's appdata\r\n    storedData.timeArray = &#91;];\r\n    storedData.co2Array = &#91;];\r\n    guidata(fig, storedData);\r\n\r\n    % Create a timer object to run scanAndDecode every 10 seconds\r\n    t = timer('ExecutionMode', 'fixedRate', 'Period', 10, ...\r\n              'TimerFcn', {@scanAndDecode, s, macaddress, plotHandle});\r\n\r\n    % Set the closerequestfcn callback to stop the timer and clear the serial port\r\n    set(fig, 'closerequestfcn', {@stopScript, t, s});\r\n\r\n    % Start the timer\r\n    start(t);\r\n\r\ncatch e\r\n    % Display any errors that occur\r\n    disp(\"An error occurred: \" + e.message);\r\n\r\n    % Stop and delete the timer\r\n    if exist('t', 'var') &amp;&amp; isvalid(t)\r\n        stop(t);\r\n        delete(t);\r\n    end\r\n\r\n    % Close the serial port\r\n    if exist('s', 'var') &amp;&amp; isvalid(s)\r\n        clear s;\r\n    end\r\nend\r\n\r\n% Enable data cursors\r\ndcm = datacursormode(gcf);\r\nset(dcm, 'UpdateFcn', @customDataCursor);\r\n\r\n% Custom data cursor function\r\nfunction output_txt = customDataCursor(~, event_obj)\r\n    % Get the data cursor position\r\n    pos = get(event_obj, 'Position');\r\n    \r\n    % Convert the x-coordinate (time) to a formatted string\r\n    timeString = datestr(pos(1), 'HH:MM:SS');\r\n    \r\n    % Create the output text to display\r\n    output_txt = {&#91;'X: ', timeString], &#91;'Y: ', num2str(pos(2))]}; % Customize as needed\r\nend\r\n\r\nfunction stopScript(~, ~, t, s)\r\n    % Stop and delete the timer\r\n    if exist('t', 'var') &amp;&amp; isvalid(t)\r\n        stop(t);\r\n        delete(t);\r\n    end\r\n\r\n    % Close the serial port\r\n    if exist('s', 'var') &amp;&amp; isvalid(s)\r\n        % Close the serial port\r\n        delete(s);\r\n    end\r\n\r\n    % Close the figure\r\n    delete(gcf);\r\nend\r\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Output<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"573\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/image-1-1024x573.png\" alt=\"\" class=\"wp-image-613\" srcset=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/image-1-1024x573.png 1024w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/image-1-300x168.png 300w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/image-1-768x430.png 768w, https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/image-1.png 1272w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"338\" src=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/ble-air-quality-data-mathlab.gif\" alt=\"\" class=\"wp-image-614\"\/><\/figure>\n\n\n\n<p>In this tutorial, we demonstrated how to read real-time air quality data from a BLE air quality monitoring device, such as HibouAir, using the BleuIO BLE USB dongle and MATLAB. By following the steps outlined in this tutorial, engineers, developers, and analysts can develop applications for monitoring air quality in various environments. This project has numerous potential applications, including indoor air quality monitoring in smart buildings, environmental monitoring in industrial settings, and health monitoring in healthcare facilities. By leveraging the power of BLE technology and MATLAB&#8217;s data analysis capabilities, users can gain valuable insights into air quality trends and make informed decisions to improve environmental conditions and human health.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>With the rise of IoT devices, Bluetooth Low Energy (BLE) technology has emerged as a convenient solution for wireless data transmission. In this tutorial, we&#8217;ll explore how to read real-time air quality data from a BLE air quality monitoring device called HibouAir, and plot it using MATLAB. To accomplish this, we&#8217;ll utilize the BleuIO BLE [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":618,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,2],"tags":[],"class_list":["post-612","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.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB - 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\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB - BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"og:description\" content=\"With the rise of IoT devices, Bluetooth Low Energy (BLE) technology has emerged as a convenient solution for wireless data transmission. In this tutorial, we&#8217;ll explore how to read real-time air quality data from a BLE air quality monitoring device called HibouAir, and plot it using MATLAB. To accomplish this, we&#8217;ll utilize the BleuIO BLE [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/\" \/>\n<meta property=\"og:site_name\" content=\"BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-29T15:29:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-29T15:39:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/air-qualiy-data-chart-matlab.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"694\" \/>\n\t<meta property=\"og:image:height\" content=\"396\" \/>\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\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/\"},\"author\":{\"name\":\"BleuIO\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"headline\":\"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB\",\"datePublished\":\"2024-03-29T15:29:09+00:00\",\"dateModified\":\"2024-03-29T15:39:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/\"},\"wordCount\":609,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/air-qualiy-data-chart-matlab.jpg\",\"articleSection\":[\"BleuIO\",\"BleuIO tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/\",\"name\":\"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB - BleuIO - Create Bluetooth Low Energy application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/air-qualiy-data-chart-matlab.jpg\",\"datePublished\":\"2024-03-29T15:29:09+00:00\",\"dateModified\":\"2024-03-29T15:39:07+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/air-qualiy-data-chart-matlab.jpg\",\"contentUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/air-qualiy-data-chart-matlab.jpg\",\"width\":694,\"height\":396,\"caption\":\"air qualiy data chart matlab\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB\"}]},{\"@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":"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB - 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\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/","og_locale":"en_US","og_type":"article","og_title":"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB - BleuIO - Create Bluetooth Low Energy application","og_description":"With the rise of IoT devices, Bluetooth Low Energy (BLE) technology has emerged as a convenient solution for wireless data transmission. In this tutorial, we&#8217;ll explore how to read real-time air quality data from a BLE air quality monitoring device called HibouAir, and plot it using MATLAB. To accomplish this, we&#8217;ll utilize the BleuIO BLE [&hellip;]","og_url":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/","og_site_name":"BleuIO - Create Bluetooth Low Energy application","article_published_time":"2024-03-29T15:29:09+00:00","article_modified_time":"2024-03-29T15:39:07+00:00","og_image":[{"width":694,"height":396,"url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/air-qualiy-data-chart-matlab.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\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#article","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/"},"author":{"name":"BleuIO","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"headline":"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB","datePublished":"2024-03-29T15:29:09+00:00","dateModified":"2024-03-29T15:39:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/"},"wordCount":609,"commentCount":0,"image":{"@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/air-qualiy-data-chart-matlab.jpg","articleSection":["BleuIO","BleuIO tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/","url":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/","name":"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB - BleuIO - Create Bluetooth Low Energy application","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#primaryimage"},"image":{"@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/air-qualiy-data-chart-matlab.jpg","datePublished":"2024-03-29T15:29:09+00:00","dateModified":"2024-03-29T15:39:07+00:00","author":{"@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"breadcrumb":{"@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#primaryimage","url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/air-qualiy-data-chart-matlab.jpg","contentUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2024\/03\/air-qualiy-data-chart-matlab.jpg","width":694,"height":396,"caption":"air qualiy data chart matlab"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bleuio.com\/blog\/plotting-real-time-air-quality-data-from-a-bluetooth-air-quality-monitoring-device-using-matlab\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bleuio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Plotting Real-Time Air Quality Data from a Bluetooth Air Quality Monitoring Device Using MATLAB"}]},{"@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\/612","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=612"}],"version-history":[{"count":2,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/612\/revisions"}],"predecessor-version":[{"id":617,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/612\/revisions\/617"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media\/618"}],"wp:attachment":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media?parent=612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/categories?post=612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/tags?post=612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}