Espargos: ESP32-based WiFi sensing array
espargos.net
espargos.net
There's an excellent companion video here: https://www.youtube.com/watch?v=sXwDrcd1t-E
"Inside a $1 radar motion sensor", 100 comments, https://news.ycombinator.com/item?id=40834349
https://www.cnx-software.com/2022/08/08/esp-wifi-csi-detects...
> Espressif claims it can also capture subtle movements caused by small movements such as breathing and chewing of people or animals in a static environment.. works with all ESP32 series microcontrollers including ESP32, ESP32-S2, and ESP32-C3, and does not require any changes to the hardware
24Ghz/60Ghz mmWave sensors for finer resolution, https://www.dfrobot.com/product-2795.html
One of the reasons I run Ethernet to everything.
Also, I assume you work in security if you deal deal with malicious WiFi devices and sophisticated crooks?
https://haque.co.uk/work/wifi-camera/
I miss tech art that doesn't take itself too seriously.
In their chart there is a time of arrival difference that has nano second accuracy. The ESP32 runs at 240MHZ max, and usually it takes several cycles to read certain values, so I really wonder how they were able to pull it off.
Please enlighten me.
Luckily for 802.11mc, host CPU speed is not used in the distance estimation.
TL;DW: the ESP’s WiFi driver provides per incoming packet the carrier’s phase and amplitude. All ESPs are calibrated relatively to each other.
Additionally, you can use the phase information in the estimated channel coefficients (CSI) to determine the more precise time of arrival. Very briefly, a time delay in time domain will be visible as a frequency(=subcarrier)-dependent phase shift in frequency(=subcarrier)-domain. Now synchronization is only limited by impairments like thermal noise and phase noise. In practice in nice lab conditions, the time of arrival accuracy is on the level of <<1m.
On top of phase differences between subcarriers (--> timing information), we also measure phase differences between antennas, which provides angle of arrival and, with multiple arrays, phase of arrival information.
You can go even further by measuring phase differences between subsequent packets, which provides frequency offset and Doppler (--> velocity) information. I have some nice results on that, but that's a topic for the future ;)
- The Espargos code uses rxstart_time_cyc & rxstart_time_cyc_dec for the ns timestamp calculation
- Both values are not documented in the Espressif code and just marked as /*< reserved */
- The timestamp parameter is documented but it is in "microseconds"
Is there anywhere I can find more documentation on the "rxstart_time_cyc" and "rxstart_time_cyc_dec" fields? Are these cycle counters from the wifi chip?
You can often get some sample timing resolution from a sampled signal by interpolating the result of a complex correlation. You start by searching the correlation output for the loudest hypotenuse lag, then take he worked tangent of the quadrature information of that lag to estimate the sub-sample event time
Say starlink frequency for tracking or The NOAA satellites?
Totally doable to make a wideband version with different hardware. This is called a phased array, which is common in radar applications (e.g. Aegis cruisers).
But yeah, as far as I can tell, the chip can only extract CSI from WiFi (unless there is some hidden raw I/Q sample debug mode or something).
I do have one question that wasn't quite clear to me, in case you happen to see this. There's a bunch of mentions of Channel State Information, but Google doesn't give a ton of info on it. So I'm just wondering, is CSI a "client-side" thing provided by the ESP32 for any Wi-Fi connection, or is it some special protocol feature that the AP or client have to enable?
For WiFi, some of the pilot symbols are called L-LTF (802.11g+n) and HT-LTF (802.11n). Every packet contains them as they are needed for successful communication. The ESP32 can provide channel estimates based on L-LTF and HT-LTF for any packet it receives. No need to enable anything, you can get CSI from every packet.
It’s a shame honestly, it was a really cool product.