#include <WiFi.h>
#include <MQTT.h>
#include <ESP32Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Stepper.h> // Include the AccelStepper library
// WiFi and MQTT setup
WiFiClient TCPclient;
MQTTClient MQTTclient;
Servo servo;
char* MQTThostName = "public.cloud.shiftr.io";
// Stepper motor and temperature sensor setup
#define ONE_WIRE_BUS 32
#define STEPPER_PIN1 33
#define STEPPER_PIN2 25
#define STEPPER_PIN3 26
#define STEPPER_PIN4 27
const int stepsPerRevolution = 200;
Stepper stepper(stepsPerRevolution, STEPPER_PIN1, STEPPER_PIN2, STEPPER_PIN3, STEPPER_PIN4);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.begin(16, 2);
sensors.begin();
stepper.setSpeed(60); // Set the maximum speed of the stepper motor
WiFi.mode(WIFI_STA);
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) { }
Serial.print("Connected to WiFi\n");
IPAddress MQTThostIP(34, 77, 13, 55);
MQTTclient.begin(MQTThostIP, 1883, TCPclient);
if (MQTTclient.connect("valentinDovbyshev", "public", "public")) {
Serial.println("Connected to MQTT broker.");
}
pinMode(19, OUTPUT);
pinMode(18, OUTPUT);
pinMode(5, OUTPUT);
pinMode(21, OUTPUT);
servo.attach(13);
// Subscribe to MQTT topics
// MQTTclient.onMessage(text);
// MQTTclient.subscribe("text");
MQTTclient.onMessage(toggle);
MQTTclient.subscribe("toggle");
// MQTTclient.onMessage(servoFunc);
// MQTTclient.subscribe("servo");
// MQTTclient.onMessage(color);
// MQTTclient.subscribe("color");
}
void loop() {
MQTTclient.loop();
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
//lcd.init();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
// Activate stepper motor if temperature exceeds threshold
if (temperature > 30.0) {
moveStepper();
}
}
void text(String& topic, String& payload) {
Serial.println("Received MQTT message:");
Serial.println("Topic: " + topic + ", Payload: " + payload);
}
void toggle(String& topic, String& payload) {
if (payload == "1") digitalWrite(21, HIGH);
else digitalWrite(21, LOW);
}
void servoFunc(String& topic, String& payload) {
servo.write(payload.toInt());
Serial.println(payload);
}
void color(String& topic, String& payload) {
uint32_t colorValue = strtol(payload.c_str() + 1, NULL, 16);
uint8_t red = (colorValue >> 16) & 0xFF;
uint8_t green = (colorValue >> 8) & 0xFF;
uint8_t blue = colorValue & 0xFF;
analogWrite(19, 255 - red);
analogWrite(18, 255 - green);
analogWrite(5, 255 - blue);
Serial.println(payload);
}
void moveStepper() {
stepper.step(stepsPerRevolution); // Move the stepper motor one revolution
}
Loading
ds18b20
ds18b20