blob: 8fae940fcdf50079d60aa10dfef40dce3b8745a0 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLE User Guide &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../index.html"/>
<link rel="next" title="NimBLE Security" href="ble_sec.html"/>
<link rel="prev" title="PineTime smartwatch" href="../os/bsp/pinetime.html"/>
<script src="../_static/js/modernizr.min.js"></script>
<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", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../_static/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li class="important">
<a href="/quick-start/">Quick Start</a>
</li>
<li>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
BLE User Guide
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-nimble/edit/master/docs/index.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</option>
<option value="/v1_11_0" selected="selected" >
Version: 1.11.0
</option>
<option value="/v1_10_0" >
Version: 1.10.0
</option>
<option value="/v1_9_0" >
Version: 1.9.0
</option>
<option value="/v1_8_0" >
Version: 1.8.0
</option>
<option value="/v1_7_0" >
Version: 1.7.0
</option>
<option value="/v1_6_0" >
Version: 1.6.0
</option>
<option value="/v1_5_0" >
Version: 1.5.0
</option>
<option value="/v1_4_0" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../concepts.html">Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/tutorials.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1"><a class="reference internal" href="../os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">BLE User Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="ble_sec.html">NimBLE Security</a></li>
<li class="toctree-l2"><a class="reference internal" href="ble_setup/ble_setup_intro.html">NimBLE Setup</a></li>
<li class="toctree-l2"><a class="reference internal" href="ble_hs/ble_hs.html">NimBLE Host</a></li>
<li class="toctree-l2"><a class="reference internal" href="btshell/btshell_api.html">btshell Usage API</a></li>
<li class="toctree-l2"><a class="reference internal" href="mesh/index.html">Bluetooth Mesh</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.11.0 is not the most recent version of the
Apache Mynewt documentation. Click <a href="/latest">here</a> to
read the latest version.
</p>
</div>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="ble-user-guide">
<h1>BLE User Guide<a class="headerlink" href="#ble-user-guide" title="Permalink to this headline"></a></h1>
<p>Apache Mynewt offers the world’s first fully open-source Bluetooth Low
Energy (BLE) or Bluetooth Smart stack fully compliant with Bluetooth 5
specifications with support for Bluetooth Mesh. It is called NimBLE.</p>
<p>BLE technology operates in the unlicensed industrial, scientific and
medical (ISM) band at 2.4 to 2.485 GHz which is available in most
countries. It uses a spread spectrum, frequency hopping, full-duplex
signal. BLE FHSS employs 40 2-MHz-wide channels to ensure greater
reliability over longer distances. It also features 0-dBm (1 mW) power
output and a typical maximum range of 50 meters. With Bluetooth 5
specification range can be increased 4 times and speed 2 time.</p>
<div class="toctree-wrapper compound">
</div>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#features" id="id1">Features</a></p></li>
<li><p><a class="reference internal" href="#bluetooth-mesh-features" id="id2">Bluetooth Mesh features</a></p></li>
<li><p><a class="reference internal" href="#components" id="id3">Components</a></p></li>
<li><p><a class="reference internal" href="#example-nimble-projects" id="id4">Example NimBLE projects</a></p></li>
</ul>
</div>
<p>Note that BLE is not compatible with standard Bluetooth.</p>
<div class="section" id="features">
<h2><a class="toc-backref" href="#id1">Features</a><a class="headerlink" href="#features" title="Permalink to this headline"></a></h2>
<p>NimBLE complies with Bluetooth Core Specification 5.0 which makes it an
ideal wireless technology for the Internet of Things (IoT).</p>
<ul class="simple">
<li><p>LE Advertising Extensions</p></li>
<li><p>2Msym/s PHY for higher throughput</p></li>
<li><p>Coded PHY for LE Long Range</p></li>
<li><p>High Duty Cycle Non-Connectable Advertising</p></li>
<li><p>Channel Selection Algorithm #2 to utilize channels in more efficient
way.</p></li>
<li><p>LE Privacy 1.2 for frequent changes to the device address to make it
difficult to track for outsiders</p></li>
<li><p>LE Secure Connections featuring FIPS-compliant algorithms.</p></li>
<li><p>LE Data Length Extension for higher throughput</p></li>
<li><p><strong>Coming Soon</strong>: Assigning an Internet Protocol (IP) address
(compliant with the IPv6 or 6LoWPAN standard) to a Bluetooth device
through Internet Protocol Support Profile (IPSP)</p></li>
</ul>
<p>The Bluetooth 5 is backward compatible with previous Bluetooth version
4.2 which is also supported by Apache Mynewt.</p>
</div>
<div class="section" id="bluetooth-mesh-features">
<h2><a class="toc-backref" href="#id2">Bluetooth Mesh features</a><a class="headerlink" href="#bluetooth-mesh-features" title="Permalink to this headline"></a></h2>
<p>Bluetooth Mesh is a great addition to and opens a wide range of new
possibilities for the IoT connectivity space. NimBLE fully supports the
following Bluetooth Mesh features:</p>
<ul class="simple">
<li><p>Advertising and GATT bearers</p></li>
<li><p>PB-GATT and PB-ADV provisioning</p></li>
<li><p>Foundation Models (server role)</p></li>
<li><p>Relay support</p></li>
<li><p>GATT Proxy</p></li>
</ul>
</div>
<div class="section" id="components">
<h2><a class="toc-backref" href="#id3">Components</a><a class="headerlink" href="#components" title="Permalink to this headline"></a></h2>
<p>A Bluetooth low energy stack (NimBLE included) consists of two
components with several subcomponents:</p>
<ul class="simple">
<li><p><strong>Controller</strong></p>
<ul>
<li><p><strong>Physical Layer</strong>: adaptive frequency-hopping Gaussian Frequency
Shift Keying (GFSK) radio using 40 RF channels (0-39), with 2 MHz
spacing.</p></li>
<li><p><strong>Link Layer</strong>: with one of five states (Standby, Advertising,
Scanning, Initiating, Connection states) active at any time</p></li>
</ul>
</li>
<li><p><strong>Host</strong></p>
<ul>
<li><p><strong>Logical Link Control and Adaptation Protocol (L2CAP)</strong>: provides
logical channels, named L2CAP channels, which are multiplexed over
one or more logical links to provide packet segmentation and
reassembly, flow control, error control, streaming, QoS etc.</p></li>
<li><p><strong>Security Manager (SM)</strong>: uses Security Manager Protocol (SMP)
for pairing and transport specific key distribution for securing
radio communication</p></li>
<li><p><strong>Attribute protocol (ATT)</strong>: allows a device (<em>Server</em>) to expose
certain pieces of data, known as <em>Attributes</em>, to another device
(<em>Client</em>)</p></li>
<li><p><strong>Generic Attribute Profile (GATT)</strong>: a framework for using the
ATT protocol to exchange attributes encapsulated as
<em>Characteristics</em> or <em>Services</em></p></li>
<li><p><strong>Generic Access Profile (GAP)</strong>: a base profile which all
Bluetooth devices implement, which in the case of LE, defines the
Physical Layer, Link Layer, L2CAP, Security Manager, Attribute
Protocol and Generic Attribute Profile.</p></li>
<li><p><strong>Host Controller Interface (HCI)</strong>: the interface between the
host and controller either through software API or by a hardware
interface such as SPI, UART or USB.</p></li>
</ul>
</li>
</ul>
<p>Subsequent chapters in this manual will go into the details of the
implementation of each component, APIs available, and things to consider
while designing a NimBLE app.</p>
</div>
<div class="section" id="example-nimble-projects">
<h2><a class="toc-backref" href="#id4">Example NimBLE projects</a><a class="headerlink" href="#example-nimble-projects" title="Permalink to this headline"></a></h2>
<p>Mynewt comes with two built-in projects that allow users to play with
NimBLE, try the tutorials out with, and see how to use available
services.</p>
<ol class="arabic simple">
<li><p><strong>btshell</strong> : A simple shell application which provides a basic
interface to the host-side of the BLE stack.</p></li>
<li><p><strong>bleprph</strong>: A basic peripheral device with no user interface. It
advertises automatically on startup, and resumes advertising whenever
a connection is terminated. It supports a maximum of one connection.</p></li>
<li><p><strong>blemesh</strong>: A sample application for Bluetooth Mesh Node using
on/off model.</p></li>
</ol>
</div>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="ble_sec.html" class="btn btn-neutral float-right" title="NimBLE Security" accesskey="n">Next: NimBLE Security <span class="fa fa-arrow-circle-right"></span></a>
<a href="../os/bsp/pinetime.html" class="btn btn-neutral" title="PineTime smartwatch" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: PineTime smartwatch</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt project logo are either
registered trademarks or trademarks of the Apache Software Foundation in the United States and other countries.
</small>
<a href="">
<img src="../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../_static/js/affix.js"></script>
<script type="text/javascript" src="../_static/js/main.js"></script>
</body>
</html>