Code: Select all
#define STATUS_LED_GPIO 2 // status diody led
#define BUTTON_CFG_RELAY_GPIO 4 //przycisk zał/wył
#define SERVO_PIN 3 // pin serwa
#include <SuplaDevice.h>
#include <supla/network/client.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/virtual_relay.h>
#include <supla/control/button.h>
#include <supla/device/status_led.h>
#include <supla/storage/littlefs_config.h>
#include <supla/network/esp_web_server.h>
#include <supla/device/supla_ca_cert.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/custom_parameter.h>
#include <supla/network/html/custom_text_parameter.h>
#include <supla/storage/eeprom.h>
#include <Servo.h>
Servo myservo;
#include <supla/sensor/virtual_binary.h>
Supla::Sensor::VirtualBinary *v_sensor = nullptr;
Supla::Eeprom eeprom;
Supla::ESPWifi wifi;
Supla::EspWebServer suplaServer;
Supla::LittleFsConfig configSupla;
Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, false);
int servoPosition = 0;
enum default_actions {
SET_SERVO_POSITION
};
class customIterate : public Supla::Element {
public: customIterate() {}
void iterateAlways() {
if (Supla::Network::IsReady()) {
if (myservo.read() == 0 && v_sensor->getValue() == HIGH) {
v_sensor->handleAction(0, Supla::CLEAR);
}
if (myservo.read() == 180 && v_sensor->getValue() == LOW) {
v_sensor->handleAction(0, Supla::SET);
}
}
}
};
customIterate *custIterate = new customIterate;
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
public: addedActionsClass() {}
void handleAction(int event, int action) {
if (action == SET_SERVO_POSITION) {
if (myservo.read() == 0) {
servoPosition = 180;
} else if (myservo.read() == 180) {
servoPosition = 0;
}
myservo.write(servoPosition);
SUPLA_LOG_DEBUG("# setting up servo position - %d", servoPosition);
}
}
};
addedActionsClass *custAct = new addedActionsClass;
void setup() {
Serial.begin(115200);
myservo.attach(SERVO_PIN);
myservo.write(servoPosition);
auto v_relay = new Supla::Control::VirtualRelay();
v_relay->addAction(SET_SERVO_POSITION, custAct, Supla::ON_TURN_ON);
v_sensor = new Supla::Sensor::VirtualBinary();
v_sensor->handleAction(0, Supla::CLEAR);
auto buttonCfgRelay =
new Supla::Control::Button(BUTTON_CFG_RELAY_GPIO, true, true);
buttonCfgRelay->configureAsConfigButton(&SuplaDevice);
buttonCfgRelay->addAction(SET_SERVO_POSITION, custAct, Supla::ON_CLICK_1);
SuplaDevice.setSuplaCACert(suplaCACert);
SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);
new Supla::Html::DeviceInfo(&SuplaDevice);
new Supla::Html::WifiParameters;
new Supla::Html::ProtocolParameters;
new Supla::Html::StatusLedParameters;
SuplaDevice.setName("SERVO");
SuplaDevice.begin();
SuplaDevice.getSrpcLayer()->client->setDebugLogs(false);
};
void loop() {
SuplaDevice.iterate();
};działa to wyśmienicie , do szczęścia brakuje mi pomiaru ogniw , siedzę już dłuższa chwile nad tematem ale nic mi nie wychodzi .
Chciałbym prosić dobrą duszyczkę o dopisanie kodu z pomiarem napięcia dla ogniw zasilających urządzenie ,zakres to 2.7-4.2V. Docelowo urządzenie ma pracować na ESP12-E obecnie Wemos D1. Powiadomienie o niskim stanie akumulatorków dodam z cloud_a "chyba
