diff --git a/esp_node-red_mqtt/sketch_may14b.ino b/esp_node-red_mqtt/sketch_may14b.ino index ca2d1c0..495940b 100644 --- a/esp_node-red_mqtt/sketch_may14b.ino +++ b/esp_node-red_mqtt/sketch_may14b.ino @@ -5,6 +5,7 @@ #include #include #include +#include BH1750 lightMeter; @@ -54,6 +55,9 @@ httpd_handle_t server = NULL; #define LED_PIN 21 #define LED_COUNT 8 +#define SERVO_PIN 47 +Servo myServo; + Adafruit_NeoPixel strip( LED_COUNT, LED_PIN, @@ -174,7 +178,7 @@ bool initCamera() config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; - config.frame_size = FRAMESIZE_QQVGA; + config.frame_size = FRAMESIZE_QVGA; config.jpeg_quality = 20; config.grab_mode = CAMERA_GRAB_LATEST; config.fb_count = 1; @@ -282,6 +286,9 @@ void setup() strip.setBrightness(80); client.setCallback(callback); + + myServo.attach(SERVO_PIN); + servoStop(); } @@ -292,6 +299,7 @@ void connectMQTT() { if (client.connect(id.c_str())) { Serial.println("MQTT OK"); client.subscribe("esp32/led"); + client.subscribe("esp32/servo"); } else { Serial.println("MQTT FAIL"); delay(2000); @@ -301,39 +309,79 @@ void connectMQTT() { void setColor(int r, int g, int b) { - for (int i = 0; i < LED_COUNT; i++) - { + for (int i = 0; i < LED_COUNT; i++){ strip.setPixelColor(i, strip.Color(r, g, b)); } - strip.show(); } +void servoStop() +{ + myServo.write(92); +} + + +void servoLeft(int ms) +{ + myServo.write(30); + unsigned long start = millis(); + while (millis() - start < ms) + { + client.loop(); + delay(10); + } + servoStop(); +} + + +void servoRight(int ms) +{ + myServo.write(150); + unsigned long start = millis(); + while (millis() - start < ms) + { + client.loop(); + delay(10); + } + servoStop(); +} void callback(char* topic, byte* payload, unsigned int length) { String msg; - - for (int i = 0; i < length; i++) - { + for (int i = 0; i < length; i++){ msg += (char)payload[i]; } - Serial.print("MQTT: "); Serial.println(msg); - // OFF - if (msg == "OFF") - { - setColor(0,0,0); - return; + if (String(topic) == "esp32/led"){ + if (msg == "OFF"){ + setColor(0,0,0); + return; + } + int r,g,b; + sscanf(msg.c_str(), "%d,%d,%d", &r,&g,&b); + setColor(r,g,b); } - int r, g, b; + if (String(topic) == "esp32/servo") + { + // ДЕНЬ + if (msg == "DAY"){ + servoRight(10000); + } - sscanf(msg.c_str(), "%d,%d,%d", &r, &g, &b); + // НОЧЬ + if (msg == "NIGHT"){ + servoLeft(10000); + } - setColor(r,g,b); + // ПОЛДЕНЬ + if (msg == "MID"){ + servoRight(5000); + } + } } void loop()