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:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren