MEGA2560+ESP32(8266) BLYNK WiFi shield

Тема в разделе "Arduino & Shields", создана пользователем RazorLine, 14 фев 2019.

  1. Daniil

    Daniil Гуру

    тут обратить внимание на Rx и Tx + согласование уровней. Разные микросхемы работают на разных уровнях (в зависимости от схемотехники), поэтому чтобы на микросхему в 3.3 В не подать 5 В ставят делитель.
     
  2. ИгорьК

    ИгорьК Гуру

    Ну у меня сейчас не получится, здесь нет ничего вообще - Мадрид, чтоб его.

    Но и так я бы не стал собирать - дело не в соединении 4 проводов, а в том, что шлет ардуино на модуль.
     
  3. parovoZZ

    parovoZZ Гуру

    только не протокол, а интерфейс.
     
    Daniil и ИгорьК нравится это.
  4. parovoZZ

    parovoZZ Гуру

    Это только в том случае, если выходного импеданса не хватает для глушения помех. В общем случае не нужен.
     
  5. RazorLine

    RazorLine Нерд

    Пообщался с иностранцами, вообщем, с большим трудом, получилась связка Mega + nodemcu v3 при понижении прошивки
    1. Arduino IDE 1.8.7
    2. AT version:1.1.0.0(May 11 2016 18:09:56)
      SDK version:1.5.4(baaeaebb)
    3. Blynk Lib v0.6.0
    Есть мнение, что esp32 + мультиплексоры, если не хватает портов, будет лучше.
    А совсем хорошо - две и более esp32 без бубнов, плясок и песнопений.
     
  6. ИгорьК

    ИгорьК Гуру

    Дело вот в чем. Написанное вами, по-видимому, верно.

    Вместе с тем, и абсолютно непонятно.
    Вы говорите о соединении меги с есп, однако это "соединение" никакой ценности не имеет.

    Обычно решается какая-то задача: снять и передать данные, управлять чем-то, etc.

    Сделать это можно не единственным способом.
     
  7. b707

    b707 Гуру

    Уровень сигнала с Меги ВСЕГДА 5в - важно это понимать.
    А вообще, название темы читается как "у кого есть удачный опыт использования утюга?" - у каждого, кто смог прочитать и понять инструкцию
    С "использованием Меги + ЕСП" - все точно также, задачка элементарная.
     
    DetSimen и ИгорьК нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Точнее не скажешь.
     
  9. parovoZZ

    parovoZZ Гуру

    Я бы не был так уверен. Даташит утверждает, что
    Ну т.е. посадить ее на 3.3 вольт проблем нет.
     
  10. RazorLine

    RazorLine Нерд

    Решил пойти другим путем. (Поняв что дело это недоделанное на стороне разработчиков ESP, лечится бубном с валерьянкой, и в ожидании посылки с ESP-01S)
    Решил с MEGA2560 собирать и отправлять массив данных с датчиков.

    Буду пробовать собирать/разбирать массивы
     
    Последнее редактирование: 26 фев 2019
  11. RazorLine

    RazorLine Нерд

    Победил!
    С Меги передаем в порт ESP32 (nodemcu v3) строкой цифры разделенные пробелами
    ESP переводит строку в массив, присваивает элементам массива порт и передает в Blynk.
    Присутствует защита от неправильных данных в виде проверки спец символа ",".
    Использовано 16 датчиков - 12 MLX90615, 1 DHT, MQ135, HC SR04
    Мега + датчики питаются напрямую от ESP. Дополнительных резисторов, диодов, конденсаторов нет.
    С Меги цифры с запятой передаются умноженными на 100, на приемнике делятся на 100.0 для удобства.

    Если RX/TX передатчика = RX/TX приемника, то в мониторе порта получаем строку с Меги
    Если RX/TX передатчика = TX/RX приемника, то в мониторе порта получаем строки с ESP
    //очень удобно

    С Меги, у меня, уходит строка в виде:
    , 2275 2269 2275 2303 2417 2255 2269 2231 2241 2275 2222 2441 2820 1400 824 157

    Код (C++):
    #include <WiFi.h>
    #include <WiFiMulti.h>

    #define SSID "YOUSSID"
    #define PASS "YOUPASS"
    #define TIME 1000 // Частота отправки данных (в мс)

    #define BLYNK_PRINT Serial
    #include <WiFiClient.h>
    #include <BlynkSimpleEsp32.h>

    #define I_Simvol 500    //Длина буфера принятых символов, много, но так надо
    #define I_Buf 170        //Длина буфера результата, много, но так надо
    int KolicSimvolov = 0;  //Сколько получили байт
    int Simvol [I_Simvol];  //Буфер для принятых символов
    int Buf[I_Buf];         //Буфер для результата
    int i, i2;              //Счетчики


    WiFiMulti wifiMulti; const char* ssid = SSID; const char* password = PASS; char auth[] = "YOUBLYNKAUTH";


    IPAddress local_IP(192, 168, 1, 42); IPAddress gateway(192, 168, 1, 202); IPAddress subnet(255, 255, 255, 0); IPAddress primaryDNS(8, 8, 8, 8); IPAddress secondaryDNS(8, 8, 4, 4);
    WiFiServer server(80); WiFiClient serverClients;

    void setup () {

      Blynk.begin(auth, SSID, PASS, IPAddress(192, 168, 1, 205), 8080); //Blynk.begin(auth);// Blynk.begin(auth, ssid, pass);  // You can also specify server: //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);


      Serial.begin(9600);
      WiFi.begin(ssid, password);
      if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
        Serial.println("STA Failed to configure");
      }

      Serial.print("Connecting to ");  Serial.println(ssid);  WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");  Serial.println("WiFi connected!");  Serial.print("IP address: ");  Serial.println(WiFi.localIP());  Serial.print("ESP Mac Address: ");  Serial.println(WiFi.macAddress());  Serial.print("Subnet Mask: ");  Serial.println(WiFi.subnetMask());  Serial.print("Gateway IP: ");  Serial.println(WiFi.gatewayIP());  Serial.print("DNS: ");  Serial.println(WiFi.dnsIP());

      server.begin();  server.setNoDelay(true);
    }


    void loop () {
      Blynk.run();


      while (Serial.available() > 15) {
        char c = Serial.read();
        if (c == ',') {

          for (i = 0; i < I_Simvol; i++) Simvol[i] = 0; //обнулить буфер приема
          for (i = 0; i < I_Buf; i++) Buf[i] = 0;       //обнулить буфер результата
          /*Получение данных*/
          KolicSimvolov = Serial.available();       // Сколько получили байт
          delay(20);//Нужна эта долбаная задержка иначе будет читать НЕ ВСЕ символы в одну строку
          if (KolicSimvolov > 0) {
            for ( i = 0; i < KolicSimvolov; i++) {  // Читаем все данные из порта
              Simvol [i] =  Serial.read();            // читаем байт
              // Serial.println(Serial.read());
              delay(20);
            } /*Данные получены*/

            /*АНАЛИЗ ПОЛУЧЕННЫХ ДАННЫХ*/
            i = 0;
            i2 = 0;
            while (i < KolicSimvolov) {
              if (Simvol[i] >= 48 && Simvol[i] <= 57) {     //если цифра
                Buf[i2] = Buf[i2] * 10 + (Simvol [i] - 48); //Накапливаем переменную
                i++;
              }
              else {   //если НЕ цифра (любой символ)
                i2++;  //переходим к следующему элементу буфера результата
                i++;
              }
            }
            Serial.flush();//очистка буфера

            /*проверка*/
            for (i = 0; i < I_Buf; i++) {
              //Serial.println(Buf[i]);

              Serial.println("");
              float t1 = (Buf[1] / 100.0);
              Serial.print("T01=");
              Serial.print(t1);
              Serial.print(" ");
              float t2 = (Buf[2] / 100.0);
              Serial.print("T02=");
              Serial.print(t2);
              Serial.print(" ");
              float t3 = (Buf[3] / 100.0);
              Serial.print("T03=");
              Serial.print(t3);
              Serial.print(" ");
              float t4 = (Buf[4] / 100.0);
              Serial.print("T04=");
              Serial.print(t4);
              Serial.print(" ");
              Serial.print("Tср1=");
              Serial.print((t4 + t3 + t2 + t1) / 4);

              Serial.println("");
              float t5 = (Buf[5] / 100.0);
              Serial.print("T05=");
              Serial.print(t5);
              Serial.print(" ");
              float t6 = (Buf[6] / 100.0);
              Serial.print("T06=");
              Serial.print(t6);
              Serial.print(" ");
              float t7 = (Buf[7] / 100.0);
              Serial.print("T07=");
              Serial.print(t7);
              Serial.print(" ");
              float t8 = (Buf[8] / 100.0);
              Serial.print("T08=");
              Serial.print(t8);
              Serial.print(" ");
              Serial.print("Tср2=");
              Serial.print((t8 + t7 + t6 + t5) / 4);

              Serial.println("");
              float t9 = (Buf[9] / 100.0);
              Serial.print("T09=");
              Serial.print(t9);
              Serial.print(" ");
              float t10 = (Buf[10] / 100.0);
              Serial.print("T10=");
              Serial.print(t10);
              Serial.print(" ");
              float t11 = (Buf[11] / 100.0);
              Serial.print("T11=");
              Serial.print(t11);
              Serial.print(" ");
              float t12 = (Buf[12] / 100.0);
              Serial.print("T12=");
              Serial.print(t12);
              Serial.print(" ");
              Serial.print("Tср3=");
              Serial.print((t12 + t11 + t10 + t9) / 4);

              Serial.println("");
              float t13 = (Buf[13] / 100.0);
              Serial.print("T=");
              Serial.print(t13);
              Serial.print(" ");

              int t14 = (Buf[14] / 100);
              Serial.print("H=");
              Serial.print(t14);
              Serial.print(" ");

              int t15 = (Buf[15]);
              Serial.print("CO2=");
              Serial.print(t15);
              Serial.print(" ");

              int t16 = (Buf[16]);
              Serial.print("D=");
              Serial.print(t16);
              Serial.println("");


              Blynk.virtualWrite(V51, t1);
              Blynk.virtualWrite(V52, t2);
              Blynk.virtualWrite(V53, t3);
              Blynk.virtualWrite(V54, t4);
              Blynk.virtualWrite(V55, t5);
              Blynk.virtualWrite(V56, t6);
              Blynk.virtualWrite(V57, t7);
              Blynk.virtualWrite(V58, t8);
              Blynk.virtualWrite(V59, t9);
              Blynk.virtualWrite(V60, t10);
              Blynk.virtualWrite(V61, t11);
              Blynk.virtualWrite(V62, t12);
              Blynk.virtualWrite(V63, t13);
              Blynk.virtualWrite(V64, t14);
              Blynk.virtualWrite(V65, t15);
              Blynk.virtualWrite(V66, t16);

    //На всякий случай еще разок
              for (i = 0; i < I_Simvol; i++) Simvol[i] = 0; //обнулить буфер приема
              for (i = 0; i < I_Buf; i++) Buf[i] = 0;       //обнулить буфер результата
              Serial.flush();//очистка буфера


            }
          }
        }
      }
    }

           
     
    Спасибо всем кто помог реальными советами, направил, поддержал, помог и пр. (если таковые были).
     
    Последнее редактирование: 7 мар 2019