Its-g5: Difference between revisions
| (9 intermediate revisions by the same user not shown) | |||
| Line 19: | Line 19: | ||
* Crowd-sourced live map of messages received: https://opentrafficmap.org/ | * Crowd-sourced live map of messages received: https://opentrafficmap.org/ | ||
* Simplest source code for Arduino-based sniffer: https://git.devlol.org/jstsmthrgk/simple-its-g5-receiver-firmware | * Simplest source code for Arduino-based sniffer: https://git.devlol.org/jstsmthrgk/simple-its-g5-receiver-firmware | ||
* How to contribute to opentrafficmap: https://wiki.opentrafficmap.org | * How to contribute to opentrafficmap: https://wiki.opentrafficmap.org | ||
In the Netherlands, SPAT/MAPem messages from traffic lights are not transferred over wifi-p, but over UDAP. | In the Netherlands, SPAT/MAPem messages from traffic lights are not transferred over wifi-p, but over UDAP. | ||
| Line 43: | Line 43: | ||
* The serial link runs over the USB-UART chip of the esp32-c5. | * The serial link runs over the USB-UART chip of the esp32-c5. | ||
* A simple command processor runs on the other UART (the emulated USB serial port) | * A simple command processor runs on the other UART (the emulated USB serial port) | ||
* On the esp32-c5 side, use pins GND, 5V, | * On the esp32-c5 side, use pins GND, 5V, UART-TX for the ESP-ESP serial connection. | ||
* The esp32-c3 and esp32-c5 | * The esp32-c3 and esp32-c5 share their 5V and GND power lines. Each board derives its own internal power supplies from this 5V. | ||
* The serial link | * The serial link doesn't have to be very high speed, 115200 for example. We use a hardware UART on both sides of the serial link. | ||
* | * Use https://registry.platformio.org/libraries/thomasfredericks/MicroSlip for framing packets over the serial port. | ||
== Hardware == | == Hardware == | ||
| Line 53: | Line 53: | ||
I got this ESP-C5-devkitC-1 board, and it worked for me: | I got this ESP-C5-devkitC-1 board, and it worked for me: | ||
* | * Aliexpress product page https://nl.aliexpress.com/item/1005012416463528.html | ||
* | * Espressif schematic https://dl.espressif.com/dl/schematics/SCH_ESP32-C5-DevkitC-1_V1.1_20240621.pdf . Actually my board is not exactly like this, the USB-UART is connected to pins GPIO11 (TX) and GPIO12 (RX), not GPIO25/GPIO24. | ||
* | * Espressif devkit-c page: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c5/esp32-c5-devkitc-1/user_guide.html | ||
It has an onboard antenna. There are also other boards with an antenna connection, which allows using an external antenna. This may be better, I don't know yet. | It has an onboard antenna. There are also other boards with an antenna connection, which allows using an external antenna. This may be better, I don't know yet. | ||
== Software == | == Software == | ||
| Line 65: | Line 63: | ||
=== Compiling the firmware === | === Compiling the firmware === | ||
Uses python and platformio, see the README.md in the source archive. | |||
Watch packets come in: | Watch packets come in: | ||
| Line 89: | Line 76: | ||
=== opentraffic map interface === | === opentraffic map interface === | ||
See https://github.com/MPW1412/openwrt-otm-bridge#wire-format-mimics-the-esp32-c5-firmware for the mqtt wire format. | See https://github.com/MPW1412/openwrt-otm-bridge#wire-format-mimics-the-esp32-c5-firmware for the mqtt wire format. | ||
See also https://github.com/pit711/v2x2map/blob/main/firmware/main/mqtt.c | |||
Latest revision as of 08:13, 25 June 2026
| Project ITS-G5 | |
|---|---|
| |
| Investigating ITS-G5 signals | |
| Status | In progress |
| Contact | bertrik |
| Last Update | 2026-06-25 |
Introduction

This page is about investigating reception and processing of so-called C-ITS or ITS-G5 signals (802.11p) as used in the Netherlands, see also https://en.wikipedia.org/wiki/Vehicle-to-everything These signals are exchanged between passenger cars, emergency vehicles, traffic lights and other traffic-related equipment.
An ESP32-C5 development board is capable of receiving WiFi in the 5 GHz band and can receive/sniff these kinds of packets from live traffic.
Stuff to investigate:
- Source code for an ITS-G5 receiver https://github.com/pit711/v2x2map
- Crowd-sourced live map of messages received: https://opentrafficmap.org/
- Simplest source code for Arduino-based sniffer: https://git.devlol.org/jstsmthrgk/simple-its-g5-receiver-firmware
- How to contribute to opentrafficmap: https://wiki.opentrafficmap.org
In the Netherlands, SPAT/MAPem messages from traffic lights are not transferred over wifi-p, but over UDAP. You need credentials to access that data, it is not clear if it is feasible to hobbyist to access it. Interesting project: https://github.com/idkmanLool9/Verkeerslicht
Design
The plan is:
- Use an esp32-c5 for sniffing 802.11p frames only
- Use an esp32-c3 (as an inexpensive jellybean part) for receiving sniffed frames from the esp32-c5, connect to WiFi and upload packets over MQTT
- The interface beteween the two boards is serial, this is simpler than SPI as used in other projects:
- Only three wires required: GND, +5V and serial DATA
- No need to desolder capacitors on SPI wires of the esp32-c5
- A serial interface is more universal, e.g. can be connected to an arbitrary linux SBC, to run a python bridge for example
- On the esp32-c5 use the same wires as the existing USB-UART bridge, so you can also receive packets over USB-serial
- Run a simple web server on the esp-c3:
- Configuration page with MQTT settings: host, port, user, pass, base topic
- Perhaps configure a keystore/certificate for secure mqtt (mqtts), if needed
- Optional: show some nice stats: mqtt status, packet rate, last packet, packets per type
- Optional: run a very basic parser for e.g. CAM messages
Practical:
- The serial link runs over the USB-UART chip of the esp32-c5.
- A simple command processor runs on the other UART (the emulated USB serial port)
- On the esp32-c5 side, use pins GND, 5V, UART-TX for the ESP-ESP serial connection.
- The esp32-c3 and esp32-c5 share their 5V and GND power lines. Each board derives its own internal power supplies from this 5V.
- The serial link doesn't have to be very high speed, 115200 for example. We use a hardware UART on both sides of the serial link.
- Use https://registry.platformio.org/libraries/thomasfredericks/MicroSlip for framing packets over the serial port.
Hardware


I got this ESP-C5-devkitC-1 board, and it worked for me:
- Aliexpress product page https://nl.aliexpress.com/item/1005012416463528.html
- Espressif schematic https://dl.espressif.com/dl/schematics/SCH_ESP32-C5-DevkitC-1_V1.1_20240621.pdf . Actually my board is not exactly like this, the USB-UART is connected to pins GPIO11 (TX) and GPIO12 (RX), not GPIO25/GPIO24.
- Espressif devkit-c page: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c5/esp32-c5-devkitc-1/user_guide.html
It has an onboard antenna. There are also other boards with an antenna connection, which allows using an external antenna. This may be better, I don't know yet.
Software
See https://github.com/bertrik/its-g5-receiver
Compiling the firmware
Uses python and platformio, see the README.md in the source archive.
Watch packets come in:
pio device monitor
Packets are logged as a 'hexdump'.
The can be converted for wireshark, for example:
text2pcap -l 105 message.txt message.pcap
Then viewed in wireshark:
wireshark message.pcap
opentraffic map interface
See https://github.com/MPW1412/openwrt-otm-bridge#wire-format-mimics-the-esp32-c5-firmware for the mqtt wire format.
See also https://github.com/pit711/v2x2map/blob/main/firmware/main/mqtt.c
