Тема: Работа с WIFI ESP8266(gyverPortal)
Добрый день делаю проект на ESP8266. Её использую для вывода информации на дисплей OLED 128x64 и отправки на сайт некоторых значений, для простой постройки WEB странички куда будет приходить информация использую библиотеку GyverPortal.h. Столкнулся со следующей проблемой, а именно в скетче я указал название и пароль от своей wifi сети, когда ESP находится в зоне действия вай фай сети-то всё ок(ESP без проблем к ней подключается и запускается основной скетч и функция void loop). Но когда домашняя сеть не добивает до ESP она бесконечно пытается подключиться к ней и блокирует основной цикл программы. Хотелось бы узнать, можно ли сделать так чтобы ESP сначала полностью запускалась и выполняла задали скетча, а затем уже пыталась подключиться к сети WIFI (а если подключиться не удается,то повторить попытку через определенный промежуток времени).
#include <Wire.h> // Подключение библиотеки Wire
#include <Adafruit_GFX.h> // Подключение библиотеки Adafruit_GFX
#include <Adafruit_SSD1306.h> // Подключение библиотеки Adafruit_SSD1306
#include <microDS18B20.h>
#include <Servo.h>
#include <ESP8266WiFi.h>
#include <GyverPortal.h>
#define AP_SSID "iPhone" //имя сети
#define AP_PASS "12345678" //пароль
GyverPortal ui;
MicroDS18B20<0> sensor;
Servo myservo;
int temp, pos,i_dig,i_sum,i_iz,n;
float v,i_su,i_di,i_i,f,tempera;
long V;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 13
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int nmin = 25;
int nmax = 60;
int analogInput = A0;
float vout = 0.0;
float vin = 0.0;
float R1 = 98700; // Resistor R1 100k
float R2 = 9740; // Resistor R2 10k
int value = 0;
void build() {
GP.BUILD_BEGIN(GP_DARK);
GP.ONLINE_CHECK();
GP.UPDATE("tempr,voltes,position");
GP.TITLE("IZH Jupiter-4", "t1");
GP.HR();
GP_MAKE_BLOCK_TAB(
"Блок настроек",
GP.LABEL("Настройки холостого хода");
GP_MAKE_BOX(GP.LABEL("Мин.температура"); GP.NUMBER("num", "", nmin); );
GP_MAKE_BOX(GP.LABEL("Макс.температура"); GP.NUMBER("num1","",nmax); );
);
GP_MAKE_BLOCK_TAB(
"Блок показателей",
GP.LABEL("Показатели");
GP_MAKE_BOX(GP.LABEL("Температура"); GP.LABEL("tempr", "tempr"); );
GP_MAKE_BOX(GP.LABEL("Напряжение"); GP.LABEL("voltes", "voltes"); );
GP_MAKE_BOX(GP.LABEL("Положение серво"); GP.LABEL("position", "position"); );
)
GP.BUILD_END();
}
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3c); // Указываем адрес дисплея
pinMode(analogInput, INPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID, AP_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP());
// подключаем конструктор и запускаем
ui.attachBuild(build);
ui.attach(action);
ui.start();
myservo.attach(2);
myservo.write(0);
}
ui.updateFloat("tempr", tempera);
ui.updateFloat("voltes",i_i);
ui.updateInt("position",temp);
if (ui.clickInt("num", nmin)) {
Serial.print("Number: ");
Serial.println(nmin);
}
if (ui.clickInt("num1", nmax)) {
Serial.print("Number1: ");
Serial.println(nmax);
}
}
void loop() {
ui.tick();
sensor.requestTemp();
pos=map(i_iz,nmin,nmax,180,0);//map полодения сервы в завимости от температуры
myservo.write(pos);
/////чтение температуры и отделение десятой части/////
v=sensor.getTemp();
V=round(v*10);
i_iz=V/10;
//////мин. и макс. значение температуры для map////
if(i_iz>60){i_iz=60;}
if(i_iz<nmin){i_iz=nmin;}
/////////вольтметр///////////////
i_di = analogRead(analogInput);
i_su = i_su+i_di;
f++;if(f>9){f=0;i_i=i_su/293.0;i_su=0;}
tempera = sensor.getTemp();
draw();//вывод на дисплей
}
void draw(){
display.clearDisplay();
display.setTextColor(WHITE);
display.setCursor(26,0);
display.setTextSize(1);
display.println("temperature:");//текст "температура:"
display.setCursor(15,33);
display.setTextSize(1);
display.println("pos:");// текст "положение серво машинки 0-180*"
display.setCursor(78,33);
display.setTextSize(1);
display.println("volts:");// текст "напряжение:"
display.setCursor(56,42);
display.setTextSize(3);
display.println(i_i,1);//вывод напряжения
display.setCursor(25,10);
display.setTextSize(3);
display.println(sensor.getTemp(),1);//вывод температуры
display.setCursor(0,42);
display.setTextSize(3);
display.println(pos); // вывод положения сервы
display.display();
}