Skip to main content

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.

Select Board
Inkplate7SPECTRA_Bluetooth_Peripheral_Mode.ino
#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 None

Stvara 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 void

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

ReturnsNišta.

run(char commandBuffer[], size_t n, Inkplate *display, BLECharacteristic *pTxCharacteristic)returns void

Definirana 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 void

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

ReturnsNišta.

BLEDevice::init(name)returns void

Bluetooth 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 void

Bluetooth 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 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 zapiše podatke u prijemnu karakteristiku.

ReturnsNišta.

pCharacteristic->getValue()returns String

Bluetooth 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 void

Bluetooth LE biblioteka, poziva se unutar run(): postavlja vrijednost koja se šalje natrag mobitelu.

ReturnsNišta.

pTxCharacteristic->notify()returns void

Bluetooth LE biblioteka, poziva se unutar run(): šalje vrijednost povezanom mobitelu.

ReturnsNišta.

pService->start()returns void

Bluetooth LE biblioteka: pokreće servis.

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 povezati novi.

ReturnsNišta.

esp_bt_controller_get_status()returns esp_bt_controller_status_t

Funkcija 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_t

Funkcija jezgre Arduina: ispisuje redak u Serial Monitor.

ReturnsBroj ispisanih bajtova.

delay(ms)returns void

Funkcija jezgre Arduina: čeka zadani broj milisekundi.

ReturnsNišta.

Što očekivati​

Uz Serial Monitor na 115200 baud, skica nakon pokretanja Bluetootha ispisuje:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
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

→