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
#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 NoneStvara 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 voidInicijalizira biblioteku, periferne jedinice i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
inkplate.clearDisplay()returns voidIspunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.
ReturnsNišta.
inkplate.setTextSize(uint8_t s)returns voidPostavlja povećanje teksta: 3 za naslov, 2 za retke nakon njega.
ReturnsNišta.
inkplate.setTextColor(uint16_t c)returns voidPostavlja boju teksta, ovdje INKPLATE_BLACK.
ReturnsNišta.
inkplate.println(text)returns size_tIspisuje 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 voidFunkcija Arduino jezgre: pokreće serijski port na 115200 baud.
ReturnsNišta.
BLEDevice::init(name)returns voidBluetooth 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 voidBluetooth 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 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 upiše podatke u prijamnu karakteristiku.
ReturnsNišta.
pCharacteristic->getValue()returns StringBluetooth LE biblioteka: vraća tekst koji je mobitel upisao. Skica ga ispisuje u Serial Monitor znak po znak.
ReturnsPrimljeni tekst.
pService->start()returns voidBluetooth LE biblioteka: pokreće uslugu.
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 spojiti novi.
ReturnsNišta.
esp_bt_controller_get_status()returns esp_bt_controller_status_tFunkcija 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 voidBluetooth LE biblioteka: postavlja bajtove za slanje na mobitel; skica prosljeđuje redak pročitan iz Serial Monitora.
ReturnsNišta.
pTxCharacteristic->notify()returns voidBluetooth LE biblioteka: šalje vrijednost spojenom mobitelu.
ReturnsNišta.
Serial.available()returns intFunkcija Arduino jezgre: vraća koliko bajtova čeka u serijskom prijamnom međuspremniku.
ReturnsBroj dostupnih bajtova.
Serial.readStringUntil(char terminator)returns StringFunkcija Arduino jezgre: čita znakove sa serijskog porta do terminatora, ovdje novog retka.
ReturnsPročitani tekst.
Serial.print(value)returns size_tFunkcija Arduino jezgre: ispisuje tekst u Serial Monitor bez prijelaza u novi redak.
ReturnsBroj ispisanih bajtova.
Serial.println(text)returns size_tFunkcija Arduino jezgre: ispisuje redak u Serial Monitor.
ReturnsBroj ispisanih bajtova.
Serial.printf(format, ...)returns size_tFunkcija Arduino jezgre na ESP32: ispisuje formatirani tekst u Serial Monitor.
ReturnsBroj ispisanih bajtova.
delay(ms)returns voidFunkcija 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:
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