<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Aprs on Getting On The Air</title><link>https://ham.bharathpalavalli.com/tags/aprs/</link><description>Recent content in Aprs on Getting On The Air</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><managingEditor>vu3glj@disroot.org (Bharath M. Palavalli)</managingEditor><webMaster>vu3glj@disroot.org (Bharath M. Palavalli)</webMaster><copyright>CC BY-NC-SA 4.0</copyright><lastBuildDate>Mon, 25 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ham.bharathpalavalli.com/tags/aprs/index.xml" rel="self" type="application/rss+xml"/><item><title>Introducing QRPickle, a hand-held companion for the field</title><link>https://ham.bharathpalavalli.com/posts/20260525174115-qrpickle/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><author>vu3glj@disroot.org (Bharath M. Palavalli)</author><guid>https://ham.bharathpalavalli.com/posts/20260525174115-qrpickle/</guid><description>&lt;style&gt;
.img-center{
margin-left: auto;
margin-right: auto;
max-width: 50%;
}
&lt;/style&gt;
&lt;p&gt;&lt;a id="figure--QRPickle Interface"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure class="img-center"&gt;&lt;img src="https://ham.bharathpalavalli.com/ox-hugo/QRPickle_small.gif"
 alt="Figure 1: QRPickle Splash Screen"&gt;&lt;figcaption&gt;
 &lt;p&gt;&lt;span class="figure-number"&gt;Figure 1: &lt;/span&gt;QRPickle Splash Screen&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This is a quick post introducing QRPickle, an ESP32-CYD hand-held for those who need a companion device in the field. I&amp;rsquo;ve been thinking about an easy way I can spot myself, look at APRS, get some band info, etc. in the field without having to resorting to the phone&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;TLDR; version:&lt;/p&gt;</description><content:encoded><![CDATA[<style>
.img-center{
margin-left:  auto;
margin-right: auto;
max-width: 50%;
}
</style>
<p><a id="figure--QRPickle Interface"></a></p>
<figure class="img-center"><img src="/ox-hugo/QRPickle_small.gif"
    alt="Figure 1: QRPickle Splash Screen"><figcaption>
      <p><span class="figure-number">Figure 1: </span>QRPickle Splash Screen</p>
    </figcaption>
</figure>

<p>This is a quick post introducing QRPickle, an ESP32-CYD hand-held for those who need a companion device in the field. I&rsquo;ve been thinking about an easy way I can spot myself, look at APRS, get some band info, etc. in the field without having to resorting to the phone<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>TLDR; version:</p>
<blockquote>
<ul>
<li>ESP32-CYD with BME280 for local Wx</li>
<li><a href="https://github.com/bmp/QRPickle">Open-source firmware</a></li>
<li>Download <a href="https://github.com/bmp/QRPickle/releases">firmware and manual</a></li>
<li>Head over to the web-based flasher at <a href="https://espressif.github.io/esptool-js/">espressif</a> or to an <a href="https://jason2866.github.io/WebSerial_ESPTool/">alternate</a> and flash the firmware</li>
</ul>
</blockquote>
<h2 id="background">Background</h2>
<p>A few HAMs (<a href="https://www.qrz.com/db/VU3GWN">VU3GWN</a>, <a href="https://www.qrz.com/db/VU25RK">VU25RK</a> and a few others) at <a href="https://barc.in">BARC</a> were talking about an ESP32 powered HAM Clock based on <a href="https://www.hackster.io/cburns2/ham-clock-cyd-ad1a45">https://www.hackster.io/cburns2/ham-clock-cyd-ad1a45</a> and by <a href="https://www.qrz.com/db/SP3KON">SP3KON</a>&rsquo;s work <a href="https://github.com/SP3KON/ESP32-HAM-CLOCK">https://github.com/SP3KON/ESP32-HAM-CLOCK</a>. A group buy/build occurred fairly quickly and <a href="https://www.qrz.com/db/VU3GWN">VU3GWN</a> put together some very good changes for English localisation and usage at <a href="https://github.com/coffeedev/BARC-HAM-CLOCK">https://github.com/coffeedev/BARC-HAM-CLOCK</a>.</p>
<p>A few challenges in how the screens presented information, and the kinds of information that were useful for me is what got me started to tinker with this project. I needed something that had better, readable fonts, high contrast themes for the field (night and day), pre-configured profiles that I can switch between when I am in the field, self spotting when in the field. While I do love the idea of HAM Clocks<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, given that I don&rsquo;t operate from home and self-hosting a clock with I will then have to &ldquo;connect&rdquo; to while in the field seemed tedious.</p>
<h2 id="requirements">Requirements</h2>
<p>My basic requirements for the HAM Clock were:</p>
<ul>
<li>Small and hand-held</li>
<li>QRP and battery powered</li>
<li>Band conditions and propagation</li>
<li>Self-spotting</li>
<li>DX Spots</li>
<li>POTA/SOTA lookups</li>
<li>APRS (I discovered APRS through this project)</li>
<li>OTA for firmware</li>
<li>Wx conditions</li>
<li>Field friendly themes</li>
<li>Profiles to switch hassle free in the field</li>
<li>Web UI for advanced settings</li>
</ul>
<h2 id="developing-the-firmware">Developing the firmware</h2>
<p>Arduino development is a nightmare! The versioning of libraries, the existing hardware clones, the way Arduino libraries are set-up to use. I quickly zoned on a simple <a href="https://platformio.org/">PlatformIO</a> command-line work flow to get this up and running after a few challenges with Arduino IDE and VSCodium. It was a pain to begin set-up, was a little bit of fun getting things going after the command-line work flow was configured, but since I was getting back to C/C++ programming a good two decades later, it got trickier. I finally resorted to a local LLM (SLM is more like it) for code generation and things progressed much faster than I had expected<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>.</p>
<h2 id="flashing">Flashing</h2>
<p>Flashing the firmware is pretty straightforward, download the latest release from the <a href="https://github.com/bmp/QRPickle/releases">repository</a>, it comes with a PDF manual. You only need to use all four firmware files and do a manual update the first time. After that, the web UI will allow you to update the device without having to fiddle around at all.</p>
<p>Go to the <a href="https://espressif.github.io/esptool-js/">web-based flashing</a> tool and flash the firmware based on the details below,</p>
<p><a id="table--tbl-esp32-layout"></a></p>
<div class="table-caption">
  <span class="table-number"><a href="#table--tbl-esp32-layout">Table 1</a>:</span>
  ESP32 Partition Table and Firmware Layout
</div>
<table>
  <thead>
      <tr>
          <th>Si. No.</th>
          <th>Partition Address</th>
          <th>Firmware File</th>
          <th>Comments</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>0x1000</td>
          <td>bootloader.bin</td>
          <td>Low-level ESP32 boot structures</td>
      </tr>
      <tr>
          <td>2</td>
          <td>0x8000</td>
          <td>partitions.bin</td>
          <td>Low-level ESP32 boot structures</td>
      </tr>
      <tr>
          <td>3</td>
          <td>0x10000</td>
          <td>firmware.bin</td>
          <td>The core C++ application</td>
      </tr>
      <tr>
          <td>4</td>
          <td>0x350000</td>
          <td>littlefs.bin</td>
          <td>The Web UI and filesystem data</td>
      </tr>
  </tbody>
</table>
<p>And the device should boot up, and create a WiFi access-point called <code>QRPickle-Setup</code> which does not require authentication. You could go ahead and add all the details here or just set-up your actual WiFi SSID and password to get it started first, and then add the details you would need later.</p>
<p>The web UI allows you to then flash <code>firmware.bin</code> (if only features or bug fixes have happened) and <code>littlefs.bin</code> (if configuration or stored data has changed) for future updates, you do not need to depend on any external flashing tool!</p>
<style>
.img-full{
margin-left:  auto;
margin-right: auto;
max-width: 100%;
}
</style>
<p><a id="figure--QRPickle Web Dashboard"></a></p>
<figure class="img-full"><img src="/ox-hugo/QRPickle_webdashboard.gif"
    alt="Figure 2: QRPickle Web Dashboard"><figcaption>
      <p><span class="figure-number">Figure 2: </span>QRPickle Web Dashboard</p>
    </figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Let us not worry about logging for now!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>The EOL of HamClock from Clear Sky Institute developed by <a href="https://www.qrz.com/db/WB0OW">WB0OW</a> (SK now), led to a slew of projects ranging from <a href="https://hamclock.com/">https://hamclock.com/</a>, <a href="https://ohb.works/">https://ohb.works/</a> with source at <a href="https://github.com/openhamclock">https://github.com/openhamclock</a>, and <a href="https://github.com/accius/openhamclock">https://github.com/accius/openhamclock</a>.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>Despite my long standing ethical issues with LLMs, this was a quicker turn-around, and smoother turnaround given my needs.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item></channel></rss>