Код (Text): #include <WiFi.h> #include <WiFiUdp.h> #include <MD_Parola.h> #include <MD_MAX72xx.h> #include "RTClib.h" #include <ds3231.h> #include "GyverTimer.h" #include "5bite_rus.h" #include "6bite_rus.h" #define MAX_DEVICES 10 #define HARDWARE_TYPE MD_MAX72XX:: FC16_HW #define CS_PIN 12 #define data_Pin 13 #define clk_Pin 14 #define BUF_SIZE 75 IPAddress apIP(192,168,0,10); IPAddress gateway(192,168,0,8); IPAddress subnet(255,255,255,0); MD_Parola D = MD_Parola(HARDWARE_TYPE,data_Pin,clk_Pin,CS_PIN, MAX_DEVICES); const char* ssid = "UdpServ"; const char* passworde = ""; unsigned int Year,Month,Day,Weekday,Hour,Minutes; uint8_t i=0; char incomingTPHB[255]; char sendT[] = "T = "; // a reply string X to send back char sendP[] = "P = "; // a reply string Y to send back char sendH[] = "H = "; // a reply string T to send back char sendB[] = "B = "; char Y_ear[6]; char *M_onth[] = { "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" }; char H_our[3]; char W__kday[13]; char D_ay[3]; char M_nutes[3]; char Data[]=""; char Temp[10]; char Pres[10]; char Humid[10]; char Humidity[10]; char Hight[10]; char Height[10]; bool newMessageAvailable = false; static uint8_t display = 0; char temp[10]; char _temp[]="Температура="; char curMessage[BUF_SIZE]; char newMessage[BUF_SIZE]; char oldMessage[BUF_SIZE]; unsigned int localPort = 4210; float T,P,H,B; String runningText = ""; String data; DateTime now; struct sCatalog { textEffect_t effect; textEffect_t effectOut; textPosition_t position; char * psz; uint16_t speed; uint16_t pause; }; sCatalog catalog[] = { { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, curMessage, 30, 10 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, "Температура", 30, 30 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, Temp, 30, 10 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, "Давление", 30, 10 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, Pres, 30, 1 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, "Влажность", 30, 10 }, { PA_SCROLL_UP,PA_RANDOM,PA_CENTER, Humid, 30, 1500 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, M_onth[Month-1], 30, 10 }, { PA_SCROLL_LEFT,PA_SCROLL_LEFT,PA_CENTER, Hight, 30, 10 }, }; RTC_DS3231 rtc; WiFiUDP Udp; GTimer myTimer(MS); GTimer myTimer1(MS); GTimer myTimer2(MS); //--------------------------------------------------------------------- void DataRead(String &data){ data = incomingTPHB; if (data.startsWith("T = ")){data=data.substring(4); T = data.toFloat(); Serial.print(" T = "); Serial.println(T,3); delay(100);} else if (data.startsWith("P = ")){data=data.substring(4); P = data.toFloat(); Serial.print(" P = "); Serial.println(P,3); delay(100);} else if (data.startsWith("H = ")){data=data.substring(4); H = data.toFloat(); Serial.print(" H = "); Serial.println(H,3); delay(100);} else if (data.startsWith("B =")){data=data.substring(4); B = data.toFloat(); Serial.print(" B = "); Serial.println(B,2); delay(100);} } //----------------------------------------------------------------------- void floatTochar(){ String strT; String strP; String strH; String strB; strT=String(T,3); // 3 знака после запятой strP=String(P,3); strH=String(H,3); strB=String(B,3); strT.toCharArray(Temp,9); strP.toCharArray(Pres,9); strH.toCharArray(Humidity,9); strB.toCharArray(Height,9); } //MD_Parola D = MD_Parola(HARDWARE_TYPE,data_Pin,clk_Pin,CS_PIN, MAX_DEVICES); void setup() { Serial.begin(115200); WiFi.softAPConfig(apIP, gateway, subnet); WiFi.softAP(ssid, passworde); myTimer.setInterval(1000); myTimer1.setInterval(1500); myTimer2.setTimeout(1000); D.begin(); D.setFont(_5bite_rus); D.setInvert(false); //D.displayText(catalog[i].psz, catalog[i].position, catalog[i].speed, catalog[i].pause, catalog[i].effect, catalog[i].effectOut); Udp.begin(localPort); Serial.printf("MAC address = %s\n", WiFi.softAPmacAddress().c_str()); Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!"); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); while (1); } } //D.displayText(catalog[i].psz, catalog[i].position, catalog[i].speed, catalog[i].pause, catalog[i].effect, catalog[i].effectOut); void loop() { if (myTimer1.isReady()){ int packetSize = Udp.parsePacket(); //Serial.print("packetSize="); //Serial.println(packetSize); if (packetSize>0){ Udp.read(incomingTPHB, packetSize); int packetSize =0; DataRead(data); floatTochar(); } } DateTime now = rtc.now(); Year= now.year(); Month=now.month(); Day= now.day(); Weekday= now.dayOfTheWeek(); Hour= now.hour(); Minutes= now.minute(); if (myTimer.isReady()){ Serial.print("Год"); Serial.println(Year); Serial.print("Месяц"); Serial.print(Month); Serial.println(M_onth[Month-1]); Serial.print("Weekday"); Serial.println(Weekday); Serial.print("Hour"); Serial.println(Hour); Serial.print("Minutes"); Serial.println(Minutes); } for (uint8_t i=0; i<ARRAY_SIZE(catalog); i++) { D.displayText(catalog[i].psz, catalog[i].position, catalog[i].speed, catalog[i].pause, catalog[i].effect, catalog[i].effectOut); while (!D.displayAnimate()) myTimer2.setTimeout(1000); if (myTimer2.isReady()); } } Всем доброго Здоровья и доброго времени суток. Столкнулся с такой проблемой. Есть ESP8266 с привинченным BME280 и ESP 32 DEVKIT V1 DOIT с RTC DS3231 и светодиодная панель на матрицах 8*8. ESP 32 создаёт WIFI сеть(SoftAP) и выводит на панель данные, которые получает по WIFI от ESP8266, и RTC DS3231. И всё хорошо по отдельности: ESP8266 снимает показания с датчика и отправляет их через UDP соединение на ESP 32, та в свою очередь успешно эти данные принимает и считывает временные данные с RTC всё просто замечательно ! Но вот вступает в работу MD_Parola и всё рассыпается данные с часов худо бедно приходят(но о секундах приходится забыть), а вот при попытках получить данные из сети происходит перезагрузка ESP 32. В качестве примера взял MD_Parola_Animations_Catalog. Я понимаю что цикл ( while (!D.displayAnimate()) ) постоянно ждёт окончание анимации и на всё другое времени не остаётся или я ошибаюсь. Короче я как та мартышка с очками, и так пытаюсь и эдак но справиться с этой Paroloй не могу. Программист из меня ещё тот. посмотрите может кто поможет добрым советом, да и ткнёт мордой неуча. Заранее Благодарен.
Здравствуйте! Добрые но гордые Люди. Задачу, как ни странно решил сам, помогла двухядерность ESP-32 перенёс опрос всех датчиков и связь по WIFI на ядро "0",а ядро "1" оставил целиком под MD_Parol_у, и всё теперь работает. Удивляет только, что за Монстр эта Parola, если она загружает 32-х битный процессор работающий на 240 Мгц практически полностью, но при этом совсем не использует вычислительную мощь. Или я так и не понял как её "Parol_у" правильно готовить? Всем спасибо и ещё раз Здоровья! Всегда Ваш Aleksander_33