The low-cost Bitcoin Lightning ATM built with simple parts like an ESP32 and coin/bill acceptors. It lets anyone turn fiat into Bitcoin and comes with clear instructions so hobbyists and developers can easily build their own.
Bitcoin withdrawals are now possible via LNURL, Bolt11, onchain, Liquid and lightning addresses 🔥
Roughly available for £200-£250!
You can run the FOSSA as a coin machine, a bill acceptor, or both.
Part | Description | Buy (UK) | Estimated cost |
---|---|---|---|
ESP32 WT32-SC01 | ESP32 touchscreen (not the PLUS). Comes with USB-C cable. | Ebay or AliExpress | £45 |
NV10USB+ bill acceptor | Optional: accepts banknotes (set to GBP + SIO). | Ebay (second hand) | £70-£150 |
DG600F(S) Multi Coin Acceptor | Optional: accepts coins (S = stainless steel front). | AliExpress or eBay | £30 |
Screw terminal block | Connect wires, no soldering. | Amazon (UK) | £1 |
12v power supply | 12V supply (battery also works). | Amazon (UK) | £8 |
12v to 5v step down converter with USB | Converts 12V to stable 5V/3A. | Amazon (UK) | £5 |
Male-to-female GPIO jumpers | Plug-and-play wires. | Amazon (UK) | £5 |
Aluminum "medicine box" | Optional: cheap case option. | Amazon (UK) | £30 |
Amazon Basic Home Safe | Optional: stronger case option. | Amazon (UK) | £70 |
58mm 701 USB Thermal Receipt Printer | Optional: prints receipts (doesn’t fit enclosure yet). | Ebay (UK) | £25 |
For the 3D-printed version, you will need:
Part | Description | Buy (UK) |
---|---|---|
M4 x 16mm pan head security torx bolts | Hold front facia to back box (14–55mm length works). | Amazon (UK) |
Tamper-proof torx wrench (T20) | Tighten facia Torx bolts. | Amazon (UK) |
Brass insert nuts, M4 x 6mm | Heat-set nuts for 3D prints (use soldering iron). | Amazon (UK) |
M4 x 30mm carriage bolts | Replace coin acceptor bolts for facia thickness. | eBay (UK) |
5.5mm x 2.1mm DC power jack socket | Mounts 12V adaptor plug on box exterior. | Amazon (UK) |
2.2mm quick disconnect spade connector | Crimp cable to connect power jack socket. | |
16mm cabinet tubular lock | Lock for the door. | Amazon (UK) |
Rubber feet (D30x22xH15) | Optional: add feet for table mounting (M5 bolt or adhesive). | Amazon (UK) |
M5 x 16mm hex socket bolts | Optional: secure rubber feet. | Amazon (UK) |
M5 nylon nuts | Optional: secure rubber feet. | Amazon (UK) |
Adhesive security plate + cable | Optional: secure ATM when desk mounted. | Amazon (UK) |
With Chromium based browser visit https://fossa.lnbits.com
Optional: If using hardcoded values, edit hardcoded_user_config.h
cp fossa/hardcoded_user_config.h.example fossa/hardcoded_user_config.h
Fetch and install everything needed (build), then push binary to esp32 (debug):
sh chmod +x build.sh
sh ./build.sh
sh chmod +x debug.sh
sh ./debug.sh /dev/ttyUSB0
https://www.youtube.com/watch?v=vbyYb9Yiu_k
This method requires no soldering. We do this by using GPIO jumpers and terminal blocks. First, split a terminal block into a block of 3 (our LIVE terminal) and a block of 4 (our GROUND terminal).
The wiring reference is as follows:
To connect the bill acceptor:
- Connect the Rx (GPIO 32) and Tx (GPIO 33), pins 29 and 31, on the WT32-SC01 board to pins 1 and 5, respectively, on the bill acceptor.
- Using a GPIO jumper, connect the live wire (pin 15) to the first LIVE terminal block at an available terminal.
- Using a GPIO jumper, connect the ground wire (pin 16) to a second GROUND terminal block of block at an available terminal.
- Connect the positive wire (red) of the 12V to 5V power converter and connect it to the LIVE terminal block at an available terminal.
- Connect the negative wire (black) of the 12V to 5V power converter and connect it to the GROUND terminal block at an available terminal.
- Connect the ground pin (e.g. pin 5) of the WT32-SC01 and connect it to the 2nd terminal of the GROUND terminal block at an available terminal.
NV10USB+ Pin | WT32-SC01 Pin No. (Not GPIO No.) | Power Supply |
---|---|---|
1 (Tx) | 31 | N/A |
5 (Rx) | 29 | N/A |
15 (12V DC+) | N/A | 12V DC+ |
16 (GND) | 5 | GND |
The bill acceptor needs to be programmed to your currency and set to
SIO
mode. Usually, you can buy them preconfigured. If you have to program, buy this wire and download the Validator Manager software here or here (sadly only runs on windows, so use a friends machine). Details on programming can be found here. It's relatively straightforward to program the acceptor: plug in the USB host cable, turn it on by holding the config button for 2 seconds, and open the Validator Manager software. If you prefer to build your own programming cable, see page 42 of the NV10 USB Operations Manual, which gives a wiring diagram for the NV10 USB host cable. You can ignore all the hardware requirements for programming in the guide; you just need the host cable! Don't try using the programming cards in the guide; that's an old system these machines no longer support - "Many Bothans died to bring us this information"!
To connect the coin acceptor:
NB You can usually order the coin acceptor pre-programmed to your currencies. Otherwise, you will need to train the acceptor using this guide.
- Set the 3rd dip switch to high (this sends integers to the WT32-SC01 rather than pulses).
- Using a GPIO jumper, connect the interrupt pin (pin 5) on the coin accepter to the 5V pin (pin 2) on the WT32-SC01.
- Using a GPIO jumper, connect the serial out (pin 2) on the coin accepter to pin 4 on the WT32-SC01.
- Using a GPIO jumper, connect the live pin (pin 1) to the LIVE terminal block at an available terminal.
- Using a GPIO jumper, connect the GND pin (pin 3) on the coin accepter to the GROUND terminal block at an available terminal.
DG600F(S) Pin | WT32-SC01 Pin No. (Not GPIO No.) | Power Supply |
---|---|---|
5 | 2 | N/A |
4 | N/A | N/A |
3 (GND) | N/A | GROUND |
2 (serial out) | 4 | N/A |
1 (12V) | N/A | LIVE |
To connect the 12V power supply:
- Connect a GPIO jumper to the live connection (+) on the 12V power supply terminal block adapter to the LIVE terminal block at an available terminal.
- Connect a GPIO jumper to the ground connection (-) on the 12V power supply terminal block adapter to the GROUND terminal block at an available terminal.
To complete the terminal blocks:
- Connect each terminal in the LIVE terminal block so they all receive power by looping over wires from terminals 1 to 2 and 1 to 3.
- Connect each terminal in the GROUND terminal block so they all receive power by looping over wires from terminals 1 to 2, 1 to 3 and 1 to 4.
To connect to power:
- Plug in the WT32-SC01 to the USB connector of the 12V to 5V power converter.
- Plug in the connection terminal of the 12V power supply and connect to mains power.
You should hear the bill acceptor and coin acceptors turn on.
To configure your LNBits instance to pull funds from:
- Login to your instance of LNBits.
- Create a wallet.
- Go to
Manage Extensions
, findLNURLDevice
, and install/enable it. - Open the
LNURLDevice
extension, clickNew LNURLDevice Instance
, give it the title ofATM
, and choose the appropriate wallet for the ATM. Select the correct currency (e.g.,GBP
),ATM
mode, and a percentage for the commission. - Copy the link it gives you.
The ATM is configured in two parts: the ATM and LNBits running on a separate node.
To set up your Arduino IDE:
- If you have not already done so, install the Arduino IDE from https://www.arduino.cc/en/Main/Software.
- Install the ESP32 libraries. You can do this by copying the stable release version link, currently
https://espressif.github.io/arduino-esp32/package_esp32_index.json
and putting in theFile
>Preferences...
>Additional Board Manager URLs
(see: https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html) - Install the boards by going to
Tools
>Board
>Board Manager...
, searching for ESP32, choose 2.0.17, and click Install. - Copy the libraries from this project libraries folder to your
"/Arduino/libraries"
folder (usually in OS"Home"
directory) - Clone the repo and open accessPointFOSSA.
- Select the relevant port and ESP32 dev module.
- Go to
Sketch
>Upload
. - Once uploaded, the access portal will launch when you press the screen on the WT32-SC01 device.
To configure the ATM:
- Connect the access portal wi-fi (
Device-fa7ce5a4
, for example). - Open the access portal.
- Enter a new password.
- Enter the coin denominations (if you are using a coin acceptor, separated by a comma)
- Enter the maximum withdrawal amount in fiat (e.g.
30
for 30 GBP). - Enter a percentage charge for the service (e.g.
10
for 10%, which should be the same value you entered into LNBits). - Click
Save
. - unplug and plug the WT32-SC01 back in once saved. You should see the
Fiat for Sats
screen.
It should be pointed out that this ATM is designed to be attended to (such as on a shop counter) rather than something that can be left unattended and mounted to a wall.
If you want to want to print your own enclosure, we recommend these settings:
- Print the Facia
- STL: FOSSA ATM Facia
- Material: PETG
- Layer: 0.2mm
- Infill: 10-100% (recommend 20%+)
- Supports: Yes
- Notes: To set the Bitcoin logo with a different color, set a color change at layer 114 (13.20mm). In PrucaSlicer, you can "paint" out all the screw holes as they do not need supports. I would also recommend setting a thicker layer parameter, in PrucaSlicer, you can do this by settings
Printer Settings
>Layers and perimeters
>Perimeters
to4
)
- Print the backbox
- STL: FOSSA ATM Backbox
- Material: PETG
- Layer: 0.2mm
- Infill: 10-100% (recommend 20%+)
- Supports: Yes
- Notes: In PrusaSlicer you can set
Print Settings
>Support material
>First layer expansion
to1 mm
,XY separation between an object and its support
to80%
andOverhang threshold
to1 mm
, or, you can "paint" out all but the door as the model has been designed for minimal supports
- Print the accessories
- STL: FOSSA ATM WT-32-SC01 Backplate, FOSSA ATM Coin Slot Cover, FOSSA ATM 4mm Lock Lever Shim, FOSSA ATM Door, FOSSA ATM Backbox Note Holder
- Material: PETG
- Layer: 0.2mm
- Infill: 10-100% (recommend 20%+)
- Supports: No
- Use a soldering iron to melt the brass female embedded insert nuts into the six holes for the facia (see picture 1 below)
- OPTIONAL: If using the coin acceptor, replace the coach bolts with longer bolts (M4 x 30mm carriage/coach bolts) to account for the thickness of the facia.
- Mount the bill acceptor so it is "smiling" (see picture 2) with the supplied mounting bracket and screws as pictured (see picture 3). You can remove the bill input feed from the main part of the unit and then re-attach it.
- Mount the screen to the WT-32-SC01 Backplate.
- Mount the backplate to the Facia with the M4 (4mm x 8mm Inc Head) hex socket countersunk screws.
- Mount the backbox note holder to the backbox with the M4 (4mm x 8mm Inc Head) hex socket countersunk screws.
- Mount the 5.5mm x 2.1mm DC Power Jack Socket Female Panel Mount Connector in the hole in the back left of the backbox (this directs the notes to the bottom of the box.
- Connect wires from the connection terminal to the 2.2mm Quick Disconnect Female Spade Connector and plug into the inside of the 5.5mm x 2.1mm DC Power Jack Socket Female Panel Mount Connector.
- OPTIONAL: Mount the Rubber feet (D30x22xH15) using the M5 x 16mm hex socket bolts and M5 nylon nuts (be careful not to over-tighten).
- Using the Tamper-proof torx wrench (T20), use the screw in the M4 x 16mm pan head security torx tamper-resistant bolts to secure the facia to the backbox.
- Plug the power supply in.



Use the templates provided here, print out at 100% on standard UK A4, and check the dimensions are correct after printing. It's helpful if the bill acceptor and coin mech pins are accessible.
-
For the
Aluminium Storage Box
solution, holes can be cut with a sharp knife (clearly not secure - but acceptable for somewhere you can keep an eye on the ATM or for demos). -
For the
Home Safe
solution, holes can be cut with an angle grinder and a very thin cutter. (If you have not used an angle grinder before, don't be scared; they're cheap, easy enough to use, and very useful. Take your time and wear safety equipment.)
We use CT1 sealant/adhesive (or similar) for mounting the screen, although the screen has screw points, which should prob be used for added security.
And there you have it. Have fun, and tag us on Twitter / Nostr with all your cool setups!
Join our telegram support/chat.