Raspberry Pi Pico W: Anwesende Personen zählen mit Bluetooth-Scan
Bei dieser Anwesenheitserkennung geht es darum, festzustellen wie viele Personen sich in der „näheren Umgebung“ befinden. Dabei werden alle empfangbaren Bluetooth-Signale ausgewertet und gezählt. Das Ergebnis ist eine Liste mit den MAC-Adressen der Geräte und die Anzahl der Geräte. Dabei gehen wir davon aus, dass alle anwesenden Personen über ein Smartphone mit Bluetooth verfügen.
Hinweis: Diese technische Lösung ist aus Sicht des Datenschutzes problematisch. Es werden die MAC-Adressen von Bluetooth-Geräten erfasst, die in der Regel zu einer Person gehören. In der Regel ist man nicht in der Lage eine MAC-Adresse einer Person zuzuordnen, allerdings gehört sie zu einem bestimmten Gerät, dass in der Regel von nur einer Person genutzt wird. Das heißt, wenn die MAC-Adressen gespeichert werden, kann die Zuordnung zu einem Gerät und einer Person später erfolgen. Im folgenden Programmcode werden MAC-Adresse erfasst und verarbeitet.
Probleme und Einschränkungen
Das klingt natürlich sehr interessant. Leider gibt es verschiedene Probleme und Einschränkungen, weshalb die ermittelte Anzahl der Geräte bzw. Personen nicht wirklich korrekt ist.
Aufgabe: Man will die in einem Raum anwesenden Personen erfassen, um Vollständigkeit erkennen zu können.
Reichweite
Die Bezeichnung „nähere Umgebung“ ist räumlich und zahlenmäßig nicht präzise definierbar. Grundsätzlich werden mit dieser technischen Lösung alle empfangbaren Bluetooth-Signale erfasst. Das können auch Geräte sein, die man nicht als in der „näheren Umgebung“ bezeichnen würde. Beispielsweise werden auch Bluetooth-Signale von Geräten aus angrenzenden Räumen erfasst, die man nicht sehen kann.
Anzahl
Diese Lösung geht davon aus, dass alle anwesenden Personen über ein Smartphone mit Bluetooth verfügen. Die Anzahl wird dadurch verfälscht, wenn einzelne Personen kein Smartphone haben, Geräte abgeschaltet sind oder Bluetooth deaktiviert ist. Umgekehrt steigt die Anzahl der Geräte fälschlicherweise, wenn eine Person nicht nur ein Smartphone mitführt, sondern weitere Geräte. Beispielsweise eine Smartwatch, drahtlose Kopfhörer oder andere Bluetooth-Geräte. Es werden alle aktiven Bluetooth-Geräte erfasst.
Fazit
Der auf diese Weise ermittelte Wert wird nie der tatsächlichen Anzahl anwesender Personen entsprechen. Es ist nur eine grobe Annäherung, die von der Entfernung und der Anzahl mitgeführter elektronischer Geräte beeinflusst wird.
Programmcode
Der Programmcode läuft ohne, dass man irgendetwas machen muss. Er scannt wiederkehrend die Umgebung nach Bluetooth-Geräten.
# Bibliotheken laden import aioble import asyncio # Funktion: Hauptprogramm async def main(): devices = [] while True: devices.clear() print() print('Passiver Bluetooth-Scan gestartet') # Bluetooth-Scan async with aioble.scan(duration_ms=10000) as scanner: async for result in scanner: item = str(result).split(", ")[1][0:17] if item not in devices: devices.append(item) # Ausgabe: Shell counter = len(devices) print(' Geräte:', devices) print(' Anzahl:', counter) await asyncio.sleep(20) # Hauptprogramm asyncio.run(main())
Erweiterung: Personenzähler
Im Programmcode oben wird jede Minute immer wieder neu gezählt. Das heißt, man bekommt die Anzahl der gerade aktuell empfangbaren Geräte respektive die Anzahl der gerade anwesenden Personen ermittelt. Wenn man jetzt über einen gewissen Zeitraum alle Personen zählen will, dann bedarf es nur einer einzigen Änderung. Man muss die Zeile „devices.clear()“ auskommentieren oder entfernen. Dann wird diese Liste nicht zurückgesetzt, sondern immer weiter mit den MAC-Adressen neuer Geräte gefüllt.
Erweiterung: Anzahl auf einem Display vom Typ TM1637 anzeigen
Denkbar wäre es, für den autarken Betrieb ein Display vom Typ TM1637 zur Anzeige zu verwenden, um die Anzahl der Geräte anzuzeigen.
# Bibliotheken laden import machine import tm1637 import aioble import asyncio # Display initialisieren display = tm1637.TM1637(clk=machine.Pin(21), dio=machine.Pin(20)) display.brightness(3) display.write([127, 255, 127, 127]) # Funktion: Hauptprogramm async def main(): devices = [] while True: devices.clear() print() print('Passiver Bluetooth-Scan gestartet') # Bluetooth-Scan durchführen async with aioble.scan(duration_ms=10000) as scanner: async for result in scanner: item = str(result).split(", ")[1][0:17] if item not in devices: devices.append(item) # Ausgabe: Shell counter = len(devices) print(' Geräte:', devices) print(' Anzahl:', counter) # Ausgabe: Display display.number(counter) await asyncio.sleep(60) # Hauptprogramm asyncio.run(main())
Weitere verwandte Themen:
- Raspberry Pi Pico W: Grundlagen zu Bluetooth
- Raspberry Pi Pico: Digitale Uhr mit Anzeige (TM1637)
- Raspberry Pi Pico: Countdown mit Zeitanzeige (TM1637)
- Raspberry Pi Pico W: WLAN-Uhr mit Zeitumstellung und Zeitzone (TM1637)
- Raspberry Pi Pico W und WH
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.