
Sub
google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

A collection of tools for using and configuring DFRobot APC220 radio modules
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.
A collection of tools for using and configuring DFRobot APC220 radio modules
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.
$ 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 exitC:\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!$ 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!
$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.
$ 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$ sudo python3 apc220send.py /dev/ttyUSB0 9600
Reading from standard input: end with CTRL-D on a line on its own
hello, world!
14If 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.
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
14If 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...
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...
$ 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
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.
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.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 1K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R3 |
| 1 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | 1N4001 | Diode_THT:D_A-405_P10.16mm_Horizontal | D1 |
| 1 | 220R | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R4 |
| 1 | 2N7000 | Package_TO_SOT_THT:TO-92_Inline | Q1 |
| 1 | 9V PP3 | Connector_Molex:Molex_KK-254_AE-6410-02A_1x02_P2.54mm_Vertical | BT1 |
| 1 | Adafruit BMP390 Module | Library:Adafruit BMP390 Module | U1 |
| 1 | Arduino_Nano_v3.x | Module:Arduino_Nano | A2 |
| 1 | MPXH6115A6U/T1 | Sensor_Pressure:Freescale_98ARH99089A | U2 |
| 1 | R_POT_TRIM | Potentiometer_THT:Potentiometer_Bourns_3296W_Vertical | RV1 |
| 1 | Rotary_Encoder_Switch | Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | SW2 |
| 1 | SW_SPST | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | SW1 |
| 1 | WC1602A | Display:WC1602A | DS1 |
| 1 | ~ | Library:APC220 Radio | U3 |
It measures 109.9 × 55 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask emcgon before reusing the design.

google/mozc-devices
Circuit diagrams and firmware source code for Gboard DIY keyboards

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

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

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

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.

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.

Chrismettal/EleLab_v2
Cheap DIY lab system for hobbyists and the tinkering folk
