blob: f94ee793141ba2d888eb01b69b2c8241ff4f520c [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>Bluetooth Mesh &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="up" title="BLE User Guide" href="../index.html"/>
<link rel="next" title="Sample application" href="sample.html"/>
<link rel="prev" title="Advertisement Data Fields" href="../btshell/btshell_advdata.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> /
<a href="../index.html">BLE User Guide</a> /
Bluetooth Mesh
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-nimble/edit/master/docs/mesh/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" >
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" selected="selected" >
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="reference internal" href="../index.html">BLE User Guide</a><ul class="current">
<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 current"><a class="current reference internal" href="#">Bluetooth Mesh</a><ul>
<li class="toctree-l3"><a class="reference internal" href="sample.html">Sample application</a></li>
</ul>
</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.6.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="bluetooth-mesh">
<h1>Bluetooth Mesh<a class="headerlink" href="#bluetooth-mesh" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
</div>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><p><a class="reference internal" href="#introduction-to-mesh" id="id1">Introduction to Mesh</a></p></li>
<li><p><a class="reference internal" href="#topology" id="id2">Topology</a></p></li>
<li><p><a class="reference internal" href="#bearers" id="id3">Bearers</a></p></li>
<li><p><a class="reference internal" href="#provisioning" id="id4">Provisioning</a></p></li>
<li><p><a class="reference internal" href="#models" id="id5">Models</a></p></li>
<li><p><a class="reference internal" href="#mesh-node-features-supported-by-apache-mynewt" id="id6">Mesh Node features supported by Apache Mynewt</a></p></li>
</ul>
</div>
<div class="section" id="introduction-to-mesh">
<h2><a class="toc-backref" href="#id1">Introduction to Mesh</a><a class="headerlink" href="#introduction-to-mesh" title="Permalink to this headline"></a></h2>
<p>Bluetooth Mesh is a new standard from Bluetooth SIG that was released in 2017. It enables many-to-many device
communication (as opposed to point-to-point approach in BLE) and is optimised for large-scale networks like building
automation or sensors network. It utilizes managed flood based approach where only mains-powered nodes relay messages
making it very power efficient (battery powered low-power nodes that don’t relay messages can operate in mesh network for years).</p>
<p>Bluetooth Mesh is complementary to Bluetooth specification and requires features from 4.0 release only. This allows
deployment of networks using hardware already available on the market.</p>
</div>
<div class="section" id="topology">
<h2><a class="toc-backref" href="#id2">Topology</a><a class="headerlink" href="#topology" title="Permalink to this headline"></a></h2>
<div class="figure align-default">
<img alt="Bluetooth Mesh Topology (source: Mesh Profile Specification 1.0)" src="../../_images/mesh_topology.jpg" />
</div>
<p>Bluetooth Mesh defines few features (roles) for devices in network. Those are:</p>
<ul class="simple">
<li><p>Relay - receive and retransmit mesh messages over the advertising bearer to enable larger networks</p></li>
<li><p>Proxy - receive and retransmit mesh messages between GATT and advertising bearers.</p></li>
<li><p>Low Power - operate within a mesh network at significantly reduced receiver duty cycles only in conjunction with a
node supporting the Friend feature</p></li>
<li><p>Friend - the ability to help a node supporting the Low Power feature to operate by storing messages destined for those nodes</p></li>
</ul>
</div>
<div class="section" id="bearers">
<h2><a class="toc-backref" href="#id3">Bearers</a><a class="headerlink" href="#bearers" title="Permalink to this headline"></a></h2>
<p>Mesh Profile specification allows two kinds of bearers for transmitting data:</p>
<ul class="simple">
<li><p>Advertising Bearer</p>
<ul>
<li><p>Uses LE advertising to broadcast messages to all nodes that are listening at this time</p></li>
<li><p>Uses non-connectable advertising only</p></li>
<li><p>29 octets of network message</p></li>
</ul>
</li>
<li><p>GATT Bearer</p>
<ul>
<li><p>Uses LE Connections to send messages</p></li>
<li><p>Uses standard GATT service (one for Provisioning and one for Proxy)</p></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="provisioning">
<h2><a class="toc-backref" href="#id4">Provisioning</a><a class="headerlink" href="#provisioning" title="Permalink to this headline"></a></h2>
<p>Provisioning is a process of adding an unprovisioned device to a mesh network managed by a Provisioner. A Provisioner
provides the unprovisioned device with provisioning data that allows it to become a mesh node (network key, current IV
index and unicast address). A Provisioner is typically a smart phone or other mobile computing device.</p>
</div>
<div class="section" id="models">
<h2><a class="toc-backref" href="#id5">Models</a><a class="headerlink" href="#models" title="Permalink to this headline"></a></h2>
<p>Models define basic functionality of nodes on a mesh network. Mesh Profile Specification defines foundation models used
to configure and manage network. Mesh Model Specification includes models defininig functionality that is standard
across device types. Those consists of:</p>
<ul class="simple">
<li><p>Generics - root models</p>
<ul>
<li><p>On/Off</p></li>
<li><p>Level</p></li>
<li><p>Battery Server</p></li>
<li><p>Location</p></li>
<li><p>Client Property</p></li>
<li><p>and others</p></li>
</ul>
</li>
<li><p>Sensors - defines a standard way of interfacing with sensors</p></li>
<li><p>Time and Scenes - defines a set of functionalities related to time and saved states on devices</p></li>
<li><p>Lighting - defines a set functionalities related to lighting control</p></li>
</ul>
<p>Complex models e.g. Lighting may contain other models eg Generic On/Off. The following image shows an example of Light
Lightness Server Model.</p>
<div class="figure align-default">
<img alt="Light Lightness Server model (source: Mesh Model Specification 1.0)" src="../../_images/mesh_lightning_model.jpg" />
</div>
</div>
<div class="section" id="mesh-node-features-supported-by-apache-mynewt">
<h2><a class="toc-backref" href="#id6">Mesh Node features supported by Apache Mynewt</a><a class="headerlink" href="#mesh-node-features-supported-by-apache-mynewt" title="Permalink to this headline"></a></h2>
<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>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="sample.html" class="btn btn-neutral float-right" title="Sample application" accesskey="n">Next: Sample application <span class="fa fa-arrow-circle-right"></span></a>
<a href="../btshell/btshell_advdata.html" class="btn btn-neutral" title="Advertisement Data Fields" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Advertisement Data Fields</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>