Bluetooth-Nachrichtenbox

Dieses Projekt empfängt Nachrichten und zeigt sie auf einem LCD-Bildschirm an.

Sie können es als Familien-Nachrichtentafel nutzen, um Familienmitglieder, die noch nicht gegangen sind, daran zu erinnern, ihre Schlüssel mitzunehmen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Sie können sie auch separat über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 WiFi

-

Steckbrett

BUY

Jumperkabel

BUY

I2C LCD1602

BUY

Verdrahtung

../_images/07_lightblue_lcd_bb.png

Schaltplan

../_images/07_lightblue_lcd_schematic.png

UUID generieren

UUIDs spielen eine entscheidende Rolle bei der BLE-Kommunikation und gewährleisten die Einzigartigkeit von Geräten sowie die Genauigkeit des Datenaustauschs zwischen ihnen. Sie müssen UUIDs anpassen, um Ihre eigenen BLE-Dienste und -Merkmale für spezifische Anforderungen zu erstellen. (Hier müssen wir ein Merkmal erstellen, das Texteingaben unterstützt.)

  1. Verwenden Sie das Online UUID Generator Tool, um UUIDs zu erstellen, die einzigartig für Sie sind, um UUID-Konflikte zu vermeiden.

  2. Erzeugen Sie zwei UUIDs der Version 4.

    ../_images/07_uuid_1.png

  3. Kopieren Sie sie und ersetzen Sie die beiden UUIDs in Ihrem Code.

    #define SERVICE_UUID "uuid1"
    #define CHARACTERISTIC_UUID "uuid2"
    

Bibliothek installieren

ArduinoBLE.h: Wird für die Verwaltung von Bluetooth Low Energy (BLE) Kommunikation verwendet. LiquidCrystal_I2C.h: Wird verwendet, um einen 16x2-Zeichen-LCD-Bildschirm mit einer I2C-Schnittstelle zu steuern.

Code ausführen

Bemerkung

  • Sie können die Datei 07_lightblue_lcd.ino direkt unter dem Pfad elite-explorer-kit-main\iot_project\07_lightblue_lcd öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

Bemerkung

Um die Bibliothek zu installieren, verwenden Sie den Arduino-Bibliotheksmanager, um nach „ArduinoBLE“ und „LiquidCrystal I2C“ zu suchen und diese zu installieren.

Wie funktioniert des?

Um mit den in diesem Sketch erstellten Diensten und Merkmalen zu interagieren, sollten Sie eine generische Bluetooth® Low Energy-Zentral-App wie LightBlue (verfügbar für iOS und Android) oder nRF Connect (für Android) verwenden.

Wir verwenden LightBlue als Beispiel, um zu demonstrieren, wie man Arduino’s LED über Bluetooth steuert.

  1. Laden Sie die LightBlue-App aus dem App Store (für iOS) oder Google Play (für Android) herunter.

    ../_images/07_lightblue.png
  2. Verbinden des Arduino mit Ihrem Smartphone über Bluetooth

    Gehen Sie zu Ihren Bluetooth-Einstellungen und suchen Sie das Gerät namens „UNO R4 BLE.“ Stellen Sie eine Verbindung dazu her.

    ../_images/07_iot_ble_01.jpg

  3. Interaktion mit Arduino über Bluetooth mit LightBlue

    Starten Sie LightBlue und tippen Sie auf den Reiter Bonded unten in der Schnittstelle. Hier sehen Sie eine Liste der BLE-Geräte, mit denen Ihr Smartphone zuvor gekoppelt wurde. Finden Sie UNO R4 BLE und tippen Sie auf CONNECT.

    ../_images/07_iot_ble_02.jpg

    Nachdem Sie verbunden sind, erhalten Sie Zugang zu detaillierten Informationen über das Bluetooth-Gerät. Scrollen Sie nach unten, um Ihre Dienst-UUID und Ihre Charakteristik-UUID zu finden.

    Tippen Sie auf die Charakteristik. Sie werden feststellen, dass diese Charakteristik sowohl lesbar als auch beschreibbar ist, was Ihnen erlaubt, sowohl davon zu lesen als auch darauf zu schreiben.

    Scrollen Sie weiter zum Abschnitt „Datenformat“ und ändern Sie ihn auf UTF-8-String. Geben Sie Text in das Textfeld ein und klicken Sie auf schreiben. Die von Ihnen eingegebene Nachricht erscheint auf dem LCD.

    ../_images/07_iot_ble_03.jpg

Wie funktioniert des?

Hier sind die Hauptteile des Codes und Erklärungen ihrer Funktionen:

  1. Einbinden der erforderlichen Bibliotheken:

    • ArduinoBLE.h: Wird für die Handhabung von BLE-Kommunikation verwendet.

    • Wire.h: Wird für I2C-Kommunikation verwendet.

    • LiquidCrystal_I2C.h: Wird verwendet, um einen 16x2-Zeichen-LCD-Bildschirm mit einer I2C-Schnittstelle zu steuern.

  2. Definieren eines BLE-Dienstes und einer BLE-Charakteristik:

    • Verwenden Sie die Klasse BLEService, um einen BLE-Dienst zu definieren und ihm eine einzigartige UUID zuzuweisen.

    • Verwenden Sie die Klasse BLECharacteristic, um eine BLE-Charakteristik zu definieren, ihr eine einzigartige UUID zuzuweisen und ihr Lese- (BLERead) und Schreibrechte (BLEWrite) zu geben.

    • Erstellen Sie ein Zeichen-Array stringValue als Anfangswert der Charakteristik.

  3. Initialisieren eines 16x2-Zeichen-LCD-Bildschirms (LCD):

    • Verwenden Sie die Klasse LiquidCrystal_I2C, um ein LCD zu initialisieren, indem Sie die I2C-Adresse (0x27) und die Anzahl der Zeilen und Spalten (16x2) angeben.

    • Schalten Sie die Hintergrundbeleuchtung des LCD ein, löschen Sie den Bildschirm, bewegen Sie den Cursor zum Anfang der ersten Zeile und zeigen Sie „Bluetooth LCD“ an.

  4. Durchführung der Initialisierung in der Funktion setup():

    • Initialisieren der seriellen Kommunikation.

    • Initialisieren des BLE-Moduls und, falls die Initialisierung fehlschlägt, in eine unendliche Schleife eintreten.

    • Setzen des lokalen Namens und der Service-UUID für das BLE-Peripheriegerät.

    • Hinzufügen der BLE-Charakteristik zum BLE-Dienst.

    • Starten der Werbung für den BLE-Dienst, damit zentrale Geräte ihn entdecken und sich damit verbinden können.

    • Initialisieren des LCD.

  5. Die Funktion loop():

    • Überprüfen, ob ein zentrales Gerät mit dem BLE-Peripheriegerät verbunden ist, indem BLE.central() aufgerufen wird. Wenn ein zentrales Gerät verbunden ist, in die Logik der Verbindungsbearbeitung eintreten.

    • Im verbundenen Zustand überprüfen, ob Daten in die BLE-Charakteristik geschrieben wurden, indem boxCharacteristic.written() überprüft wird.

    • Wenn Daten geschrieben wurden, die Länge der geschriebenen Daten mit boxCharacteristic.valueLength() ermitteln und ein Byte-Array buffer erstellen, um die geschriebenen Daten zu speichern.

    • Verwenden Sie boxCharacteristic.readValue(), um Daten aus der BLE-Charakteristik in den buffer zu lesen.

    • Ein Nullzeichen '\0' an das Ende des buffer hinzufügen, um es in einen String zu konvertieren.

    • Die empfangene Nachricht auf dem seriellen Monitor ausgeben und auf dem LCD anzeigen.

    • Weiterhin auf das nächste zentrale Gerät warten, das sich verbindet, nachdem das zentrale Gerät getrennt wurde.