-1

我有一些代码放在 ESP8266-12e 板上。直到最近它一直运行良好。现在,当我完成上传代码时,ESP8266-12e 上的蓝灯一直亮着。我已经在两个不同的板上尝试过,蓝光都保持在两个板上。我无法弄清楚我在代码中所做的更改。我决定把它放上来,让每个人都看看它,让我知道我可能遗漏了什么。我希望有人能找到一些东西。

我的代码:

//NodeMCU 1.0 (ESP-12E Module constant connect)
#include <ESP8266WiFi.h>

#include <FS.h>         //https://github.com/esp8266/Arduino
#include <EEPROM.h>
//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

//MQTT stuff
#define AIO_SERVER      "go,here"
#define AIO_SERVERPORT  SSSS                   // 8883 for MQTTS

#define AIO_USERNAME    "FFFFFF"

#define AIO_KEY       "XXXXXXXXXXXXXXXXXXXXXXX"

int tripper = 1;
#define MQTT_CONN_KEEPALIVE 18000000
#define LED3 16

//NEW AUTOCONNECT
const byte numChars = 32;
char receivedChars[numChars];
char Password[36]="";
char apiKey[16]="";
char apiKey2[32]="";
char channelKey[16]; 
char channelKey2[16];
String channelKey21= "&"; 

byte pinState = LOW;

char ssid[] = "";
char pass[] = "";  
String Label = ""; 
String TOTAL = ""; 

uint32_t m=0;

 WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
 // Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe trip2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/trip");
Adafruit_MQTT_Publish move1 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/motion");
/*************************** Error Reporting *********************************/
Adafruit_MQTT_Subscribe errors = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/errors");
Adafruit_MQTT_Subscribe throttle = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/throttle");


//NEW AUTOCONNECT
int LED2 = 13; 
int MOVEMENT = 5;
//send ssid/pass
String f;

//mqtt
char temperature[]="000";
String level;
String battery;
String trip;
String date;

int addr = 0; 
//END NEW AUTOCONNECT

void MQTT_connect();
   
void setup() {
Serial.begin(115200);
pinMode(MOVEMENT,OUTPUT);
digitalWrite(MOVEMENT,LOW);
pinMode(D5,OUTPUT);
digitalWrite(D5,LOW);
pinMode(LED3,OUTPUT);
digitalWrite(LED3,LOW);
pinMode(LED2,INPUT);
Serial.println(F("Adafruit MQTT demo"));

//NEW AUTOCONNECT
  WiFiManager wifiManager;
    // put your setup code here, to run once:

WiFiManagerParameter customAPIKey("apiKey", "Time Zone #", apiKey, 16);
wifiManager.addParameter(&customAPIKey);
wifiManager.autoConnect("FloWT2");
    Serial.println("Connected");
strcpy(apiKey,customAPIKey.getValue());


   EEPROM.begin(512);  //Initialize EEPROM
 
  
  EEPROM.write(addr, 'A');    //Write character A
  addr++;                      //Increment address
  EEPROM.write(addr, 'B');    //Write character A
 


 String www =  apiKey;
 Serial.print("www");
 Serial.print (www);
  for(int i=0;i<www.length();i++) //loop upto string lenght www.length() returns length of string
  {
    EEPROM.write(0x0F+i,www[i]); //Write one by one with starting address of 0x0F
  }
  

  EEPROM.commit(); 

  delay (2000);
  

 
if (WiFi.status() == WL_DISCONNECTED) {
  
 wifiManager.autoConnect("FloWT2");
 delay(60000);}
 
 if (WiFi.status() == WL_CONNECTED) {  Serial.println("Connected");
delay(1000);

//get time zone
EEPROM.begin(512);
Serial.println(""); //Goto next line, as ESP sends some garbage when you reset it  
Serial.print(char(EEPROM.read(addr)));    //Read from address 0x00
addr++;                      //Increment address
Serial.print(char(EEPROM.read(addr)));    //Read from address 0x01
addr++;                      //Increment address
Serial.println(char(EEPROM.read(addr)));    //Read from address 0x02

//Read string from eeprom
String www;   
//Here we dont know how many bytes to read it is better practice to use some terminating character
//Lets do it manually www.circuits4you.com  total length is 20 characters
for(int i=0;i<16;i++) 
{
    www = www + char(EEPROM.read(0x0F+i)); //Read one by one with starting address of 0x0F    
  }  
 
Serial.println("this");
Serial.print(www); 

Serial.println("IP address: "); Serial.println(WiFi.localIP());

// Setup MQTT subscription for onoff feed
mqtt.subscribe(&trip2);

// Setup MQTT subscriptions for throttle & error messages
mqtt.subscribe(&throttle);
mqtt.subscribe(&errors);

  
WiFiClient client;
delay(2000);

Serial.printf("SSID: %s\n", WiFi.SSID().c_str());
Serial.printf("SSID: %s\n", WiFi.psk().c_str());
String ssidString = WiFi.SSID().c_str();
String pskString = WiFi.psk().c_str();
f = String('<')+String("Hi")+String(',')+String(ssidString)+String(',')+String(pskString)+String(',')+String(www)+String('>');
delay (1000);
Serial.print(f);
delay(500);
Serial.print(f);
delay(500);
Serial.print(f);
delay(500);
Serial.print(f);
delay(500);
Serial.print(f);
delay(500);

}


 client.stop();
}

void loop() {
 MQTT_connect();
uint32_t m=0;

Serial.print(F("\nSending motion val "));
  Serial.print(m);
  Serial.print("...");
  if (! move1.publish(m)) {
    Serial.println(F("Failed"));
  } else {
    Serial.println(F("OK!"));
  }
  long state = digitalRead(LED2);
  if(state == HIGH) {
    m = 1;
    Serial.print(F("\nSending motion val "));
  Serial.print(m);
  Serial.print("...");
digitalWrite(MOVEMENT,HIGH);
delay(1000);
digitalWrite(MOVEMENT,LOW);

if (! move1.publish(m)) {
    Serial.println(F("Failed"));
  } else {
    Serial.println(F("OK!"));
  }
  }
  else{
    
  }
  
  // this is our 'wait for incoming subscription packets' busy subloop
  // try to spend your time here
  //12e
  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &trip2) {
      Serial.print(F("Got onoff: "));
      Serial.println((char *)trip2.lastread);
    uint16_t sliderval = atoi((char *)trip2.lastread);
//THIS IS FOR LATCHING RELAY TURN ON D5 HIGH THEN OFF AFTER 1 SECOND 
      //NEXt TURN D6 HIGH THEN OFF AFTER A SECONDS
       if((sliderval ==0)&&(tripper == 1)){
        digitalWrite(D5,HIGH);
        delay(1000);
        digitalWrite(D5,LOW);
        tripper = 2;
        Serial.print(tripper);
        Serial.print("tripped");
      }
      else if(sliderval == 50){
      }
      else if((sliderval == 100)&&(tripper == 2)){
       digitalWrite(LED3,HIGH);
        delay(1000);
      digitalWrite(LED3,LOW);
        tripper = 1;
        Serial.print(tripper);
        Serial.print("tripped2");
      }
    } else if(subscription == &errors) {
      Serial.print(F("ERROR: "));
      Serial.println((char *)errors.lastread);
    } else if(subscription == &throttle) {
      Serial.println((char *)throttle.lastread);
    }
  }

}

void MQTT_connect() {
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
       Serial.println(mqtt.connectErrorString(ret));
       Serial.println("Retrying MQTT connection in 5 seconds...");
       mqtt.disconnect();
       delay(5000);  // wait 5 seconds
       retries--;
       if (retries == 0) {
         // basically die and wait for WDT to reset me
         while (1);
       }
  }
  Serial.println("MQTT Connected!");
  
}

我希望它不会太长。

无论如何,我希望有人能找到我的问题。一切正常,只要有蓝光,我就知道应该是这样。

当我上传另一个代码时,它不会继续存在,所以它必须在代码中。我会继续寻找。

谢谢

4

1 回答 1

0

所以我让蓝灯熄灭。而不是 pinMode(D4,INPUT); 和数字写入(D4,LOW);D4 是引脚 16,它是唤醒引脚。所以我不得不定义它 #define LED3 16 然后 pinMode(LED3,INPUT); 和数字写入(LED3,低);我将更改我的原始代码以反映这些更改。

于 2021-05-12T19:18:31.253 回答