Kod do ESP w Arduino - przekaźniki + żądanie HTTP

khaki
Posty: 2
Rejestracja: pn wrz 26, 2022 5:43 pm

Mam kilka stacji na ESP8266, którymi do niedawna zarządzałem przez stronę remoteme.org, a kody tworzyłem w Arduino IDE. Niestety twórca po pięciu latach porzucił ten fajny projekt i muszę znaleźć inne rozwiązanie do sterowania przez internet. Podjąłem próbę przejścia do Supli – z kilkoma urządzeniami nie było kłopotu i dały się ustawić konfiguratorem. Mam jednak stacje, które obsługują kilka przekaźników i termometr DS18B20, a dodatkowo wysyłają na jeden z adresów mojej sieci lokalnej informacje o zdarzeniach (alarmy z czujki zbliżeniowej). W kodzie wygląda to tak:

if(digitalRead(D6)==1){
WiFiClient client;
const int httpPort = 80;
if (!client.connect("192.168.0.6", httpPort)) {
Serial.println("connection failed");
return;
}
client.print(String("GET ") +"/Led"+" HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
}

O ile konfiguracja przekaźników i termometru jest dość łatwa w konfiguratorze, to nie udało mi się znaleźć w nim opcji warunkowości mogącej rozwiazać mój problem.
Myślę, że dobrym rozwiązaniem będzie stworzenie kodu w Arduino IDE, ale nie jestem w stanie zrobić tego od podstaw. Moje doświadczenie pozwala mi co najwyżej zmodyfikować jakiś „gotowiec” obsługujący przekaźniki i DS18B20 o w/w warunkowość. Jednak znalezienie takiego „gotowca” nie jest łatwe – jedyne co znalazłem to:

https://majsterkowo.pl/supla-nodemcu-v3 ... ogle-home/

Problem w tym, że projekt jest już nieco „nieświeży” i ze współczesnymi bibliotekami nie działa.
Będę wdzięczny za wskazanie mi kodów nadających się do modyfikacji.
emerce23
Posty: 36
Rejestracja: sob gru 16, 2017 10:46 pm

Witam, widaje mi sie ze mogę cieściowo pomóc.

wejdz na

https://github.com/SUPLA/supla-device

Na samym dole masz tekst w którym opisane jest wszystko dokładnie co i jak.

Przetłumacz sobie to najlepiej w chrome i masz tam takie cos jak:
Jak przeprowadzić migrację programów napisanych w bibliotece SuplaDevice w wersji 1.6 i starszych?
Co do przekaznika to ja robię tak:

Kod: Zaznacz cały

#include <SuplaDevice.h>
#include <Arduino.h>
#include <supla/sensor/DS18B20.h>
#include <supla/sensor/Thermometer.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/roller_shutter.h>
#include <supla/control/relay.h>
#include <supla/control/button.h>
#include <supla/control/action_trigger.h>
#include <supla/device/status_led.h>
#include <supla/storage/littlefs_config.h>
#include <supla/network/esp_web_server.h>
#include <supla/network/html/device_info.h>
#include <supla/network/html/protocol_parameters.h>
#include <supla/network/html/status_led_parameters.h>
#include <supla/network/html/wifi_parameters.h>
#include <supla/network/html/security_certificate.h>
#include <supla/device/supla_ca_cert.h>
#include <supla/events.h>

Supla::ESPWifi wifi("WIFI NAZWA", "**********");

void setup() {
  
  uint8_t mac[6];
  WiFi.macAddress(mac);

  // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
  char GUID[SUPLA_GUID_SIZE] = {};
  // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {};
    
  // Temperatura DS18B20
  
  DeviceAddress ds1addr = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; // Adres czujnika DS18B20 :)
  new Supla::Sensor::DS18B20(5, ds1addr); // Pin czujnika i adres

  // Przekazniki i przyciski
    
  auto r1 = new Supla::Control::Relay(14); // Przekaznik 1
  auto r2 = new Supla::Control::Relay(13); // Przekaznik 2
  auto button1 = new Supla::Control::Button(2, true, true); // Przycisk 1
  auto button2 = new Supla::Control::Button(12, true, true); // Przycisk 2

  button1->addAction(Supla::TOGGLE, *r1, Supla::ON_PRESS); // Funkcja łaczaca przycisk i przekaznik
  button2->addAction(Supla::TOGGLE, *r2, Supla::ON_PRESS); // Funkcja łaczaca przycisk i przekaznik

  auto at1 = new Supla::Control::ActionTrigger(); // AKCJA
    
  at1->setRelatedChannel(r1); // Kanał w supla
  at1->setRelatedChannel(r2); ////////////////

  SuplaDevice.begin(GUID, "svrXX.supla.org", "email@email.com", AUTHKEY);

}

void loop() {
  SuplaDevice.iterate();

}
Jesli jakies inne fukcje potrzebujesz to pisz na PW, moze ci cos pomogłem :P
khaki
Posty: 2
Rejestracja: pn wrz 26, 2022 5:43 pm

Dziękuję za zainteresowanie i wskazówki. Udało mi się problem rozwiązać wychodząc od kodu załączonego przez kol. bigthomas w temacie:

viewtopic.php?t=7263

Dla zainteresowanych załączam wynikowy kod:

#include <SPI.h>
#include <SuplaDevice.h>
#include <ESP8266WiFi.h>
#define STORAGE_OFFSET 100
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(STORAGE_OFFSET);
const char* host = "192.168.0.6";
#include <supla/control/relay.h>
#include <supla/sensor/DS18B20.h>
WiFiServer server(80);
auto r1 = new Supla::Control::Relay(5, false); // przekaźnik sterowany stanem niskim
auto r2 = new Supla::Control::Relay(4, false); // przekaźnik sterowany stanem niskim
auto r3 = new Supla::Control::Relay(2, false); // przekaźnik sterowany stanem niskim
auto r4 = new Supla::Control::Relay(0, false); // przekaźnik sterowany stanem niskim
auto r5 = new Supla::Control::Relay(14, false); // przekaźnik sterowany stanem niskim
//auto r6 = new Supla::Control::Relay(33, false); // przekaźnik sterowany stanem niskim
//auto r7 = new Supla::Control::Relay(25, false); // przekaźnik sterowany stanem niskim
//auto r8 = new Supla::Control::Relay(26, false); // przekaźnik sterowany stanem niskim

// ESP8266 based board:
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi("XXXX", "XXXXXX"); //SSID i hasło do WiFi

void setup() {
Serial.begin(115200);
pinMode(15, OUTPUT);
pinMode(12, INPUT);
// Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
char GUID[SUPLA_GUID_SIZE] = {0xXX,0xXX,0x02,0xXX,0x25,0xD5,0xD8,0xB4,0x19,0xXX,0xA9,0xXX,0x5E,0xCB,0x76,0xXX};

// Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0xXX,0xAB,0xC9,0xXX,0x0A,0xEC,0xXX,0x7C,0x02,0xXX,0x8E,0x8B,0xXX,0x62,0x46,0xXX};
new Supla::Sensor::DS18B20(13);
SuplaDevice.setName("Altana");
SuplaDevice.begin(GUID, // Global Unique Identifier
"svrXX.supla.org", // SUPLA server address
"xxxxxxxx@xx.pl", // Email address used to login to Supla Cloud
AUTHKEY); // Authorization key
server.begin();
WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP

}

void loop() {
SuplaDevice.iterate();
delay(200);

if(digitalRead(12)==1){
WiFiClient client;
const int httpPort = 80;
if (!client.connect("192.168.0.6", httpPort)) {
Serial.println("connection failed");
return;
}
client.print(String("GET ") +"/Led"+" HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
}
}
ODPOWIEDZ

Wróć do „Pomoc”