Its-g5: Difference between revisions

From RevSpace

 
(19 intermediate revisions by the same user not shown)
Line 8: Line 8:


== Introduction ==
== Introduction ==
[[File:its-g5-wireshark.png|thumb|right|alt=wireshark analysis]]
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
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.
These signals are exchanged between passenger cars, emergency vehicles, traffic lights and other traffic-related equipment.
Line 17: 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/?utm_source=chatgpt.com#zur_karte_beitragen
* 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.
You need credentials to access that data, it is not clear if it is feasible to hobbyist to access it.
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
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 ==
== Hardware ==
I got this board, and it worked for me:
[[File:esp32-c5-devkitc-1.jpg|thumb|right|alt=esp32-c5]]
* aliexpress product page https://nl.aliexpress.com/item/1005012416463528.html
[[File:esp32-c3-supermini.jpg|thumb|right|alt=esp32-c3]]
* espressif schematic https://dl.espressif.com/dl/schematics/SCH_ESP32-C5-DevkitC-1_V1.1_20240621.pdf
 
* espressif devkit-c page: https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32c5/esp32-c5-devkitc-1/user_guide.html
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.
Connect your USB-C cable to the "UART" port. It is connected to an actual USB-UART converter chip and always shows up, regardless of whether the ESP32 is in reset or not.


== Software ==
== Software ==
Line 37: Line 63:


=== Compiling the firmware ===
=== Compiling the firmware ===
Needs python.
Uses python and platformio, see the README.md in the source archive.
 
Preparation:
* If you didn't have a python venv, create it:
  python -m venv .venv
* Activate the venv:
  bash source .venv/bin/activate
* Install platformio into the venv:
  python pip install platformio
 
Compile and upload:
  pio run -t upload


Watch packets come in:
Watch packets come in:
Line 60: Line 75:


=== opentraffic map interface ===
=== opentraffic map interface ===
See https://github.com/MPW1412/openwrt-otm-bridge#wire-format-mimics-the-esp32-c5-firmware for the 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

wireshark analysis

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:

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

esp32-c5
esp32-c3

I got this ESP-C5-devkitC-1 board, and it worked for me:

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