Доброго времени суток, форумчане! При расширении возможности мобильного анализатора температуры, влажности, давления и углекислого газа решил подружить его с андроидом. Но наткнувшись на вариант отправки на сайте тут, не могу заставить код формировать строку для отправки.
А вот расписанная ошибка:
Код для esp32:
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>
#include "SoftwareSerial.h"
#include "GyverTimer.h"
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
// DO NOT CHANGE THE NEXT UUIDs
// Otherwise, you also need to modify the Android application used in this project
#define SERVICE_UUID "C6FBDD3C-7123-4C9E-86AB-005F1A7EDA01"
#define CHARACTERISTIC_UUID_RX "B88E098B-E464-4B54-B827-79EB2B150A9F"
#define CHARACTERISTIC_UUID_TX "D769FACF-A4DA-47BA-9253-65359EE480FB"
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
// Setup callbacks onConnect and onDisconnect
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
GTimer myTimer(MS); // создать миллисекундный таймер
GTimer predictTimer(MS); // 10 минут
#define __CS 17// Определяем пин к которому подключен разъем CS дисплея
#define __DC 2// Определяем пин к которому подключен разъем A0 дисплея
#define __RES 14 // Определяем пин к которому подключен разъем RESET дисплея
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
#include "MHZ19.h"
#define RX_PIN 32 // Rx pin which the MHZ19 Tx pin is attached to
#define TX_PIN 33 // Tx pin which the MHZ19 Rx pin is attached to
#define BAUDRATE 9600 // Device to MH-Z19 Serial baudrate (should not be changed)
MHZ19 myMHZ19; // Constructor for library
SoftwareSerial mySerial(RX_PIN, TX_PIN); // create device to MH-Z19 serial
TFT_ILI9163C display = TFT_ILI9163C(__CS, __DC, __RES);// Связываем объект display с библиотекой TFT_ILI9163C и сообщаем библиотеке определенные для работы с дисплеем пины
// В следующих 8-и строках опеределяем названия и соответствующие им RGB обозначения цветов, которые будем выводить на дисплей
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
//uint8_t energy1 = 12;
float dispTemp;
byte dispHum;
int dispPres;
int dispCO2;
int dispRain;
uint16_t co2ppm;
uint32_t timer = 0;
int delta;
uint32_t pressure_array[6];
uint32_t sumX, sumY, sumX2, sumXY;
float a, b;
byte time_array[6];
uint8_t s = 1;
uint8_t s1 = 1;
int16_t ra = 0;
int16_t t[36];
int8_t th[36];
int16_t v[36];
int8_t vh[36];
int16_t p[36];
int16_t ph[36];
int16_t co[36];
int16_t coh[36];
// Начало функции обработки кириллических символов
String utf8rus(String source) // Функция для конвертации русских символов из кодировки CP1251 в UTF8
{
int i, k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xBF) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) {
n = 0xA8;
break;
}
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) {
n = 0xB7;
break;
}
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
// Конец функции обработки кириллических симоволов
static const uint32_t image_data_Start[16900] = {
}; //вступительная картинка
uint8_t x = 1; //флаг переключения экранов
void basic(); //функция для экрана без данных
void sensor(); //функция для опроса датчиков
void tim(); //функция времени 10 минут для постойки графов
void after(); //второй экран с первичными данными
void graf(); //постройка графиков
void calc(); //рассчет массивов
void rain(); //рассчет вероятности дождя
void setup() {
// Create the BLE Device
BLEDevice::init("ESP32_Board");
// Create the BLE Server
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Create the BLE Service
BLEService *pService = pServer->createService(SERVICE_UUID);
// Create a BLE Characteristic
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_TX,
BLECharacteristic::PROPERTY_NOTIFY);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_RX,
BLECharacteristic::PROPERTY_WRITE);
// Start the service
pService->start();
// Start advertising
pServer->getAdvertising()->start();
//pinMode(energy1, OUTPUT);
//digitalWrite(energy1, HIGH);
// pinMode(energy2, OUTPUT);
// digitalWrite(energy2, HIGH);
// pinMode(batt, INPUT);
display.begin();// Иницализируем дисплей
display.writeScreen24(image_data_Start);
bme.begin(0x76);
bme.setSampling(Adafruit_BME280::MODE_FORCED,
Adafruit_BME280::SAMPLING_X1, // temperature
Adafruit_BME280::SAMPLING_X1, // pressure
Adafruit_BME280::SAMPLING_X1, // humidity
Adafruit_BME280::FILTER_OFF );
bme.takeForcedMeasurement();
dispTemp = bme.readTemperature() - 2;
dispHum = bme.readHumidity();
dispPres = (float)bme.readPressure() * 0.00750062;
mySerial.begin(BAUDRATE); // (Uno example) device to MH-Z19 serial start
myMHZ19.begin(mySerial); // *Serial(Stream) refence must be passed to library begin().
myMHZ19.autoCalibration(false);
delay (5000);
display.fillScreen(); // Очищаем дисплей перед выводом
co2ppm = 500;
dispRain = 1000;
//Serial.begin(9600);
//myMHZ19.printCommunication();
uint32_t Pressure = bme.readPressure();
for (byte i = 0; i < 6; i++) { // счётчик от 0 до 5
pressure_array[i] = Pressure; // забить весь массив текущим давлением
time_array[i] = i; // забить массив времени числами 0 - 5
}
}
void loop() {
// put your main code here, to run repeatedly:
//Serial.println(myMHZ19.getCO2());
//Serial.println(myMHZ19.getTemperature()); // Request Temperature (as Celsius), new request = false;
switch (x) {
case 1: basic(); break;
case 2: after(); break;
case 3: tim(); break;
case 4:
m:;
if (myMHZ19.getCO2() >= 2000) {
goto m;
}
else {
delay(15000);
}
sensor();
calc();
display.fillScreen(); // Очищаем дисплей перед выводом
graf();
after();
x = 3;
break;
}
if (deviceConnected) {
/* std::string txString = boost::str(% dispTemp);
txString += '/'
txString += boost::str(dispHum);
txString += '/'
txString += boost::str(dispPres);
txString += '/'
txString += boost::str(co2ppm);
txString += '/'
txString += boost::str(dispRain);
txString += '/'*/
String txString =String(dispTemp)+'/'+String(dispHum)+'/'+String(dispPres)+'/'+String(co2ppm)+'/'+String(dispRain)+'/';
pCharacteristic->setValue(txString);
pCharacteristic->notify();
}
}
void basic() {
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(60, 3); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Температура")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(20, 12); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Ожидание")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(70, 30); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Влажность")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(20, 39); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Ожидание")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(73, 57); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Давление")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(20, 66); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Ожидание")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(40, 85); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Углекислый газ")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(20, 94); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Ожидание")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(10, 115); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Шанс осадков")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(90, 115); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("В")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(110, 115); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print("%"); // Выводим строку на русском
delay (2000);
x = 2;
for (byte i = 0; i < 36; i++) { // счётчик от 0 до 36
t[i] = 0; // забить весь массив
th[i] = 0; // забить массив
v[i] = 0;
vh[i] = 0;
p[i] = 0;
ph[i] = 0;
co[i] = 0;
coh[i] = 0;
if (x == 2) {
x = 4;
}
}
}
void after() {
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(60, 3); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Температура")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(50, 12); // Устанавливаем курсор
if (dispTemp <= 0) {
display.setTextColor(CYAN);
}
if (dispTemp > 10) {
display.setTextColor(BLUE);
}
if (dispTemp > 20) {
display.setTextColor(GREEN);
}
if (dispTemp > 26) {
display.setTextColor(YELLOW);
}
if (dispTemp > 30) {
display.setTextColor(RED);
}
display.print(dispTemp); //значение температуры
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(115, 20); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("\x80\C")); //знак Цельсия
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(70, 30); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Влажность")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(85, 39); // Устанавливаем курсор
if (dispHum <= 20) { //ГОСТ 30494-2011. Здания жилые и общественные. Параметры микроклимата в помещениях. СанПиН 2.2.4.3359-16 "Санитарно-эпидемиологические требования к физическим факторам на рабочих местах".
display.setTextColor(RED);
}
if (dispHum > 20 && dispHum <= 40) {
display.setTextColor(YELLOW);
}
if (dispHum > 40 && dispHum <= 60) {
display.setTextColor(GREEN);
}
if (dispHum > 60 && dispHum <= 80) {
display.setTextColor(YELLOW);
}
if (dispHum > 80 && dispHum <= 100) {
display.setTextColor(RED);
}
display.print(dispHum); // значение влажности
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(115, 46); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print("%"); // знак процента
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(73, 57); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Давление")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(50, 67); // Устанавливаем курсор
if (dispPres <= 740) {
display.setTextColor(BLUE);
}
if (dispPres > 740 && dispPres <= 750) {
display.setTextColor(CYAN);
}
if (dispPres > 750 && dispPres <= 760) {
display.setTextColor(GREEN);
}
if (dispPres > 760 && dispPres <= 770) {
display.setTextColor(YELLOW);
}
if (dispPres > 770) {
display.setTextColor(RED);
}
display.print(dispPres); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(95, 63); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("мм")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(95, 72); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("рт/ст")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(40, 85); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Углекислый газ")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(90, 95); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("частиц")); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(90, 102); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("на мил")); // Выводим строку на русском
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(43, 94); // Устанавливаем курсор
if (co2ppm <= 800) {
display.setTextColor(GREEN);// Концентрация CO2 (ppm)стандарт ГОСТ 30494-2011
}
if (co2ppm > 800 && co2ppm <= 1400) {
display.setTextColor(YELLOW);
}
if (co2ppm > 1400) {
display.setTextColor(RED);
}
display.print(co2ppm); // Выводим строку на русском
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(3, 115); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print(utf8rus("Шанс осадков")); // Выводим строку на русском
if (dispRain != 1000) {
if (ra != dispRain) {
display.fillRect(80, 113, 40, 15, BLACK);
display.setTextSize(2); // Определяем размер шрифта
display.setCursor(80, 113); // Устанавливаем курсор
display.setTextColor(MAGENTA); // Определяем цвет вывода на дисплей
display.print(dispRain); // процент вероятности дождя
//display.print(-100); // процент вероятности дождя
ra = dispRain;
}
}
display.setTextSize(1); // Определяем размер шрифта
display.setCursor(120, 115); // Устанавливаем курсор
display.setTextColor(WHITE); // Определяем цвет вывода на дисплей
display.print("%"); // Выводим строку на русском
}
void tim() {
if (s == 1) {
//myTimer.setTimeout(5000); //период обновления 20
//predictTimer.setTimeout(5000); //период обновления 20
myTimer.setTimeout(600000); //период обновления 10 минут
predictTimer.setTimeout(600000); //период обновления 10 минут
s = 2;
s1 = 2;
}
sensor();
if (myTimer.isReady() && s == 2) {
sensor();
calc();
graf();
}
if (predictTimer.isReady() && s1 == 2) {
rain();
after();
}
}
void graf() {
display.fillRect(0, 11, 35, 19, BLACK);
for (byte i = 0; i < 35; i++) { // счётчик от 0 до 35
if (t[i] <= 1) {
display.drawLine(i, 29 - th[i], i, 29, CYAN);
}
if (t[i] > 10) {
display.drawLine(i, 29 - th[i], i, 29, BLUE);
}
if (t[i] > 20) {
display.drawLine(i, 29 - th[i], i, 29, GREEN);
}
if (t[i] > 26) {
display.drawLine(i, 29 - th[i], i, 29, YELLOW);
}
if (t[i] >= 30) {
display.drawLine(i, 29 - th[i], i, 29, RED);
}
}
display.fillRect(0, 38, 35, 19, BLACK);
for (byte i = 0; i < 35; i++) { // счётчик от 0 до 35
if (v[i] <= 20) {
display.drawLine(i, 57 - vh[i], i, 57, RED);
}
if (v[i] > 20 && v[i] <= 40) {
display.drawLine(i, 57 - vh[i], i, 57, YELLOW);
}
if (v[i] > 40 && v[i] <= 60) {
display.drawLine(i, 57 - vh[i], i, 57, GREEN);
}
if (v[i] > 60 && v[i] <= 80) {
display.drawLine(i, 57 - vh[i], i, 57, YELLOW);
}
if (v[i] > 80 && v[i] <= 100) {
display.drawLine(i, 57 - vh[i], i, 57, RED);
}
}
display.fillRect(0, 66, 35, 19, BLACK);
for (byte i = 0; i < 35; i++) { // счётчик от 0 до 35
if (p[i] <= 740) {
display.drawLine(i, 85 - ph[i], i, 85, BLUE);
}
if (p[i] > 740 && p[i] <= 750) {
display.drawLine(i, 85 - ph[i], i, 85, CYAN);
}
if (p[i] > 750 && p[i] <= 760) {
display.drawLine(i, 85 - ph[i], i, 85, GREEN);
}
if (p[i] > 760 && p[i] <= 770) {
display.drawLine(i, 85 - ph[i], i, 85, YELLOW);
}
if (p[i] > 770) {
display.drawLine(i, 85 - ph[i], i, 85, RED);
}
}
display.fillRect(0, 93, 35, 20, BLACK);
for (byte i = 0; i < 35; i++) { // счётчик от 0 до 35
if (co[i] <= 800) {
display.drawLine(i, 112 - coh[i], i, 112, GREEN);
}
if (co[i] > 800 && v[i] <= 1400) {
display.drawLine(i, 112 - coh[i], i, 112, YELLOW);
}
if (co[i] > 1400) {
display.drawLine(i, 112 - coh[i], i, 112, RED);
}
}
}
void calc() {
for (byte i = 0; i < 35; i++) { // счётчик от 0 до 35 (да, до 35. Так как 34 меньше 35)
t[i] = t[i + 1]; // сдвинуть массив давлений КРОМЕ ПОСЛЕДНЕЙ ЯЧЕЙКИ на шаг назад
v[i] = v[i + 1];
p[i] = p[i + 1];
co[i] = co[i + 1];
}
t[35] = dispTemp; // последний элемент массива теперь - нов
v[35] = dispHum;
p[35] = dispPres;
co[35] = co2ppm;
for (byte i = 0; i < 35; i++) { // счётчик от 0 до 35 (да, до 35. Так как 34 меньше 35)
th[i] = t[i] / 2;
vh[i] = v[i] / 5.21;
ph[i] = p[i] - 630;
ph[i] = ph[i] / 10;
coh[i] = co[i] - 300;
coh[i] = coh[i] / 89.5;
if (th[i] < 0) {
th[i] = 1;
}
if (vh[i] < 0) {
vh[i] = 1;
}
if (ph[i] < 0) {
ph[i] = 1;
}
if (coh[i] < 0) {
coh[i] = 1;
}
}
s = 1;
}
void sensor() {
bme.takeForcedMeasurement();
if (dispTemp + 2 > bme.readTemperature() + 0.25 || dispTemp + 2 < bme.readTemperature() - 0.25) {
dispTemp = bme.readTemperature() - 2;
display.fillRect(36, 11, 77, 19, BLACK);
}
if (float (dispHum) + 0.01 > bme.readHumidity() + 0.9 || float (dispHum) + 0.01 < bme.readHumidity() - 0.9) {
dispHum = bme.readHumidity();
display.fillRect(36, 38, 77, 19, BLACK);
}
if (float (dispPres) + 0.01 > ((float)bme.readPressure() * 0.00750062) + 0.9 || float (dispPres) + 0.01 < ((float)bme.readPressure() * 0.00750062) - 0.9) {
dispPres = (float)bme.readPressure() * 0.00750062;
display.fillRect(36, 66, 55, 19, BLACK);
}
if (co2ppm != myMHZ19.getCO2()) {
if (co2ppm > 300 && co2ppm < 5000) {
co2ppm = myMHZ19.getCO2();
display.fillRect(36, 93, 53, 20, BLACK);
}
}
if (x != 4) {
after();
}
}
void rain() {
long averPress = 0;
for (byte i = 0; i < 10; i++) {
bme.takeForcedMeasurement();
averPress += bme.readPressure();
delay(1);
}
averPress /= 10;
for (byte i = 0; i < 5; i++) { // счётчик от 0 до 5 (да, до 5. Так как 4 меньше 5)
pressure_array[i] = pressure_array[i + 1]; // сдвинуть массив давлений КРОМЕ ПОСЛЕДНЕЙ ЯЧЕЙКИ на шаг назад
}
pressure_array[5] = averPress; // последний элемент массива теперь - новое давление
sumX = 0;
sumY = 0;
sumX2 = 0;
sumXY = 0;
for (int i = 0; i < 6; i++) { // для всех элементов массива
sumX += time_array[i];
sumY += (long)pressure_array[i];
sumX2 += time_array[i] * time_array[i];
sumXY += (long)time_array[i] * pressure_array[i];
}
a = 0;
a = (long)6 * sumXY; // расчёт коэффициента наклона приямой
a = a - (long)sumX * sumY;
a = (float)a / (6 * sumX2 - sumX * sumX);
delta = a * 6; // расчёт изменения давления
dispRain = map(delta, -250, 250, 100, -100); // пересчитать в проценты
s1 = 1;
}
А вот расписанная ошибка:
Ошибка:
Arduino: 1.8.13 (Windows 7), Плата:"DOIT ESP32 DEVKIT V1, 80MHz, 921600, None"
E:\перекинуть на диск\работа\датчик углекислого газа\Ver_1.0\Ver_1.0.ino: In function 'void loop()':
Ver_1.0:238:39: error: no matching function for call to 'BLECharacteristic::setValue(String&)'
In file included from C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLEServer.h:20:0,
from C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLEDevice.h:18,
from E:\перекинуть на диск\работа\датчик углекислого газа\Ver_1.0\Ver_1.0.ino:6:
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:73:7: note: candidate: void BLECharacteristic::setValue(uint8_t*, size_t)
void setValue(uint8_t* data, size_t size);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:73:7: note: candidate expects 2 arguments, 1 provided
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:74:7: note: candidate: void BLECharacteristic::setValue(std::__cxx11::string)
void setValue(std::string value);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:74:7: note: no known conversion for argument 1 from 'String' to 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}'
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:75:7: note: candidate: void BLECharacteristic::setValue(uint16_t&)
void setValue(uint16_t& data16);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:75:7: note: no known conversion for argument 1 from 'String' to 'uint16_t& {aka short unsigned int&}'
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:76:7: note: candidate: void BLECharacteristic::setValue(uint32_t&)
void setValue(uint32_t& data32);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:76:7: note: no known conversion for argument 1 from 'String' to 'uint32_t& {aka unsigned int&}'
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:77:7: note: candidate: void BLECharacteristic::setValue(int&)
void setValue(int& data32);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:77:7: note: no known conversion for argument 1 from 'String' to 'int&'
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:78:7: note: candidate: void BLECharacteristic::setValue(float&)
void setValue(float& data32);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:78:7: note: no known conversion for argument 1 from 'String' to 'float&'
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:79:7: note: candidate: void BLECharacteristic::setValue(double&)
void setValue(double& data64);
^
C:\Users\User\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\BLE\src/BLECharacteristic.h:79:7: note: no known conversion for argument 1 from 'String' to 'double&'
exit status 1
no matching function for call to 'BLECharacteristic::setValue(String&)'