Connect The ESP32 Board
Make sure all your componets are working finely and this is how you're gonna setup your ESP32 Board
Make Sure Your Heat Sensor Works
You have to get a sensor that is named as DS18B20 Sensor. It's for calculating the heat of the water
Connect The ULN2003AN to the board
ULN2003AN has the socket to connect stepper motoer to the ESP32 board. So connect and check if it works
All Set ?
Before Powering up make sure all components are connected safely
Power Up
Connect the ESP32 Board into your PC and run the code
Get The output
Now watch the serial monitor and make sure all the things are working nicely
This How Our System Coded As. We provide you the whole code for your project.
Simple Code
// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");
sensors.begin();
}
void loop(void)
{
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");
delay(1500);
float tempC = sensors.getTempCByIndex(0);
// Check if reading was successful
if (tempC != DEVICE_DISCONNECTED_C)
{
Serial.print("Temperature for the device 1 (index 0) is: ");
Serial.println(tempC);
}
else
{
Serial.println("Error: Could not read temperature data");
}
}
Simple Code
// Define pins
#define IN1 4
#define IN2 5
#define IN3 18
#define IN4 19
// Stepper sequence (full-step)
byte stepSequence[4] = {
B1000, // IN1 activated
B0100, // IN2 activated
B0010, // IN3 activated
B0001 // IN4 activated
};
void setup() {
// Set all pins as outputs
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
// Rotate clockwise
for(int i = 0; i < 512; i++) { // 512 steps = ~1 revolution for 28BYJ-48
for(int j = 0; j < 4; j++) {
digitalWrite(IN1, stepSequence[j] & B1000);
digitalWrite(IN2, stepSequence[j] & B0100);
digitalWrite(IN3, stepSequence[j] & B0010);
digitalWrite(IN4, stepSequence[j] & B0001);
delay(3); // Adjust for speed
}
}
delay(1000); // Pause between rotations
}
Simple Code
#include <OneWire.h>
#include <DallasTemperature.h>
// Stepper motor pins
#define IN1 4
#define IN2 5
#define IN3 18
#define IN4 19
// Temperature sensor pin
#define ONE_WIRE_BUS 2
// Stepper sequence (full-step)
byte stepSequence[4] = {
B1000, // IN1 activated
B0100, // IN2 activated
B0010, // IN3 activated
B0001 // IN4 activated
};
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Function to rotate the stepper motor (now defined before loop())
void rotateStepper(int steps, int stepDelay, bool reverse = false) {
int direction = reverse ? -1 : 1;
int start = reverse ? 3 : 0;
int end = reverse ? -1 : 4;
for(int i = 0; i < steps; i++) {
for(int j = start; j != end; j += direction) {
digitalWrite(IN1, stepSequence[j] & B1000);
digitalWrite(IN2, stepSequence[j] & B0100);
digitalWrite(IN3, stepSequence[j] & B0010);
digitalWrite(IN4, stepSequence[j] & B0001);
delay(stepDelay);
}
}
}
void setup() {
Serial.begin(9600);
Serial.println("Stepper Motor with Temperature Control");
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
if (tempC != DEVICE_DISCONNECTED_C) {
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.println("°C");
if (tempC > 25.0) {
Serial.println("Temperature high - rotating stepper 180° forward");
rotateStepper(256, 4); // 256 steps ≈ 180° (half revolution)
delay(2000); // Hold for 2 seconds
Serial.println("Returning to original position");
rotateStepper(256, 4, true); // Reverse direction
} else {
Serial.println("Temperature normal - no action");
}
} else {
Serial.println("Error: Could not read temperature data");
}
delay(2000); // Wait 2 seconds between readings
}
Simple Code
#include <WiFi.h>
#include <WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// WiFi credentials
const char* ssid = "TCL 30E";
const char* password = "bawantha";
// Temperature sensor setup
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Stepper motor pins
#define IN1 12
#define IN2 14
#define IN3 27
#define IN4 26
// Web server on port 80
WebServer server(80);
// Stepper sequence
byte stepSequence[4] = {
B1000, B0100, B0010, B0001
};
// System variables
float currentTemp = 0;
String motorStatus = "idle";
void rotateStepper(int steps, int stepDelay, bool reverse = false) {
motorStatus = "rotating";
int direction = reverse ? -1 : 1;
int start = reverse ? 3 : 0;
int end = reverse ? -1 : 4;
for(int i = 0; i < steps; i++) {
for(int j = start; j != end; j += direction) {
digitalWrite(IN1, stepSequence[j] & B1000);
digitalWrite(IN2, stepSequence[j] & B0100);
digitalWrite(IN3, stepSequence[j] & B0010);
digitalWrite(IN4, stepSequence[j] & B0001);
delay(stepDelay);
}
}
motorStatus = "idle";
}
void handleRoot() {
File file = SPIFFS.open("/index.html", "r");
if (!file) {
server.send(500, "text/plain", "Failed to open HTML file");
return;
}
void handleRotate() {
server.send(200, "text/plain", "Rotating motor");
rotateStepper(256, 4); // Forward
delay(1000);
rotateStepper(256, 4, true); // Reverse
}
void handleData() {
String json = "{\"temperature\":" + String(currentTemp) + ",";
json += "\"motor_status\":\"" + motorStatus + "\"}";
server.send(200, "application/json", json);
}
void setup() {
Serial.begin(115200);
// Initialize stepper pins
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Start temperature sensor
sensors.begin();
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set up server routes
server.on("/", handleRoot);
server.on("/rotate", handleRotate);
server.on("/data", handleData);
server.begin();
}
void loop() {
server.handleClient();
// Update temperature every 5 seconds
static unsigned long lastTempUpdate = 0;
if (millis() - lastTempUpdate > 5000) {
sensors.requestTemperatures();
currentTemp = sensors.getTempCByIndex(0);
lastTempUpdate = millis();
Serial.println("Temperature: " + String(currentTemp) + "°C");
}
}