lupyuen.org/articles/install-meshctl-on-raspberry-pi.html

446 lines
No EOL
27 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=bsmaklHF" />
<link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=qtvMKcIJ" />
<link rel="canonical" href="https://lupyuen.org/articles/install-meshctl-on-raspberry-pi.html" />
<!-- End Wayback Rewrite JS Include -->
<title data-rh="true">Install meshctl on Raspberry Pi. Follow these instructions to install… | by Lup Yuen Lee 李立源 |
Medium</title>
<meta data-rh="true" charset="utf-8" />
<meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1" />
<meta data-rh="true" name="theme-color" content="#000000" />
<meta data-rh="true" property="og:type" content="article" />
<meta data-rh="true" property="article:published_time" content="2019-10-16T04:30:17.217Z" />
<meta data-rh="true" name="title"
content="Install meshctl on Raspberry Pi. Follow these instructions to install… | by Lup Yuen Lee 李立源 | Medium" />
<meta data-rh="true" property="og:title" content="Install meshctl on Raspberry Pi" />
<meta data-rh="true" property="twitter:title" content="Install meshctl on Raspberry Pi" />
<meta data-rh="true" name="description"
content="Follow these instructions to install the Bluetooth Mesh provisioning tool meshctl for Raspberry Pi for the article “Bluetooth Mesh with nRF52 and Apache Mynewt” meshctl is part of the open-source…" />
<meta data-rh="true" property="og:description"
content="Follow these instructions to install the Bluetooth Mesh provisioning tool meshctl for Raspberry Pi for the article “Bluetooth Mesh with…" />
<meta data-rh="true" property="twitter:description"
content="Follow these instructions to install the Bluetooth Mesh provisioning tool meshctl for Raspberry Pi for the article “Bluetooth Mesh with…" />
<meta data-rh="true" name="twitter:card" content="summary_large_image" />
<meta data-rh="true" name="twitter:creator" content="@MisterTechBlog" />
<meta data-rh="true" name="author" content="Lup Yuen Lee 李立源" />
<meta data-rh="true" name="robots" content="index,follow,max-image-preview:large" />
<meta data-rh="true" name="referrer" content="unsafe-url" />
<meta data-rh="true" name="twitter:label1" value="Reading time" />
<meta data-rh="true" name="twitter:data1" value="4 min read" />
<meta property="og:image"
content="https://lupyuen.github.io/images/legacy/m1.jpeg">
<!-- Begin scripts/rustdoc-header.html: Header for Custom Markdown files processed by rustdoc, like chip8.md -->
<link rel="alternate" type="application/rss+xml" title="RSS Feed for lupyuen" href="/rss.xml" />
<link rel="stylesheet" type="text/css" href="../normalize.css">
<link rel="stylesheet" type="text/css" href="../rustdoc.css" id="mainThemeStyle">
<link rel="stylesheet" type="text/css" href="../light.css" id="themeStyle">
<link rel="stylesheet" type="text/css" href="../prism.css">
<script src="../storage.js"></script><noscript>
<link rel="stylesheet" href="../noscript.css"></noscript>
<link rel="shortcut icon" href="../favicon.ico">
<style type="text/css">
#crate-search {
background-image: url("../down-arrow.svg");
}
a {
color: #77d;
}
</style>
<!-- End scripts/rustdoc-header.html -->
</head>
<body>
<div id="root">
<div class="a b c">
<article>
<section class="bw bx by bz ai ca cb r"></section><span class="r"></span>
<div>
<div class="s u cc cd ce cf"></div>
<section class="cg ch ci cj ck">
<div class="cl ai">
<div class="figure cm cl ai paragraph-image">
<p><img src="https://lupyuen.github.io/images/legacy/m1.jpeg" /></p>
<figcaption><p><em>EBYTE E73-TBB Development Board (based on nRF52)
provisioned into a Bluetooth Mesh by running meshctl on Raspberry Pi 4</em></p></figcaption>
</div>
</div>
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<div>
<h1 id="024f" class="dm dn bo do b dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef">Install meshctl
on Raspberry Pi</h1>
<div class="eg">
<div class="n eh ei ej ek">
<div class="o n">
<div><a rel="noopener"
href="https://lupyuen.github.io">
<div class="cp el em">
<div class="as n en o p s eo ep eq er es cf"></div>
</div>
</a></div>
<div class="eu ai r">
<div class="n">
<div style="flex:1"><span class="bn b bo bp bq br r ef q">
<div class="ev n o ew"><span class="bn dj dk bp cu ex ey ez fa fb ef"><a
class="bh bi at au av aw ax ay az ba fc bd bl bm" rel="noopener"
href="https://lupyuen.github.io">Lup
Yuen Lee 李立源</a></span>
</div>
</span></div>
</div><span class="bn b bo bp bq br r bs bt"><span class="bn dj dk bp cu ex ey ez fa fb bs">
<div><a class="bh bi at au av aw ax ay az ba fc bd bl bm" rel="noopener"
href="https://lupyuen.github.io/articles/install-meshctl-on-raspberry-pi">
15 Oct 2019</a> <!-- -->·
<!-- -->
<!-- -->4
<!-- --> min read
</div>
</span></span>
</div>
</div>
</div>
</div>
</div>
<p id="91d0" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Follow these
instructions to install the Bluetooth Mesh provisioning tool <code
class="cy hh hi hj hk b">meshctl</code> for Raspberry Pi for the article <em class="hl"></em><a
class="bh fw hm hn ho hp" target="_blank" rel="noopener"
href="https://lupyuen.github.io/articles/bluetooth-mesh-with-nrf52-and-apache-mynewt"><em
class="hl">Bluetooth Mesh with nRF52 and Apache Mynewt</em></a><em class="hl"></em></p>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="7407" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">1. Install BlueZ
</h1>
<p id="8f74" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef"><code
class="cy hh hi hj hk b">meshctl</code> is part of the open-source BlueZ software suite (which
doesnt run on Windows and macOS, thats why we are using a Pi). BlueZ may be preinstalled on Pi but
the default installation lacks the <code class="cy hh hi hj hk b">meshctl</code> utility. Well
install BlueZ now with the <code class="cy hh hi hj hk b">meshctl</code> option…</p>
<p id="4bb0" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Refer to the
official guide by Bluetooth SIG:<br /><em class="hl"></em><a
href="https://3pl46c46ctx02p7rzdsvsg21-wpengine.netdna-ssl.com/wp-content/uploads/2019/03/T1804_How-to-set-up-BlueZ_LFC_FINAL-1.pdf?utm_campaign=developer&amp;utm_source=internal&amp;utm_medium=blog&amp;utm_content=Deploying-BlueZ-v5.50-on-Raspberry-Pi3-Update"
class="bh fw hm hn ho hp" target="_blank" rel="noopener nofollow"><em class="hl">Developer Study
Guide: Deploying BlueZ v5.50 on Raspberry Pi3, Part 1 — Deployment</em></a><em class="hl"></em>
</p>
<p id="a6a6" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Follow the
instructions in the sections…</p>
<p id="45f2" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><em
class="hl">“0. Prerequisite”</em></p>
<p id="8c11" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><em
class="hl">“1. Install BlueZ v5.50”</em></p>
<p id="903b" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><strong
class="gq iy">BUT stop before</strong> <em class="hl">“2. Rebuilding the kernel for BlueZ
v5.50”</em></p>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="1a41" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">2. Download Pi
Kernel Source Files</h1>
<p id="4dc0" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef">We shall
rebuild the Pi kernel now. Why? Because <code class="cy hh hi hj hk b">meshctl</code> needs
AEAD-AES_CCM encryption, which runs as a secure service in the kernel. This may take an hour or more
to complete.</p>
<p id="cd37" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Enter the
following at a command prompt…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="c1da" class="ef jh ib bo hk b dk ji jj r jk">cd ~<br/>sudo apt-get install -y git bc bison flex libssl-dev<br/>uname -a</span></pre>
<p id="1020" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">You should see
a message like…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="ffa2" class="ef jh ib bo hk b dk ji jj r jk">Linux raspberrypi <strong class="hk iy">4.19</strong>.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux</span></pre>
<p id="85c7" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">See the <code
class="cy hh hi hj hk b">4.19</code> part? This is important — its the <strong
class="gq iy">Version Number</strong> for your Pi kernel. We need to fetch the kernel source files
for our kernel version, or our Pi wont boot after rebuilding the kernel.</p>
<p id="76a4" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Enter this
command…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="7f53" class="ef jh ib bo hk b dk ji jj r jk">git clone --depth=1 --branch rpi-<strong class="hk iy">4.19</strong>.y https://github.com/raspberrypi/linux</span></pre>
<p id="a69a" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><strong
class="gq iy">BUT replace </strong><code
class="cy hh hi hj hk b"><strong class="gq iy">4.19</strong></code><strong class="gq iy"> by your Pi
Kernel Version Number</strong>.</p>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="0528" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">3. Initialise Pi
Kernel Settings</h1>
<p id="ed14" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef">We shall now
initialise the new Pi kernel to the default settings…</p>
<p id="2c40" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><strong
class="gq iy"><em class="hl">For Raspberry Pi 1, Pi Zero, Pi Zero W, and Compute Module,
enter…</em></strong></p>
<pre
class="iz ja jb jc jd je jf jg"><span id="b0f0" class="ef jh ib bo hk b dk ji jj r jk">cd linux<br/>KERNEL=kernel<br/>make bcmrpi_defconfig</span></pre>
<p id="5dc3" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><strong
class="gq iy"><em class="hl">For Raspberry Pi 2, Pi 3, Pi 3+, and Compute Module 3,
enter…</em></strong></p>
<pre
class="iz ja jb jc jd je jf jg"><span id="f3e3" class="ef jh ib bo hk b dk ji jj r jk">cd linux<br/>KERNEL=kernel7<br/>make bcm2709_defconfig</span></pre>
<p id="929b" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><strong
class="gq iy"><em class="hl">For Raspberry Pi 4, enter…</em></strong></p>
<pre
class="iz ja jb jc jd je jf jg"><span id="b650" class="ef jh ib bo hk b dk ji jj r jk">cd linux<br/>KERNEL=kernel7l<br/>make bcm2711_defconfig</span></pre>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="0fe1" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">4. Configure Pi
Kernel</h1>
<p id="d75b" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef">Lets configure
the kernel and select the AEAD-AES_CCM encryption needed by <code
class="cy hh hi hj hk b">meshctl</code>. Enter…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="1e0f" class="ef jh ib bo hk b dk ji jj r jk">make menuconfig</span></pre>
<p id="61a5" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Press the arrow
keys to move the cursor to <code class="cy hh hi hj hk b">Cryptographic API.</code></p>
<div class="figure iz ja jb jc jd cl by bz paragraph-image">
<p><img src="https://lupyuen.github.io/images/legacy/m2.png" /></p>
</div>
<p id="2340" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Press <code
class="cy hh hi hj hk b">Enter</code></p>
<p id="3b2f" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Press the arrow
keys to move the cursor to each of these modules. Press <code class="cy hh hi hj hk b">S</code> to
select…</p>
<p id="5724" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">1<code
class="cy hh hi hj hk b">Hash Modes → CMAC support</code></p>
</div>
</div>
<div class="cl">
<div class="n p">
<div class="jn jo jp jq jr js ae jt af ju ah ai">
<div class="figure iz ja jb jc jd cl jv jw paragraph-image">
<p><img src="https://lupyuen.github.io/images/legacy/m3.png" /></p>
</div>
</div>
</div>
</div>
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<p id="5bcf" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">2<code
class="cy hh hi hj hk b">Random Number Generation → User-space interface for hash algorithms</code>
</p>
<p id="91de" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">3<code
class="cy hh hi hj hk b">Random Number Generation → User-space interface for symmetric key cipher algorithms</code>
</p>
</div>
</div>
<div class="cl">
<div class="n p">
<div class="jn jo jp jq jr js ae jt af ju ah ai">
<div class="figure iz ja jb jc jd cl jv jw paragraph-image">
<p><img src="https://lupyuen.github.io/images/legacy/m4.png" /></p>
</div>
</div>
</div>
</div>
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<p id="337e" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">You should see
<code class="cy hh hi hj hk b">(*)</code> when the module is selected.</p>
<p id="bea2" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Press <code
class="cy hh hi hj hk b">Esc</code> a few times until you see the prompt <code
class="cy hh hi hj hk b">Do you wish to save your new configuration</code></p>
</div>
</div>
<div class="cl">
<div class="n p">
<div class="jn jo jp jq jr js ae jt af ju ah ai">
<div class="figure iz ja jb jc jd cl jv jw paragraph-image">
<p><img src="https://lupyuen.github.io/images/legacy/m5.png" /></p>
</div>
</div>
</div>
</div>
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<p id="4468" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Select <code
class="cy hh hi hj hk b">Yes</code> and the command prompt reappears.</p>
<p id="9926" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Heres a video
that shows the steps…</p>
</div>
</div>
<div class="cl">
<div class="n p">
<div class="jn jo jp jq jr js ae jt af ju ah ai">
<div class="figure iz ja jb jc jd cl">
<p><a href="https://youtu.be/ETDOdd6daUY">[Watch video on YouTube]</a></p>
<figcaption><p><em>AEAD-AES_CCM encryption for meshctl on
Raspberry Pi</em></p></figcaption>
</div>
</div>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="0c72" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">5. Build Pi
Kernel</h1>
<p id="0b9c" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef">Before building
the kernel, well backup the old kernel into <code class="cy hh hi hj hk b">/OLDboot</code> in case
the new kernel fails. Enter…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="09f5" class="ef jh ib bo hk b dk ji jj r jk">sudo cp -r /boot /OLDboot</span></pre>
<p id="4c2f" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Now we build
and install the kernel. Enter…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="a55e" class="ef jh ib bo hk b dk ji jj r jk">make -j4 zImage modules dtbs<br/>sudo make modules_install<br/>sudo cp arch/arm/boot/dts/*.dtb /boot/<br/>sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/<br/>sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/<br/>sudo cp arch/arm/boot/zImage /boot/$KERNEL.img<br/>sudo sync<br/>sudo reboot</span></pre>
<p id="b812" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">This kernel
build may take an hour or more to complete. When its done our Pi should reboot with the new kernel.
</p>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="1994" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">6. Test meshctl
</h1>
<p id="60eb" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef">After
rebooting, open a command prompt and enter…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="5461" class="ef jh ib bo hk b dk ji jj r jk">meshctl</span></pre>
<p id="bd1d" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Press <code
class="cy hh hi hj hk b">Enter</code> to see the <code class="cy hh hi hj hk b">[meshctl]#</code>
prompt.</p>
<p id="ed4f" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">If you dont
see any errors, congratulations you have installed <code class="cy hh hi hj hk b">meshctl</code>!</p>
<p id="a8ea" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Enter this to
exit <code class="cy hh hi hj hk b">meshctl</code></p>
<pre
class="iz ja jb jc jd je jf jg"><span id="12b0" class="ef jh ib bo hk b dk ji jj r jk">exit</span></pre>
<p id="8874" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Remember:
Always exit <code class="cy hh hi hj hk b">meshctl</code> properly, otherwise it will lock on to the
Bluetooth driver and you would need to reboot the Pi to fix this.</p>
<p id="739a" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">If you see this
message instead…</p>
<pre
class="iz ja jb jc jd je jf jg"><span id="65fa" class="ef jh ib bo hk b dk ji jj r jk">Failed to parse provisioning database file prov_db.json</span></pre>
<p id="91b7" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">It means that
your kernel still doesnt have AEAD-AES_CCM encryption installed. Carefully redo each step from the
top of this article.</p>
</div>
</div>
</section>
<hr class="hq dj hr hs ht hu dg hv hw hx hy hz" />
<section class="cg ch ci cj ck">
<div class="n p">
<div class="z ab ac ae af dl ah ai">
<h1 id="86ba" class="ia ib bo bn ic id ie if ig ih ii ij ik il im in io ip iq ir is ef">References</h1>
<p id="34d7" class="go gp bo gq b gr it gt gu iu gw gx iv gz ha iw hc hd ix hf hg cg ef">If you have
problems configuring and building the Pi kernel, refer to the official guides…</p>
<ol class="">
<li id="12ce" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg jz ka kb ef"><em
class="hl"></em><a
href="https://www.raspberrypi.org/documentation/linux/kernel/building.md"
class="bh fw hm hn ho hp" target="_blank" rel="noopener nofollow"><em class="hl">Kernel
Building</em></a><em class="hl"></em></li>
<li id="1c28" class="go gp bo gq b gr kc gt gu kd gw gx ke gz ha kf hc hd kg hf hg jz ka kb ef"><em
class="hl"></em><a
href="https://www.raspberrypi.org/documentation/linux/kernel/configuring.md"
class="bh fw hm hn ho hp" target="_blank" rel="noopener nofollow"><em class="hl">Configuring The
Kernel</em></a><em class="hl"></em></li>
</ol>
<p id="b701" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">If you have
problems provisioning the Bluetooth Mesh, refer to the official guide by Bluetooth SIG…</p>
<p id="c676" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><em
class="hl"></em><a
href="https://3pl46c46ctx02p7rzdsvsg21-wpengine.netdna-ssl.com/wp-content/uploads/2019/03/Tutorial-How-to-set-up-BlueZ_Part2-3.pdf?utm_campaign=developer&amp;utm_source=internal&amp;utm_medium=blog&amp;utm_content=Deploying-BlueZ-v5.50-on-Raspberry-Pi3-Update"
class="bh fw hm hn ho hp" target="_blank" rel="noopener nofollow"><em class="hl">How to Deploy BlueZ
v5.50 on Raspberry Pi 3 and Use It, Part 2 — Provisioning</em></a><em class="hl"></em></p>
<p id="cbbf" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef">Here is an
excellent series of articles on Bluetooth Mesh for Zephyr embedded OS…</p>
<p id="2f43" class="go gp bo gq b gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg cg ef"><em
class="hl"></em><a
href="https://www.96boards.org/blog/patient-monitoring-system-part4/"
class="bh fw hm hn ho hp" target="_blank" rel="noopener nofollow"><em class="hl">Patient Monitoring
System using 96Boards</em></a><em class="hl"></em></p>
</div>
</div>
</section>
</div>
</article>
</div>
</div>
<ul>
<li>
<p><a href="https://github.com/sponsors/lupyuen">Sponsor me a coffee</a></p>
</li>
<li>
<p><a href="https://lupyuen.github.io">Check out my articles</a></p>
</li>
<li>
<p><a href="https://lupyuen.github.io/rss.xml">RSS Feed</a></p>
</li>
</ul>
</body>
</html>
<!--
FILE ARCHIVED ON 08:36:09 Jul 17, 2020 AND RETRIEVED FROM THE
INTERNET ARCHIVE ON 11:35:57 Feb 23, 2021.
JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
SECTION 108(a)(3)).
-->
<!--
playback timings (ms):
exclusion.robots.policy: 0.347
captures_list: 86.975
exclusion.robots: 0.365
RedisCDXSource: 1.823
PetaboxLoader3.resolve: 26.596
esindex: 0.017
CDXLines.iter: 29.229 (3)
LoadShardBlock: 51.06 (3)
PetaboxLoader3.datanode: 727.886 (4)
load_resource: 720.111
-->