Skip to the content
PCBKitNew board
2 layers109.9 × 55 mmAPC220Programmer, the printed circuit board in 3D

APC220Programmer

emcgon/APC220-Tools

A collection of tools for using and configuring DFRobot APC220 radio modules

Size
109.9 × 55 mm
Copper layers
2
Thickness
1.6 mm
Parts
15
Nets
52
Pads
102
Tracks, vias
105, 1
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
19 Feb 2024
Updated
28 Mar 2024

Overview

APC220Programmer is an open-source printed circuit board by emcgon, from the emcgon/APC220-Tools repository on GitHub. It is a 2-layer board of 109.9 × 55 mm with 15 parts on 52 nets, routed with 105 tracks and 1 via.

Its parts include 4 resistors, 3 ICs, 2 switches, 1 diode and 1 transistor. It belongs with the radio and wireless boards and the AVR (ATmega, ATtiny) boards of this library.

README

README.md

APC220-Tools

A collection of tools for using and configuring DFRobot APC220 radio modules

apc220monitor.py

Listens on the specified serial port (presumably with an APC220 radio connected to it) and outputs any data received to the console, also optionally logging it to a file.

What makes this more useful than just using PuTTY or similar is that this script forces the RTS pin high. In the USB-to-APC220 adapter than is ususally used to connect the APC220 radio to a PC, RTS is wired to the EN pin. Forcing RTS high thus enables the radio (which is necessary for it to send or receive anything) without having to resort to hacking on jumper wires.

Instructions for use

text
$ python3 apc220monitor.py  -h
usage: apc220monitor.py [-h] comPort {2400,4800,9600,19200,38400} outFile

Monitor data from a serial port (an APC220 radio connected via a USB adapter). Displays the output to the console and optionally writes it to a file.

positional arguments:
  comPort               "COMx" should be the COM port that the APC220 radio is connected to (typically COM2, but check this in Device Manager to be sure)
  {2400,4800,9600,19200,38400}
                        "SPEED" is the baud rate. It is typically 9600 unless you have set your APC220 radio to something different.
  outFile               "output-file" is the name of the file to save output to. You can specify a value of "nul" here if you don't want data saved to a file.

options:
  -h, --help            show this help message and exit
Windows:
text
C:\APC220-Tools>python3 apc220monitor.py com11 9600 a.out
Logging received data to a.out
Hello from an APC220 connected to a Linux machine!
Bye!

C:\APC220-Tools>type a.out
================================================================================
Logging started at 2024-02-21 22:16:38.862246
================================================================================
Hello from an APC220 connected to a Linux machine!
Linux:
text
$ sudo python3 apc220monitor.py  /dev/ttyUSB0 9600 a.out
Logging received data to a.out
hello, world!
^CBye!
$ cat a.out 
================================================================================
Logging started at 2024-02-21 22:14:43.543053
================================================================================
hello, world!
$

apc220send.py

Reads input from standard input and transmits it via the specified serial port.

Again, this script forces RTS high, enabling the radio without having to hard-wire the EN pin.

Instructions for use

text
$ python3 apc220send.py  -h
usage: apc220send.py [-h] [-v] comPort {2400,4800,9600,19200,38400}

Read data from standard input and transmit it via an APC220 radio connected to the specified serial port.

positional arguments:
  comPort               "COMx" should be the COM port that the APC220 radio is connected to (typically COM2, but check this in Device Manager to be sure)
  {2400,4800,9600,19200,38400}
                        "SPEED" is the baud rate. It is typically 9600 unless you have set your APC220 radio to something different.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Produce verbose output
Linux:
text
$ sudo python3 apc220send.py /dev/ttyUSB0 9600
Reading from standard input: end with CTRL-D on a line on its own
hello, world!
14

If you are typing the data to be sent (rather than piping it in from a file or another program), press CTRL-D to terminate. The number that is displayed is the number of bytes read and transmitted.

Windows:
text
C:\APC220-Tools>python3 apc220send.py com11 9600
Reading from standard input: end with CTRL-Z on a line on its own
hello, world!
^Z
14

If you are typing the data to be sent (rather than piping it in from a file or another program), press CTRL-Z to terminate. The number that is displayed is the number of bytes read and transmitted.

Alternatively...

text
C:\APC220-Tools>echo Mary had a little lamb | python3 apc220send.py com11 9600
24

...does exactly what you would expect. At the receiving end...

text
$ sudo python3 apc220monitor.py  /dev/ttyUSB0 9600 a.out
Logging received data to a.out
Mary had a little lamb 
^CBye!

$ cat a.out 
================================================================================
Logging started at 2024-02-21 22:26:13.318536
================================================================================
Mary had a little lamb 

Interactive-mode (-i, --interactive) reads continuously from standard input and transmits one line at a time. This may be more

rfmagic

The OG tool for reprogramming APC220 radios is called RF Magic and it is (IMHO) nasty. It is only available on Windows and - in my experience - is very hit-and-miss. This is a reimplementation of RF Magic as a Python command-line tool along with an analysis of the protocol.

APC220Programmer

Schematic and source-code for a standalone hardware programmer based on an Arduino Nano and a 16x2 LCD screen allowing APC220 radios to be quickly reprogrammed without the need for a laptop or a USB adapter.

Parts

15
QtyValueFootprintReferences
21KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2, R3
110KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1
11N4001Diode_THT:D_A-405_P10.16mm_HorizontalD1
1220RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR4
12N7000Package_TO_SOT_THT:TO-92_InlineQ1
19V PP3Connector_Molex:Molex_KK-254_AE-6410-02A_1x02_P2.54mm_VerticalBT1
1Adafruit BMP390 ModuleLibrary:Adafruit BMP390 ModuleU1
1Arduino_Nano_v3.xModule:Arduino_NanoA2
1MPXH6115A6U/T1Sensor_Pressure:Freescale_98ARH99089AU2
1R_POT_TRIMPotentiometer_THT:Potentiometer_Bourns_3296W_VerticalRV1
1Rotary_Encoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmSW2
1SW_SPSTConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalSW1
1WC1602ADisplay:WC1602ADS1
1~Library:APC220 RadioU3

Questions

How big is the APC220Programmer PCB?

It measures 109.9 × 55 mm and has 2 copper layers, 1.6 mm thick.

What parts does the APC220Programmer use?

15 parts. 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.

Where can I download the APC220Programmer KiCad files?

From the emcgon/APC220-Tools repository on GitHub, at the commit this page was made from: the board is programmer/APC220Programmer/APC220Programmer.kicad_pcb and its schematic programmer/APC220Programmer/APC220Programmer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the APC220Programmer design in my own project?

Its repository states no licence, so its author keeps all rights: ask emcgon before reusing the design.

Similar boards

  • 2 layers19 × 76 mmSub, the printed circuit board in 3D

    Sub

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    15 parts3kApache-2.0
  • 2 layers26.7 × 62.2 mmDeniseadapter, the printed circuit board in 3D

    Deniseadapter

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    15 parts1kGPL-3.0
  • 2 layers100 × 44 mmVideoslot, the printed circuit board in 3D

    Videoslot

    mntmn/amiga2000-gfxcard

    MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog

    15 parts1k
  • 2 layers91 × 51 mmBusinessCard, the printed circuit board in 3D

    BusinessCard

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    15 parts915
  • 2 layers24.3 × 57.9 mmFlosspods pro flex, the printed circuit board in 3D

    Flosspods pro flex

    kenp-io/not-for-airpods-repairs

    The content of this repository is licensed under the WTFPL License. Please have a close look at the terms before using this material.

    15 parts609WTFPL
  • 2 layers20.3 × 15.2 mmL0 Load, the printed circuit board in 3D

    L0 Load

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    15 parts546MIT
  • 2 layers68 × 50 mmEleLab v2 PowerFeed, the printed circuit board in 3D

    EleLab v2 PowerFeed

    Chrismettal/EleLab_v2

    Cheap DIY lab system for hobbyists and the tinkering folk

    15 parts531GPL-3.0
  • 2 layers50.8 × 35.6 mmInterface, the printed circuit board in 3D

    Interface

    harbaum/I2C-Tiny-USB

    Cheap and simple I²C to USB interface

    15 parts454