Its-g5: Difference between revisions

From RevSpace

 
(6 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 22: Line 24:
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, GPIO25 for the ESP-ESP serial connection. These pins are right next to each other on the esp32-c5-devkitc-1. Pin GPIO25 is the pin that connects to the USB-UART chip.
* The esp32-c3 and esp32-c5 have their 5V power lines connected together. Each board derives its own internal power supplies from this 5V.
* The serial link probably doesn't have to be very high speed, start with 115200 for example. Try to use a hardware serial peripheral on both sides for this.
* Probably use the Arduino [https://registry.platformio.org/libraries/bakercp/PacketSerial PacketSerial] library on both sides for framing/deframing packets.


== Hardware ==
== Hardware ==
[[File:esp32-c5-devkitc-1.jpg|thumb|right|alt=esp32-c5]]
I got this board, and it worked for me:
I got this board, and it worked for me:
* aliexpress product page https://nl.aliexpress.com/item/1005012416463528.html
* aliexpress product page https://nl.aliexpress.com/item/1005012416463528.html
Line 60: Line 87:


=== 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.

Latest revision as of 11:08, 22 June 2026

Project ITS-G5
Investigating ITS-G5 signals
Status In progress
Contact bertrik
Last Update 2026-06-22

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, GPIO25 for the ESP-ESP serial connection. These pins are right next to each other on the esp32-c5-devkitc-1. Pin GPIO25 is the pin that connects to the USB-UART chip.
  • The esp32-c3 and esp32-c5 have their 5V power lines connected together. Each board derives its own internal power supplies from this 5V.
  • The serial link probably doesn't have to be very high speed, start with 115200 for example. Try to use a hardware serial peripheral on both sides for this.
  • Probably use the Arduino PacketSerial library on both sides for framing/deframing packets.

Hardware

esp32-c5

I got this 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.

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

See https://github.com/bertrik/its-g5-receiver

Compiling the firmware

Needs python.

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:

 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.