1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8"> 5<meta http-equiv="X-UA-Compatible" content="IE=edge"> 6<meta name="viewport" content="width=device-width, initial-scale=1"> 7<meta name="description" content="These brief instructions will help you get started quickly with CanAirIO."> 8<meta name="keywords" content="getting_started, homepage"> 9<title>Getting started with CanAirIO | CanAirIO documentation portal</title> 10<link rel="stylesheet" href="css/syntax.css"> 11 12<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> 13<!--<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">--> 14<link rel="stylesheet" href="css/modern-business.css"> 15<!-- Latest compiled and minified CSS --> 16<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 17<link rel="stylesheet" href="css/customstyles.css"> 18<link rel="stylesheet" href="css/boxshadowproperties.css"> 19<!-- most color styles are extracted out to here --> 20<link rel="stylesheet" href="css/theme-blue.css"> 21
22<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
22 23
24<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
vendor: 1 bytes, line 24
24
25<script src="js/jquery.navgoco.min.js"></script>
25 26 27 28<!-- Latest compiled and minified JavaScript -->
29<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
29 30<!-- Anchor.js -->
31<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.0/anchor.min.js"></script>
vendor: 1 bytes, line 31
31
32<script src="js/toc.js"></script>
vendor: 1 bytes, line 32
32
33<script src="js/customscripts.js"></script>
33 34 35<link rel="shortcut icon" href="images/favicon.ico"> 36 37<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 38<!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 39<!--[if lt IE 9]>
40<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
vendor: 1 bytes, line 40
40
41<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
41 42<![endif]--> 43 44<link rel="alternate" type="application/rss+xml" title="" href="/feed.xml"> 45 46 47 48
48<script> 49 $(document).ready(function() { 50 // Initialize navgoco with default options 51 $("#mysidebar").navgoco({ 52 caretHtml: '', 53 accordion: true, 54 openClass: 'active', // open 55 save: false, // leave false or nav highlighting doesn't work right 56 cookie: { 57 name: 'navgoco', 58 expires: false, 59 path: '/' 60 }, 61 slide: { 62 duration: 400, 63 easing: 'swing' 64 } 65 }); 66 67 $("#collapseAll").click(function(e) { 68 e.preventDefault(); 69 $("#mysidebar").navgoco('toggle', false); 70 }); 71 72 $("#expandAll").click(function(e) { 73 e.preventDefault(); 74 $("#mysidebar").navgoco('toggle', true); 75 }); 76 77 }); 78 79 </script>
79 80
80<script> 81 $(function () { 82 $('[data-toggle="tooltip"]').tooltip() 83 }) 84 </script>
84 85
85<script> 86 $(document).ready(function() { 87 $("#tg-sb-link").click(function() { 88 $("#tg-sb-sidebar").toggle(); 89 $("#tg-sb-content").toggleClass('col-md-9'); 90 $("#tg-sb-content").toggleClass('col-md-12'); 91 $("#tg-sb-icon").toggleClass('fa-toggle-on'); 92 $("#tg-sb-icon").toggleClass('fa-toggle-off'); 93 }); 94 }); 95 </script>
95 96 97 98</head> 99<body> 100<!-- Navigation --> 101<nav class="navbar navbar-inverse navbar-static-top"> 102 <div class="container topnavlinks"> 103 <div class="navbar-header"> 104 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> 105 <span class="sr-only">Toggle navigation</span> 106 <span class="icon-bar"></span> 107 <span class="icon-bar"></span> 108 <span class="icon-bar"></span> 109 </button> 110 <a class="fa fa-home fa-lg navbar-brand" href="index.html"> <span class="projectTitle"> CanAirIO</span></a> 111 </div> 112 <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 113 <ul class="nav navbar-nav navbar-right"> 114 <!-- toggle sidebar button --> 115 <li><a id="tg-sb-link" href="#"><i id="tg-sb-icon" class="fa fa-toggle-on"></i> Nav</a></li> 116 <!-- entries without drop-downs appear here --> 117 118 119 120 121 122 123 124 <li><a href="https://github.com/kike-canaries/" target="_blank" rel="noopener">GitHub</a></li> 125 126 127 128 <li><a href="https://github.com/kike-canaries/canairio_firmware/releases" target="_blank" rel="noopener">Releases</a></li> 129 130 131 132 <li><a href="https://hackaday.io/project/179753/logs" target="_blank" rel="noopener">News</a></li> 133 134 135 136 <li><a href="https://t.me/canairio" target="_blank" rel="noopener">Support</a></li> 137 138 139 140 <!-- entries with drop-downs appear here --> 141 <!-- conditional logic to control which topnav appears for the audience defined in the configuration file.--> 142 143 144 <li> 145 146 147 148 <a class="email" title="Submit feedback" href="https://canair.io/#three">Feedback</a> 149 150</li> 151 152 153 154 155 <!--comment out this block if you want to hide search--> 156 <li> 157 <!--start search--> 158 <div id="search-demo-container"> 159 <input type="text" id="search-input" placeholder="search..."> 160 <ul id="results-container"></ul> 161 </div> 162
162<script src="js/jekyll-search.js" type="text/javascript"></script>
162 163
163<script type="text/javascript"> 164 SimpleJekyllSearch.init({ 165 searchInput: document.getElementById('search-input'), 166 resultsContainer: document.getElementById('results-container'), 167 dataSource: 'search.json', 168 searchResultTemplate: '<li><a href="{url}" title="Getting started with CanAirIO">{title}</a></li>', 169 noResultsText: 'No results found.', 170 limit: 10, 171 fuzzy: true, 172 }) 173 </script>
173 174 <!--end search--> 175 </li> 176 </ul> 177 </div> 178 </div> 179 <!-- /.container --> 180</nav> 181 182 183 184<!-- Page Content --> 185<div class="container"> 186 <div id="main"> 187 <!-- Content Row --> 188 <div class="row"> 189 190 191 <!-- Sidebar Column --> 192 <div class="col-md-3" id="tg-sb-sidebar"> 193 194 195<ul id="mysidebar" class="nav"> 196 <li class="sidebarTitle">CanAirIO 0.5.2</li> 197 198 199 200 201 202 <li> 203 <a title="Getting Started" href="#">Getting Started</a> 204 <ul> 205 206 207 208 <li><a title="Building a device" href="index.html#building-a-device">Building a device</a></li> 209 210 211 212 213 214 215 <li><a title="Firmware upload" href="firmware_upload.html#overview">Firmware upload</a></li> 216 217 218 219 220 221 222 <li><a title="Firmware config" href="firmware_config.html#overview">Firmware config</a></li> 223 224 225 226 227 228 229 <li><a title="CanAirIO App" href="app_usage.html#overview">CanAirIO App</a></li> 230 231 232 233 234 235 236 <li><a title="CanAirIO CLI" href="cli.html#overview">CanAirIO CLI</a></li> 237 238 239 240 241 </ul> 242 </li> 243 244 245 246 <li> 247 <a title="Device" href="#">Device</a> 248 <ul> 249 250 251 252 <li><a title="CanAirIO Bike" href="canairio_bike.html">CanAirIO Bike</a></li> 253 254 255 256 257 258 259 <li><a title="CanAirIO CO2" href="canairio_co2.html">CanAirIO CO2</a></li> 260 261 262 263 264 265 266 <li><a title="CanAirIO M5Stack" href="canairio_m5stack.html">CanAirIO M5Stack</a></li> 267 268 269 270 271 272 273 <li><a title="CanAirIO IKEA Vindriktning" href="canairio_ikea.html">CanAirIO IKEA Vindriktning</a></li> 274 275 276 277 278 279 280 <li><a title="CanAirIO IKEA Vindstyrka" href="canairio_ikea_vindstyrka.html">CanAirIO IKEA Vindstyrka</a></li> 281 282 283 284 285 286 287 <li><a title="CanAirIO Plantower" href="canairio_plantower.html">CanAirIO Plantower</a></li> 288 289 290 291 292 293 294 <li><a title="Solar Station" href="solar_station.html">Solar Station</a></li> 295 296 297 298 299 </ul> 300 </li> 301 302 303 304 <li> 305 <a title="Sensors" href="#">Sensors</a> 306 <ul> 307 308 309 310 <li><a title="CanAirIO Sensorslib" href="sensorlib.html">CanAirIO Sensorslib</a></li> 311 312 313 314 315 316 317 <li><a title="CO2 sensors comparative" href="co2_comparative.html">CO2 sensors comparative</a></li> 318 319 320 321 322 323 324 <li><a title="DF Robot Gravity Sensors" href="dfrobot_sensors.html">DF Robot Gravity Sensors</a></li> 325 326 327 328 329 </ul> 330 </li> 331 332 333 334 <li> 335 <a title="Firmware" href="#">Firmware</a> 336 <ul> 337 338 339 340 <li><a title="Overview" href="firmware_upload.html#overview">Overview</a></li> 341 342 343 344 345 346 347 <li><a title="Upload via CanAirIO Web Installer" href="firmware_upload.html#canairio-web-installer">Upload via CanAirIO Web Installer</a></li> 348 349 350 351 352 353 354 <li><a title="Upload via CanAirIO Loader" href="firmware_upload.html#canairio-loader">Upload via CanAirIO Loader</a></li> 355 356 357 358 359 360 361 <li><a title="Upload via Espressif Uploader" href="firmware_upload.html#espressif-uploader">Upload via Espressif Uploader</a></li> 362 363 364 365 366 367 368 <li><a title="Upload via CanAirIO Installer" href="firmware_upload.html#canairio-installer">
368Upload via CanAirIO Installer</a></li> 369 370 371 372 373 374 375 <li><a title="Upload from Source Code" href="firmware_upload.html#via-source-code">Upload from Source Code</a></li> 376 377 378 379 380 381 382 <li><a title="Firmware configuration" href="firmware_config.html">Firmware configuration</a></li> 383 384 385 386 387 388 389 <li><a title="Firmware debugging" href="firmware_debugging.html">Firmware debugging</a></li> 390 391 392 393 394 </ul> 395 </li> 396 397 398 399 <li> 400 <a title="Integrations" href="#">Integrations</a> 401 <ul> 402 403 404 405 <li><a title="CanAirIO World map" href="cloud_worldmap.html">CanAirIO World map</a></li> 406 407 408 409 410 411 412 <li><a title="CanAirIO Mobile Map" href="mobile_map.html">CanAirIO Mobile Map</a></li> 413 414 415 416 417 418 419 <li><a title="Home Assistant" href="home_assistant.html">Home Assistant</a></li> 420 421 422 423 424 425 426 <li><a title="Anaire Cloud" href="cloud_anaire.html">Anaire Cloud</a></li> 427 428 429 430 431 </ul> 432 </li> 433 434 435 436 <li> 437 <a title="API" href="#">API</a> 438 <ul> 439 440 441 442 <li><a title="Mobile station" href="mobile_api_en.html">Mobile station</a></li> 443 444 445 446 447 448 449 <li><a title="Fixed station" href="fixed_stations_api_en.html">Fixed station</a></li> 450 451 452 453 454 455 456 <li><a title="Bluetooth GATT protocol" href="firmware_protocol.html">Bluetooth GATT protocol</a></li> 457 458 459 460 461 </ul> 462 </li> 463 464 465 466 <li> 467 <a title="Community" href="#">Community</a> 468 <ul> 469 470 471 472 <li><a title="Respiraton 2021" href="Respiraton2021.html">Respiraton 2021</a></li> 473 474 475 476 477 478 479 <li><a title="Collectives and Partners" href="partners.html">Collectives and Partners</a></li> 480 481 482 483 484 </ul> 485 </li> 486 487 488 489 <!-- if you aren't using the accordion, uncomment this block: 490 <p class="external"> 491 <a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a> 492 </p> 493 --> 494</ul> 495 496<!-- this highlights the active parent class in the navgoco sidebar. this is critical so that the parent expands when you're viewing a page. This must appear below the sidebar code above. Otherwise, if placed inside customscripts.js, the script runs before the sidebar code runs and the class never gets inserted.-->
497<script>$("li.active").parents('li').toggleClass("active");</script>
497 498 499 500 501 </div> 502 503 504 505 <!-- Content Column --> 506 <div class="col-md-9" id="tg-sb-content"> 507 <div class="post-header"> 508 <h1 class="post-title-main">Getting started with CanAirIO</h1> 509</div> 510 511 512 513<div class="post-content"> 514 515 516 <div class="summary">These brief instructions will help you get started quickly with CanAirIO.</div> 517 518 519 520 521<!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. -->
522<script> 523$( document ).ready(function() { 524 // Handler for .ready() called. 525 526$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' }); 527 528/* this offset helps account for the space taken up by the floating toolbar. */ 529$('#toc').on('click', 'a', function() { 530 var target = $(this.getAttribute('href')) 531 , scroll_target = target.offset().top 532 533 $(window).scrollTop(scroll_target - 10); 534 return false 535}) 536 537}); 538</script>
538 539 540<div id="toc"></div> 541 542 543 544 545 546 547 548 549 <p><img src="images/canairio_collage_community.jpg" alt="CanAirIO Community" /></p> 550<h2 id="overview">Overview</h2> 551 552<p>CanAirIO is a citizen science project using mobile and fixed air quality stations to measure some variables like PM2.5, CO2, AQI and others air indicators with cell phones and low-cost technology.</p> 553 554<h2 id="canairio-web-installer">CanAirIO Web Installer</h2> 555 556<p>Good news! we already have a super easy way for <strong>install CanAirIO</strong> on any compatible <strong>Arduino ESP32 board</strong>, with a few clicks in seconds without any sensor, for example you able to have our <strong>CanAirIO PAX Counter</strong> device:</p> 557 558<p><img src="https://user-images.githubusercontent.com/423856/141661066-0fafcaa9-98b4-419b-b1e7-4371f3cb99b8.gif" alt="video_2021-11-13_23-36-10" /></p> 559 560<p>More info in <a href="https://canair.io/installer.html">canair.io/installer</a></p> 561 562<h2 id="building-a-device">Building a device</h2> 563 564<p>We have some device version alternatives with some guides:</p> 565 566<table> 567 <thead> 568 <tr> 569 <th style="text-align: left">Device version</th> 570 <th style="text-align: center">Difficulty</th> 571 <th style="text-align: center">Status</th> 572 <th style="text-align: center">Links</th> 573 </tr> 574 </thead> 575 <tbody> 576 <tr> 577 <td style="text-align: left">CanAirIO Bike</td> 578 <td style="text-align: center">Medium</td> 579 <td style="text-align: center">New</td> 580 <td style="text-align: center"><a href="https://canair.io/docs/canairio_bike.html">Complete guide and video</a></td> 581 </tr> 582 <tr> 583 <td style="text-align: left">CanAirIO CO2</td> 584 <td style="text-align: center">Medium</td> 585 <td style="text-align: center">New</td> 586 <td style="text-align: center"><a href="https://canair.io/docs/canairio_co2.html">Complete guide and video</a></td> 587 </tr> 588 <tr> 589 <td style="text-align: left">CanAirIO M5Stack</td> 590 <td style="text-align: center">Easy</td> 591 <td style="text-align: center">New</td> 592 <td style="text-align: center"><a href="https://canair.io/docs/canairio_m5stack.html">Basic guide</a></td> 593 </tr> 594 <tr> 595 <td style="text-align: left">CanAirIO IKEA Vindriktning</td> 596 <td style="text-align: center">Easy</td> 597 <td style="text-align: center">New</td> 598 <td style="text-align: center"><a href="https://canair.io/docs/canairio_ikea.html">Basic guide</a></td> 599 </tr> 600 <tr> 601 <td style="text-align: left">CanAirIO IKEA Vindstyrka</td> 602 <td style="text-align: center">Easy</td> 603 <td style="text-align: center">New</td> 604 <td style="text-align: center"><a href="https://canair.io/docs/canairio_ikea_vindstyrka.html">Basic guide</a></td> 605 </tr> 606 <tr> 607 <td style="text-align: left">CanAirIO Plantower</td> 608 <td style="text-align: center">Easy</td> 609 <td style="text-align: center">New</td> 610 <td style="text-align: center"><a href="https://canair.io/docs/canairio_plantower.html">Basic guide</a></td> 611 </tr> 612 <tr> 613 <td style="text-align: left">CanAirIO Solar Station</td> 614 <td style="text-align: center">Medium</td> 615 <td style="text-align: center">New</td> 616 <td style="text-align: center"><a href="https://canair.io/docs/solar_station.html">Basic guide</a></td> 617 </tr> 618 <tr> 619 <td style="text-align: left">CanAirIO without soldering (EN)</td> 620 <td style="text-align: center">Easy</td> 621 <td style="text-align: center">Outdated</td> 622 <td style="text-align: center"><a href="https://www.hackster.io/canairio/build-low-cost-air-quality-sensor-canairio-without-soldering-d87494">Complete guide and video</a></td> 623 </tr> 624 <tr> 625 <td style="text-align: left">CanAirIO without soldering (ES)</td> 626 <td style="text-align: center">Easy</td> 627 <td style="text-align: center">Outdated</td> 628 <td style="text-align: center"><a href="https://www.hackster.io/canairio/construye-un-sensor-calidad-del-aire-canairio-sin-soldaduras-8a3c6d">Complete guide and video</a></td> 629 </tr> 630 <tr> 631 <td style="text-align: left">CanAirIO device v2.1 (EN)</td> 632 <td style="text-align: center">Medium</td> 633 <td style="text-align: center">Outdated</td> 634 <td style="text-align: center"><a href="https://www.hackster.io/canairio-guide-team/canairio-citizen-network-for-air-quality-monitoring-bbf647">Complete guide and video</a></td> 635 </tr> 636 <tr> 637 <td style="text-align: left">CanAirIO device v2.1 (ES)</td> 638 <td style="text-align: center">Medium</td> 639 <td style="text-align: center">Outdated</td> 640 <td style="text-align: center"><a href="https://www.hackster.io/114723/canairio-red-ciudadana-para-monitoreo-de-calidad-del-aire-96f79a">Complete guide and video</a></td> 641 </tr> 642 </tbody> 643</table> 644 645 646 647 648<div id="commento"></div> 649 650 651 652 653 654 655</div> 656 657<hr class="shaded"/> 658 659<footer> 660 <div class="row"> 661 <div class="col-lg-12 footer"> 662 ©2025 CanAirIO. GPLv3. <br /> 663 Site last generated: Jul 14, 2025 <br /> 664<p><img src="images/company_logo.png" alt="Company logo"/></p> 665 </div> 666 </div> 667</footer> 668 669 670 671 672 673 674 </div> 675 <!-- /.row --> 676</div> 677<!-- /.container --> 678</div> 679<!-- /#main --> 680 </div> 681 682</body> 683 684<!-- the google_analytics_id gets auto inserted from the config file --> 685 686 687
688<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create','G-PM0QV0WD8F','auto');ga('require','displayfeatures');ga('send','pageview');</script>
688 689 690 691 692 693 694</html> 695 696
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.