• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 11
От мобилни телефони до цифрови камери
brum - майстор
Знаеш ли как се ползва серийният изход и какво прави Serial.println()? Това е единственият разумен вариант за debug-ване на проблеми.

Ако не знаеш - ще обясня какъв е целият процес за логовете, сериният монитр, компютъра и т.н. Ще помогне ако качиш кажеш какъв софтуер си сложил. За да дам съвети какви логове да сложиш.
radius - майстор
Тая команда изкарва в сериал монитора на нов ред параметъра в скобите.
Arduino IDE, ако това питаш за софтуер, а не самата програмка :roll: .
Хрумна ми нещо друго, преди да ровим за проблеми, кабелчетата влизат много хлабаво в някои дупки на бредборда и малко са ми съмнителни. Ще запоя всичко и тогава, ако има проблем да го търсим.
brum - майстор
Софтуер е кода който е в IDE-то.

А командата вади всичко коети сложиш като параметър в конзолата. Идеята е ако call-a за вземане на данни от сензора или call-a за публикуването на данни върне грешка да извадиш тази грешка в конзолата. Така ще се ориентираш къде и какъв е проблема.

Дай го тук този софтуер (код) и ще ти кажа къде какви команди да добавиш за да намериш проблема. Като махнеш от него паролите и ключовете ако има такива :) .
radius - майстор
Направо се чудя как грейна снощи тая джаджа, че и работи 4-5часа без прекъсване !
Махнах бредборда и запоих всичко, да са сигурни ел. връзките. Сложих друг USB кабел и зарядно.
Взех другата платка наредих я на бредборда и ѝ сложих същия код (разбира се с друг канал на Thingspeak). Сложих платките на метър от рутера и двете рандъм се закачат за по половин минута и се разкачат.
От половин час вече и двете са онлайн (с половин минута разлика са се кънектнали стабилно) и качват данни, което е много подозрително, но рутера е хубав (вече го писах Archer AX1800), и му вярвам засега поне. Не е правил грижи с никакви устройства, а те не са малко (да не говорим че съм по цял ден през ВПН, който е доста чувствителен на прекъсвания на връзката, но такива няма). Махнах няколко закачени устройства от него за проба, но и това нямаше ефект.
Проблемът според мен не е в датчика, нито в качването към thingspeak, а в wi-fi връзката - аз виждам, че се губят esp-тата в лок.мрежа, как да очаквам да качват данни като не са свързани с рутера. Тия delay дали не трябва нещо да променя?

Кода, който съм им качил е този :

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

String apiKey = "ключа от Тингспийк"; // Enter your Write API key from ThingSpeak

const char* ssid = "името на рутера ми"; // Replace with your wifi ssid and WPA2 key
const char* pass = "паролата";
const char* server = "api.thingspeak.com";

#define ONE_WIRE_BUS 4 // Data wire is connected to GPIO 4 i.e. D2 pin of nodemcu

OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices

DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature sensor

WiFiClient client;

void setup()
{
Serial.begin(9600);
delay(10);

Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);

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

}

void loop()
{
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
float tempF = sensors.getTempFByIndex(0);
if ((tempC == -127.00) || (tempF == -196))
{
Serial.println("Failed to read from sensor!");
delay(1000);
}
else
{
Serial.print("Temperature in Celsius: ");
Serial.println(tempC);
Serial.print("Temperature in Fahrenheit: ");
Serial.println(tempF);
delay(1000);
}

if (client.connect(server,80)) //184.106.153.149 or api.thingspeak.com
{
String postStr = apiKey;
postStr +="&field1=";
postStr += String(tempC);
postStr +="&field2=";
postStr += String(tempF);
postStr += "\r\n\r\n";

client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.println("Sent data to Thingspeak");
}
client.stop();
Serial.println("Delay of 15 Sec");
// thingspeak needs minimum 15 sec delay between updates
delay(5000);
}
brum - майстор

Код: Избери всички

void loop() {
    if (WiFi.status() != WL_CONNECTED) {
        Serial.printf("WiFi connection failed, current status is %d", WiFi.status());
        delay(100);
        ESP.restart();
    }
    sensors.requestTemperatures();
    float tempC = sensors.getTempCByIndex(0);
    float tempF = sensors.getTempFByIndex(0);
    if ((tempC == -127.00) || (tempF == -196)) {
        Serial.println("Failed to read from sensor!");
        delay(1000);
    } else {
        Serial.print("Temperature in Celsius: ");
        Serial.println(tempC);
        Serial.print("Temperature in Fahrenheit: ");
        Serial.println(tempF);
        delay(1000);
    }

    int timeout = 5000;
    if (client.connect(server, 80)) //184.106.153.149 or api.thingspeak.com
    {
        String postStr = apiKey;
        postStr += "&field1=";
        postStr += String(tempC);
        postStr += "&field2=";
        postStr += String(tempF);
        postStr += "\r\n\r\n";

        client.print("POST /update HTTP/1.1\n");
        client.print("Host: api.thingspeak.com\n");
        client.print("Connection: close\n");
        client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
        client.print("Content-Type: application/x-www-form-urlencoded\n");
        client.print("Content-Length: ");
        client.print(postStr.length());
        client.print("\n\n");
        client.print(postStr);
        Serial.println("Sent data to Thingspeak");

        // Изчаква до 5 секунди за отговор от сървъра и извежда изважда отговора в терминала.
        while (timeout > 0 && !client.available()) {
            timeout -= 100;
            delay(100);
        }

        if (!client.available()) {
            Serial.println("Server did not respond");
        } else {
            delay(1000);
            timeout -= 1000;
            Serial.println("Server responded:");
            Serial.println(client.readString());
        }
    } else {
        Serial.println("Connection to thingspeak failed.");
    }
    client.stop();
    Serial.println("Delay of 30 Sec");
    // thingspeak needs minimum 30 sec delay between updates
    delay(30000 - timeout);
}
Погледни 3те коментара дето са на български. Така ще се ориентираш къде са промените. Променил съм само loop() функцията. Другото си е старото.

Добавих малка логика която да рестартира контролера ако WiFi връзката се разпадне. Без нея контролера ще виси с разпаднала се връзка и в даден момент ще се свърже отново заради начина по който е написана библиотеката. Но по моите наблюдения не е много надеждно и подхода с рестартиране на контролера дава по-добри резултати.

Та пускай го това, закачай компютъра и като има проблеми ще се види какви са. Пускаш тук съдържанието от терминала и ще го бистрим.

Измервания през 5 секунди са прекалено начесто. Пишеш си, че thignspeak приема call-ове през 15 секунди. Телеметрия на 5 секунди е безумие. То и на 30 секунди е прекалено, ама поне влиза в изискванията на thingspeak.

P.S.
Всъщност добавих още една промяна. Да изпише отговора от thingspeak. Ако реално от там се връща грешка (примерно rate limited, заради прекалено чести извиквания) това ще я покаже и ще дам идеи как да го оправиш.

Не съм го пуска! Ако не работи - пиши, ще събера една платка и ще го пусна да видя какво се случва.
radius - майстор
Мерси за бързата реакция, няма да мога да го пробвам веднага днес. Не съм загледал, че мери през 5 сек., на мен ми е добре през 30сек, минута ми се струва компромисно.
Това с по-бързото рестартиране при неуспешна връзка е доста добра идея.
За мен проблема не е с thingspeak (дали много ъплоуди или нещо друго), то устройството го няма в wi-fi клиентите на рутера ми, какъв е смисъла да търся нещо навън.
Вече 2 часа работят и двете устройства (пуснал съм безкраен пинг и няма и пакет загуба за час), уплашиха се, но няма прошка :wink: .
radius - майстор
Вече имам някакви наблюдения. Качих твоята програмка и на двете устройства и има нещо много странно - изчезват и се появяват в thingspeak по едно и също време, примерно днес в 11:58 са спрели да качват и двете, после в 13:02 са започнали отново да качват. Интернет има и се ползва постоянно. Такива едновременни прекъсвания е имало и през нощта за 2 часа и сутринта по-рано. Бях настройвал QoS на рутера за определени устройства, но го махнах без резултат.
Прикачен файл:
esp.jpg




На горната картинка съм хванал устройството, когато не може да се закачи дори към рутера, появява се за миг като клиент и изчезва, но като гледам лога, изписва connection to thingspeak failed, което е вярно, но по-важното е че няма wi fi връзка. Маркирал съм как ресетвам ESP-то, след цели 4 минути изписва WiFi connected (защото и само след 2 сек. съм го виждал да се връзва) и после набива тая грешка connection to thingspeak failed. През това време изобщо го няма в клиентите на рутера, значи главния му проблем е wi fi - to. И след време както си се мъчи, успява да се закачи и да почне да праща данни. Ето лога:
19:11:51.603 -> Delay of 30 Sec
19:12:16.703 -> Temperature in Celsius: 52.25
19:12:16.750 -> Temperature in Fahrenheit: 126.05
19:12:17.706 -> Connection to thingspeak failed.
19:12:17.753 -> Delay of 30 Sec
19:12:43.386 -> Temperature in Celsius: 52.75
19:12:43.386 -> Temperature in Fahrenheit: 126.95
19:12:44.489 -> Sent data to Thingspeak
19:12:45.793 -> Server responded:
19:12:50.809 -> HTTP/1.1 200 OK
19:12:50.809 -> Date: Sat, 18 Dec 2021 17:12:44 GMT
19:12:50.856 -> Content-Type: text/plain; charset=utf-8
19:12:50.909 -> Content-Length: 4
19:12:50.909 -> Connection: close
19:12:50.956 -> Status: 200 OK
19:12:50.956 -> X-Frame-Options: SAMEORIGIN
19:12:51.009 -> Access-Control-Allow-Origin: *
19:12:51.009 -> Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
19:12:51.110 -> Access-Control-Allow-Headers: origin, content-type, X-Requested-With
19:12:51.156 -> Access-Control-Max-Age: 1800
19:12:51.210 -> ETag: W/"c5de86654f0e517de7569a0bf4313903"
19:12:51.257 -> Cache-Control: max-age=0, private, must-revalidate
19:12:51.310 -> X-Request-Id: d0fa9679-c08f-4b48-8af8-24ad1eccb041
19:12:51.357 -> X-Runtime: 0.027916
19:12:51.411 -> X-Powered-By: Phusion Passenger 4.0.57
19:12:51.411 -> Server: nginx/1.9.3 + Phusion Passenger 4.0.57
19:12:51.457 -> 3457
19:12:51.511 -> Delay of 30 Sec

Май няма надежден начин ESP-то да определи дали има изобщо wifi, да не говорим, ако нещо рутера го реже. Другото чудене е защо и двете едновременно се бъгват #-o . Не мисля в посока на ограничения на интернета от доставчика, защото в моментите на спиране, устройствата ги няма във wi-fi мрежата. Сори че го пиша за десети път това, но е доста показателно и базово, според мен.
След няколко дни ще имам възможност да ги пробвам на друго място, ако е нещо от моя рутер да знам.
brum - майстор
До сега не съм имал проблем с рутерите. А съм ползвал 4 различни и отделно съм дал няколко устройства на познати, като оплаквания не е имало.

Пусни ping-ове от компютър към ESP-тата и виж дали ще забележиш някаква закономерност. Ако ping-овете изчезват, то най-вероятно рутера върти номера.

И още един въпрос. С какво IDE работи и виждаш ли някъде детайли относно версиите на библиотеките (arduino-то) които използваш? Съмнява ме да си инсталирал нещо старо с бъгави библиотеки, ама да не изключваме този вариант.

Може да се добави логика за управление на wifi-я и рестартирането. Ако примерно има 2 поредни неуспешни опита за пращане на данни да разкачи и закачи наново WiFi-я. Ако станат примерно 4 неуспешни опита - да рестартира ESP-то. Ако искаш да пробваш в този вариант пиши и утре ще допиша loop-а.

Ама и двете устройства да изчезват едновременно говори за външни проблеми. Та подозирам, че ще се окажеш прав за рутера. Обърни внимание след пускане на устройствата колко време работят и после колко време не работят.
floydogi - специалист
Пробвай частта с WiFi така:

Код: Избери всички

WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
  //The ESP8266 tries to reconnect automatically when the connection is lost
  WiFi.setAutoReconnect(true);
  WiFi.persistent(true);
Преди и аз имах проблеми с губене на WiFi, особено след спиране на захранването, но с добавките на последните 2 реда нещата заспаха.
radius - майстор
Пинга към ESP-тата изчезва, когато не пращат данни, няма ги и в wi-fi клиентите (писах появяват се за секунди и изчезват). От вчера следобед имат по 1 едновременно прекъсване, този път обаче не съвпада повторното им закачане към рутера.
Едното спира в 1:39 , другото в 1:43. После първото се закача в 4:29, второто в 3:30. Досега имаше съвпадение на липсите. Мога да видя версиите на библиотеките и да пробвам кода на floydogi, но утре.
А най-просто да видя в друга мрежа как се държат, че много ми е съмнителна работата, въпреки уж хубавия рутер (ползвам му и ax стандарта за телефона, да не е някой beamforming примерно да обърква нещата).
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 11

Тема "Онлайн температурен мониторинг" | Включи се в дискусията:


Сподели форума:

Бъди информиран. Следвай "Направи сам" във Facebook:

Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook: