Skip to main content

Bluetooth serijska veza

Što ovaj primjer prikazuje​

Razmjena teksta između mobitela i pločice Inkplate 7SPECTRA putem Bluetooth LE. Ono što mobitel pošalje prikazuje se u Serial Monitoru; ono što upišete u Serial Monitor šalje se na mobitel. Zaslon prikazuje kratku poruku nakon što se Bluetooth pokrene.

Uparite Inkplate s mobitelom u Bluetooth postavkama mobitela, zatim otvorite aplikaciju za Bluetooth serijski terminal (u komentarima skice spominje se Serial Bluetooth Terminal; slična aplikacija također radi) i na popisu uređaja odaberite Inkplate.

Ovaj primjer koristi i Bluetooth LE biblioteku (BLEDevice, BLEServer, BLEUtils, BLE2902) iz arduino-esp32, koja nije dio Inkplate biblioteke i dolazi uz paket pločice ESP32.

Primjer koda​

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
}
}

Komentar pored Inkplate inkplate; spominje 1-bitni način rada; Inkplate 7SPECTRA ima samo svoj šestobojni način rada, a konstruktor ne prima način rada.

Korištene funkcije​

Inkplate()returns None

Stvara objekt Inkplate. Inkplate 7SPECTRA ima jedan šestobojni način rada, pa konstruktor ne prima argument načina rada.

ReturnsKonstruktor; nema povratne vrijednosti.

inkplate.begin()returns void

Inicijalizira biblioteku, periferne jedinice i međuspremnik slike. Pozovite je jednom u setup().

ReturnsNišta.

inkplate.clearDisplay()returns void

Ispunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.

ReturnsNišta.

inkplate.setTextSize(uint8_t s)returns void

Postavlja povećanje teksta: 3 za naslov, 2 za retke nakon njega.

ReturnsNišta.

inkplate.setTextColor(uint16_t c)returns void

Postavlja boju teksta, ovdje INKPLATE_BLACK.

ReturnsNišta.

inkplate.println(text)returns size_t

Ispisuje tekst u međuspremnik slike i prelazi u sljedeći redak, kao Serial.println().

ReturnsBroj ispisanih bajtova.

inkplate.display(bool _leaveOn = 0)returns void

Šalje cijeli međuspremnik slike na zaslon i osvježava ga.

ReturnsNišta.

Serial.begin(115200)returns void

Funkcija Arduino jezgre: pokreće serijski port na 115200 baud.

ReturnsNišta.

BLEDevice::init(name)returns void

Bluetooth LE biblioteka paketa pločice ESP32: pokreće Bluetooth LE s nazivom uređaja koji mobitel vidi, ovdje Inkplate 7SPECTRA.

ReturnsNišta.

BLEDevice::createServer()returns BLEServer *

Bluetooth LE biblioteka: stvara Bluetooth LE poslužitelj.

ReturnsPoslužitelj.

pServer->setCallbacks(callbacks)returns void

Bluetooth LE biblioteka: registrira objekt čije se funkcije onConnect i onDisconnect izvršavaju kada se mobitel spoji ili prekine vezu.

ReturnsNišta.

pServer->createService(SERVICE_UUID)returns BLEService *

Bluetooth LE biblioteka: stvara uslugu s UART UUID-om usluge definiranim na vrhu skice.

ReturnsUsluga.

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

Bluetooth LE biblioteka: stvara karakteristiku. Skica stvara predajnu karakteristiku s PROPERTY_NOTIFY (podaci koji izlaze iz Inkplatea) i prijamnu karakteristiku s PROPERTY_WRITE (podaci koji dolaze).

ReturnsKarakteristika.

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

Bluetooth LE biblioteka: omogućuje mobitelu da uključi i isključi obavijesti za predajnu karakteristiku.

ReturnsNišta.

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

Bluetooth LE biblioteka: registrira objekt čija se funkcija onWrite izvršava kada mobitel upiše podatke u prijamnu karakteristiku.

ReturnsNišta.

pCharacteristic->getValue()returns String

Bluetooth LE biblioteka: vraća tekst koji je mobitel upisao. Skica ga ispisuje u Serial Monitor znak po znak.

ReturnsPrimljeni tekst.

pService->start()returns void

Bluetooth LE biblioteka: pokreće uslugu.

ReturnsNišta.

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

Bluetooth LE biblioteka: pokreće oglašavanje kako bi mobitel mogao pronaći Inkplate.

ReturnsNišta.

pServer->startAdvertising()returns void

Bluetooth LE biblioteka: ponovno pokreće oglašavanje. Skica je poziva u loop() pola sekunde nakon što se mobitel odspoji, kako bi se mogao spojiti novi.

ReturnsNišta.

esp_bt_controller_get_status()returns esp_bt_controller_status_t

Funkcija paketa pločice ESP32: vraća stanje Bluetooth kontrolera. Skica ga uspoređuje s ESP_BT_CONTROLLER_STATUS_ENABLED kako bi javila je li se Bluetooth pokrenuo.

ReturnsStanje kontrolera.

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

Bluetooth LE biblioteka: postavlja bajtove za slanje na mobitel; skica prosljeđuje redak pročitan iz Serial Monitora.

ReturnsNišta.

pTxCharacteristic->notify()returns void

Bluetooth LE biblioteka: šalje vrijednost spojenom mobitelu.

ReturnsNišta.

Serial.available()returns int

Funkcija Arduino jezgre: vraća koliko bajtova čeka u serijskom prijamnom međuspremniku.

ReturnsBroj dostupnih bajtova.

Serial.readStringUntil(char terminator)returns String

Funkcija Arduino jezgre: čita znakove sa serijskog porta do terminatora, ovdje novog retka.

ReturnsPročitani tekst.

Serial.print(value)returns size_t

Funkcija Arduino jezgre: ispisuje tekst u Serial Monitor bez prijelaza u novi redak.

ReturnsBroj ispisanih bajtova.

Serial.println(text)returns size_t

Funkcija Arduino jezgre: ispisuje redak u Serial Monitor.

ReturnsBroj ispisanih bajtova.

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

Funkcija Arduino jezgre na ESP32: ispisuje formatirani tekst u Serial Monitor.

ReturnsBroj ispisanih bajtova.

delay(ms)returns void

Funkcija Arduino jezgre: čeka zadani broj milisekundi.

ReturnsNišta.

Što očekivati​

Zaslon prikazuje Bluetooth Serial Example, zatim poruku The device started, now you can pair it with Bluetooth and send messages. i savjet da otvorite Serial Monitor na 115200 baud. Ako se Bluetooth ne pokrene, umjesto toga prikazuje BLE FAILED.

Kada se mobitel spoji i pošalje tekst, Serial Monitor na 115200 baud ga prikazuje, na primjer nakon što mobitel pošalje hello:

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

Upišite redak u Serial Monitor dok je mobitel spojen i skica ispisuje Sent value: nakon čega slijedi vaš tekst, te ga šalje na mobitel. Skica ispisuje Device disconnected kada mobitel prekine vezu.

🔗Otvorite cjelovit primjer

examples/Inkplate7SPECTRA/Advanced/Communications/Inkplate7SPECTRA_Bluetooth_Serial

→