Esp приём и передача данных. md_parola

Тема в разделе "Arduino & Shields", создана пользователем Aleksander_33, 19 мар 2020.

  1. Aleksander_33

    Aleksander_33 Нерд

    Код (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й не могу. Программист из меня ещё тот. посмотрите может кто поможет добрым советом, да и ткнёт мордой неуча.
    Заранее Благодарен.
     
  2. Aleksander_33

    Aleksander_33 Нерд

    Здравствуйте! Добрые но гордые Люди.
    Задачу, как ни странно решил сам, помогла двухядерность ESP-32 перенёс опрос всех датчиков и связь по WIFI на ядро "0",а ядро "1" оставил
    целиком под MD_Parol_у, и всё теперь работает.
    Удивляет только, что за Монстр эта Parola, если она загружает 32-х битный процессор работающий на 240 Мгц практически полностью, но при этом
    совсем не использует вычислительную мощь.
    Или я так и не понял как её "Parol_у" правильно готовить?
    Всем спасибо и ещё раз Здоровья!
    Всегда Ваш Aleksander_33
     
    arkadyf и Daniil нравится это.