• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Проблемы с записью переменной в коде html-страницы

Cadil

New member
Есть два работающих скетча. В первом - на веб-страницу выводится температура с датчика, а во втором - с веб-страницы включается/выключается питание на нагрузку. Объединил эти скетчи в один. Все работает, за исключением вывода значения температуры на веб-страницу.
Это процедура с выводом температуры работающего скетча:
Код:
void handleRoot() {
  digitalWrite ( led, 1 );
  char temp[400];
celsius = getTemp();
Serial.println(celsius);
int tepm = celsius;
  snprintf ( temp, 400,

"<html>\
  <head>\
    <meta charset='UTF-8' >\
    <meta http-equiv='refresh' content='5'/>\
    <title>Термометр</title>\
    <style>\
      body { background-color: #ffffdf; font-family: Arial, Helvetica, Sans-Serif; Color: #bb0000; }\
    </style>\
  </head>\
  <body>\
    <center><h1>Температура:  %d *C</h1></center>\
    <center><p> Tested! </p></center>\
  </body>\
</html>",tepm
  );
  server.send ( 200, "text/html", temp );
  digitalWrite ( led, 0 );
}
А тут - температура не выводится, остальное - работает:
Код:
void handleRoot() {
  digitalWrite ( led, 1 );
  char temp[400];
celsius = getTemp();
Serial.println(celsius);
int tepm= celsius;
  
bool statrele1 = false;
//bool statrele2 = false;
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
Serial.println("HTTP server started");

// Реле 1
if( server.hasArg("statrele1") ){
if( strncmp(server.arg("statrele1").c_str(),"1",1) == 0 )
statrele1 = true;
}
else {
statrele1 = PowerRele1;
}
// Формирование страницы
String out = "";
out =
"<html>\
<head>\
<meta charset=\"utf-8\" />\
<title>Информация, управление </title>\
<style>\
body { background-color: #ffffdf; font-family: Arial, Helvetica, Sans-Serif; Color: #bb0000; }\
</style>\
</head>\
<body>\
    <center><p>  </p></center>\
    <center><h1>Температура:  %d *C</h1></center>\
    <center><p> ______________________________ </p></center>\
    <center><p>  </p></center>\
<center><h1>УПРАВЛЕНИЕ РЕЖИМОМ ПИТАНИЯ НАГРУЗКИ</h1></center>\
";

// Для реле 1
if( statrele1 ){
out+="\
<center><h1>Нагрузка находится под напряжением 220В!</h1></center> <hr width=200 size=50 align=centre color=yellow><center><h2><a href=\"/?statrele1=0\">выключить</a></h2></center>\
";
}
else {
out+="\
<hr width=200 size=50 align=centre color=grey><h2><center><a href=\"/?statrele1=1\">включить</a></h2></center>\
";
}

out+= "\
</body>\
</html>";
server.send ( 200, "text/html", out );

// Для реле 1
if( statrele1 != PowerRele1 ){
PowerRele1 = statrele1;
digitalWrite(rele1 , PowerRele1);
}
}

Как правильно записать код, чтобы переменная %d второго спойлера в строке <center><h1>Температура: %d *C</h1></center>\ читалась? Заранее благодарю за помощь.
 

arbuzmaster

New member
Попробуйте написать - "+String(tepm)+" вместо %d
Температура обычно - float
И обратите внимание - по моему у Вас ошибка в именах переменных и в первом скетче



    • int tepm = celsius;
 
Последнее редактирование:

Cadil

New member
Попробуйте написать - "+String(tepm)+" вместо %d
Температура обычно - float
И обратите внимание - по моему у Вас ошибка в именах переменных и в первом скетче



    • int tepm = celsius;
Благодарю за проделанную работу!!! Предложенный вариант "+String(tepm)+" заработал с первой попытки.
С именем переменной tepm в первом скетче ошибки нет, есть и такая переменная - строка 22.

Перешел на int осмысленно. С float еще предстоит разобраться. Если tepm назначить float, то выводится температура в таком формате: 24.00 - с нулями после точки. Хотя остальные переменные тоже в формате float - плавающая запятая. Да и первоисточник солидный - Arduino IDE.
 
Последнее редактирование:
Сверху Снизу