<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>openchirp | Craig Hesling</title><link>https://new.craighesling.com/tag/openchirp/</link><atom:link href="https://new.craighesling.com/tag/openchirp/index.xml" rel="self" type="application/rss+xml"/><description>openchirp</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Sun, 03 Dec 2017 07:46:59 -0500</lastBuildDate><image><url>https://new.craighesling.com/media/icon_hud2fdbe3c21f96e183bc7961971f91459_788_512x512_fill_lanczos_center_3.png</url><title>openchirp</title><link>https://new.craighesling.com/tag/openchirp/</link></image><item><title>Easybits Serialization Service</title><link>https://new.craighesling.com/project/easybits/</link><pubDate>Sun, 03 Dec 2017 07:46:59 -0500</pubDate><guid>https://new.craighesling.com/project/easybits/</guid><description>&lt;p>
&lt;figure >
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img src="https://new.craighesling.com/img/easybits_config_example3.png" alt="Example Easybits device configuration" loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;/figure>
&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>Easybits is an on-the-fly Google protobuf stream decoder/encoder for
&lt;a href="https://new.craighesling.com/project/openchirp/">OpenChirp&lt;/a>.
This service is one of the core services that an embedded device may
need in it&amp;rsquo;s OpenChirp data pipeline.&lt;/p>
&lt;p>The idea is that your device would use Google Protobufs to serialize
(and deserialize) it&amp;rsquo;s data and sends it to OpenChirp.
The Easybits service is then invoked, which deserializes your data and
publishes human readable values back to OpenChirp.&lt;/p>
&lt;p>Easybits just needs the user to describe what protobuf types were declared
and where to place the data.&lt;/p>
&lt;h2 id="how-it-works">How it works&lt;/h2>
&lt;p>Google Protobufs are great for creating compact serialized data packets for
typical sensor values.&lt;/p>
&lt;p>Protobufs requires you to create a &lt;code>.proto&lt;/code> file that
describes what data you intend to send back and forth. It then compiles this
&lt;code>.proto&lt;/code> file into a set of language specific interface files, which
containing functions and objects to represent and aggregate your data.&lt;/p>
&lt;blockquote>
&lt;p>Here is an example &lt;code>.proto&lt;/code> file description for a smart light bulb.&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-protobuf" data-lang="protobuf">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// SmartBulb.proto
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">syntax&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;proto3&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="kd">message&lt;/span> &lt;span class="nc">LightStatus&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="kt">bool&lt;/span> &lt;span class="n">status&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span> &lt;span class="kt">int64&lt;/span> &lt;span class="n">intensity&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Due to this native language integration, protobufs are easy for end users to
pack up and send data messages, but it is non-trivial to create long running
services that can interpret all possible custom protobuf messages, without
recompilation.&lt;/p>
&lt;p>To get around the Protobuf constraint of recompiling for every new protobuf
message, Easybits uses &lt;a href="https://new.craighesling.com/project/dproto/">dproto&lt;/a> to adapt to new user
described messages, without even restarting.&lt;/p>
&lt;h2 id="links">Links&lt;/h2>
&lt;p>&lt;a href="https://github.com/OpenChirp/easybits-service" target="_blank" rel="noopener">Easybits on Github&lt;/a>&lt;/p></description></item><item><title>OpenChirp</title><link>https://new.craighesling.com/project/openchirp/</link><pubDate>Sun, 03 Dec 2017 07:46:59 -0500</pubDate><guid>https://new.craighesling.com/project/openchirp/</guid><description>
&lt;div class="gallery">
&lt;a data-fancybox="gallery-main" data-caption="Gateway 1" href="https://new.craighesling.com/project/openchirp/GSIA_GW_hu8af566d35e172a1448aad7b439b9ad98_1089158_1920x0_resize_q75_lanczos.jpg">
&lt;img alt="GSIA_GW.jpg" src="https://new.craighesling.com/project/openchirp/GSIA_GW_hu8af566d35e172a1448aad7b439b9ad98_1089158_1920x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="OpenChirp Logo" href="https://new.craighesling.com/project/openchirp/OCStickerDark.svg">
&lt;img alt="OCStickerDark.svg" src="https://new.craighesling.com/project/openchirp/OCStickerDark.svg">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="A gateway up-close" href="https://new.craighesling.com/project/openchirp/OnGround_Wean_GW_hu2ae3da5a428bf1047e2250f9a743cb87_3037040_3024x0_resize_q75_lanczos.jpg">
&lt;img alt="OnGround_Wean_GW.jpg" src="https://new.craighesling.com/project/openchirp/OnGround_Wean_GW_hu2ae3da5a428bf1047e2250f9a743cb87_3037040_3024x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="Gateway 2" href="https://new.craighesling.com/project/openchirp/SouthCraig_GW_hu3c1fbb5776c28c3856df7474a5b76c50_1314334_3120x0_resize_q75_lanczos.jpg">
&lt;img alt="SouthCraig_GW.jpg" src="https://new.craighesling.com/project/openchirp/SouthCraig_GW_hu3c1fbb5776c28c3856df7474a5b76c50_1314334_3120x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="Gateway 3" href="https://new.craighesling.com/project/openchirp/Wean_GW_hu9b7bdac86ca23d1aa5a7028c80665157_715377_3120x0_resize_q75_lanczos.jpg">
&lt;img alt="Wean_GW.jpg" src="https://new.craighesling.com/project/openchirp/Wean_GW_hu9b7bdac86ca23d1aa5a7028c80665157_715377_3120x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;/div>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>We are creating a community-driven low-power wireless connectivity solution for
IoT.&lt;/p>
&lt;h2 id="my-contributions">My Contributions&lt;/h2>
&lt;ul>
&lt;li>Designed, built, and installed outdoor gateways&lt;/li>
&lt;li>Created custom Debian packages for gateway software and configuration - &lt;a href="https://github.com/OpenChirp/ocgw" target="_blank" rel="noopener">ocgw&lt;/a>&lt;/li>
&lt;li>Created gateway system monitoring service - &lt;a href="https://github.com/OpenChirp/sysmonitor-device" target="_blank" rel="noopener">SysMonitor Device&lt;/a>&lt;/li>
&lt;li>Created the Golang framework for Users, Devices, and Services - &lt;a href="https://github.com/OpenChirp/framework" target="_blank" rel="noopener">framework&lt;/a> and &lt;a href="https://github.com/OpenChirp/example-service" target="_blank" rel="noopener">Example Service&lt;/a>&lt;/li>
&lt;li>Created the LoRaWAN integration service&lt;/li>
&lt;li>Created data serialization/deserialization services - &lt;a href="https://github.com/OpenChirp/bytetranslator-service" target="_blank" rel="noopener">ByteTranslator Service&lt;/a> and &lt;a href="https://new.craighesling.com/project/easybits">Easybits Service&lt;/a>&lt;/li>
&lt;li>Created prototype trigger service - &lt;a href="https://github.com/OpenChirp/trigger-service" target="_blank" rel="noopener">Trigger Service&lt;/a>&lt;/li>
&lt;li>Designed and built ultra low-power LoRaWAN client devices - &lt;a href="https://new.craighesling.com/project/lorabug">The LoRaBug&lt;/a>&lt;/li>
&lt;li>Created the hardware abstraction layer and adapted the necessary firmware stacks for the LoRaBug - &lt;a href="https://new.craighesling.com/project/lorabug/#software">LoRaBug Software&lt;/a>&lt;/li>
&lt;li>Created serial bootloader tool to flash the LoRaBug over micro USB - &lt;a href="https://new.craighesling.com/post/cc2538-cc26xx-bootloader/">ccbootutil&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Checkout the &lt;a href="http://OpenChirp.io" target="_blank" rel="noopener">OpenChirp.io Website&lt;/a>&lt;/p></description></item><item><title>The GridBallast Controller</title><link>https://new.craighesling.com/project/gridballast/gridballast/</link><pubDate>Sun, 03 Dec 2017 07:46:59 -0500</pubDate><guid>https://new.craighesling.com/project/gridballast/gridballast/</guid><description>&lt;p>FIXME - Add the gallery line back here.&lt;/p>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>This is a modular demand response controller for household or commercial
appliances that tend to consume a lot of power.
The original goal was to intelligently control water heaters.&lt;/p>
&lt;p>Water heaters tax the power grid heavily during peek times
(morning and afternoon), when people are using the most hot water.
These spikes in power consumption require power providers to plan ahead
and preemptively start up temporary power plant that may not meet the
typical efficiency and cleanliness standards.&lt;/p>
&lt;p>Fortunately, water heaters store enough hot water
for most normal household tasks, including taking a shower. Whether they turn
on during your morning shower or not, makes no noticeable difference.
Unfortunately, hot water heaters are controlled by mechanical switches
that activate the water heaters when the internal water temperature drops
below a certain point. This causes the heaters to activate during events like
your shower in the morning, when it might not be necessary.
If the water heater was to delay it&amp;rsquo;s activation to some random time during
the middle of the day, we could alleviate this peak demand issue.
This controller is designed to monitor the water heater vitals, observe it&amp;rsquo;s usage patterns, and intelligently control it&amp;rsquo;s activation.&lt;/p>
&lt;h2 id="schematic-and-board">Schematic and Board&lt;/h2>
&lt;h3 id="the-controller">The Controller&lt;/h3>
&lt;a href="https://cdn.rawgit.com/WiseLabCMU/gridballast/1d7e381e/Hardware/Controller/Info/ControllerV1.1.pdf">Download PDF&lt;/a>
&lt;p>A preview of the PDF should appear below. If it does not show up soon, please refresh the page.&lt;/p>
&lt;iframe src="https://docs.google.com/gview?url=https%3a%2f%2fcdn.rawgit.com%2fWiseLabCMU%2fgridballast%2f1d7e381e%2fHardware%2fController%2fInfo%2fControllerV1.1.pdf&amp;embedded=true" style="width:100%; height:600px;" frameborder="0">
This browser does not support PDFs. Please download the PDF to view it: &lt;a href="https://cdn.rawgit.com/WiseLabCMU/gridballast/1d7e381e/Hardware/Controller/Info/ControllerV1.1.pdf">Download PDF&lt;/a>
&lt;/iframe>
&lt;h3 id="the-cta2045-adapter">The CTA2045 Adapter&lt;/h3>
&lt;a href="https://cdn.rawgit.com/WiseLabCMU/gridballast/1d7e381e/Hardware/CTA2045/Info/CTA2045v1.pdf">Download PDF&lt;/a>
&lt;p>A preview of the PDF should appear below. If it does not show up soon, please refresh the page.&lt;/p>
&lt;iframe src="https://docs.google.com/gview?url=https%3a%2f%2fcdn.rawgit.com%2fWiseLabCMU%2fgridballast%2f1d7e381e%2fHardware%2fCTA2045%2fInfo%2fCTA2045v1.pdf&amp;embedded=true" style="width:100%; height:600px;" frameborder="0">
This browser does not support PDFs. Please download the PDF to view it: &lt;a href="https://cdn.rawgit.com/WiseLabCMU/gridballast/1d7e381e/Hardware/CTA2045/Info/CTA2045v1.pdf">Download PDF&lt;/a>
&lt;/iframe>
&lt;h2 id="simulation">Simulation&lt;/h2>
&lt;p>This board required some custom analog design.
I simulated some of the more complex circuits in &lt;a href="http://www.linear.com/designtools/software/#LTspice" target="_blank" rel="noopener">LTspice&lt;/a>.
The circuits and simulation are shown on the GitHub &lt;a href="https://github.com/WiseLabCMU/gridballast/tree/master/Hardware/Controller/Info/Simulations" target="_blank" rel="noopener">Simulations Page&lt;/a>.&lt;/p>
&lt;h2 id="links">Links&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://github.com/WiseLabCMU/gridballast/tree/master/Hardware/Controller/Info/Simulations" target="_blank" rel="noopener">Simulations&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/WiseLabCMU/gridballast" target="_blank" rel="noopener">GridBallast on Github&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://sites.google.com/view/gridballast/home" target="_blank" rel="noopener">GridBallast Website&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>System Monitor Device (for OpenChirp)</title><link>https://new.craighesling.com/post/sysmonitor-device/</link><pubDate>Mon, 06 Nov 2017 00:00:00 +0000</pubDate><guid>https://new.craighesling.com/post/sysmonitor-device/</guid><description>&lt;h2 id="summary">Summary&lt;/h2>
&lt;h2 id="how-it-works">How it works&lt;/h2>
&lt;h2 id="links">Links&lt;/h2>
&lt;p>&lt;a href="https://github.com/OpenChirp/sysmonitor-device" target="_blank" rel="noopener">sysmonitor-device on Github&lt;/a>&lt;/p></description></item><item><title>The LoRaBug</title><link>https://new.craighesling.com/project/lorabug/</link><pubDate>Sat, 03 Dec 2016 07:46:59 -0500</pubDate><guid>https://new.craighesling.com/project/lorabug/</guid><description>
&lt;div class="gallery">
&lt;a data-fancybox="gallery-main" data-caption="Fully built LoRaBugs with the environmental sensor board v1" href="https://new.craighesling.com/project/lorabug/Fully_Enclosed_hue365703db40798d641f7c145346ab307_1531989_4160x0_resize_q75_lanczos.jpg">
&lt;img alt="Fully_Enclosed.jpg" src="https://new.craighesling.com/project/lorabug/Fully_Enclosed_hue365703db40798d641f7c145346ab307_1531989_4160x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="Altium 3D rendering" href="https://new.craighesling.com/project/lorabug/LoRaBugBoardV3.1_3D_hu78434072f4b03f97a69451697241d2b9_446129_1030x0_resize_q75_lanczos_3.png">
&lt;img alt="LoRaBugBoardV3.1_3D.png" src="https://new.craighesling.com/project/lorabug/LoRaBugBoardV3.1_3D_hu78434072f4b03f97a69451697241d2b9_446129_1030x0_resize_q20_lanczos_3.png">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="The extremely low power consumption of the LoRaBug while sleep" href="https://new.craighesling.com/project/lorabug/LoRaBug_Exteme_Sleep_hua80e3be80af02d69f9ee4704be305725_1356728_4160x0_resize_q75_lanczos.jpg">
&lt;img alt="LoRaBug_Exteme_Sleep.jpg" src="https://new.craighesling.com/project/lorabug/LoRaBug_Exteme_Sleep_hua80e3be80af02d69f9ee4704be305725_1356728_4160x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;a data-fancybox="gallery-main" data-caption="The LoRaBug controlling LED accent lighting" href="https://new.craighesling.com/project/lorabug/LoRaBug_LED_Controller_hu1b844f0a393381480f4920e09890ee47_1248524_3088x0_resize_q75_lanczos.jpg">
&lt;img alt="LoRaBug_LED_Controller.jpg" src="https://new.craighesling.com/project/lorabug/LoRaBug_LED_Controller_hu1b844f0a393381480f4920e09890ee47_1248524_3088x0_resize_q15_lanczos.jpg">
&lt;/a>
&lt;/div>
&lt;h2 id="summary">Summary&lt;/h2>
&lt;p>The LoRaBug is a general purpose low-power sensor platform.
It tightly integrates an ARM Cortex M3 based MCU, BLE, and a LoRa radio.&lt;/p>
&lt;p>Checkout the &lt;a href="https://github.com/OpenChirp/LoRaBug" target="_blank" rel="noopener">Github repository&lt;/a> for more
detail.&lt;/p>
&lt;h2 id="key-features">Key Features&lt;/h2>
&lt;ul>
&lt;li>TI CC2650 MCU/Transciever - ARM Cortex M3, Bluetooth+BLE, and 2.4GHz 802.15.4&lt;/li>
&lt;li>Semtech SX1276 radio - 137MHz to 1020MHz supporting LoRa, FSK, GFSK, MSK, GMSK, and OOK&lt;/li>
&lt;li>Micro USB - Bootloading and Console&lt;/li>
&lt;li>Onboard 500mA 3.3V regulator&lt;/li>
&lt;/ul>
&lt;h2 id="software">Software&lt;/h2>
&lt;ul>
&lt;li>I have adapted the HAL of the official LoRaWAN stack for the CC2650 with TI-RTOS - &lt;a href="https://github.com/OpenChirp/LoRaMac-node/tree/lorabug" target="_blank" rel="noopener">LoRaWAN MAC&lt;/a>&lt;/li>
&lt;li>A spinoff from my example firmware can be found - &lt;a href="https://github.com/OpenChirp/LoRaBug_Firmware" target="_blank" rel="noopener">LoRaBug_Firmware&lt;/a>.&lt;/li>
&lt;li>I have created a cross-platform serial bootloader tool that allows you to flash the LoRaBug using just a micro usb cable - &lt;a href="https://new.craighesling.com/post/cc2538-cc26xx-bootloader/">ccbootutil&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="schematic-and-board">Schematic and Board&lt;/h2>
&lt;a href="https://cdn.rawgit.com/OpenChirp/LoRaBug/ec3e2fa6/Info/LoRaBugBoardV3.1.pdf">Download PDF&lt;/a>
&lt;p>A preview of the PDF should appear below. If it does not show up soon, please refresh the page.&lt;/p>
&lt;iframe src="https://docs.google.com/gview?url=https%3a%2f%2fcdn.rawgit.com%2fOpenChirp%2fLoRaBug%2fec3e2fa6%2fInfo%2fLoRaBugBoardV3.1.pdf&amp;embedded=true" style="width:100%; height:600px;" frameborder="0">
This browser does not support PDFs. Please download the PDF to view it: &lt;a href="https://cdn.rawgit.com/OpenChirp/LoRaBug/ec3e2fa6/Info/LoRaBugBoardV3.1.pdf">Download PDF&lt;/a>
&lt;/iframe></description></item></channel></rss>