ESP8266:当wifi开始时没有执行digitalwrite()。

问题描述 投票:0回答:1

我的ESP8266本来是可以用的,后来又加了第二个UART,但不知道为什么事情很奇怪,只要把wifi连接到我的网络上,数字写入功能就不能用了。

用示波器测量,在连接之前,D0或D1是1V,之后大约是0V,所以没有信号。

#include <Arduino.h>
#include <ESP8266WiFi.h>

const String SSID = "asd";
const String pw = "asd";

int doorOpenTemp = 10;
int currentTemp = 0;
int currentHumidity = 0;
int currentLight = 0;
bool doorStatus = false;
WiFiServer server(2222);
WiFiClient client1;

void handleNewConnection();
void refresh();
void processCommand(String command);
void measureTemp();
void measureLight();
void informArduino();


void setup() {
  Serial.begin(115200);
  Serial1.begin(38400);
  WiFi.begin(SSID, pw);
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  server.begin();

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

  pinMode(A0, INPUT);
  pinMode(D0, OUTPUT); //Temp  Sensor an
  pinMode(D1, OUTPUT);  //Light Sensor an

  digitalWrite(D0, LOW);
  digitalWrite(D1, LOW); 
}

void loop() {

  handleNewConnection();
  measureTemp();
  measureLight();
  informArduino();

  delay(200);
}

void handleNewConnection(){
 if(client1 == NULL || !client1.connected()){
   client1 = server.available();
   if(client1.available() > 0){

   Serial.println("New connection");
      processCommand(client1.readString());
   }
 }

 if(client1.connected() && client1.available() > 0){
   processCommand(client1.readString());
 }
}

void informArduino(){
  Serial1.print("<tem>");
  Serial1.print(currentTemp);
  Serial1.print("</tem><hum>");
  Serial1.print(currentHumidity);
  Serial1.print("</hum><dot>");
  Serial1.print(doorOpenTemp);
  Serial1.print("</dot><lig>");
  Serial1.print(currentLight);
  Serial1.print("</lig>END");
}

void processCommand(String command){
  Serial.println("Incoming command: " + command);

  if(command.startsWith("REFRESH")){
  Serial.println("Executing: " + command);
    refresh();
    client1.println("SUCCESS");
    client1.flush();
  } else {
    if(command.startsWith("TEMPTOOPEN_")){
      Serial.println(client1.connected());
        String openTemp = command.substring(command.indexOf('_') + 1);
        doorOpenTemp = openTemp.toInt();
        Serial.print("Temp to open: ");
        Serial.println(openTemp);
        client1.print("<tem>");
        client1.flush();
        client1.print(doorOpenTemp);
        client1.flush();
        client1.print("</tem>SUCCESS");
        client1.flush();
        Serial.println("Sent temp.");
    }
  } 
}

void refresh(){
  Serial.println("Sending REFRESH");
  client1.print("<tem>");
  client1.flush();
  client1.print(currentTemp);
  client1.flush();
  client1.print("</tem><doo>");
  client1.flush();
  client1.print(doorStatus ? "OPEN" : "CLOSED");
  client1.flush();
  client1.print("</doo>");
  client1.flush();
}

void measureTemp(){
  digitalWrite(D0, HIGH);
  //Serial.print("Temp: ");
  currentTemp = analogRead(A0);
  //Serial.println(currentTemp);  
  digitalWrite(D0, LOW);
}

void measureLight(){
 digitalWrite(D1, HIGH);
 currentLight = analogRead(A0);
  //Serial.print("Helligkeit: ");
  //Serial.println(); 
  digitalWrite(D1, LOW); 
}```
arduino wifi esp8266
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.