1

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 дисплей и если нужно в порт. Значения данных совпадают с действительными. При выводе через облако ,на смартфон получаю билиберду. Ищу помощи , бо ни где информации не обнаружил, как это можно конвертировать.

2

Re: Неверный вывод данных в приложении RemoteXY.

Вы вручную изменили поля структуры RemoteXY.
https://remotexy.com/ru/help/code/structure/

3

Re: Неверный вывод данных в приложении RemoteXY.

спасибо!