Der ESP32, der im M5Stack verbaut ist, beherrscht BLE5.0. BLE 5.2 fähige Geräte gibt es erst seit anfangs 2020, wobei die BLE 5.2 Geräte mit eingebautem Codec vor allem für den Audio-Bereich vorgesehen sind. Ferner können sie gleichzeitig senden und empfangen.
Der BLE 5.0 des ESP32 (M5Stack) eignet sich jedoch auch sehr gut, um Distanzen innerlab des 2m Bereichs einigermassen präzis einzuschätzen, siehe Artikel:
https://www.researchgate.net/publication/332523730_Indoor_Positioning_System_for_IoT_Device_based_on_BLE_Technology_and_MQTT_Protocol
Für den ESP32 bzw. M5Stack gibt es Libraries, die es erlauben, sowohl BLE Signale zu senden, sowie inkl. der Messung der jeweiligen Empfagsstärke (RSSI) zu empfangen.
Ich habe 2 Programme (Arduino) auf einen ESP32 geladen und festgestellt, dass eine Empfangstärke (RSSI) von -70 dBm einem Abstand von 2 metern entspricht.
Das Beispiel
https://github.com/nkolban/ESP32_BLE_Arduino/tree/master/examples/BLE_server
macht aus dem ESP32 einen BLE Sender. Der Sendername kann beliebig gewählt werden, zb. Abstandssensor101.
Auf meinem Smartphone sehe ich den ESP32-Sender. Wenn er sich näher als 2m befindet ist seine Signalstärke RSSI gauf dem Smartphone grösser als -70dBm.
Der ESP32 kann auch als Empfänger programmiert werden und die Empfangstärke der jeweiligen Sender gemessen werden:
https://www.tns-labs.org/esp32-arduino-scan-with-rssi-easy/
Im Serial-Monitor dieses Programms für den ESP32 steigt die Sendestärke meines Fotoapparats mit BLE über -70 dBm sobald er sich näher als 2m vom ESP32 befindet.
Meiner Meinung nach kann so ein Schwarm von ESP32 als Sender und gleichzeitig auch als Empfänger als gegenseitige Abstandswarner eingesetzt werden, indem sie alle 100 ms als Sender (Beacon) ihre eigene Kennung "Abstandxxx" senden, und alle Sekunden als Empfänger fetstellen, ob sich ein Sender mit der Anfangs-Kennung "Abstand" mit einer Signalstärke >-70dBm im Empfansbereich befinden und einen Alarm auslösen, zb Piepston, blinkende Led, via WiFi auf eine App eines Smarphones, Daten via MTTQ an eine Datenbank. Die Kennung "xxx" gibt dann an, um welchen Sender aus dem Schwarm es sich handelt. Einen solchen Schwarm kann man mit irgendeinem ESP32 realisieren, also mit dem M5Stack, dem M5Stick und sogar mit dem M5Stack Atom Lite bzw. Matrix. Ich verdendete einen ESP32 Lolin D32, den ich zZ. unter Arduino programmiere.