умный дом — ESP32-S3 simulation

вентиляция, котел,

An interactive ESP32-S3 circuit simulation you can run free in your browser on Velxio, by zdelnik84.

Components

Sketch code

#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// =====================================================
// ESP32-S3 + NEMA17 + A4988 + OLED 128x96 + Encoder + Limit
// =====================================================

// ---------------- OLED ----------------
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_SDA 8
#define OLED_SCL 9
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// ---------------- A4988 ----------------
#define STEP_PIN 4
#define DIR_PIN  5
#define EN_PIN   6

// ---------------- Encoder ----------------
#define ENC_CLK 10
#define ENC_DT  11
#define ENC_SW  12

// ---------------- Limit switch ----------------
#define LIMIT_PIN 13

// =====================================================
// НАСТРОЙКИ
// =====================================================

#define HOME_STEP_DELAY 1200
#define MOVE_STEP_DELAY 800

#define STEPS_PER_CLICK 10

#define HOME_DIRECTION LOW
#define FORWARD_DIRECTION HIGH

#define ENCODER_BUTTON_HOME true

// =====================================================
// ПЕРЕМЕННЫЕ
// =====================================================

long currentPosition = 0;

bool homed = false;

int lastEncoderState = 0;

bool lastButtonState = HIGH;
unsigned long lastButtonTime = 0;

// =====================================================
// ФУНКЦИИ
// =====================================================

void makeStep(bool direction, unsigned int delayTime)
{
  digitalWrite(DIR_PIN, direction);

  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(2);

  digitalWrite(STEP_PIN, LOW);
  delayMicroseconds(delayTime);
}

// =====================================================

bool limitPressed()
{
  return digitalRead(LIMIT_PIN) == LOW;
}

// =====================================================
// OLED
// =====================================================

void updateDisplay()
{
  display.clearDisplay();

  display.setTextColor(SSD1306_WHITE);

  // Заголовок
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("NEMA17 CONTROLLER");

  display.drawLine(0, 12, 127, 12, SSD1306_WHITE);

  // Статус
  display.setTextSize(1);
  display.setCursor(0, 18);

  if (!homed)
  {
    display.println("HOME SEARCH...");
  }
  else
  {
    display.println("READY");
  }

  // Позиция
  display.setTextSize(2);
  display.setCursor(0, 38);

  display.print("STEP:");

  display.setCursor(60, 38);
  display.print(currentPosition);

  // Дополнительная информация
  display.setTextSize(1);

  display.setCursor(0, 65);
  display.print("HOME: ");

  if (limitPressed())
    display.println("ON");
  else
    display.println("OFF");

  display.setCursor(0, 78);
  display.print("STEP/CLICK: ");
  display.println(STEPS_PER_CLICK);

  display.display();
}

// =====================================================
// ПОИСК НУЛЯ
// =====================================================

void findHome()
{
  homed = false

More projects by zdelnik84