
RFBitBangSMT
profdc9/RFBitBanger
A QRP digital transceiver created from readily available parts for off-the-grid maintenance

The code forclock-radio for ECE 299
Pcb schematics is an open-source printed circuit board by AniMB, from the AniMB/Clock-radio repository on GitHub, published under the LGPL-2.1 licence. It is a 2-layer board of 100 × 100 mm with 73 parts on 65 nets, routed with 332 tracks and 13 vias.
It is built around the LM386. Its parts include 16 capacitors, 8 resistors, 5 connectors, 4 ICs and 1 switch. It belongs with the RP2040 boards of this library.
mi69.py is the main script of an embedded, Wi-Fi-enabled FM radio and smart clock interface built on MicroPython. It combines a real-time clock, OLED UI, FM tuner, and web connectivity into a single-threaded yet responsive application, suitable for microcontrollers like the Raspberry Pi Pico W.
┌────────────┐
│ Button │◄────────────┐
└────┬───────┘ │
▼ │
┌─────────────┐ Debounce, Hold Detection
│ Main │─────────────┘
│ (mi69.py) │
└────┬────────┘
┌─────────┴─────────┐
▼ ▼
┌────────────┐ ┌────────────┐
│ Display │ │ Radio │
│ (OLED + UI)│ │ (FM chip) │
└────┬───────┘ └────┬───────┘
▼ ▼
┌──────────┐ ┌────────────┐
│ Web Time │ │ Web Server │◄──── Access via browser
└──────────┘ └────────────┘mi69.py – Main Control Loopweb_data.json)oled_dirty, json_dirty flags minimize redundant writesutime.ticks_ms() is used to throttle updates_locklibraries/display.py – OLED DrawingEncapsulates all drawing on the OLED display using framebuf:
display_clock_time(rtc.datetime())display_radio_freq(101.9)display_volume(5)Also handles font scaling, screen clearing, and line placement.
libraries/radio.py – FM Radio ControlControls an FM tuner (likely via I2C/SPI). Key methods:
set_freq(freq): set frequency (MHz)seek_up() / seek_down(): scan for stationsset_volume(level): 0–15 volume levelsKeeps state internally for restoring or syncing with UI/web.
config/resources.py – Global Shared StateContains:
oled_dirty, json_dirty, btn_short_req, etc._lock used by both threadsThis is the “RAM” for the system shared across all modules.
web_connectivity/web.py – HTTP ServerA simple HTTP server that runs on a new thread:
GET /status: Return JSON statePOST /set_time, POST /set_volume, etc.web_data.json using the shared _lockThis lets users control and monitor the device remotely.
web_data.json – State FileJSON-encoded structure for UI and web server to share state.
{
"volume": 5,
"frequency": 101.9,
"time": "12:34:56",
"alarm_enabled": false
}Used for persistence and as a synchronization bridge.
_thread module for background web server_lock for:
from _thread import start_new_thread
start_new_thread(WebServer().start, ())ticks_ms()main, display, radio, web, resourcesThis project is a highly educational template for combining hardware control, UI, web connectivity, and concurrency in MicroPython. It’s a complete working system for embedded devices with many real-world use cases.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 19 | TestPoint | TestPoint:TestPoint_Keystone_5000-5004_Miniature | TP1, TP2, TP3, TP4, TP5, TP6, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, TP19 +3 |
| 9 | 10kΩ | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R_Pullup1, R_Pullup2, R_Pullup3, R_Pullup4, R_Pullup5, R_Pullup6, R_Pullup7, R7, R8 |
| 6 | 0.01 µF | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C1, C2, C9, C10, C11, C14 |
| 6 | 10Ω | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2, R5, R6, R9, R10 |
| 4 | 470 µF | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C3, C6, C15, C16 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 3 | Conn_01x05 | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J3, J4, J5 |
| 2 | 0.05 µF | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C4, C5 |
| 2 | 0.1 µF | Capacitor_THT:C_Axial_L3.8mm_D2.6mm_P7.50mm_Horizontal | C12, C13 |
| 2 | 0.1 µF | Capacitor_SMD:C_0603_1608Metric | C7, C8 |
| 2 | 10 k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3, R4 |
| 2 | 10kΩ | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | RV1, RV2 |
| 2 | 2k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | Rpullup1, Rpullup2 |
| 2 | LM386 | LM386N_4:DIP794W45P254L1016H508Q8 | U3, U4 |
| 2 | Speaker | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal | LS1, LS2 |
| 1 | CUE_SJ1-352XNG | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J1 |
| 1 | Conn_01x01_Pin | Connector_Pin:Pin_D1.0mm_L10.0mm_LooseFit | J2 |
| 1 | OLED Display | ECE:OLED_Display_1.3 | DISP1 |
| 1 | RDA5807M_Module | ECE:RDA5807M_Module_TH | U2 |
| 1 | RPi_Pico_TH | Module:RaspberryPi_Pico_Common_THT | U1 |
| 1 | SW_Push | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | SW1 |
It measures 100 × 100 mm and has 2 copper layers, 1.6 mm thick.
73 parts, built around the LM386. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the AniMB/Clock-radio repository on GitHub, at the commit this page was made from: the board is pcb_schematics_Animish/pcb_schematics.kicad_pcb and its schematic pcb_schematics/pcb_schematics.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the LGPL-2.1 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

profdc9/RFBitBanger
A QRP digital transceiver created from readily available parts for off-the-grid maintenance

mattybrad/drumkid
Version 4 was the first successful working design, with full code, schematics, Gerbers, etc available on GitHub.

leomil72/LM80C
A Z80-based homebrew computer withTMS9918, AY-3-8910, Z80 CTC, Z80 PIO, and Z80 SIO


oskitone/poly555
The POLY555 is a polyphonic, analog, square wave synth based on the 555 timer chip.

robfinch/Cores
Cores ===== RTF's Cores Use at your own risk. Welcome to my galaxy of cores. Contained in the directories are IP cores, source code for digital circuits.

