• Система автоматизации с открытым исходным кодом на базе 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");
думаю догадаетесь.

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