Menü
Microbots
0
  • Machen
    • Erste Schritte
    • Maker-Builds
    • Ausbildung
  • Geschäft
    • Maker-Module
    • Maker-Pakete
    • Werkzeuge und Ausrüstung
    • Roboter & Displays
  • Um
    • Unsere Geschichte
    • Kontakt
    • FAQs
  • Deutsch
  • Ihr Warenkorb ist leer
Microbots
  • Machen
    • Erste Schritte
    • Maker-Builds
    • Ausbildung
  • Geschäft
    • Maker-Module
    • Maker-Pakete
    • Werkzeuge und Ausrüstung
    • Roboter & Displays
  • Um
    • Unsere Geschichte
    • Kontakt
    • FAQs
  • Sprache

  • 0 0

CodeCell: Verbindung mit BLE

Bluetooth Low Energy (BLE) ist eine leistungsstarke Möglichkeit zur drahtlosen Kommunikation zwischen Ihrer CodeCell und anderen Geräten wie Smartphones, Tablets und sogar anderen Mikrocontrollern. In dieser Anleitung richten wir BLE auf CodeCell ein, ermöglichen den Empfang von Befehlen von einem BLE-Client und steuern die RGB-LED basierend auf den empfangenen Daten.

Was ist BLE?

BLE ist eine energieeffiziente Version von Bluetooth, die es Geräten ermöglicht, kleine Datenmengen bei geringem Stromverbrauch auszutauschen. Hier sind die wichtigsten Konzepte:

  • BLE-Server → CodeCell fungiert als Server und macht sich bei anderen Geräten bekannt.
  • BLE-Client → Ein Telefon, Tablet oder ein anderer Mikrocontroller, der eine Verbindung zu CodeCell herstellt.
  • BLE-Dienst → Eine Sammlung von Merkmalen , die die gesendeten Daten definieren.
  • BLE-Eigenschaft → Ein bestimmter Datenpunkt (z. B. Tastendrücke, Sensorwerte).

Anzeigen von BLE-Daten auf einem Smartphone

Bevor wir mit dem Testen beginnen, müssen Sie eine App herunterladen, um BLE-Daten auf Ihr Smartphone zu senden. Beginnen Sie mit dem Herunterladen eine BLE-Scanner-App:

  • Android → nRF Connect oder „BLE Scanner“
  • iOS → nRF Connect

Einrichten von BLE auf CodeCell

Damit CodeCell sich selbst als BLE-Gerät ankündigt , müssen wir BLE initialisieren, einen Dienst und eine Eigenschaft erstellen und mit der Werbung beginnen .

Dieser Code erstellt einen BLE-Server , kündigt einen Dienst an und richtet eine Eigenschaft ein , die von einem angeschlossenen Gerät gelesen und geschrieben werden kann. Die CodeCell empfängt die Tasteneigenschaft und steuert ihre integrierte RGB-LED:

  • Wenn der Tastenwert 1 ist , leuchtet die LED rot .
  • Wenn der Tastenwert 0 ist , leuchtet die LED grün .
 #include <BLEDevice.h>
 #include <BLEUtils.h>
 #include <BLEServer.h>
 #include <BLE2902.h>

 #include <CodeCell.h>
 CodeCell myCodeCell;

 BLECharacteristic *pButtonCharacteristic = NULL;
 #define BUTTON_UUID "abcd1234-abcd-1234-abcd-123456789012"

 class MyServerCallbacks : public BLEServerCallbacks {
 void onConnect(BLEServer *pServer) override {
 Serial.println("BLE Connected");
 delay(1000);
 }

 void onDisconnect(BLEServer *pServer) override {
 Serial.println("BLE Disconnected");
 delay(500);
 BLEDevice::startAdvertising(); // Restart advertising
 }
 };

 // Callback class for handling button writes
 class ButtonCallback : public BLECharacteristicCallbacks {
 void onWrite(BLECharacteristic *pCharacteristic) override {
 String value = pCharacteristic->getValue();

 if (value.length() > 0) {
 int buttonState = value[0];

 Serial.print("Button State: "); 
Serial.println(buttonState);

 wenn (ButtonState == 1) {
 myCodeCell.LED(255, 0, 0); // Rote LED, wenn die Taste 1 ist
 } anders {
 myCodeCell.LED(0, 255, 0); // Grüne LED, wenn die Schaltfläche nicht 1 ist
 }
 }
 }
 };

 void setup() {
 Serial.begin(115200);
 myCodeCell.Init(LIGHT); // Initialisiert den Lichtsensor

 BLEDevice::init("CodeCell_BLE"); // BLE-Gerätenamen festlegen
 BLEServer *bleServer = BLEDevice::createServer();
 bleServer->setCallbacks(neu MyServerCallbacks());

 BLEService *bleService = bleServer->createService(BLEUUID("12345678-1234-5678-1234-56789abcdef0"));

 // BLE-Merkmal für den Schaltflächenzustand erstellen
 pButtonCharacteristic = bleService->createCharacteristic(
 BUTTON_UUID,
 BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE
 );
 pButtonCharacteristic->addDescriptor(neues BLE2902());
 pButtonCharacteristic->setCallbacks(neuer ButtonCallback());

 bleService->start();
 
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
 pAdvertising->addServiceUUID("12345678-1234-5678-1234-56789abcdef0");
 BLEDevice::startAdvertising();
 }

 void-Schleife() {
 // Keine ständige Überprüfung erforderlich, LED-Updates nur beim BLE-Schreiben
 }

Wie dieser Code funktioniert

  • BLE-Initialisierung → CodeCell bewirbt sich selbst als BLE-Gerät mit dem Namen "CodeCell_BLE" .
  • BLE-Dienst und -Eigenschaft → Es wird ein Dienst mit einer Schaltflächeneigenschaft erstellt.
  • BLE-Rückrufe → Der Server druckt „BLE Connected“ , wenn ein Client eine Verbindung herstellt, und „BLE Disconnected“, wenn die Verbindung getrennt wird.
  • Neustart der Werbung → Wenn die Verbindung getrennt wird, startet BLE automatisch erneut mit der Werbung, damit neue Geräte eine Verbindung herstellen können.

Testen der LED-Steuerung

  • Stellen Sie in der BLE Scanner-App eine Verbindung zu "CodeCell_BLE" her.
  • Wählen Sie den von Ihnen erstellten Dienst aus (normalerweise wird er als „Unbekannter Dienst“ angezeigt).
  • Suchen Sie die Schaltflächeneigenschaft ( BUTTON_UUID ) und senden Sie den Wert:
    • Schreibe 1 → LED leuchtet rot 🔴
    • Schreibe 0 → LED leuchtet grün 🟢

Senden von Sensordaten

Als Nächstes definieren wir eine neue BLE-Eigenschaft , die es CodeCell ermöglicht, Sensorwerte an ein verbundenes Gerät zu senden .

 #include <BLEDevice.h>
 #include <BLEUtils.h>
 #include <BLEServer.h>
 #include <BLE2902.h>

 #include <CodeCell.h>
 CodeCell myCodeCell;

 BLECharacteristic *pSensorCharacteristic = NULL;
 #define SENSOR_UUID "abcd5678-abcd-5678-abcd-56789abcdef0"

 class MyServerCallbacks : public BLEServerCallbacks {
 void onConnect(BLEServer *pServer) override {
 Serial.println("BLE Connected");
 delay(1000);
 }

 void onDisconnect(BLEServer *pServer) override { 
Serial.println("BLE getrennt");
 Verzögerung (500);
 BLEDevice::startAdvertising(); // Werbung neu starten
 }
 };

 void setup() {
 Serial.begin(115200);
 myCodeCell.Init(LIGHT); // Licht- und Näherungssensor initialisieren

 BLEDevice::init("CodeCell_BLE"); // Benennen Sie das BLE-Gerät
 BLEServer *bleServer = BLEDevice::createServer();
 bleServer->setCallbacks(neu MyServerCallbacks());

 BLEService *bleService = bleServer->createService(BLEUUID("12345678-1234-5678-1234-56789abcdef0"));

 // BLE-Kennlinie für Sensordaten erstellen
 pSensorCharacteristic = bleService->createCharacteristic(
 SENSOR_UUID,
 BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
 );
 pSensorCharacteristic->addDescriptor(neues BLE2902());

 bleService->start();

 BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
 pAdvertising->addServiceUUID("12345678-1234-5678-1234-56789abcdef0");
 BLEDevice::startAdvertising();
 }

 void-Schleife() { 
if (myCodeCell.Run(10)) { // Alle 100 ms (10 Hz) lesen
 uint16_t Nähe = myCodeCell.Light_ProximityRead();
 Serial.print("Nähe: ");
 Serial.println(Nähe);

 // Näherungswert in Zeichenfolge umwandeln und über BLE senden
 String proximityStr = String(Nähe);
 pSensorCharacteristic->setValue(proximityStr.c_str());
 pSensorCharacteristic->notify(); // Verbundenes Gerät benachrichtigen
 }
 }

Wie funktioniert es?

  • Dieser Code richtet eine neue Eigenschaft ( SENSOR_UUID ) ein , die Clients lesen und von der sie Echtzeit-Updates erhalten können:
    • PROPERTY_READ → Ermöglicht dem Client, den Wert manuell zu lesen.
    • PROPERTY_NOTIFY → Sendet automatisch Updates, wenn neue Daten verfügbar sind.
  • Die Funktion Light_ProximityRead() ruft einen Wert vom integrierten Lichtsensor ab , der nahe gelegene Objekte erkennt. Wir konvertieren die Zahl in eine Zeichenfolge und senden sie an den BLE-Client.

Probieren Sie es aus

Da CodeCell jetzt Näherungssensordaten über BLE sendet , können Sie diese auf einem Telefon anzeigen .

  • Öffnen Sie eine BLE-App wie nRF Connect (Android/iOS)
  • Nach "CodeCell_BLE" suchen und verbinden
  • Suchen Sie die Sensorcharakteristik ( SENSOR_UUID )
  • Aktivieren Sie Benachrichtigungen und beobachten Sie, wie sich die Näherungsdaten in Echtzeit aktualisieren!
  • Ihre Serial Monitor-Daten sollten mit den an Ihr Telefon gesendeten Daten übereinstimmen

Bewegen Sie ein Objekt in die Nähe des Sensors und sehen Sie, wie sich die Werte ändern!

Wie geht es weiter?

Nachdem Sie CodeCell nun über BLE steuern können, versuchen Sie:

  • Hinzufügen weiterer Befehle (z. B. blaue LED, Blinken, Sensorauslöser)
  • Empfangen mehrerer Werte (z. B. Senden von Beschleunigungs- oder Näherungssensordaten)
  • Erstellen Sie ein vollständig BLE-gesteuertes IoT-Gerät oder verbinden Sie es sogar mit einer anderen App


  • Teilen:

Sozial

Github

  • Um
  • Software
  • Ausbildung
  • Kontakt
  • FAQs
  • Bedingungen
  • Rückerstattung-Politik
  • Datenschutzrichtlinie

Erfahren Sie als Erster von neuen Projekten und sichern Sie sich spannende Angebote!

© 2025 Microbots.