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

Помогите объединить два скетча

Artem_ARM

New member
Приветствую коллеги!)

Только начал изучать всё что связано с arduino и ESP тд.)

Помигал светодиодом по управлял реле через веб.

Сейчас есть потребность совместить два скетча для esp8266 nodemcu в один.

Первый скетч отправляет данные температуры на сайт второй просто управляет одним реле вкл/выкл.
Пожалуйста помогите.
Заранее спасибо.

Отправка температуры.
Код:
#include <ESP8266HTTPClient.h>

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

char ssid[] = "xxx"; // Название WiFi сети
char pass[] = "xxx"; // Пароль к WiFi сети

void setup () {
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting..");
  }
  sensors.begin();
}

void loop() {
  sendTemps();
  delay(60000);    //Send a request every 30 seconds
}

void sendTemps()
{
  sensors.requestTemperatures();
  float temp1 = sensors.getTempCByIndex(0);
  float temp2 = sensors.getTempCByIndex(1);
  float temp3 = sensors.getTempCByIndex(2);
  float temp4 = sensors.getTempCByIndex(3);
  char str[200];
  sprintf (str, "Temperatures: t1:%.2f, t2:%.2f, t3:%.2f, t4:%.2f", temp1, temp2, temp3, temp4);
  Serial.println(str);
  if (WiFi.status() == WL_CONNECTED) {
    char url[200];
   
    sprintf (url, "http:xxxxx/?t1=%.2f&t2=%.2f&t3=%.2f&t4=%.2f", temp1, temp2, temp3, temp4);
    Serial.println(url);

    HTTPClient http;
    http.begin(url);
    int httpCode = http.GET();  //Send the request
    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println("Sent to server, response: " + payload);
    }
    else {
      Serial.println("http status: " + httpCode); 
    }
    http.end();   //Close connection
  }
  else {
    Serial.print("not connected");
  }
}
Управление реле через веб.
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#define ledPin 5

char ssid[] = "xxxx"; // Название WiFi сети
char pass[] = "xxxxxxx"; // Пароль к WiFi сети

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, 0);
 
  // 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");
 
 

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

  server.on("/", [](){
    server.send(200, "text/html", webPage());
  });

  server.on("/ledPinOn", [](){
    digitalWrite(ledPin, 1);
    server.send(200, "text/html", webPage());
    delay(100);
   
  });

  server.on("/ledPinOff", [](){
    digitalWrite(ledPin, 0);
    server.send(200, "text/html", webPage());
    delay(100);
   
  });

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
}

String webPage()
{
  String web;
  web += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/> <meta charset=\"utf-8\"><title>ESP 8266</title><style>button{color:red;padding: 10px 27px;}</style></head>";
  web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">LED ON/OFF</h1><div>";
 
 
  if (digitalRead(ledPin) == 1)
  {
    web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
  }
  else
  {
    web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
  }
  web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"ledPinOn\"><button>ON</button></a>&nbsp;<a href=\"ledPinOff\"><button>OFF</button></a></div>";
 
  // ========REFRESH=============
  web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
  // ========REFRESH=============
 
 
  web += "</div>";
  return(web);
}
Понимаю, что для профи тут делов тут на 5 минут но это пока не про меня.
 

Сергей_Ф

Moderator
Команда форума
@Artem_ARM вам не нужно ничего объединять. Первый скетч у вас работает через Blynk. Добавьте к нему управление реле. Тоже через Blynk. Там даже ни чего программировать не надо.
 

Artem_ARM

New member
@Artem_ARM вам не нужно ничего объединять. Первый скетч у вас работает через Blynk. Добавьте к нему управление реле. Тоже через Blynk. Там даже ни чего программировать не надо.
Blynk как я понял это для смартфона.

Мне нужно управлять командами типо 192.168.1.135/off или 192.168.1.135/on

Из браузера с компьютера.
Своим силами пока не получается
 

svs2007m

Active member
поставь на ПК эмулятор андроид типа NOX. Установи на нем Blynk. Вот тебе и управление с компа
 

Bydenkin

Member
@svs2007m
Вовсе и не обязательно!
Допустим виртуальная кнопка для включения реле V4.
Тогда управлять с браузера можно так:
http://blynk-cloud.com/4675441d696a47c384808aeb2b552c41/update/V4?value=0
это было выключить реле.
http://blynk-cloud.com/4675441d696a47c384808aeb2b552c41/update/V4?value=1
а это включить.
У меня работает.
А чтобы полноценно видеть всю картинку и легко управлять - мне дочь помогла сотворить свой сайт. С картинками, кнопками, мнемосхемами.
 

svs2007m

Active member
Если у Вас есть СВОЙ сервер с "белым" IP и Вы разбираетесь в HTTP коде тогда причем здесь Blynk ?
 

Bydenkin

Member
@svs2007m
Сперва яйцо - потом курица!
Первым был BLYNK. Потом сын на своём личном сервере поселил мой сайт. И буквально на днях дочка помогла мне его оживить. Пока на него не перебрался ... жду симисторы от Китая.
 

svs2007m

Active member
Если сервер не Ваш, то можно записаться в танцевальный кружок и купить бубен ))) Если в Blynk вопрос идентификации ПОЛЬЗОВАТЕЛЯ на сервере со всеми сертификатами паролями шифрами явками и т.д. решен, то Вам на "своем сайте"придется решать этот вопрос самому !!!. Вам это надо ??? с Вашим познание С++ и НТТP ?Просто к Вашему скетчу нужно еще будет прицепить вагон и маленькую тележку )))
 

CodeNameHawk

Moderator
Команда форума
Понимаю, что для профи тут делов тут на 5 минут но это пока не про меня.
Если уж так хотите, то попробуйте так:
Все из этих двух файлов скопируйте в один.
Повторяющиеся #include удалите, и разместите их вверху.
Оставьте по одной void setup (void) и void loop(void), скопировав весь текст из другой. (оставляете весь текст из первой setup и переносите в нее текст из второй setup)
Тоже и для loop.

Что делать с дублирующимся текстом
Код:
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
думаю догадаетесь.

Если что не так, покажите скриншоты ошибок компиляции.
 
Сверху Снизу