#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String JSON = "http://localhost:5000/";
#define BTN_0 18
#define STATE_LED 19
#define RELAY_0 26
#define RELAY_1 27
uint16_t RELAY0_WAIT,RELAY0_RUN,RELAY0_SLEEP;
uint16_t RELAY1_WAIT,RELAY1_RUN,RELAY1_SLEEP;
// 初始化OLED显示屏对象,设置分辨率为128x64
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
String GetJson(){
/*
HTTPClient http;
http.useHTTP10(true);
http.begin(JSON);
http.GET();
String result = http.getString();
DynamicJsonDocument doc(2048);
DeserializationError error = deserializeJson(doc, result);
// Test if parsing succeeds.
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return "<error>";
}
*/
//假装有个json
DynamicJsonDocument doc(2048);
String result="{\"RELAY0\":{\"WAIT\":1000,\"RUN\":1000,\"SLEEP\":1000},\"RELAY1\":{\"WAIT\":1000,\"\RUN\":1000,\"SLEEP\":1000}}";
DeserializationError error = deserializeJson(doc, result);
// Test if parsing succeeds.
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return "<error>";
}
RELAY0_WAIT = doc["RELAY0"]["WAIT"].as<uint16_t>();
RELAY0_RUN = doc["RELAY0"]["RUN"].as<uint16_t>();
RELAY0_SLEEP = doc["RELAY0"]["SLEEP"].as<uint16_t>();
RELAY1_WAIT = doc["RELAY1"]["WAIT"].as<uint16_t>();
RELAY1_RUN = doc["RELAY1"]["RUN"].as<uint16_t>();
RELAY1_SLEEP = doc["RELAY1"]["SLEEP"].as<uint16_t>();
//http.end();
return "<done>";
}
void run(){
display.clearDisplay();
display.setCursor(0, 0);
display.println("RUNING");
display.display();
delay(RELAY0_WAIT);
analogWrite(RELAY_0,HIGH);
delay(RELAY0_RUN);
analogWrite(RELAY_0,LOW);
delay(RELAY1_WAIT);
analogWrite(RELAY_1,HIGH);
delay(RELAY1_RUN);
analogWrite(RELAY_1,LOW);
display.clearDisplay();
display.setCursor(0, 0);
display.println("STOP");
display.display();
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(BTN_0, INPUT_PULLUP);
pinMode(STATE_LED, OUTPUT);
WiFi.begin(ssid, password, 6);
// 初始化OLED显示屏
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
// 显示文本 Circle:
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.print("Connecting to WiFi...");
display.display();
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(STATE_LED, HIGH);
delay(500);
digitalWrite(STATE_LED, LOW);
delay(500);
//display.print(".");
}
display.clearDisplay();
display.setCursor(0, 0);
display.print("OK! IP=");
display.println(WiFi.localIP());
// 更新显示内容
display.display();
display.clearDisplay();
display.setCursor(0, 0);
display.print(GetJson());
// 更新显示内容
display.display();
}
void loop() {
// put your main code here, to run repeatedly:
display.clearDisplay();
display.setCursor(0, 0);
delay(100);
display.println(String("RELAY0_WAIT : %d",RELAY0_WAIT));
display.println(String("RELAY0_RUN : %d",RELAY0_RUN));
display.println(String("RELAY0_SLEEP: %d",RELAY0_SLEEP));
display.println(String("RELAY1_WAIT : %d",RELAY1_WAIT));
display.println(String("RELAY1_RUN : %d",RELAY1_RUN));
display.println(String("RELAY1_SLEEP: %d",RELAY1_SLEEP));
display.display();
if (digitalRead(BTN_0)==LOW)
{
delay(100);
if (digitalRead(BTN_0)==HIGH)
{
run();
}
}
}