ZYB ARTICLES REPOS

Arduino示例程序

ESP8266部分

1. ESP8266获取MAC地址

#include 

void setup(){ 
   Serial.begin(9600);
   delay(500); 
   Serial.println();
   Serial.print("MAC: ");
   Serial.println(WiFi.macAddress());
   String s = WiFi.macAddress();
   s.replace(":", "");
   Serial.println(s);
}
 
void loop(){
  delay(1000);
}

2. ESP8266看门狗

void setup() {
  Serial.begin(115200);
  Serial.println("starting...");

  ESP.wdtEnable(WDTO_2S);
}

void loop() {
  for(int i=0; i<10; i++) {
    Serial.println("feed");
    ESP.wdtFeed();
    delay(1000);
  }

  Serial.println("not feed");
  while(1) {

  }
}

由于delay()函数会自动喂狗,因此loop部分可以省略掉ESP.wdtFeed()

void loop() {
  for(int i=0; i<10; i++) {
    Serial.println("feed");
    delay(1000);
  }

  Serial.println("not feed");
  while(1) {

  }
}

但不能在while(1){}循环中加入delay(),如下代码无法触发看门狗超时

void loop() {
  for(int i=0; i<10; i++) {
    Serial.println("feed");
    ESP.wdtFeed();
    delay(1000);
  }

  Serial.println("not feed");
  while(1) {
    delay(1000);
  }
}

另外loop函数结束时也会自动喂狗,因此如下代码也无法触发看门狗超时

void setup() {
  Serial.begin(115200);
  Serial.println("starting...");

  ESP.wdtEnable(WDTO_2S);
}

void loop() {

}

3. 代码重启ESP8266

主要用到ESP.restart()

void setup() {
  Serial.begin(115200);
  Serial.println("starting...");
}

int cnt = 0;
void loop() {
  if(cnt++ < 10) {
    Serial.printf("wait %d\n", cnt);
    delay(1000);
  } else {
    Serial.println("restart");
    ESP.restart();
  }
}