relay, switcher, dht backend

This commit is contained in:
chshkhr 2022-12-02 12:44:30 +02:00
parent 2762d4fe9e
commit 659bf875ea
3 changed files with 143 additions and 3 deletions

View File

@ -321,6 +321,13 @@ static esp_err_t stream_handler(httpd_req_t *req){
return res;
}
extern void relay(int8_t value);
extern void switcher(int waitmsec, bool revert = false);
extern void gettemperature(bool is_dht21 = false);
extern float humidity;
extern float temp;
extern int8_t relay_on;
static esp_err_t cmd_handler(httpd_req_t *req){
char* buf;
size_t buf_len;
@ -360,6 +367,7 @@ static esp_err_t cmd_handler(httpd_req_t *req){
int val = atoi(value);
sensor_t * s = esp_camera_sensor_get();
int res = 0;
char res_s[60] = "";
if(!strcmp(variable, "framesize")) {
if(s->pixformat == PIXFORMAT_JPEG) res = s->set_framesize(s, (framesize_t)val);
}
@ -428,6 +436,21 @@ static esp_err_t cmd_handler(httpd_req_t *req){
Serial.print('.');
}
}
else if(!strcmp(variable, "relay")) {
relay(val);
sprintf(res_s, "Relay %d", relay_on);
Serial.println(res_s);
}
else if(!strcmp(variable, "switcher")) {
switcher(val);
sprintf(res_s, "Switcher %d", val);
Serial.println(res_s);
}
else if(!strcmp(variable, "dht")) {
gettemperature(val == 1);
sprintf(res_s, "Temperature: %.1f&#176;C<br>Humidity: %.0f%s", temp, humidity, "%");
Serial.println(res_s);
}
else {
res = -1;
}
@ -435,7 +458,7 @@ static esp_err_t cmd_handler(httpd_req_t *req){
return httpd_resp_send_500(req);
}
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
return httpd_resp_send(req, NULL, 0);
return httpd_resp_send(req, res_s, strlen(res_s));
}
static esp_err_t status_handler(httpd_req_t *req){

View File

@ -582,8 +582,7 @@ void WifiSetup() {
if (mdnsName[k] == '_')
break;
if (k < sizeof(mdnsName)) {
int i;
for (i = 0; i < sizeof(auto_rename_by_ip3); i++){
for (int i = 0; i < sizeof(auto_rename_by_ip3); i++){
if (auto_rename_by_ip3[i] == ip[3]) {
char s[5];
i += 1;

118
vsc.cpp Normal file
View File

@ -0,0 +1,118 @@
#include <HTTPClient.h>
#include <ESP32httpUpdate.h>
#define SWITCH_PIN 2
#define SWITCH_WAIT 300
#define FIRMWARE_FOLDER "http://192.168.108.43:8080/win/winweb/espfw/cam205/"
#define FIRMWARE_FILE "esp32_cam205_last.bin"
#define RELAY_PIN 15
int8_t relay_on = 0;
#include <DHT.h>
#define DHT_PIN 13
DHT dht11(DHT_PIN, DHT11);
DHT dht21(DHT_PIN, DHT21);
float humidity, temp; // Values read from sensor
void update() {
Serial.println("Updating with " FIRMWARE_FILE "...");
//stop_httpds();
t_httpUpdate_return ret = ESPhttpUpdate.update(FIRMWARE_FOLDER FIRMWARE_FILE);
switch (ret) {
case HTTP_UPDATE_FAILED:
Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
//need_update(false);
break;
case HTTP_UPDATE_NO_UPDATES:
Serial.println("HTTP_UPDATE_NO_UPDATES");
break;
case HTTP_UPDATE_OK:
Serial.println("HTTP_UPDATE_OK");
break;
}
}
void relay(int8_t value) {
pinMode(RELAY_PIN, OUTPUT);
if(value == -1)
relay_on = abs(relay_on - 1);
else
relay_on = value;
if (relay_on > 0)
relay_on = 1;
else if (relay_on < 0)
relay_on = 0;
digitalWrite(RELAY_PIN, relay_on);
}
void switcher(int waitmsec, bool revert = false) {
int L0 = 0;
int L1 = 1;
if (revert) {
L0 = 1;
L1 = 0;
}
pinMode(SWITCH_PIN, OUTPUT);
digitalWrite(SWITCH_PIN, L1);
if (waitmsec > 0) {
delay(waitmsec);
digitalWrite(SWITCH_PIN, L0);
}
}
unsigned long previousMillis = 0; // will store last temp was read
const long interval = 2000; // interval at which to read sensor
bool is_dht_inited = false;
void gettemperature(bool is_dht21 = false) {
if (!is_dht_inited){
is_dht_inited = true;
if (is_dht21) {
dht21.begin();
} else {
dht11.begin();
}
delay(1000);
}
// Wait at least 2 seconds seconds between measurements.
// if the difference between the current time and last time you read
// the sensor is bigger than the interval you set, read the sensor
// Works better than delay for things happening elsewhere also
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you read the sensor
previousMillis = currentMillis;
// Reading temperature for humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
// Check if any reads failed and exit early (to try again).
for (int i = 0; i < 10; i++) {
if (is_dht21) {
humidity = dht21.readHumidity(); // Read humidity (percent)
temp = dht21.readTemperature(false); // Read temperature as Fahrenheit
} else {
humidity = dht11.readHumidity(); // Read humidity (percent)
temp = dht11.readTemperature(false); // Read temperature as Fahrenheit
}
if (isnan(humidity) || isnan(temp) || temp > 1000 || humidity > 1000) {
delay(500);
} else {
return;
}
}
humidity = 0;
temp = 0;
}
}