Its-g5: Difference between revisions

From RevSpace

 
(5 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 23: Line 25:
Interesting project: https://github.com/idkmanLool9/Verkeerslicht
Interesting project: https://github.com/idkmanLool9/Verkeerslicht


[[File:its-g5-wireshark.png|thumb|right]]
== 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 62: 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.