• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Nodemcu server

Serega4789

New member
Добрый день! Сервер перестаёт работать если добавляю код с часами дисплеями и сервомоторм.
<html>\
<head>\
<meta http-equiv='refresh' Connection:'close' content='10'/>
Код автообновления как отправить через переменную s
 

Serega4789

New member
Код:
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

bool led1IsOn = false;
bool led2IsOn = false;
bool led3IsOn = false;
const int LED_0 = 16;
const int LED_1 = 5;
const int LED_2 = 2;
const int oneWireBus = 4;
const char* ssid = "";
const char* password = "";
float temperatureC = 0.0f;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);


void setup() {
 
  Serial.begin(115200);
  pinMode(LED_0, OUTPUT);
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  delay(1000);
  digitalWrite(LED_0, HIGH);
  digitalWrite(LED_1, HIGH);
  digitalWrite(LED_2, HIGH);
  delay(1000);
  digitalWrite(LED_0, LOW);
  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  delay(10);
  sensors.begin();
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
//Сюда вставляю код  
  // Check if a client has connected
  sensors.requestTemperatures();
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
   // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  // Match the request
  controller(req, client);
  client.flush();
  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
  s += temperatureC;
  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected
  // when the function returns and 'client' object is detroyed
}
void controller(String req,  WiFiClient client){
   if (req.indexOf("/temperature") != -1){
     temperatureC = sensors.getTempCByIndex(0);
     Serial.println("Showing temperature");
    } else if(req.indexOf("/led1") != -1){
     setLedState(LED_0, led1IsOn);
     led1IsOn = !led1IsOn;
    } else if(req.indexOf("/led2") != -1){
      setLedState(LED_1, led2IsOn);
      led2IsOn = !led2IsOn;
    } else if(req.indexOf("/led3") != -1){
      setLedState(LED_2, led3IsOn);
      led3IsOn = !led3IsOn;
    } else {
    Serial.println("invalid request");
    client.stop();
    return;
  }
  }
void setLedState(int led, bool state){
  if(!state){
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);}
  }
 

CodeNameHawk

Moderator
Команда форума
Сервер перестаёт работать если добавляю код с часами дисплеями и сервомоторм.
На все нужно время, а если бездумно вставлять, в каждую итерацию цикла, sensors.requestTemperatures(); и подобное, его не напасешься.
sensors.requestTemperatures(); само не занимает много времени, но следующее считывание температуры будет с задержкой.
 
Последнее редактирование:

Serega4789

New member
На все нужно время, а если бездумно вставлять, в каждую итерацию цикла, sensors.requestTemperatures(); и подобное, его не напасешься.
sensors.requestTemperatures(); само не занимает много времени, но следующее считывание температуры будет с задержкой.
Этой функции нет в программе из архива только перечень переменных отправляемых с nodemcu каркас вайфай
 

Serega4789

New member
Подскажите какую часть кода вайфай вызывать и с какой периодичностью чтобы добавить основной код с дисплеем и датчиками
 

Serega4789

New member
Я хотел так сделать, создать функцию с кодом wifi и вызывать только тогда когда нужно что то отправить с сервера, но как быть если нужно ещё и принять например нажатие кнопки в приложении?
 

CodeNameHawk

Moderator
Команда форума
Начните с алгоритма, можно на бумажке, узнаете какие команды надо выполнять за один проход цикла и сколько надо на это времени.
Чаще всего пытаются выполнить сто команд за проход, вместо скажем одной команды за один проход цикла.
 

Serega4789

New member
Хорошо, если знакомы с flprog могу скинуть файл там поблочно расписано а модуль с кодом вайфай в последней плате. Этот код с годовностью клиента должен постоянно крутиться как я понял или вызываться только когда нужен?
 
Сверху Снизу