Скрестить два скетча.

Тема в разделе "ESP8266, ESP32", создана пользователем Kirch, 27 янв 2022.

  1. Kirch

    Kirch Нуб

    Вопрос должен быть легким.
    Не работает wifi со скетчем, описанным тут в самом конце https://chukin.ru/diploma/yashuk-bsc.pdf
    К wifi роутеру не подключается Nodemcu.
    А стандартный способ из доков ардуино работает.
    #include <ESP8266WiFi.h>
    const char* ssid = STASSID;
    const char* password = STAPSK;
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    Помогите скрестить. Как правильно перенести wifi. в первый скрипт?
     

    Вложения:

    • DSM501A.ino
      Размер файла:
      3,5 КБ
      Просмотров:
      108
    • WiFiClient.ino
      Размер файла:
      2,4 КБ
      Просмотров:
      98
  2. SergeiL

    SergeiL Оракул Модератор

    Та это и перенесите, то есть добавьте из первого то, чего не хватает во втором, сравнить то можете? :
    Код (C++):
    #include <ESP8266WiFi.h>

    const char* ssid     = "Keenetic-1319";
    const char* password = "MsN7JwLK";

    void setup() {
      Serial.begin(115200);

      // We start by connecting to a WiFi network

      Serial.println();
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);

      /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
         would try to act as both a client and an access-point and could cause
         network-issues with your other WiFi-devices on your WiFi-network. */

      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);

      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }

      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
     
  3. Kirch

    Kirch Нуб

    Как тогда будет работать код внизу в esp. , если теперь инициализируется объект wifi. ?
    Код (C++):
    // Подключаемся к серверу
    esp.println("AT+CIPSTART=\"TCP\",\"184.106.153.149\",80");
    // Передајм данные
    espdo(3000);
    esp.print("AT+CIPSEND=");
    esp.println( cmd.length() );
    espdo(3000);
    esp.println(cmd);
    espdo(20000);
    Что нужно вычистить, что оставить?
     
  4. SergeiL

    SergeiL Оракул Модератор

    Вы бы со схемой устройства определились бы для начала.
     
  5. Kirch

    Kirch Нуб

  6. Airbus

    Airbus Радиохулиган Модератор

    Как два пальца!
    [​IMG]
     
    issaom и Рокки1945 нравится это.
  7. SergeiL

    SergeiL Оракул Модератор

  8. Kirch

    Kirch Нуб

  9. SergeiL

    SergeiL Оракул Модератор

    Ну вот, уже хоть как то начала просматриваться схема устройства.
    Почему я спрашивал об этом? Потому, что у вас в первом посте два скетча.

    Со вторым скетчем более менее все понятно, это скетч для ESP8266. ( подключение - как в последней схеме)

    А вот с первым - не совсем понятно, откуда вы его взяли в таком виде?
    В нем подключение к удаленному серверу осуществляется через ESP8266, которая подключена к основной плате (вопрос: какая это плата?), через SoftSerial.
    Команды на подключение выдаются AT командами через SoftSerial.
    Значит подключенная ESP - с оригинальной "АТ прошивкой".
    И в тоже время в коде, есть строка:
    Код (C++):
    #include <ESP8266WiFi.h>
    относящаяся ко второму варианту, когда код для ESP8266 компилируется в Ардуино ИДЕ , и это никак не связано с "АТ прошивкой"

    Понятно?
    Может стоит сразу оставить это все на потом???
     
    Последнее редактирование: 27 янв 2022
  10. Kirch

    Kirch Нуб

    Оракул, проверил исходник, нашел косяк, приложил его заново. В ранее вложенном файле DSM501A.ino остались мои эксперименты, это я добавлял ESP8266WiFi.h из WiFiClient.ino
    Я нашел исходник в дипломной работе, см первый пост. Привлекло, что код автономный, отправляет в интернет.
    У меня был закуплен DSM501a, хотел его пустить в дело, собирать статистику. Если найду другой вариант взять статистику в csv, то воспользуюсь.
    В дипломе упоминается Arduino Nano и ESP-01, поэтому начал с ESP.
    Хотелось бы с помощью заменить void setup() или оставить код после void setup(), работающий с этим датчиком, и начать собирать данные.

    Нашел еще в eng сети похожий код, прикладываю ссылку https://forum.mysensors.org/post/37585 , может пригодится.
     

    Вложения:

  11. b707

    b707 Гуру

    чем вам код с инструктаблес (сообщение #8) не устраивает? там и датчик есть и есп8266, от него и стартуйте и добавляйте что вам надо. И не надо будет ни с каким другим скетчем его обьединять
     
  12. Kirch

    Kirch Нуб

    Не подходит печатать в порт.
    Нужен готовый код передачи на сервак, типа в первом посте, можно и mqtt, если соединится с MjD.
     
  13. SergeiL

    SergeiL Оракул Модератор

    А что значит "Не подходит печатать в порт".

    Сначала отлаживаете работу с датчиком, печатаете в порт значения, смотрите, устраивают результаты или нет.
    Потом ищите пример с отправкой чего либо по подходящему вам варианту, смотрите как отправляет, что отправляет.
    Если все устраивает - постепенно добавляете во второй код работу с датчиком.

    Первый код (из первого сообщения) - он совсем мягко говоря "не очень".
    Там задержки на delay() по 20 секунд, хотя в вашем случае может и сойдет.
    Но сам скетч вам не подходит, там ESP с АТ прошивкой используется, две платы нужно, неудобно это и примеров мало.

    Начинайте с отладки двух частей по второму варианту: работа с датчиком и отправка информации "куда-то".

    Готовый код вы вряд ли найдете, и датчик - редкость этот дадчег, как мне кажется.
     
    Kirch нравится это.
  14. b707

    b707 Гуру

    что-то мне начинает казаться. что сами вы писать этот код и пытаться не собираетесь.
    В таком случае, если "нужен готовый код", то для этого есть раздел "закажу проект".
     
    Airbus нравится это.
  15. Airbus

    Airbus Радиохулиган Модератор

    А где он такое говорил?Он же сказал
    А потом
    Вот и помоги ему скрестить шпаги скетч со скриптом. А я то после вчерашнего-никакой. Как выжатый лимон.
     
  16. Bott

    Bott Гик

    Вот скрестил.Не благодари!
    Код (C++):
    #include <SoftwareSerial.h>
    #include <ESP8266WiFi.h>

    #ifndef STASSID
    #define STASSID "Keenetic-1319"
    #define STAPSK  "MsN7JwLK"
    #endif

    const char* ssid     = STASSID;
    const char* password = STAPSK;

    const char* host = "djxmmx.net";
    const uint16_t port = 17;
    int pin = 8;
    unsigned long duration;
    unsigned long starttime;
    unsigned long sampletime_ms = 1000;//sampe 1s ;
    unsigned long lowpulseoccupancy = 0;
    float ratio = 0;
    double concentration = 0;
    int gLed = 7;
    int yLed = 6;
    int rLed = 5;
    // Пишем передачу и получения сигналов с esp8266 на цифровые каналы
    SoftwareSerial esp(10,11);
    String writeAPIKey = "JX91LPLU2IJW01GV";

    void espdo(long time) {
    delay(time);
    while(esp.available() > 0) {
    Serial.write(esp.read());
    }
    }

    void setup() {
    // Задаем скорость последовательного порта
    Serial.begin(115200);
    // Переключаем аналоговый контакт 2 на вход напряжения
    pinMode(2,INPUT);
    // Иниициализация модуля esp
    esp.begin(115200);
    delay(2000);
    //сбрасываем все навтройки esp
    esp.println("AT+RST\r\n");
    espdo(2000);
    // Задајм есп режим станции
    esp.println("AT+CWMODE_DEF=1");
    espdo(2000);
    // Устанавливаем параметры для подключения
    esp.println("AT+CWJAP=\"Keenetic-1319\",\"M\"");
    espdo(5000);
    // Разрешаем ему лишь одно подключение
    esp.println("AT+CIPMUX=0");
    espdo(2000);
    }

      /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
         would try to act as both a client and an access-point and could cause
         network-issues with your other WiFi-devices on your WiFi-network. */

      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid, password);

      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");

    void loop() {
    static bool wait = false;

      Serial.print("connecting to ");
      Serial.print(host);
      Serial.print(':');
      Serial.println(port);

      // Use WiFiClient class to create TCP connections
      WiFiClient client;
      if (!client.connect(host, port)) {
        Serial.println("connection failed");
        delay(5000);
        return;
      }

      // This will send a string to the server
      Serial.println("sending data to server");
      if (client.connected()) {
        client.println("hello from ESP8266");
      }

      // wait for data to be available
      unsigned long timeout = millis();
      while (client.available() == 0) {
        if (millis() - timeout > 5000) {
          Serial.println(">>> Client Timeout !");
          client.stop();
          delay(60000);
          return;
        }
      }

      // Read all the lines of the reply from server and print them to Serial
      Serial.println("receiving from remote server");
      // not testing 'client.connected()' since we do not need to send data here
      while (client.available()) {
        char ch = static_cast<char>(client.read());
        Serial.print(ch);
      }

      // Close the connection
      Serial.println();
      Serial.println("closing connection");
      client.stop();

      if (wait) {
        delay(300000); // execute once every 5 minutes, don't flood remote service
      }
      wait = true;
    esp.println("AT+CWLAP");
    duration = pulseIn(pin, LOW);
    lowpulseoccupancy = lowpulseoccupancy+duration;
    if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
    {
    ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage
    concentration = (1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62)/0.000283168;
    //concentration = 1e6*concentration;
    Serial.print("concentration = ");
    Serial.print(concentration);
    Serial.print(" M^-3 - ");
    if (concentration < (1000/0.000283168)) {
    Serial.println("Бездымная беспыльная окружаящая среда");
    }
    if (concentration > (1000/0.000283168) && concentration < (20000/0.000283168)) {
    Serial.println("Поток воздуха попадает на датчик");
    }
    if (concentration > (20000/0.000283168) && concentration < (315000/0.000283168)) {
    Serial.println("Дым");
    }
    if (concentration > (315000/0.000283168)) {
    Serial.println("Густой дым(сигаретный или даже пожар)");
    }
    lowpulseoccupancy = 0;
    starttime = millis();
    delay(20000);
    }
    //Serial.print("concentration");
    //Serial.print(" ");
    Serial.println(concentration);
    //String cmd = "GET /input/" + publicKey + "?private_key=" + privateKey
    String tsData = "field1=";
    tsData += +concentration;
    String cmd = "POST /update HTTP/1.1\n";
    cmd += "Host: api.thingspeak.com\n";
    cmd += "Connection: close\n";
    cmd += "X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n";
    cmd += "Content-Type: application/x-www-form-urlencoded\n";
    cmd += "Content-Length: ";
    cmd += tsData.length();
    cmd += "\n\n";
    cmd += tsData;
    // Подключаемся к серверу
    esp.println("AT+CIPSTART=\"TCP\",\"184.106.153.149\",80");
    // Передајм данные
    espdo(3000);
    esp.print("AT+CIPSEND=");
    esp.println( cmd.length() );
    espdo(3000);
    esp.println(cmd);
    espdo(20000);
    }
     
     
  17. SergeiL

    SergeiL Оракул Модератор

    Хреново как-то скрестил.
    Работать не будет...
    ой, бля....
    даже компилироваться не будет!
     
  18. b707

    b707 Гуру

    да он просто накидал оператры "в одну корзину"...


    типичная ситуация - тот кто хочет скрестить скетчи - не может, а кто мог бы это сделать - не хотят...
     
    Airbus нравится это.
  19. SergeiL

    SergeiL Оракул Модератор

    ИХ не скрестить, ИХ нужно переписать :)
     
    Airbus нравится это.
  20. Airbus

    Airbus Радиохулиган Модератор

    Точно! А особенно когда ТС не может и не хочет это пипец! А ты распинаешься..