У меня работал ESP8266, затем добавили 2-й UART и как-то странно. Как только Wi-Fi подключен к моей сети, функция digitalwrite не будет работать.
С помощью осциллографа он определил, что до подключения D0 или D1 составляет 1 В, после этого около 0 В, поэтому сигнала нет. Даже если в настройках записано значение HIGH.
#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);
}```