Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Wi-Fi and GSM Controlled Smart Relay with LCD Display

View and Edit Project In Cirkit DesignerImage of Wi-Fi and GSM Controlled Smart Relay with LCD Display

Circuit Documentation

Summary

This circuit involves multiple pushbuttons, an LCD display, a GSM module, a WiFi module, a power supply, and a relay. The circuit is designed to interact with an LCD display, control a relay, and communicate via GSM and WiFi. The pushbuttons are used for user input, and the microcontroller code handles the logic for displaying information on the LCD, controlling the relay, and managing communication protocols.

Component List

Pushbutton

16X2 LCD

LCM1602 IIC

SIM800c GSM Module

ESP8266 ESP-12F WiFi Module

Mtiny Power

1-Channel Relay (5V 10A)

Comment

Wiring Details

Pushbutton

Pushbutton

Pushbutton

16X2 LCD

LCM1602 IIC

SIM800c GSM Module

ESP8266 ESP-12F WiFi Module

Mtiny Power

1-Channel Relay (5V 10A)

Code Documentation

sketch.ino

#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <PubSubClient.h>

// Настройка LCD-дисплея
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Настройка кнопок
const byte buttons[] = {21, 22, 23}; // Обновите с правильными номерами пинов
const byte nrButtons = sizeof(buttons) / sizeof(buttons[0]);
const int menusize = 13;
const String menu[] = {
  "Menu",
  "Menu>Rele",
  "Menu>Rele>Off",
  "Menu>Rele>On",
  "Menu>Info",
  "Menu>Info>Lamp status",
  "Menu>Setup",
  "Menu>Setup>Lamp resurs setup",
  "Menu>Setup>Reset lamp",
  "Menu>Setup>Reset lamp>off",
  "Menu>Setup>Reset lamp>on",
  "Menu>Setup>Room volume",
  "Menu>Setup>Room volume>Set",
};

const int roomVolumes[] = {10, 15, 20, 30};
const int numRoomVolumes = sizeof(roomVolumes) / sizeof(roomVolumes[0]);
int currentRoomVolumeIndex = 0;

int currentPos = 0, currentPosParent = 0, possiblePosScroll = 0;
int possiblePos[20], possiblePosCount = 0;
int brightness = 0, resurs_lamp = 9000, last_time_on_resurs_lamp = 0, resurs_lamp_old = 0;
int LCDtoggle = 0, fadeAmount = 5, releMode = 0;
unsigned long timer = millis() / 10, relayOnTime = 0;
unsigned long relayOffTime = 900000; // Время отключения реле в миллисекундах (по умолчанию 15 минут)

// Настройка GSM-модуля и MQTT
SoftwareSerial sim800(10, 11); // RX, TX
const char* mqtt_server = "your_mqtt_broker_address";
const char* mqtt_user = "your_mqtt_username";
const char* mqtt_password = "your_mqtt_password";
const char* mqtt_topic = "your_mqtt_topic";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(9600);
  sim800.begin(9600);
  lcd.init();
  lcd.begin(16, 2);
  lcd.clear();

  for (byte t = 0; t < nrButtons; t++) {
    pinMode(buttons[t], INPUT_PULLUP);
  }

  pinMode(9, OUTPUT);

  lcd.setCursor(0, 0);
  lcd.print("HELLO");
  delay(1000);
  updateMenu();
  EEPROM.get(1, last_time_on_resurs_lamp);
  EEPROM.get(2, resurs_lamp);
  EEPROM.get(3, currentRoomVolumeIndex);
  calculateRelayOffTime();

  // Настройка MQTT
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  switch (releMode) {
    case 0:
      analogWrite(9, 0);
      break;