{"id":5043,"date":"2026-05-07T11:15:05","date_gmt":"2026-05-07T15:15:05","guid":{"rendered":"https:\/\/wp.w2mmd.org\/wp\/wspr-network-resources\/tapr-wspr-board-for-dummies\/"},"modified":"2026-05-07T11:15:05","modified_gmt":"2026-05-07T15:15:05","slug":"tapr-wspr-board-for-dummies","status":"publish","type":"page","link":"https:\/\/wp.w2mmd.org\/wp\/wspr-network-resources\/tapr-wspr-board-for-dummies\/","title":{"rendered":"The TAPR WSPR Board for Dummies"},"content":{"rendered":"\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bitter:wght@400;600;700&#038;family=Source+Sans+3:ital,wght@0,400;0,600;1,400&#038;display=swap\" rel=\"stylesheet\">\n<style>\n  .tapr-article {\n    --tapr-navy: #0A2342;\n    --tapr-gold: #C9A84C;\n    --tapr-cream: #F4F1E8;\n    --tapr-text: #2C2C2C;\n    --tapr-muted: #5A6A7A;\n    --tapr-accent-bg: #EDE8DB;\n    --tapr-highlight: #FFF3D0;\n    font-family: 'Source Sans 3', Georgia, serif;\n    color: var(--tapr-text);\n    background: var(--tapr-cream);\n    line-height: 1.75;\n    font-size: 18px;\n    margin: 0 auto;\n    max-width: 880px;\n    border-radius: 6px;\n    overflow: hidden;\n    box-shadow: 0 2px 16px rgba(0,0,0,0.08);\n  }\n  .tapr-article * { box-sizing: border-box; }\n\n  .tapr-article .page-header {\n    background: var(--tapr-navy);\n    color: var(--tapr-cream);\n    padding: 3rem 2rem 2.5rem;\n    text-align: center;\n    border-bottom: 4px solid var(--tapr-gold);\n  }\n  .tapr-article .page-header h1 {\n    font-family: 'Bitter', serif;\n    font-size: clamp(1.8rem, 4vw, 2.8rem);\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    margin-bottom: 0.5rem;\n  }\n  .tapr-article .page-header .subtitle {\n    font-size: 1.1rem;\n    color: var(--tapr-gold);\n    font-style: italic;\n  }\n  .tapr-article .page-header .byline {\n    margin-top: 1rem;\n    font-size: 0.9rem;\n    color: #8A9BB0;\n  }\n\n  .tapr-article .body-wrap {\n    max-width: 760px;\n    margin: 0 auto;\n    padding: 2.5rem 1.5rem 4rem;\n  }\n\n  .tapr-article h2 {\n    font-family: 'Bitter', serif;\n    font-size: 1.5rem;\n    color: var(--tapr-navy);\n    margin: 2.5rem 0 1rem;\n    padding-bottom: 0.3rem;\n    border-bottom: 2px solid var(--tapr-gold);\n  }\n  .tapr-article h3 {\n    font-family: 'Bitter', serif;\n    font-size: 1.15rem;\n    color: var(--tapr-navy);\n    margin: 1.8rem 0 0.6rem;\n  }\n  .tapr-article p { margin-bottom: 1.1rem; }\n\n  .tapr-article .lead {\n    font-size: 1.15rem;\n    color: var(--tapr-muted);\n    border-left: 3px solid var(--tapr-gold);\n    padding-left: 1.2rem;\n    margin-bottom: 1.8rem;\n  }\n  .tapr-article .callout {\n    background: var(--tapr-accent-bg);\n    border-left: 4px solid var(--tapr-gold);\n    padding: 1.2rem 1.4rem;\n    margin: 1.5rem 0;\n    border-radius: 0 6px 6px 0;\n  }\n  .tapr-article .callout strong { color: var(--tapr-navy); }\n  .tapr-article .analogy {\n    background: var(--tapr-highlight);\n    padding: 1rem 1.3rem;\n    border-radius: 6px;\n    margin: 1.5rem 0;\n    font-style: italic;\n  }\n  .tapr-article .analogy::before { content: \"\ud83d\udca1 \"; }\n  .tapr-article .stage-label {\n    display: inline-block;\n    background: var(--tapr-navy);\n    color: var(--tapr-gold);\n    font-family: 'Bitter', serif;\n    font-size: 0.85rem;\n    font-weight: 600;\n    padding: 0.15rem 0.7rem;\n    border-radius: 3px;\n    margin-bottom: 0.4rem;\n    letter-spacing: 0.04em;\n    text-transform: uppercase;\n  }\n\n  .tapr-article .signal-chain {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-wrap: wrap;\n    gap: 0.3rem;\n    margin: 2rem 0;\n    padding: 1.2rem;\n    background: var(--tapr-navy);\n    border-radius: 8px;\n    font-family: 'Bitter', serif;\n    font-size: 0.85rem;\n  }\n  .tapr-article .signal-chain .block {\n    background: var(--tapr-gold);\n    color: var(--tapr-navy);\n    padding: 0.5rem 0.9rem;\n    border-radius: 4px;\n    font-weight: 600;\n    text-align: center;\n    white-space: nowrap;\n  }\n  .tapr-article .signal-chain .arrow {\n    color: var(--tapr-gold);\n    font-size: 1.3rem;\n  }\n  .tapr-article .signal-chain .annotation {\n    color: #8A9BB0;\n    font-family: 'Source Sans 3', sans-serif;\n    font-size: 0.75rem;\n    font-weight: 400;\n    display: block;\n    margin-top: 0.15rem;\n  }\n\n  .tapr-article .article-footer {\n    text-align: center;\n    padding: 2rem;\n    font-size: 0.85rem;\n    color: var(--tapr-muted);\n    border-top: 1px solid #D0C9B8;\n  }\n  .tapr-article .article-footer a { color: var(--tapr-navy); }\n\n  @media (max-width: 600px) {\n    .tapr-article .body-wrap { padding: 1.5rem 1rem 3rem; }\n    .tapr-article .signal-chain { flex-direction: column; }\n    .tapr-article .signal-chain .arrow { transform: rotate(90deg); }\n  }\n<\/style>\n\n<div class=\"tapr-article\">\n\n<div class=\"page-header\">\n  <h1>The TAPR WSPR Board for Dummies<\/h1>\n  <div class=\"subtitle\">How a Raspberry Pi and a small circuit board put your signal on the map \u2014 literally<\/div>\n  <div class=\"byline\">GCARC Skunkworks &bull; W2MMD<\/div>\n<\/div>\n\n<div class=\"body-wrap\">\n\n  <p class=\"lead\">The TAPR WSPR transmitter boards \u2014 the original &#8220;WSPR Without Tears&#8221; (WWoT) and the newer &#8220;Versatile WSPR&#8221; (VW) \u2014 are add-on boards that plug onto a Raspberry Pi and turn it into a complete WSPR beacon. This article explains what&#8217;s actually happening inside, from GPIO pin to antenna, in plain language.<\/p>\n\n  <h2>What Is WSPR and Why Should You Care?<\/h2>\n\n  <p>WSPR (pronounced &#8220;whisper&#8221;) stands for Weak Signal Propagation Reporter. It&#8217;s a digital mode created by Joe Taylor, K1JT, that works like a ham radio beacon. Your transmitter sends a short, precisely encoded message containing your callsign, grid square, and transmit power. WSPR receivers around the world pick up these signals and log them to a central database at <a href=\"https:\/\/wsprnet.org\" target=\"_blank\" rel=\"noopener\">wsprnet.org<\/a>.<\/p>\n\n  <p>The magic of WSPR is that it works at absurdly low power levels. It&#8217;s routine to transmit 100\u2013200 milliwatts from New Jersey and be received in Australia or Europe. You put your beacon on the air, then sit back and watch from the internet as your signal gets picked up across the globe. It&#8217;s a fascinating way to study propagation \u2014 how time of day, seasons, and solar conditions affect where your signal reaches.<\/p>\n\n  <h2>The Big Picture<\/h2>\n\n  <p>The TAPR board solves two problems with using a bare Raspberry Pi as a WSPR transmitter. First, the Pi&#8217;s raw output is only about 10 milliwatts \u2014 not much. Second, that raw output is a square wave loaded with harmonics that would splatter energy across multiple bands. The board amplifies the signal and filters it clean.<\/p>\n\n  <p>Here&#8217;s the complete signal chain at a glance:<\/p>\n\n  <div class=\"signal-chain\">\n    <div class=\"block\">Pi GPIO Pin 7<span class=\"annotation\">~10 mW square wave<\/span><\/div>\n    <div class=\"arrow\">\u2192<\/div>\n    <div class=\"block\">MOSFET Amplifier<span class=\"annotation\">boost to 100\u2013200 mW<\/span><\/div>\n    <div class=\"arrow\">\u2192<\/div>\n    <div class=\"block\">7-Pole Low-Pass Filter<span class=\"annotation\">kill harmonics (\u221243 dB)<\/span><\/div>\n    <div class=\"arrow\">\u2192<\/div>\n    <div class=\"block\">BNC to Antenna<span class=\"annotation\">clean sine wave out<\/span><\/div>\n  <\/div>\n\n  <p>Let&#8217;s walk through each stage.<\/p>\n\n  <h2>Stage 1: The Pi Creates the Signal<\/h2>\n\n  <div class=\"stage-label\">Signal Source<\/div>\n\n  <p>This is the clever part. The Raspberry Pi has a programmable clock output on GPIO 4 (physical header pin 7). Software called WsprryPi reprograms the Pi&#8217;s internal PLL (phase-locked loop) clock synthesizer to output a signal at the desired HF frequency \u2014 say 10.1387 MHz for the 30-meter band.<\/p>\n\n  <p>WSPR messages are encoded using FSK \u2014 frequency-shift keying. The protocol uses four tones spaced about 1.46 Hz apart. The software achieves this by making tiny adjustments to the clock synthesizer&#8217;s frequency divider every symbol period, nudging the output frequency by just a couple of hertz at a time. The Pi also syncs to internet time servers (NTP), because WSPR receivers need to know exactly when to start listening \u2014 timing precision matters.<\/p>\n\n  <p>What comes out of pin 7 is a 3.3-volt square wave at RF frequency, already modulated with your WSPR message. No external oscillator, no sound card, no mixer \u2014 just clever software manipulation of the Pi&#8217;s own clock hardware. That signal carries about 10 milliwatts of power.<\/p>\n\n  <h2>Stage 2: The Amplifier Boosts It<\/h2>\n\n  <div class=\"stage-label\">Amplification<\/div>\n\n  <p>Ten milliwatts isn&#8217;t much to work with. The TAPR board uses a BS170 N-channel MOSFET transistor to boost the signal. The Pi&#8217;s square wave drives the transistor&#8217;s gate, switching current through a drain inductor connected to the 5-volt supply. A small potentiometer on the board lets you set the bias current \u2014 the VW version specifies about 60 milliamps.<\/p>\n\n  <p>This stage brings the output up to roughly 100\u2013200 milliwatts (20\u201323 dBm), depending on which version of the board you have. The signal is still a square wave at this point \u2014 just a bigger one. And that&#8217;s a problem, because square waves are loaded with harmonic energy. Which brings us to the most important stage on the board.<\/p>\n\n  <h2>A Quick Detour: Why Square Waves Are a Problem<\/h2>\n\n  <p>This is the key concept that makes the rest of the board make sense.<\/p>\n\n  <p>A sine wave is the simplest possible oscillation. It contains energy at exactly one frequency and nothing else. It <em>is<\/em> the fundamental building block of all waveforms.<\/p>\n\n  <p>A square wave, by contrast, is built from a stack of sine waves added together. A theorem from the mathematician Fourier tells us that a perfect square wave at frequency <em>f<\/em> is actually the sum of sine waves at <em>f<\/em>, 3<em>f<\/em>, 5<em>f<\/em>, 7<em>f<\/em>, and so on \u2014 all the odd harmonics \u2014 with each one smaller than the last.<\/p>\n\n  <div class=\"analogy\">Think of it like building a brick wall with round stones. To get those sharp corners and flat surfaces, you need a lot of small stones filling in the gaps. A smooth dome (sine wave) takes just one curve. A flat-topped, sharp-edged wall (square wave) requires lots of additional high-frequency detail to hold its shape.<\/div>\n\n  <p>So a 10 MHz square wave doesn&#8217;t just contain energy at 10 MHz. It&#8217;s simultaneously transmitting at 30 MHz, 50 MHz, 70 MHz, and on up. The 3rd harmonic of a 40-meter signal lands right in the 15-meter band. The 3rd harmonic of 30 meters lands near 10 meters. Without filtering, you&#8217;d be splattering signals across the HF spectrum \u2014 that&#8217;s illegal, inconsiderate, and exactly what the low-pass filter is there to prevent.<\/p>\n\n  <h2>Stage 3: The Filter Cleans It Up<\/h2>\n\n  <div class=\"stage-label\">7-Pole Low-Pass Filter<\/div>\n\n  <p>The 7-pole low-pass filter is the heart of the TAPR board. It&#8217;s built from three inductors and four capacitors arranged in a classic LC ladder network. The component values are chosen so that the filter&#8217;s cutoff frequency sits just above the operating band.<\/p>\n\n  <p>Here&#8217;s what it does: signals at the fundamental frequency pass through with very little loss \u2014 the filter is essentially transparent to them. But as frequency increases, the inductors (whose impedance rises with frequency) increasingly resist the signal, while the capacitors (which become better conductors at higher frequencies) shunt that energy to ground. By the 3rd harmonic, the signal is reduced by at least 43 dB \u2014 that&#8217;s a reduction of more than 99.99%.<\/p>\n\n  <div class=\"analogy\">Imagine the square wave as a musical chord containing a bass note (the fundamental) plus a bunch of high-pitched overtones (the harmonics). The filter is like an EQ that passes the bass note through untouched but aggressively rolls off everything above it. What comes out the other side is just the bass note \u2014 a pure tone.<\/div>\n\n  <p>Since the fundamental frequency component of a square wave is already a perfect sine wave, removing the harmonics doesn&#8217;t create a sine wave out of nothing \u2014 it reveals the one that was always there as the dominant component. The filter is subtractive, like a sculptor removing stone to reveal the shape inside.<\/p>\n\n  <p>The Versatile WSPR (VW) version of the board ships without the filter components installed. You solder in the specific capacitor and inductor values for your chosen band, which lets one board design cover everything from 160 meters through 10 meters.<\/p>\n\n  <h2>One More Thing: How Does the Signal Become AC?<\/h2>\n\n  <p>There&#8217;s a subtle detail worth understanding. The Pi&#8217;s GPIO pin swings between 0 volts and +3.3 volts \u2014 it never goes negative. But an RF signal on an antenna needs to swing symmetrically above and below zero. How does that transition happen?<\/p>\n\n  <p>The capacitors in the signal path make this happen automatically. Here&#8217;s the mechanism: during the high portion of the square wave (3.3V), the first coupling capacitor in the circuit charges up. During the low portion (0V), that capacitor <em>discharges back through the circuit<\/em>. From the perspective of everything downstream, that discharge current is flowing in the opposite direction \u2014 and the downstream side sees it as a negative voltage.<\/p>\n\n  <p>In steady state, the capacitor sits charged to the average DC level of the signal (about 1.65V). The output side of the capacitor then swings equally above and below zero: roughly +1.65V during the high periods and \u22121.65V during the low periods. The total swing is still 3.3V peak-to-peak, but it&#8217;s now centered on zero.<\/p>\n\n  <div class=\"callout\">\n    <strong>In short:<\/strong> the zero-voltage periods of the original square wave don&#8217;t stay at zero. The capacitor&#8217;s discharge pulls them negative. The capacitors in the low-pass filter serve double duty \u2014 they remove harmonics <em>and<\/em> strip the DC offset, delivering a clean, symmetric AC sine wave to the antenna.\n  <\/div>\n\n  <h2>The Output<\/h2>\n\n  <p>After all of this, what arrives at the BNC connector is a clean sine wave at the desired WSPR frequency, swinging symmetrically positive and negative, carrying 100\u2013200 milliwatts of power. The board also includes a simple diode-and-capacitor RF detector that provides a DC voltage at a test point so you can confirm the transmitter is working without needing a scope or power meter. An LED lights up during transmit as a visual sanity check.<\/p>\n\n  <p>Connect an antenna, and the signal goes out into the world. Receivers across the globe decode your callsign, log it to <a href=\"https:\/\/wsprnet.org\" target=\"_blank\" rel=\"noopener\">wsprnet.org<\/a>, and you can watch from your browser as your 200 milliwatts reaches places thousands of miles away.<\/p>\n\n  <h2>Summary<\/h2>\n\n  <p>The TAPR WSPR boards are an elegant solution to a fun problem. The Raspberry Pi does something remarkable \u2014 it generates a fully modulated WSPR signal using nothing but software manipulation of its clock hardware. The TAPR board then takes that raw signal and does the two things needed to make it legal and useful: it amplifies it from 10 mW to 100\u2013200 mW, and it filters out the harmonic energy that&#8217;s inherent in the Pi&#8217;s square-wave output, delivering a clean sine wave to your antenna.<\/p>\n\n  <p>The whole thing fits in your hand, costs well under $100, runs unattended, and needs nothing more than a Pi, a power supply, an internet connection, and a wire antenna. Not bad for a propagation laboratory.<\/p>\n\n<\/div>\n\n<div class=\"article-footer\">\n  <p>GCARC Skunkworks &bull; Gloucester County Amateur Radio Club &bull; W2MMD<\/p>\n<\/div>\n\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>The TAPR WSPR Board for Dummies How a Raspberry Pi and a small circuit board put your signal on the map \u2014 literally GCARC Skunkworks &bull; W2MMD The TAPR WSPR transmitter boards \u2014 the original &#8220;WSPR Without Tears&#8221; (WWoT) and the newer &#8220;Versatile WSPR&#8221; (VW) \u2014 are add-on boards that plug onto a Raspberry Pi [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":3127,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5043","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/pages\/5043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/comments?post=5043"}],"version-history":[{"count":0,"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/pages\/5043\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/pages\/3127"}],"wp:attachment":[{"href":"https:\/\/wp.w2mmd.org\/wp\/wp-json\/wp\/v2\/media?parent=5043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}