• Stars
    star
    262
  • Rank 150,873 (Top 4 %)
  • Language
    C
  • License
    GNU General Publi...
  • Created over 1 year ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

programmable e-paper tag with RFID

Build Status

Overview

ggtag is an e-paper tag that can be programmed with sound using the ggwave library. It is based on the RP2040 microcontroller and has 3.52" e-paper display. Additionally, ggtag supports USB serial programming and allows emulation of 125kHz RFID tags (ASK and FSK).

CrowdSupply

The GGtag's CrowdSupply campaign has started, you can order one here!

Some example tags:

Both firmware and hardware are open source and licensed under the GPLv3 license. The PCB is made by Eurolan, you can find more details about the hardware design in the hardware directory.

Usage

ggtag can be programmed either with sound or with USB serial. To program with sound, you need to put a CR2032 battery in the battery holder and flip the switch to the BATT position. To program with USB serial, you need to connect ggtag to a USB host and flip the switch to the USB position. Both programming modes are supported in the web interface hosted at ggtag.io, all you need is a modern HTML browser.

Programming with sound

Here is a demonstration of how programming with sound works. Initially, three ggtags are listening and then programmed simultaneously using mobile phone. After the initial programming, you need to press the button on the side for ggtag to start listening again. At the end make sure to flip the switch back to USB position in order to preserve the battery.

ggtag-sound.mp4

Programming with USB serial

The web interface is using Web Serial API for USB serial programming, so you need a web browser (e.g. Chrome, Edge) which supports this API. Mobile Chrome running on Android is also supported. Here is a demo of using Pixel5 phone for USB serial programming:

ggtag-usb.mp4

Emulating RFID tags

You can emulate 125kHz RFID tags with ggtag. This is accomplished with an ATtiny85 MCU and the avrfid firmware. When ggtag receives an RFID command, it generates the corresponding avrfid firmware and programs the ATtiny85 with it. Demo with Flipper Zero:

ggtag-rfid-flipper.mp4

Another demo with USB RFID reader:

ggtag-rfid-reader.mp4

Web receiver

There is a web audio receiver which implements the ggtag protocol running at https://ggtag.io/recv/. This could be useful if you want to hack on the protocol and debug stuff directly in the browser.

webrecv-demo.mp4

Python examples

There is a ggtag python package which can be used together with pyserial or ggwave to program the device. See the examples folder for more details.

Known issues

  • If you switch off the battery after successful sound programming, you need to make ~5sec pause before switching it on again.
  • With some RFID readers you need to keep ggtag at 1cm distance for read to be successful.
  • If you want to display non-ASCII text, you need to convert it to image first.

Credits

Project structure

The codebase is structured in the following way:

  • target - contains the firmware source code for RP2040
  • shared - contains the shared code between the firmware and the host library
  • host - contains the host library
  • docs - contains the web interface
  • python - contains Python bindings for the host library
  • examples - contains some examples
  • hardware - contains hardware design files

Building the firmware

Follow these steps to build the RP2040 firmware:

git clone https://github.com/raspberrypi/pico-sdk
cd pico-sdk
git submodule init
git submodule update
cd ..
git clone https://github.com/raspberrypi/pico-extras
cd pico-extra
git submodule init
git submodule update
cd ..
export PICO_SDK_PATH=<full_path_to_pico_sdk>
export PICO_EXTRAS_PATH=<full_path_to_pico_extras>
export PICO_TOOLCHAIN_PATH=<full_path_to_arm_toolchain>

git clone [email protected]:rgerganov/ggtag
cd ggtag
git submodule init
git submodule update
mkdir build
cd build
cmake .. -DPICO_BOARD=pico
make

Building the web interface

The host library is compiled to WASM using Emscripten:

source <path_to_emsdk_env.sh>
CXX=emcc make

You can start a local server with make server and access the web interface at http://localhost:8000. There is a hosted version available at https://ggtag.io

Flashing the firmware

Put ggtag into USB mode, press and hold the button and plug the USB cable. Download the latest firmware release and copy the .uf2 file to the RPI-RP2 drive. The tag will reboot and run the new firmware.

Feedback

We'd love to hear your feedback, comments and questions about ggtag in the Project Discussions

More Repositories

1

footswitch

Command-line utility for PCsensor and Scythe foot switches
C
390
star
2

py-air-control

Command line app for controlling Philips air purifiers
Python
245
star
3

rf-car

Controlling RC cars with HackRF
C++
130
star
4

nfqsed

Modify network traffic with netfilter_queue
C
86
star
5

gen5fw

Firmware tools for Mobis Gen5 navigation
Python
84
star
6

tesla-opener

Open Tesla charging port with HackRF
C++
70
star
7

shanocast

Google Chromecast Reciever
Nix
62
star
8

spoof_temp

Spoof temperature sensor with HackRF/FlipperZero
C++
38
star
9

aprs-sdr

APRS tracker with an SDR
C++
30
star
10

mks

Client for VMware consoles
Python
25
star
11

xxe-example

XXE vulnerability demo
Java
22
star
12

mario

Inject keystrokes with LEGO Mario
Python
19
star
13

ggwave-fm

Transmit ggwave encoded messages with an SDR
C++
16
star
14

dlp

Discrete logarithm problem
Java
12
star
15

vmdecrypt

Decrypt multicast Verimatrix streams
Go
9
star
16

pyvmdk

Python scripts for VMDK manipulations
Python
7
star
17

solo-pgp

PGP with Solo key
Python
5
star
18

rfbot

Slack bot for doing RF stuff
C++
4
star
19

vmware-vspc

Virtual Serial Port Concentrator
Python
4
star
20

sms

Send SMS messages from command line
C++
4
star
21

usdr

C++
3
star
22

osmo-sdr

Mirror of osmocom/osmo-sdr
C
3
star
23

stereovision

Capture video from two cameras
C
3
star
24

rabbit-comet

Comet application delivering messages from RabbitMQ broker
Java
3
star
25

remote-kbd

C
2
star
26

qsl

QSL cards gallery
Java
2
star
27

ctkip

Java
2
star
28

cec-watch

Emit a keypress when the display is powered off
C
1
star
29

stm32f3

Applications using the STM32F3 Discovery board
C
1
star
30

p4actions

Eclipse plug-in that adds custom actions to pending Perforce changelists
Java
1
star
31

nova-mksproxy

Nova console proxy for VMware instances
Python
1
star
32

openenclave-openssl

For using the OpenSSL libraries with the Open Enclave SDK
CMake
1
star