Zum Hauptinhalt springen

Bluetooth-Seriell

Was dieses Beispiel zeigt​

Tauschen Sie Text zwischen einem Smartphone und dem Inkplate 7SPECTRA über Bluetooth LE aus. Was das Smartphone sendet, erscheint im Serial Monitor; was Sie im Serial Monitor eingeben, wird an das Smartphone gesendet. Sobald Bluetooth gestartet ist, zeigt der Bildschirm eine kurze Meldung an.

Koppeln Sie das Inkplate in den Bluetooth-Einstellungen des Smartphones mit Ihrem Smartphone, öffnen Sie dann eine Bluetooth-Serial-Terminal-App (die Kommentare im Sketch nennen Serial Bluetooth Terminal; eine ähnliche App funktioniert ebenfalls) und wählen Sie das Inkplate in der Geräteliste aus.

Dieses Beispiel verwendet außerdem die Bluetooth-LE-Bibliothek (BLEDevice, BLEServer, BLEUtils, BLE2902) aus arduino-esp32. Sie gehört nicht zur Inkplate-Bibliothek und wird mit dem ESP32-Board-Paket installiert.

Beispielcode​

Select Board
Inkplate7SPECTRA_Bluetooth_Serial.ino
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include "Inkplate.h"

#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" // For data coming IN to Inkplate
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" // For data coming OUT from Inkplate

Inkplate inkplate; // Create an object on Inkplate library and also set library into 1-bit mode (BW)

BLEServer *pServer = NULL; // Pointer to BLEServer
BLECharacteristic *pTxCharacteristic; // Pointer to TX characteristic
bool deviceConnected = false; // Is client currently connected
bool oldDeviceConnected = false; // Store the previous connection

class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer *pServer)
{
deviceConnected = true;
Serial.println("Device connected");
};

void onDisconnect(BLEServer *pServer)
{
deviceConnected = false;
Serial.println("Device disconnected");
}
};

class MyCallbacks : public BLECharacteristicCallbacks
{
void onWrite(BLECharacteristic *pCharacteristic)
{
String rxValue = pCharacteristic->getValue();

if (rxValue.length() > 0)
{
Serial.print("Received Value: ");
for (int i = 0; i < rxValue.length(); i++)
{
Serial.print(rxValue[i]);
}
Serial.println();
}
}
};

void setup()
{
inkplate.begin(); // Init Inkplate library (you should call this function ONLY ONCE)
inkplate.clearDisplay(); // Clear frame buffer of display
inkplate.setTextSize(3); // Scale text to be 3 times bigger then original (5x7 px)

inkplate.setTextColor(INKPLATE_BLACK);
inkplate.println("Bluetooth Serial");
inkplate.println("Example");
inkplate.println();
inkplate.setTextSize(2);

Serial.begin(115200);
BLEDevice::init("Inkplate 7SPECTRA");

pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());

BLEService *pService = pServer->createService(SERVICE_UUID);

pTxCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);

pTxCharacteristic->addDescriptor(new BLE2902());

BLECharacteristic *pRxCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);

pRxCharacteristic->setCallbacks(new MyCallbacks());

pService->start();

pServer->getAdvertising()->start();

if (esp_bt_controller_get_status() != ESP_BT_CONTROLLER_STATUS_ENABLED)
{
Serial.println("BLE controller failed to start");
inkplate.println("BLE FAILED");
}
else
{
inkplate.println("The device started, now you can ");
inkplate.println("pair it with Bluetooth and send");
inkplate.println("messages.");
inkplate.println();
inkplate.println("Open Serial Monitor at 115200");
inkplate.println("baud!");
}

inkplate.display();
}

void loop()
{
if (deviceConnected)
{
if (Serial.available())
{
String s = Serial.readStringUntil('\n') + "\n"; // Load the message from serial
Serial.printf("Sent value: %s\n", s.c_str());
pTxCharacteristic->setValue((uint8_t *)s.c_str(), strlen(s.c_str())); // Convert the message into bytes
pTxCharacteristic->notify(); // Transmit the message
}
}

if (!deviceConnected && oldDeviceConnected)
{
delay(500); // Allow bluetooth stack some time
pServer->startAdvertising(); // Restart advertising
oldDeviceConnected = false; // Update state
}

if (deviceConnected && !oldDeviceConnected)
{
oldDeviceConnected = true; // Update the old state
}
}

Der Kommentar neben Inkplate inkplate; erwähnt einen 1-Bit-Modus; das Inkplate 7SPECTRA hat nur seinen Sechs-Farben-Modus, und der Konstruktor nimmt keinen Modus entgegen.

Verwendete Funktionen​

Inkplate()returns None

Erstellt das Inkplate-Objekt. Das Inkplate 7SPECTRA hat einen einzigen Sechs-Farben-Modus, daher nimmt der Konstruktor kein Modus-Argument entgegen.

ReturnsKonstruktor; kein Rückgabewert.

inkplate.begin()returns void

Initialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.

ReturnsNichts.

inkplate.clearDisplay()returns void

Füllt den Framebuffer mit Weiß. Das Panel wird dadurch nicht verändert.

ReturnsNichts.

inkplate.setTextSize(uint8_t s)returns void

Legt die Textvergrößerung fest: 3 für den Titel, 2 für die folgenden Zeilen.

ReturnsNichts.

inkplate.setTextColor(uint16_t c)returns void

Legt die Textfarbe fest, hier INKPLATE_BLACK.

ReturnsNichts.

inkplate.println(text)returns size_t

Gibt Text in den Framebuffer aus und springt in die nächste Zeile, wie Serial.println().

ReturnsAnzahl der ausgegebenen Bytes.

inkplate.display(bool _leaveOn = 0)returns void

Sendet den gesamten Framebuffer an das Panel und aktualisiert es.

ReturnsNichts.

Serial.begin(115200)returns void

Funktion des Arduino-Cores: startet die serielle Schnittstelle mit 115200 Baud.

ReturnsNichts.

BLEDevice::init(name)returns void

Bluetooth-LE-Bibliothek des ESP32-Board-Pakets: startet Bluetooth LE mit dem Gerätenamen, den das Smartphone sieht, hier Inkplate 7SPECTRA.

ReturnsNichts.

BLEDevice::createServer()returns BLEServer *

Bluetooth-LE-Bibliothek: erstellt den Bluetooth-LE-Server.

ReturnsDer Server.

pServer->setCallbacks(callbacks)returns void

Bluetooth-LE-Bibliothek: registriert das Objekt, dessen Funktionen onConnect und onDisconnect ausgeführt werden, wenn sich ein Smartphone verbindet oder trennt.

ReturnsNichts.

pServer->createService(SERVICE_UUID)returns BLEService *

Bluetooth-LE-Bibliothek: erstellt den Service mit der UART-Service-UUID, die am Anfang des Sketches definiert ist.

ReturnsDer Service.

pService->createCharacteristic(uuid, properties)returns BLECharacteristic *

Bluetooth-LE-Bibliothek: erstellt eine Characteristic. Der Sketch erstellt eine Sende-Characteristic mit PROPERTY_NOTIFY (Daten, die vom Inkplate ausgehen) und eine Empfangs-Characteristic mit PROPERTY_WRITE (eingehende Daten).

ReturnsDie Characteristic.

pTxCharacteristic->addDescriptor(new BLE2902())returns void

Bluetooth-LE-Bibliothek: ermöglicht es dem Smartphone, Benachrichtigungen für die Sende-Characteristic ein- und auszuschalten.

ReturnsNichts.

pRxCharacteristic->setCallbacks(new MyCallbacks())returns void

Bluetooth-LE-Bibliothek: registriert das Objekt, dessen Funktion onWrite ausgeführt wird, wenn das Smartphone in die Empfangs-Characteristic schreibt.

ReturnsNichts.

pCharacteristic->getValue()returns String

Bluetooth-LE-Bibliothek: gibt den Text zurück, den das Smartphone geschrieben hat. Der Sketch gibt ihn Zeichen für Zeichen im Serial Monitor aus.

ReturnsDer empfangene Text.

pService->start()returns void

Bluetooth-LE-Bibliothek: startet den Service.

ReturnsNichts.

pServer->getAdvertising()->start()returns void

Bluetooth-LE-Bibliothek: startet das Advertising, damit das Smartphone das Inkplate finden kann.

ReturnsNichts.

pServer->startAdvertising()returns void

Bluetooth-LE-Bibliothek: startet das Advertising neu. Der Sketch ruft sie in loop() eine halbe Sekunde nach dem Trennen eines Smartphones auf, damit sich ein neues verbinden kann.

ReturnsNichts.

esp_bt_controller_get_status()returns esp_bt_controller_status_t

Funktion des ESP32-Board-Pakets: gibt den Zustand des Bluetooth-Controllers zurück. Der Sketch vergleicht ihn mit ESP_BT_CONTROLLER_STATUS_ENABLED, um zu melden, ob Bluetooth gestartet ist.

ReturnsDer Zustand des Controllers.

pTxCharacteristic->setValue(uint8_t *data, size_t length)returns void

Bluetooth-LE-Bibliothek: legt die Bytes fest, die an das Smartphone gesendet werden; der Sketch übergibt die im Serial Monitor gelesene Zeile.

ReturnsNichts.

pTxCharacteristic->notify()returns void

Bluetooth-LE-Bibliothek: sendet den Wert an das verbundene Smartphone.

ReturnsNichts.

Serial.available()returns int

Funktion des Arduino-Cores: gibt zurück, wie viele Bytes im seriellen Empfangspuffer warten.

ReturnsAnzahl der verfügbaren Bytes.

Serial.readStringUntil(char terminator)returns String

Funktion des Arduino-Cores: liest Zeichen von der seriellen Schnittstelle bis zum Endzeichen, hier ein Zeilenumbruch.

ReturnsDer gelesene Text.

Serial.print(value)returns size_t

Funktion des Arduino-Cores: gibt Text ohne Zeilenumbruch im Serial Monitor aus.

ReturnsAnzahl der ausgegebenen Bytes.

Serial.println(text)returns size_t

Funktion des Arduino-Cores: gibt eine Zeile im Serial Monitor aus.

ReturnsAnzahl der ausgegebenen Bytes.

Serial.printf(format, ...)returns size_t

Funktion des Arduino-Cores auf dem ESP32: gibt formatierten Text im Serial Monitor aus.

ReturnsAnzahl der ausgegebenen Bytes.

delay(ms)returns void

Funktion des Arduino-Cores: wartet die angegebene Anzahl von Millisekunden.

ReturnsNichts.

Was Sie erwarten können​

Der Bildschirm zeigt Bluetooth Serial Example, gefolgt von der Meldung The device started, now you can pair it with Bluetooth and send messages. und einem Hinweis, den Serial Monitor mit 115200 Baud zu öffnen. Wenn Bluetooth nicht startet, erscheint stattdessen BLE FAILED.

Wenn sich ein Smartphone verbindet und Text sendet, zeigt der Serial Monitor mit 115200 Baud ihn an, zum Beispiel nachdem das Smartphone hello gesendet hat:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
Device connected
Received Value: hello

Geben Sie im Serial Monitor eine Zeile ein, während das Smartphone verbunden ist, dann gibt der Sketch Sent value: gefolgt von Ihrem Text aus und sendet ihn an das Smartphone. Der Sketch gibt Device disconnected aus, wenn das Smartphone die Verbindung trennt.

🔗Vollständiges Beispiel öffnen

examples/Inkplate7SPECTRA/Advanced/Communications/Inkplate7SPECTRA_Bluetooth_Serial

→