arduino-esp32/libraries/WiFi/examples/FTM/FTM_Initiator
Me No Dev cf43d174b7
Add FTM support and examples (#5272)
Rework of #5266 by @pedrominatel
2021-06-16 21:24:48 +03:00
..
FTM_Initiator.ino Add FTM support and examples (#5272) 2021-06-16 21:24:48 +03:00
README.md Add FTM support and examples (#5272) 2021-06-16 21:24:48 +03:00

Wi-Fi FTM Initiator Arduino Example

This example demonstrates how to use the Fine Timing Measurement (FTM) to calculate the distace from the Access Point and the device. This is calculated by the Wi-Fi Round Trip Time (Wi-Fi RTT) introduced on the IEEE Std 802.11-2016 standard.

This example was based on the ESP-IDF FTM. See the README file for more details about on how to use this feature.

Some usages for this feature includes:

  • Indoor positioning systems.
  • Navigation.
  • Device Location.
  • Smart Devices.
  • Alarms.

Supported Targets

Currently, this example supports the following targets:

Supported Targets ESP32-S2 ESP32-C3

How to Use Example

In order to use the FTM, you will need a Responder or Wi-Fi router with FTM capabilities. If you don't own one, you can use a second ESP32-S2 or ESP32-C3 to simulate one. See the Responder example to prepare the environment.

Configure the Project

To configure this project, you can change the following configuration related to FTM feature:

// Change the SSID and PASSWORD here if needed
const char * WIFI_FTM_SSID = "WiFi_FTM_Responder"; // SSID of AP that has FTM Enabled
const char * WIFI_FTM_PASS = "ftm_responder"; // STA Password

// FTM settings
// Number of FTM frames requested in terms of 4 or 8 bursts (allowed values - 0 (No pref), 16, 24, 32, 64)
const uint8_t FTM_FRAME_COUNT = 16;
// Requested time period between consecutive FTM bursts in 100s of milliseconds (allowed values - 0 (No pref) or 2-255)
const uint16_t FTM_BURST_PERIOD = 2;
  • Change the Wi-Fi SSID and PASSWORD as the same as the Responder/Router.
  • Change FTM_FRAME_COUNT with the number of frames requested to the Responder.
  • Change FTM_BURST_PERIOD with the time between each FTM burst.

To see more details about FTM, please see the ESP-IDF docs.

Using Arduino IDE

To get more information about the Espressif boards see Espressif Development Kits.

  • Before Compile/Verify, select the correct board: Tools -> Board.
  • Select the COM port: Tools -> Port: xxx where the xxx is the detected COM port.

Using Platform IO

  • Select the COM port: Devices or setting the upload_port option on the platformio.ini file.

Log Output

Expected log output:

ESP-ROM:esp32s2-rc4-20191025
Build:Oct 25 2019
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3ffe6100,len:0x4b0
load:0x4004c000,len:0xa6c
load:0x40050000,len:0x25c4
entry 0x4004c198
Connecting to FTM Responder
.....
WiFi Connected
Initiating FTM session with Frame Count 16 and Burst Period 200 ms
FTM Estimate: Distance: 0.13 m, Return Time: 0 ns
FTM Estimate: Distance: 0.13 m, Return Time: 0 ns
FTM Estimate: Distance: 0.13 m, Return Time: 0 ns
FTM Estimate: Distance: 0.00 m, Return Time: 0 ns
...

Troubleshooting

Important: Make sure you are using a good quality USB cable and that you have a reliable power source.

  • Programming Fail: If the programming/flash procedure fails, try reducing the serial connection speed.
  • COM port not detected: Check the USB cable and the USB to Serial driver installation.

If the error persist, you can ask for help at the official ESP32 forum or see Contribute.

Contribute

To know how to contribute to this project, see How to contribute.

If you have any feedback or issue to report on this example/library, please open an issue or fix it by creating a new PR. Contributions are more than welcome!

Before creating a new issue, be sure to try the Troubleshooting and to check if the same issue was already created by someone else.

Resources