Hello everybody.
Im new to programming. Im trying to control blinds with esp8266 via mqtt.
I can send recieve with mqtt also i use some sensors.
I tried to mix them. Control blinds (automated with light sensor and manuel with home assistans + dth sensor + ultrosonic sensor for reset blinds + store stepper count to eeprom)
i got hw watchdog error. (with and without connect any cable)
Here is my code.
#include <AccelStepper.h>
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define trigPin 1
#define echoPin 2
#define Motor1_Dir 5
#define Motor1_Step 6
#define DHTPIN 7
#define DHTTYPE DHT11
const char* ssid = "x";
const char* password = "x";
const char* mqtt_server = "x";
const char* mqttUser = "x";
const char* mqttPassword = "x";
long duration; //looptaki hesap için
long ilksure; //setuptaki hesap için
int distance; //looptaki hesap için
int distancefirst; //setuptaki hesap için
int StepCounter;
int value;
int val;
int val2;
int valEEPROM;
int valstop;
int address = 0;
int isik;
DHT dht(DHTPIN, DHTTYPE);
AccelStepper stepper(1, Motor1_Step, Motor1_Dir);
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
// Perde Kontrolleri
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
int val = (char)payload[i];
}
Serial.println();
if (strcmp(topic,"alkan/perdedurum")==0)
{
// Automatik Mode
if ( val = 'auto' )
{
if (isik < 100 )
{
stepper.enableOutputs();
stepper.runToNewPosition(0);
ESP.wdtFeed();
EEPROM.write(address, '0');
Serial.println("Otomatik Acildi");
stepper.disableOutputs();
}
if (isik > 800 )
{
stepper.enableOutputs();
stepper.runToNewPosition(3000);
ESP.wdtFeed();
EEPROM.write(address, '3000');
Serial.println("Otomatik Kapandi");
stepper.disableOutputs();
}
}
// Manuel Mode
if ( val = 'manuel' )
{
if (strcmp(topic,"alkan/perde")==0)
// Perde Pozisyona Git
{
value = EEPROM.read(address);
val2 = value*10;
if ( val != val2 or val != 'STOP' or val != 'RESET' )
{
stepper.enableOutputs();
stepper.runToNewPosition(val);
ESP.wdtFeed();
valEEPROM = val/10;
EEPROM.write(address, valEEPROM);
Serial.println("Durdugu Yer");
Serial.print(val);
stepper.disableOutputs();
}
}
// Acil Durdur
{
if( val = 'STOP' )
{
stepper.stop();
valstop = stepper.currentPosition ();
EEPROM.write(address, valstop);
Serial.println("Stop Yeri");
Serial.print(valstop);
stepper.disableOutputs();
}
}
// Resetleme
{
if( val = 'RESET' )
{
{
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
ilksure = pulseIn(echoPin, HIGH);
distancefirst = ilksure*0.034/2;
Serial.print(distancefirst);
}
{
if (( distancefirst <= 50 ) and (distancefirst >=5 ))
{
stepper.runSpeed();
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration*0.034/2;
Serial.print(distance);
}
if (( distance >= 50 ) or (distancefirst <=5 ))
{
stepper.stop();
// distancefirst = 200;
digitalWrite(trigPin, LOW);
StepCounter = -100;
stepper.runToNewPosition(0);
ESP.wdtFeed();
EEPROM.write(address, '0');
Serial.println("Resetlendi");
stepper.disableOutputs();
// distance = 15;
}
}
}
}
}
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("alkan", mqttUser, mqttPassword )) {
Serial.println("connected");
client.subscribe("alkan/perde");
client.subscribe("alkan/perdedurum");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup()
{
ESP.wdtDisable();
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
setup_wifi();
client.setServer(mqtt_server, 1883);
dht.begin();
stepper.setMaxSpeed(1000);
stepper.setSpeed(900);
isik = analogRead(A0);
delay(1000);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
// SICAKLIK ve NEM
{
float temp = dht.readTemperature();
float humi = dht.readHumidity();
float isik2 = analogRead(A0);
Serial.println("Sıcaklık");
Serial.println(temp);
Serial.println("Nem");
Serial.println(humi);
Serial.println("Isik");
Serial.println(isik2);
client.publish("alkan/temp", String(temp).c_str());
client.publish("alkan/humi", String(humi).c_str());
client.publish("alkan/isik", String(isik2).c_str());
delay(5000);
}
}
Here is my error:
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 3456, room 16
tail 0
chksum 0x84
csum 0x84
va5432625
~ld