ESP32 Bluetooth LE Secure Server for multi clients (ft. PassKey)
253
ESP32_TTGO/BLE_Secure_Server/BLE_Secure_Server.ino
Normal file
@@ -0,0 +1,253 @@
|
||||
#include <Pangodream_18650_CL.h>
|
||||
#include "SPIFFS.h"
|
||||
#include <TFT_eSPI.h>
|
||||
#include <TJpg_Decoder.h>
|
||||
#include "Free_Fonts.h"
|
||||
#include <BLEDevice.h>
|
||||
#include <BLEServer.h>
|
||||
#include <BLEUtils.h>
|
||||
|
||||
#define ICON_WIDTH 70
|
||||
#define ICON_HEIGHT 36
|
||||
#define STATUS_HEIGHT_BAR ICON_HEIGHT
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||
#define ICON_POS_X (tft.width() - ICON_WIDTH)
|
||||
#define MIN_USB_VOL 4.9
|
||||
#define ADC_PIN 34
|
||||
#define CONV_FACTOR 1.8
|
||||
#define READS 20
|
||||
|
||||
Pangodream_18650_CL BL(ADC_PIN, CONV_FACTOR, READS);
|
||||
char *batteryImages[] = {"/battery_01.jpg", "/battery_02.jpg", "/battery_03.jpg", "/battery_04.jpg", "/battery_05.jpg"};
|
||||
|
||||
BLEServer* pServer = NULL;
|
||||
BLECharacteristic* pCharacteristic = NULL;
|
||||
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
|
||||
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
|
||||
#define PASSKEY 999999
|
||||
|
||||
TFT_eSPI tft = TFT_eSPI();
|
||||
|
||||
SemaphoreHandle_t xGuiSemaphore;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
pinoutInit();
|
||||
SPIFFSInit();
|
||||
displayInit();
|
||||
bleInit();
|
||||
xGuiSemaphore = xSemaphoreCreateMutex();
|
||||
xTaskCreate(battery_info, "battery_info", 2048, NULL, 1, NULL);
|
||||
delay(500);
|
||||
xTaskCreate(ble_task, "ble_task", 2048, NULL, 2, NULL);
|
||||
}
|
||||
|
||||
void loop() {}
|
||||
|
||||
/////////////////////
|
||||
//BLE Secure Server//
|
||||
/////////////////////
|
||||
|
||||
class ServerCallback: public BLEServerCallbacks {
|
||||
void onConnect(BLEServer* pServer) {
|
||||
Serial.println(" - ServerCallback - onConnect");
|
||||
};
|
||||
|
||||
void onDisconnect(BLEServer* pServer) {
|
||||
Serial.println(" - ServerCallback - onDisconnect");
|
||||
}
|
||||
};
|
||||
|
||||
class SecurityCallback : public BLESecurityCallbacks {
|
||||
|
||||
uint32_t onPassKeyRequest(){
|
||||
return 000000;
|
||||
}
|
||||
|
||||
void onPassKeyNotify(uint32_t pass_key){}
|
||||
|
||||
bool onConfirmPIN(uint32_t pass_key){
|
||||
vTaskDelay(5000);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool onSecurityRequest(){
|
||||
return true;
|
||||
}
|
||||
|
||||
void onAuthenticationComplete(esp_ble_auth_cmpl_t cmpl){
|
||||
if(cmpl.success){
|
||||
Serial.println(" - SecurityCallback - Authentication Success");
|
||||
}else{
|
||||
Serial.println(" - SecurityCallback - Authentication Failure*");
|
||||
pServer->removePeerDevice(pServer->getConnId(), true);
|
||||
}
|
||||
BLEDevice::startAdvertising();
|
||||
}
|
||||
};
|
||||
|
||||
void bleSecurity(){
|
||||
esp_ble_auth_req_t auth_req = ESP_LE_AUTH_REQ_SC_MITM_BOND;
|
||||
esp_ble_io_cap_t iocap = ESP_IO_CAP_OUT;
|
||||
uint8_t key_size = 16;
|
||||
uint8_t init_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK;
|
||||
uint8_t rsp_key = ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK;
|
||||
uint32_t passkey = PASSKEY;
|
||||
uint8_t auth_option = ESP_BLE_ONLY_ACCEPT_SPECIFIED_AUTH_DISABLE;
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_STATIC_PASSKEY, &passkey, sizeof(uint32_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_AUTHEN_REQ_MODE, &auth_req, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_IOCAP_MODE, &iocap, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_MAX_KEY_SIZE, &key_size, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_ONLY_ACCEPT_SPECIFIED_SEC_AUTH, &auth_option, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_INIT_KEY, &init_key, sizeof(uint8_t));
|
||||
esp_ble_gap_set_security_param(ESP_BLE_SM_SET_RSP_KEY, &rsp_key, sizeof(uint8_t));
|
||||
}
|
||||
|
||||
void bleInit(){
|
||||
BLEDevice::init("BLE-Secure-Server");
|
||||
BLEDevice::setEncryptionLevel(ESP_BLE_SEC_ENCRYPT);
|
||||
BLEDevice::setSecurityCallbacks(new SecurityCallback());
|
||||
|
||||
pServer = BLEDevice::createServer();
|
||||
pServer->setCallbacks(new ServerCallback());
|
||||
|
||||
BLEService *pService = pServer->createService(SERVICE_UUID);
|
||||
pCharacteristic = pService->createCharacteristic(
|
||||
CHARACTERISTIC_UUID,
|
||||
BLECharacteristic::PROPERTY_READ |
|
||||
BLECharacteristic::PROPERTY_WRITE |
|
||||
BLECharacteristic::PROPERTY_NOTIFY
|
||||
);
|
||||
|
||||
pCharacteristic->setAccessPermissions(ESP_GATT_PERM_READ_ENCRYPTED | ESP_GATT_PERM_WRITE_ENCRYPTED);
|
||||
pService->start();
|
||||
|
||||
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
|
||||
pAdvertising->addServiceUUID(SERVICE_UUID);
|
||||
pAdvertising->setScanResponse(false);
|
||||
pAdvertising->setMinPreferred(0x0);
|
||||
BLEDevice::startAdvertising();
|
||||
|
||||
bleSecurity();
|
||||
}
|
||||
|
||||
static void ble_task(void *arg){
|
||||
tft.setTextDatum(TL_DATUM);
|
||||
tft.setFreeFont(FF22);
|
||||
tft.setTextColor(TFT_SKYBLUE, TFT_BLACK);
|
||||
tft.drawString("BLE", 0, 50, GFXFF);
|
||||
tft.setFreeFont(FF21);
|
||||
tft.setTextColor(TFT_RED, TFT_BLACK);
|
||||
tft.drawString("Secure", 0, 75, GFXFF);
|
||||
tft.setTextColor(TFT_SKYBLUE, TFT_BLACK);
|
||||
tft.drawString("Server", 0, 95, GFXFF);
|
||||
tft.drawString("Multi-Connect", 0, 115, GFXFF);
|
||||
tft.setTextColor(TFT_RED, TFT_GREEN);
|
||||
tft.drawString("PIN#: " + String(PASSKEY), 0, 135, GFXFF);
|
||||
tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
tft.drawString("Clients#", 0, 160, GFXFF);
|
||||
|
||||
uint32_t value = 0;
|
||||
|
||||
while(1){
|
||||
|
||||
xSemaphoreTake(xGuiSemaphore, portMAX_DELAY);
|
||||
int connectedCount = pServer->getConnectedCount();
|
||||
Serial.printf("connectedCount: %d\n", connectedCount);
|
||||
|
||||
if (connectedCount >0) {
|
||||
pCharacteristic->setValue((uint8_t*)&value, 4);
|
||||
pCharacteristic->notify();
|
||||
}
|
||||
value++;
|
||||
|
||||
tft.fillRect(0, 180, tft.width(), tft.height() - 180, TFT_NAVY);
|
||||
tft.setTextColor(TFT_GOLD, TFT_NAVY);
|
||||
tft.setTextDatum(TC_DATUM); // Centre text on x,y position
|
||||
tft.setFreeFont(FF24);
|
||||
tft.drawString(String(connectedCount), tft.width()/2, 190, GFXFF);
|
||||
TJpgDec.drawFsJpg(94, 40, value%2 == 0 ? "/bt_white.jpg" : "/bt_blue.jpg");
|
||||
|
||||
xSemaphoreGive(xGuiSemaphore);
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////
|
||||
//Battery Indicator//
|
||||
/////////////////////
|
||||
|
||||
void pinoutInit(){
|
||||
pinMode(14, OUTPUT);
|
||||
}
|
||||
void SPIFFSInit(){
|
||||
if (!SPIFFS.begin()) {
|
||||
Serial.println("SPIFFS initialisation failed!");
|
||||
while (1) yield(); // Stay here twiddling thumbs waiting
|
||||
}
|
||||
Serial.println("\r\nInitialisation done.");
|
||||
}
|
||||
|
||||
void displayInit(){
|
||||
tft.begin();
|
||||
tft.setRotation(0);
|
||||
tft.setTextColor(TFT_WHITE,TFT_BLACK);
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
tft.setSwapBytes(true);
|
||||
tft.setTextFont(2);
|
||||
TJpgDec.setJpgScale(1);
|
||||
TJpgDec.setCallback(tft_output);
|
||||
}
|
||||
|
||||
static void battery_info(void *arg){
|
||||
while(1){
|
||||
digitalWrite(14, HIGH);
|
||||
xSemaphoreTake(xGuiSemaphore, portMAX_DELAY);
|
||||
|
||||
if(BL.getBatteryVolts() >= MIN_USB_VOL){
|
||||
for(int i=0; i< ARRAY_SIZE(batteryImages); i++){
|
||||
drawingBatteryIcon(batteryImages[i]);
|
||||
drawingText("Chrg");
|
||||
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}else{
|
||||
int imgNum = 0;
|
||||
int batteryLevel = BL.getBatteryChargeLevel();
|
||||
if(batteryLevel >=80){
|
||||
imgNum = 3;
|
||||
}else if(batteryLevel < 80 && batteryLevel >= 50 ){
|
||||
imgNum = 2;
|
||||
}else if(batteryLevel < 50 && batteryLevel >= 20 ){
|
||||
imgNum = 1;
|
||||
}else if(batteryLevel < 20 ){
|
||||
imgNum = 0;
|
||||
}
|
||||
|
||||
drawingBatteryIcon(batteryImages[imgNum]);
|
||||
drawingText(String(batteryLevel) + "%");
|
||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||
}
|
||||
|
||||
xSemaphoreGive(xGuiSemaphore);
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
digitalWrite(14, LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void drawingBatteryIcon(String filePath){
|
||||
TJpgDec.drawFsJpg(ICON_POS_X, 0, filePath);
|
||||
}
|
||||
|
||||
void drawingText(String text){
|
||||
tft.fillRect(0, 0, ICON_POS_X, ICON_HEIGHT,TFT_BLACK);
|
||||
tft.setTextDatum(5);
|
||||
tft.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
tft.drawString(text, ICON_POS_X-2, STATUS_HEIGHT_BAR/2, 4);
|
||||
}
|
||||
|
||||
bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap)
|
||||
{
|
||||
if ( y >= tft.height() ) return 0;
|
||||
tft.pushImage(x, y, w, h, bitmap);
|
||||
return 1;
|
||||
}
|
||||
379
ESP32_TTGO/BLE_Secure_Server/Free_Fonts.h
Normal file
@@ -0,0 +1,379 @@
|
||||
// Attach this header file to your sketch to use the GFX Free Fonts. You can write
|
||||
// sketches without it, but it makes referencing them easier.
|
||||
|
||||
// This calls up ALL the fonts but they only get loaded if you actually
|
||||
// use them in your sketch.
|
||||
//
|
||||
// No changes are needed to this header file unless new fonts are added to the
|
||||
// library "Fonts/GFXFF" folder.
|
||||
//
|
||||
// To save a lot of typing long names, each font can easily be referenced in the
|
||||
// sketch in three ways, either with:
|
||||
//
|
||||
// 1. Font file name with the & in front such as &FreeSansBoldOblique24pt7b
|
||||
// an example being:
|
||||
//
|
||||
// tft.setFreeFont(&FreeSansBoldOblique24pt7b);
|
||||
//
|
||||
// 2. FF# where # is a number determined by looking at the list below
|
||||
// an example being:
|
||||
//
|
||||
// tft.setFreeFont(FF32);
|
||||
//
|
||||
// 3. An abbreviation of the file name. Look at the list below to see
|
||||
// the abbreviations used, for example:
|
||||
//
|
||||
// tft.setFreeFont(FSSBO24)
|
||||
//
|
||||
// Where the letters mean:
|
||||
// F = Free font
|
||||
// M = Mono
|
||||
// SS = Sans Serif (double S to distinguish is form serif fonts)
|
||||
// S = Serif
|
||||
// B = Bold
|
||||
// O = Oblique (letter O not zero)
|
||||
// I = Italic
|
||||
// # = point size, either 9, 12, 18 or 24
|
||||
//
|
||||
// Setting the font to NULL will select the GLCD font:
|
||||
//
|
||||
// tft.setFreeFont(NULL); // Set font to GLCD
|
||||
|
||||
|
||||
#ifdef LOAD_GFXFF // Only include the fonts if LOAD_GFXFF is defined in User_Setup.h
|
||||
|
||||
// Use these when printing or drawing text in GLCD and high rendering speed fonts
|
||||
// Call up the font using tft.setTextFont()
|
||||
#define GFXFF 1
|
||||
#define GLCD 0
|
||||
#define FONT2 2
|
||||
#define FONT4 4
|
||||
#define FONT6 6
|
||||
#define FONT7 7
|
||||
#define FONT8 8
|
||||
|
||||
// Use the following when calling tft.setFreeFont()
|
||||
//
|
||||
// Reserved for GLCD font // FF0
|
||||
//
|
||||
|
||||
#define TT1 &TomThumb
|
||||
|
||||
#define FM9 &FreeMono9pt7b
|
||||
#define FM12 &FreeMono12pt7b
|
||||
#define FM18 &FreeMono18pt7b
|
||||
#define FM24 &FreeMono24pt7b
|
||||
|
||||
#define FMB9 &FreeMonoBold9pt7b
|
||||
#define FMB12 &FreeMonoBold12pt7b
|
||||
#define FMB18 &FreeMonoBold18pt7b
|
||||
#define FMB24 &FreeMonoBold24pt7b
|
||||
|
||||
#define FMO9 &FreeMonoOblique9pt7b
|
||||
#define FMO12 &FreeMonoOblique12pt7b
|
||||
#define FMO18 &FreeMonoOblique18pt7b
|
||||
#define FMO24 &FreeMonoOblique24pt7b
|
||||
|
||||
#define FMBO9 &FreeMonoBoldOblique9pt7b
|
||||
#define FMBO12 &FreeMonoBoldOblique12pt7b
|
||||
#define FMBO18 &FreeMonoBoldOblique18pt7b
|
||||
#define FMBO24 &FreeMonoBoldOblique24pt7b
|
||||
|
||||
#define FSS9 &FreeSans9pt7b
|
||||
#define FSS12 &FreeSans12pt7b
|
||||
#define FSS18 &FreeSans18pt7b
|
||||
#define FSS24 &FreeSans24pt7b
|
||||
|
||||
#define FSSB9 &FreeSansBold9pt7b
|
||||
#define FSSB12 &FreeSansBold12pt7b
|
||||
#define FSSB18 &FreeSansBold18pt7b
|
||||
#define FSSB24 &FreeSansBold24pt7b
|
||||
|
||||
#define FSSO9 &FreeSansOblique9pt7b
|
||||
#define FSSO12 &FreeSansOblique12pt7b
|
||||
#define FSSO18 &FreeSansOblique18pt7b
|
||||
#define FSSO24 &FreeSansOblique24pt7b
|
||||
|
||||
#define FSSBO9 &FreeSansBoldOblique9pt7b
|
||||
#define FSSBO12 &FreeSansBoldOblique12pt7b
|
||||
#define FSSBO18 &FreeSansBoldOblique18pt7b
|
||||
#define FSSBO24 &FreeSansBoldOblique24pt7b
|
||||
|
||||
#define FS9 &FreeSerif9pt7b
|
||||
#define FS12 &FreeSerif12pt7b
|
||||
#define FS18 &FreeSerif18pt7b
|
||||
#define FS24 &FreeSerif24pt7b
|
||||
|
||||
#define FSI9 &FreeSerifItalic9pt7b
|
||||
#define FSI12 &FreeSerifItalic12pt7b
|
||||
#define FSI19 &FreeSerifItalic18pt7b
|
||||
#define FSI24 &FreeSerifItalic24pt7b
|
||||
|
||||
#define FSB9 &FreeSerifBold9pt7b
|
||||
#define FSB12 &FreeSerifBold12pt7b
|
||||
#define FSB18 &FreeSerifBold18pt7b
|
||||
#define FSB24 &FreeSerifBold24pt7b
|
||||
|
||||
#define FSBI9 &FreeSerifBoldItalic9pt7b
|
||||
#define FSBI12 &FreeSerifBoldItalic12pt7b
|
||||
#define FSBI18 &FreeSerifBoldItalic18pt7b
|
||||
#define FSBI24 &FreeSerifBoldItalic24pt7b
|
||||
|
||||
#define FF0 NULL //ff0 reserved for GLCD
|
||||
#define FF1 &FreeMono9pt7b
|
||||
#define FF2 &FreeMono12pt7b
|
||||
#define FF3 &FreeMono18pt7b
|
||||
#define FF4 &FreeMono24pt7b
|
||||
|
||||
#define FF5 &FreeMonoBold9pt7b
|
||||
#define FF6 &FreeMonoBold12pt7b
|
||||
#define FF7 &FreeMonoBold18pt7b
|
||||
#define FF8 &FreeMonoBold24pt7b
|
||||
|
||||
#define FF9 &FreeMonoOblique9pt7b
|
||||
#define FF10 &FreeMonoOblique12pt7b
|
||||
#define FF11 &FreeMonoOblique18pt7b
|
||||
#define FF12 &FreeMonoOblique24pt7b
|
||||
|
||||
#define FF13 &FreeMonoBoldOblique9pt7b
|
||||
#define FF14 &FreeMonoBoldOblique12pt7b
|
||||
#define FF15 &FreeMonoBoldOblique18pt7b
|
||||
#define FF16 &FreeMonoBoldOblique24pt7b
|
||||
|
||||
#define FF17 &FreeSans9pt7b
|
||||
#define FF18 &FreeSans12pt7b
|
||||
#define FF19 &FreeSans18pt7b
|
||||
#define FF20 &FreeSans24pt7b
|
||||
|
||||
#define FF21 &FreeSansBold9pt7b
|
||||
#define FF22 &FreeSansBold12pt7b
|
||||
#define FF23 &FreeSansBold18pt7b
|
||||
#define FF24 &FreeSansBold24pt7b
|
||||
|
||||
#define FF25 &FreeSansOblique9pt7b
|
||||
#define FF26 &FreeSansOblique12pt7b
|
||||
#define FF27 &FreeSansOblique18pt7b
|
||||
#define FF28 &FreeSansOblique24pt7b
|
||||
|
||||
#define FF29 &FreeSansBoldOblique9pt7b
|
||||
#define FF30 &FreeSansBoldOblique12pt7b
|
||||
#define FF31 &FreeSansBoldOblique18pt7b
|
||||
#define FF32 &FreeSansBoldOblique24pt7b
|
||||
|
||||
#define FF33 &FreeSerif9pt7b
|
||||
#define FF34 &FreeSerif12pt7b
|
||||
#define FF35 &FreeSerif18pt7b
|
||||
#define FF36 &FreeSerif24pt7b
|
||||
|
||||
#define FF37 &FreeSerifItalic9pt7b
|
||||
#define FF38 &FreeSerifItalic12pt7b
|
||||
#define FF39 &FreeSerifItalic18pt7b
|
||||
#define FF40 &FreeSerifItalic24pt7b
|
||||
|
||||
#define FF41 &FreeSerifBold9pt7b
|
||||
#define FF42 &FreeSerifBold12pt7b
|
||||
#define FF43 &FreeSerifBold18pt7b
|
||||
#define FF44 &FreeSerifBold24pt7b
|
||||
|
||||
#define FF45 &FreeSerifBoldItalic9pt7b
|
||||
#define FF46 &FreeSerifBoldItalic12pt7b
|
||||
#define FF47 &FreeSerifBoldItalic18pt7b
|
||||
#define FF48 &FreeSerifBoldItalic24pt7b
|
||||
|
||||
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
// Now we define "s"tring versions for easy printing of the font name so:
|
||||
// tft.println(sFF5);
|
||||
// will print
|
||||
// Mono bold 9
|
||||
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
#define sFF0 "GLCD"
|
||||
#define sTT1 "Tom Thumb"
|
||||
#define sFF1 "Mono 9"
|
||||
#define sFF2 "Mono 12"
|
||||
#define sFF3 "Mono 18"
|
||||
#define sFF4 "Mono 24"
|
||||
|
||||
#define sFF5 "Mono bold 9"
|
||||
#define sFF6 "Mono bold 12"
|
||||
#define sFF7 "Mono bold 18"
|
||||
#define sFF8 "Mono bold 24"
|
||||
|
||||
#define sFF9 "Mono oblique 9"
|
||||
#define sFF10 "Mono oblique 12"
|
||||
#define sFF11 "Mono oblique 18"
|
||||
#define sFF12 "Mono oblique 24"
|
||||
|
||||
#define sFF13 "Mono bold oblique 9"
|
||||
#define sFF14 "Mono bold oblique 12"
|
||||
#define sFF15 "Mono bold oblique 18"
|
||||
#define sFF16 "Mono bold oblique 24" // Full text line is too big for 480 pixel wide screen
|
||||
|
||||
#define sFF17 "Sans 9"
|
||||
#define sFF18 "Sans 12"
|
||||
#define sFF19 "Sans 18"
|
||||
#define sFF20 "Sans 24"
|
||||
|
||||
#define sFF21 "Sans bold 9"
|
||||
#define sFF22 "Sans bold 12"
|
||||
#define sFF23 "Sans bold 18"
|
||||
#define sFF24 "Sans bold 24"
|
||||
|
||||
#define sFF25 "Sans oblique 9"
|
||||
#define sFF26 "Sans oblique 12"
|
||||
#define sFF27 "Sans oblique 18"
|
||||
#define sFF28 "Sans oblique 24"
|
||||
|
||||
#define sFF29 "Sans bold oblique 9"
|
||||
#define sFF30 "Sans bold oblique 12"
|
||||
#define sFF31 "Sans bold oblique 18"
|
||||
#define sFF32 "Sans bold oblique 24"
|
||||
|
||||
#define sFF33 "Serif 9"
|
||||
#define sFF34 "Serif 12"
|
||||
#define sFF35 "Serif 18"
|
||||
#define sFF36 "Serif 24"
|
||||
|
||||
#define sFF37 "Serif italic 9"
|
||||
#define sFF38 "Serif italic 12"
|
||||
#define sFF39 "Serif italic 18"
|
||||
#define sFF40 "Serif italic 24"
|
||||
|
||||
#define sFF41 "Serif bold 9"
|
||||
#define sFF42 "Serif bold 12"
|
||||
#define sFF43 "Serif bold 18"
|
||||
#define sFF44 "Serif bold 24"
|
||||
|
||||
#define sFF45 "Serif bold italic 9"
|
||||
#define sFF46 "Serif bold italic 12"
|
||||
#define sFF47 "Serif bold italic 18"
|
||||
#define sFF48 "Serif bold italic 24"
|
||||
|
||||
#else // LOAD_GFXFF not defined so setup defaults to prevent error messages
|
||||
|
||||
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
// Free fonts are not loaded in User_Setup.h so we must define all as font 1
|
||||
// to prevent compile error messages
|
||||
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
|
||||
#define GFXFF 1
|
||||
#define GLCD 1
|
||||
#define FONT2 2
|
||||
#define FONT4 4
|
||||
#define FONT6 6
|
||||
#define FONT7 7
|
||||
#define FONT8 8
|
||||
|
||||
#define TT1 1
|
||||
|
||||
#define FF0 1
|
||||
#define FF1 1
|
||||
#define FF2 1
|
||||
#define FF3 1
|
||||
#define FF4 1
|
||||
#define FF5 1
|
||||
#define FF6 1
|
||||
#define FF7 1
|
||||
#define FF8 1
|
||||
#define FF9 1
|
||||
#define FF10 1
|
||||
#define FF11 1
|
||||
#define FF12 1
|
||||
#define FF13 1
|
||||
#define FF14 1
|
||||
#define FF15 1
|
||||
#define FF16 1
|
||||
#define FF17 1
|
||||
#define FF18 1
|
||||
#define FF19 1
|
||||
#define FF20 1
|
||||
#define FF21 1
|
||||
#define FF22 1
|
||||
#define FF23 1
|
||||
#define FF24 1
|
||||
#define FF25 1
|
||||
#define FF26 1
|
||||
#define FF27 1
|
||||
#define FF28 1
|
||||
#define FF29 1
|
||||
#define FF30 1
|
||||
#define FF31 1
|
||||
#define FF32 1
|
||||
#define FF33 1
|
||||
#define FF34 1
|
||||
#define FF35 1
|
||||
#define FF36 1
|
||||
#define FF37 1
|
||||
#define FF38 1
|
||||
#define FF39 1
|
||||
#define FF40 1
|
||||
#define FF41 1
|
||||
#define FF42 1
|
||||
#define FF43 1
|
||||
#define FF44 1
|
||||
#define FF45 1
|
||||
#define FF46 1
|
||||
#define FF47 1
|
||||
#define FF48 1
|
||||
|
||||
#define FM9 1
|
||||
#define FM12 1
|
||||
#define FM18 1
|
||||
#define FM24 1
|
||||
|
||||
#define FMB9 1
|
||||
#define FMB12 1
|
||||
#define FMB18 1
|
||||
#define FMB24 1
|
||||
|
||||
#define FMO9 1
|
||||
#define FMO12 1
|
||||
#define FMO18 1
|
||||
#define FMO24 1
|
||||
|
||||
#define FMBO9 1
|
||||
#define FMBO12 1
|
||||
#define FMBO18 1
|
||||
#define FMBO24 1
|
||||
|
||||
#define FSS9 1
|
||||
#define FSS12 1
|
||||
#define FSS18 1
|
||||
#define FSS24 1
|
||||
|
||||
#define FSSB9 1
|
||||
#define FSSB12 1
|
||||
#define FSSB18 1
|
||||
#define FSSB24 1
|
||||
|
||||
#define FSSO9 1
|
||||
#define FSSO12 1
|
||||
#define FSSO18 1
|
||||
#define FSSO24 1
|
||||
|
||||
#define FSSBO9 1
|
||||
#define FSSBO12 1
|
||||
#define FSSBO18 1
|
||||
#define FSSBO24 1
|
||||
|
||||
#define FS9 1
|
||||
#define FS12 1
|
||||
#define FS18 1
|
||||
#define FS24 1
|
||||
|
||||
#define FSI9 1
|
||||
#define FSI12 1
|
||||
#define FSI19 1
|
||||
#define FSI24 1
|
||||
|
||||
#define FSB9 1
|
||||
#define FSB12 1
|
||||
#define FSB18 1
|
||||
#define FSB24 1
|
||||
|
||||
#define FSBI9 1
|
||||
#define FSBI12 1
|
||||
#define FSBI18 1
|
||||
#define FSBI24 1
|
||||
|
||||
#endif // LOAD_GFXFF
|
||||
BIN
ESP32_TTGO/BLE_Secure_Server/data/battery_01.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
ESP32_TTGO/BLE_Secure_Server/data/battery_02.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
ESP32_TTGO/BLE_Secure_Server/data/battery_03.jpg
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
ESP32_TTGO/BLE_Secure_Server/data/battery_04.jpg
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
ESP32_TTGO/BLE_Secure_Server/data/battery_05.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
ESP32_TTGO/BLE_Secure_Server/data/bt_blue.jpg
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
ESP32_TTGO/BLE_Secure_Server/data/bt_white.jpg
Normal file
|
After Width: | Height: | Size: 7.0 KiB |