Bluetooth periferni način rada
Što ovaj primjer prikazuje
Upotrijebite Inkplate 7SPECTRA kao zaslon koji s mobitela upravljate preko Bluetooth LE-a. Skica pokreće Bluetooth LE servis sa serijskom prijemnom i predajnom karakteristikom. Tekst koji mobitel zapiše prosljeđuje se funkciji run() iz datoteke Peripheral.h u primjeru, koja crta na zaslonu.
Uparite Inkplate s mobitelom u Bluetooth postavkama mobitela, zatim otvorite aplikaciju za Bluetooth serijski terminal (komentari u skici spominju Serial Bluetooth Terminal; slična aplikacija također radi) i na popisu uređaja odaberite Inkplate. Naredba počinje znakom # i završava znakom *. Nakon naredbi za crtanje pošaljite #L(1)* kako bi se rezultat prikazao na zaslonu; komentari u skici navode da je to jednako display->display().
Ovaj primjer koristi i Bluetooth LE biblioteku (BLEDevice, BLEServer, BLEUtils, BLE2902) iz arduino-esp32, koja nije dio biblioteke Inkplate i dolazi s ESP32 paketom pločice.
Primjer koda
Ispis je datoteka skice. Funkcija run() i parser naredbi nalaze se u datoteci Peripheral.h, u istoj mapi primjera; otvorite cjeloviti primjer u nastavku da biste je pročitali.
#include "Inkplate.h"
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include "Peripheral.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
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
Inkplate inkplate;
#define BUFFER_SIZE 1000
char commandBuffer[BUFFER_SIZE + 1];
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)
{
size_t len = rxValue.length();
if (len > BUFFER_SIZE)
{
len = BUFFER_SIZE;
}
memcpy(commandBuffer, rxValue.c_str(), len);
commandBuffer[len] = 0;
run(commandBuffer, len, &inkplate, pTxCharacteristic);
}
}
};
void setup() // Initialize everything
{
Serial.begin(115200);
inkplate.begin();
BLEDevice::init("Inkplate 7 SPECTRA");
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.");
}
else
{
Serial.println("The device started, now you can pair it with Bluetooth and send commands.");
}
}
void loop()
{
if (!deviceConnected && oldDeviceConnected)
{
delay(500); // Allow bluetooth stack some time
pServer->startAdvertising(); // Restart advertising
oldDeviceConnected = false;
}
if (deviceConnected && !oldDeviceConnected)
{
oldDeviceConnected = true;
}
}
Korištene funkcije
Inkplate()returns NoneStvara objekt Inkplate. Inkplate 7SPECTRA ima jedan šesterobojni način rada, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
inkplate.begin()returns voidInicijalizira biblioteku, periferiju i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
run(char commandBuffer[], size_t n, Inkplate *display, BLECharacteristic *pTxCharacteristic)returns voidDefinirana u datoteci Peripheral.h u primjeru. Traži naredbu između # i * u primljenom tekstu, izvršava odgovarajuću funkciju crtanja na objektu Inkplate te odgovara na predajnoj karakteristici kada to naredba zahtijeva (naredba `#?` odgovara s OK).
ReturnsNišta.
Serial.begin(115200)returns voidFunkcija jezgre Arduina: pokreće serijski port na 115200 baud.
ReturnsNišta.
BLEDevice::init(name)returns voidBluetooth LE biblioteka ESP32 paketa pločice: pokreće Bluetooth LE s nazivom uređaja koji mobitel vidi, ovdje Inkplate 7 SPECTRA.
ReturnsNišta.
BLEDevice::createServer()returns BLEServer *Bluetooth LE biblioteka: stvara Bluetooth LE poslužitelj.
ReturnsPoslužitelj.
pServer->setCallbacks(callbacks)returns voidBluetooth LE biblioteka: registrira objekt čije se funkcije onConnect i onDisconnect izvršavaju kada se mobitel poveže ili odspoji. Skica ispisuje Device connected ili Device disconnected.
ReturnsNišta.
pServer->createService(SERVICE_UUID)returns BLEService *Bluetooth LE biblioteka: stvara servis s UUID-om UART servisa definiranim na vrhu skice.
ReturnsServis.
pService->createCharacteristic(uuid, properties)returns BLECharacteristic *Bluetooth LE biblioteka: stvara karakteristiku. Skica stvara predajnu karakteristiku sa svojstvom PROPERTY_NOTIFY (podaci koji izlaze iz Inkplatea) i prijemnu karakteristiku sa svojstvom PROPERTY_WRITE (podaci koji dolaze).
ReturnsKarakteristika.
pTxCharacteristic->addDescriptor(new BLE2902())returns voidBluetooth LE biblioteka: omogućuje mobitelu da uključi i isključi obavijesti za predajnu karakteristiku.
ReturnsNišta.
pRxCharacteristic->setCallbacks(new MyCallbacks())returns voidBluetooth LE biblioteka: registrira objekt čija se funkcija onWrite izvršava kada mobitel zapiše podatke u prijemnu karakteristiku.
ReturnsNišta.
pCharacteristic->getValue()returns StringBluetooth LE biblioteka: vraća tekst koji je mobitel zapisao. Skica iz njega kopira najviše 1000 znakova u međuspremnik i prosljeđuje ga funkciji run().
ReturnsPrimljeni tekst.
pTxCharacteristic->setValue(value)returns voidBluetooth LE biblioteka, poziva se unutar run(): postavlja vrijednost koja se šalje natrag mobitelu.
ReturnsNišta.
pTxCharacteristic->notify()returns voidBluetooth LE biblioteka, poziva se unutar run(): šalje vrijednost povezanom mobitelu.
ReturnsNišta.
pService->start()returns voidBluetooth LE biblioteka: pokreće servis.
ReturnsNišta.
pServer->getAdvertising()->start()returns voidBluetooth LE biblioteka: pokreće oglašavanje kako bi mobitel mogao pronaći Inkplate.
ReturnsNišta.
pServer->startAdvertising()returns voidBluetooth LE biblioteka: ponovno pokreće oglašavanje. Skica je poziva u loop() pola sekunde nakon što se mobitel odspoji, kako bi se mogao povezati novi.
ReturnsNišta.
esp_bt_controller_get_status()returns esp_bt_controller_status_tFunkcija ESP32 paketa pločice: 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.
Serial.println(text)returns size_tFunkcija jezgre Arduina: ispisuje redak u Serial Monitor.
ReturnsBroj ispisanih bajtova.
delay(ms)returns voidFunkcija jezgre Arduina: čeka zadani broj milisekundi.
ReturnsNišta.
Što očekivati
Uz Serial Monitor na 115200 baud, skica nakon pokretanja Bluetootha ispisuje:
The device started, now you can pair it with Bluetooth and send commands.
Ispisuje Device connected kada se mobitel poveže i Device disconnected kada se odspoji; ako se Bluetooth ne pokrene, umjesto toga ispisuje BLE controller failed to start.. Na zaslonu se ne prikazuje ništa dok mobitel ne pošalje naredbe za crtanje, a zatim #L(1)*.
🔗Otvorite cjeloviti primjer
examples/Inkplate7SPECTRA/Advanced/Communications/Inkplate7SPECTRA_Bluetooth_Peripheral_Mode