Topic: Неверный вывод данных в приложении RemoteXY.
Есть код:
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266_HARDSERIAL_CLOUD
// настройки соединения
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 115200
#define REMOTEXY_WIFI_SSID "MINI 3"
#define REMOTEXY_WIFI_PASSWORD "xxxxx"
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com"
#define REMOTEXY_CLOUD_PORT 6376
#define REMOTEXY_CLOUD_TOKEN "xxxxx"
#define REMOTEXY_ACCESS_PASSWORD "xxxxx"
#include <Wire.h>
#include <charMap.h>
#include <GyverOLED.h>
#include <RemoteXY.h>
// Конфигурация интерфейса RemoteXY
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] = // 188 bytes
{ 255,1,0,10,0,181,0,19,0,0,0,85,109,110,105,121,68,111,109,0,
13,2,200,126,106,200,1,1,4,0,69,161,4,24,24,70,7,20,20,0,
1,2,7,9,83,14,11,9,41,20,1,36,26,31,31,79,78,0,79,70,
70,0,71,17,40,78,78,14,123,80,80,56,3,2,34,170,0,0,32,193,
0,0,72,66,0,0,160,65,0,0,32,65,0,0,0,64,31,84,101,109,
112,0,135,0,0,32,193,0,0,112,65,94,0,0,112,65,0,0,240,65,
36,0,0,240,65,0,0,72,66,71,105,42,76,76,17,43,70,70,40,2,
2,24,173,0,0,0,0,0,0,200,66,0,0,160,65,0,0,32,65,0,
0,0,64,31,109,76,105,116,114,0,135,0,0,200,66,0,0,72,66,94,
0,0,72,66,0,0,0,0 };
#pragma pack(pop)
// Структура определяет все переменные и события вашего интерфейса управления
// именно здесь указано имя переменной датчиков и тд
struct {
uint8_t Button; // Кнопка =1 если включено, иначе =0
int16_t Buzzer; // Зуммер =0 нет звука, иначе ID звука, для примера 1001, смотри список звуков в приложении
uint8_t connect_flag; // соединение RemoteXY =1 if wire connected, else =0
float Datchik1; // string end zero UNICODE
float Datchik2; // string end zero UNICODE
float DS1621;
} RemoteXY;
//#pragma pack(pop)
// Настройка OLED
GyverOLED<SSD1306_128x32, OLED_NO_BUFFER> oled;
// Определение пинов
#define pin_Datchik1 A3 // анаоговый датчик протечки 1000-0
#define pin_Datchik2 3 // цыфровой датчик протечки 0-1
#define DS1621_ADDRESS 0x48 // датчик DS1621
#define pin_Buzzer 4 // Пин для динамика
#define pin_Button 2 // Пин для кнопки
// Переменные
bool isBuzzerOn = false; // Статус зуммера
unsigned long lastBuzzerTime = 0; // Время последнего сигнала
int buzzerDelay = 500; // Начальная задержка
void setup() {
Serial.begin(115200);
pinMode(pin_Datchik1, INPUT);
pinMode(pin_Datchik2, INPUT);
pinMode(pin_Buzzer, OUTPUT); // Пин для звукового динамика
pinMode(pin_Button, INPUT); // Пин для кнопки
// Инициализация OLED дисплея
oled.init(); // инициализация
oled.clear(); // очистка
oled.setScale(1); // масштаб текста (1..4)
oled.home(); // курсор в 0,0
// Настройки DS1621
Wire.begin();
Wire.beginTransmission(DS1621_ADDRESS); // соединение с DS1621 (#0)
Wire.write(0xAC); // команда настройки конфигурации
Wire.write(0x02); // установка режима постоянных замеров температуры
Wire.beginTransmission(DS1621_ADDRESS); // перезапуск устройства
Wire.write(0xEE); // запуск цикла замеров
Wire.endTransmission();
// Инициализация RemoteXY
RemoteXY_Init(); // это должно оставаться как есть
}
void loop() {
RemoteXY_Handler(); // Обработка данных интерфейса RemoteXY
// Чтение данных температур и утечек
int8_t firstByte;
int8_t secondByte;
int8_t temp = 0;
RemoteXY_delay(500);
Wire.beginTransmission(DS1621_ADDRESS);
Wire.write(0xAA); // команда чтения
Wire.endTransmission();
Wire.requestFrom(DS1621_ADDRESS, 2); // запрос двух байт для точности 0.5
// Проверка, что принимает данные
if (Wire.available() == 2)
{
int8_t firstByte = Wire.read();
int8_t secondByte = Wire.read();
int8_t temp = firstByte;
if (secondByte) {
temp += 0.5; // Добавление 0.5, если второй байт установлен
}
// Установите значение температуры в RemoteXY
RemoteXY.DS1621 = temp; // Передача температуры
}
// Чтение значений датчиков утечки
int waterLeakValue = analogRead(pin_Datchik1)-24; // Значение с датчика протечки
int digitalLeakValue = digitalRead(pin_Datchik2); // Значение с цифрового датчика протечки (если есть)
// Обновляем состояние Datchik1 в RemoteXY
RemoteXY.Datchik1 = analogRead(pin_Datchik1); // Передача значения утечки в RemoteXY
// Обновляем OLED
oled.setScale(1);
oled.home();
oled.print("Температура: ");
oled.print(RemoteXY.DS1621);
oled.println(" C");
oled.print("Влажность: ");
oled.print(RemoteXY.Datchik1);
oled.println(" %");
if (digitalLeakValue <1){
oled.print("Тревога протечка!: ");
oled.print(digitalLeakValue);
oled.println(" %");}
else {
oled.print("Всё нормально: ");
oled.print(digitalLeakValue);
oled.println(" %");}
// Проверка состояния кнопки
static bool lastButtonState = HIGH; // состояние кнопки
bool buttonState = digitalRead(pin_Button);
if (lastButtonState == HIGH && buttonState == LOW) { // Если кнопка нажата
isBuzzerOn = !isBuzzerOn; // Переключаем состояние зумера
RemoteXY_delay(200); // Антидребезг
}
lastButtonState = buttonState;
// Кнопка управление
if (RemoteXY.Button == 1) {
isBuzzerOn = !isBuzzerOn; // Переключаем состояние зуммера
RemoteXY.Button = 0; // Сбрасываем значение кнопки
}
// Управление звуковым сигналом
if (isBuzzerOn && digitalLeakValue == 0) {
int frequency = map(waterLeakValue, 0, 1023, 2000, 200);
unsigned long currentMillis = millis();
if (currentMillis - lastBuzzerTime >= buzzerDelay) {
tone(pin_Buzzer, frequency); // Включение звука
delay(80); // Задержка сигнала
noTone(pin_Buzzer); // Выключаем звук
lastBuzzerTime = currentMillis;
buzzerDelay = map(waterLeakValue, 0, 1023, 50, 500); // Уменьшение задержки при увеличении утечки
}
} else {
//noTone(pin_Buzzer); // Выключаем звук, если зумер выключен или утечка не обнаружена
}
// Передача состояния зуммера в RemoteXY
RemoteXY.Buzzer = isBuzzerOn ? 1 : 0; // обновляем состояние зуммера в RemoteXY
// Вывод информации о состоянии динамика на OLED
oled.print("Buzzer: ");
oled.println(isBuzzerOn ? "On " : "Off");
} используются датчик протечки воды MH-Sensor и термодатчик DS1621
Код рабочий , данные датчиков правильно выводятся на олед 128х32 дисплей и если нужно в порт. Значения данных совпадают с действительными. При выводе через облако ,на смартфон получаю билиберду. Ищу помощи , бо ни где информации не обнаружил, как это можно конвертировать.