Code doesn't work with Sonoff basic but it works with nodemcu
Closed this issue · 1 comments
mrpannu100 commented
Hi everyone
i'm not a programmer. Please tolerate . So i might be missing something in the code. I have successfully uploaded code to sonoff basic. But nothing happens..............i mean it doesn't evenconnect to wifi. But when i upload same code to nodemcu, code works perfectly. am i missing anything in the code ?
#include <MQTT.h>
#include <PubSubClient.h>
#include <PubSubClient_JSON.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Ticker.h>
#define BUTTON 0 // (Don't Change for Sonoff)
#define RELAY 12 // (Don't Change for Sonoff)
#define LED 13 // (Don't Change for Sonoff)
#define MQTT_CLIENT "Sonoff_Living_Room_v1.0p" // mqtt client_id (Must be unique for each Sonoff)
#define MQTT_SERVER "192.168.0.10" // mqtt server
#define MQTT_PORT 1883 // mqtt port
#define MQTT_TOPIC "home/sonoff/living_room/1" // mqtt topic (Must be unique for each Sonoff)
#define MQTT_USER "xxxxxx" // mqtt user
#define MQTT_PASS "xxxxxx" // mqtt password
#define WIFI_SSID "xxxxxx" // wifi ssid
#define WIFI_PASS "xxxxxx" // wifi password
#define VERSION "\n\n----------------- Sonoff TH Powerpoint v1.0p -----------------"
extern "C" {
#include "user_interface.h"
}
bool sendStatus = false;
bool requestRestart = false;
int kUpdFreq = 1;
int kRetries = 10;
unsigned long TTasks;
unsigned long count = 0;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient, MQTT_SERVER, MQTT_PORT);
Ticker btn_timer;
void callback(const MQTT::Publish& pub) {
if (pub.payload_string() == "stat") {
}
else if (pub.payload_string() == "on") {
digitalWrite(RELAY, HIGH);
}
else if (pub.payload_string() == "off") {
digitalWrite(RELAY, LOW);
}
else if (pub.payload_string() == "reset") {
requestRestart = true;
}
sendStatus = true;
}
void setup() {
pinMode(LED, OUTPUT);
pinMode(RELAY, OUTPUT);
pinMode(BUTTON, INPUT);
digitalWrite(LED, HIGH);
digitalWrite(RELAY, LOW);
btn_timer.attach(0.05, button);
mqttClient.set_callback(callback);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.begin(115200);
Serial.println(VERSION);
Serial.print("\nESP ChipID: ");
Serial.print(ESP.getChipId(), HEX);
Serial.print("\nConnecting to "); Serial.print(WIFI_SSID); Serial.print(" Wifi");
while ((WiFi.status() != WL_CONNECTED) && kRetries --) {
delay(500);
Serial.print(" .");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println(" DONE");
Serial.print("IP Address is: "); Serial.println(WiFi.localIP());
Serial.print("Connecting to ");Serial.print(MQTT_SERVER);Serial.print(" Broker . .");
delay(500);
while (!mqttClient.connect(MQTT::Connect(MQTT_CLIENT).set_keepalive(90).set_auth(MQTT_USER, MQTT_PASS)) && kRetries --) {
Serial.print(" .");
delay(1000);
}
if(mqttClient.connected()) {
Serial.println(" DONE");
Serial.println("\n---------------------------- Logs ----------------------------");
Serial.println();
mqttClient.subscribe(MQTT_TOPIC);
blinkLED(LED, 40, 8);
digitalWrite(LED, LOW);
}
else {
Serial.println(" FAILED!");
Serial.println("\n----------------------------------------------------------------");
Serial.println();
}
}
else {
Serial.println(" WiFi FAILED!");
Serial.println("\n----------------------------------------------------------------");
Serial.println();
}
}
void loop() {
mqttClient.loop();
timedTasks();
checkStatus();
}
void blinkLED(int pin, int duration, int n) {
for(int i=0; i<n; i++) {
digitalWrite(pin, HIGH);
delay(duration);
digitalWrite(pin, LOW);
delay(duration);
}
}
void button() {
if (!digitalRead(BUTTON)) {
count++;
}
else {
if (count > 1 && count <= 40) {
digitalWrite(RELAY, !digitalRead(RELAY));
sendStatus = true;
}
else if (count >40){
Serial.println("\n\nSonoff Rebooting . . . . . . . . Please Wait");
requestRestart = true;
}
count=0;
}
}
void checkConnection() {
if (WiFi.status() == WL_CONNECTED) {
if (mqttClient.connected()) {
Serial.println("mqtt broker connection . . . . . . . . . . OK");
}
else {
Serial.println("mqtt broker connection . . . . . . . . . . LOST");
requestRestart = true;
}
}
else {
Serial.println("WiFi connection . . . . . . . . . . LOST");
requestRestart = true;
}
}
void checkStatus() {
if (sendStatus) {
if(digitalRead(RELAY) == LOW) {
mqttClient.publish(MQTT::Publish(MQTT_TOPIC"/stat", "off").set_retain().set_qos(1));
Serial.println("Relay . . . . . . . . . . . . . . . . . . OFF");
} else {
mqttClient.publish(MQTT::Publish(MQTT_TOPIC"/stat", "on").set_retain().set_qos(1));
Serial.println("Relay . . . . . . . . . . . . . . . . . . ON");
}
sendStatus = false;
}
if (requestRestart) {
blinkLED(LED, 400, 4);
ESP.restart();
}
}
void timedTasks() {
if ((millis() > TTasks + (kUpdFreq*60000)) || (millis() < TTasks)) {
TTasks = millis();
checkConnection();
}
}
KmanOz commented
Read my instructions again and don't modify my code and you won't have any issues. Right now your asking me why my code isn't working after you modified it and haven't followed simple instructions.