ESP8266 (ESP-01)WiFi Manager a posílání teploty

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

ESP8266 (ESP-01)WiFi Manager a posílání teploty

#1 Příspěvek od markoni »

Tady jsem našel WiFi Manager https://www.arduinoslovakia.eu/blog/201 ... er?lang=cs
Já jsem to upravil takto označeno ************* je to dobře? zatím nevím jak předávat SSID a PASSWORD ale to zatím neřeším
GPIO0 je na ESP-01 je při programování musí být na LOW ,jak zapojit tlačítko mám tam dát jako Pull UP odpor na zem nebo na 3V3 nebo to je zapnuto tímto pinMode(TRIGGER_PIN, INPUT_PULLUP)? díky


#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <DNSServer.h>
//http://www.urel.feec.vutbr.cz/MPOA/2015/esp8266-ds18b20
#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS); // Inicializace DS18B20 na pinu GPIO2
DallasTemperature DS18B20(&oneWire);

*********** #define TRIGGER_PIN 0 //GPIO0 na ESP8266 ESP-01 ***************
const char* ssid = " "; // Nastavení připojení k síti
const char* password = " ";

const char* host = "api.thingspeak.com"; // Informace pro připojení k thingspeak.com
const char* APIkey = "";

bool scnd = false;
void setup() {
// put your setup code here, to run once:
***** pinMode(TRIGGER_PIN, INPUT_PULLUP);********
***** if(digitalRead(TRIGGER_PIN) == LOW) {***********
***** WiFiManager wifiManager; ***********
***** wifiManager.startConfigPortal("ArduinoAP");*********

**** }***********

Serial.begin(115200); // Otevření komunikace po sériové lince
delay(10);

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

WiFi.begin(ssid, password); // Inicializace připojení k síti

while (WiFi.status() != WL_CONNECTED) { // Potvrzení připojení k síti
delay(500);
Serial.print(".");

}


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



}

void loop() {
// put your main code here, to run repeatedly:
delay(30000); // Měření a odesílání teploty probíhá v intervalu cca 30s

float temp;

DS18B20.requestTemperatures(); // Získání informace o teplotě teploty
temp = DS18B20.getTempCByIndex(0);
Serial.print("Temperature: ");
Serial.println(temp);

char charVal[12];

dtostrf(temp, 8, 2, charVal); // Konverze vyčtené teploty do stringu
// (hodnota, počet míst, počet desetinných míst,
// umístění stringu)
if(scnd){

Serial.print("connecting to ");
Serial.println(host);

WiFiClient client;

const int httpPort = 80;

if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}

String url = "/update?key="; // Vytvoření URL pro odeslání informace o teplotě
url += APIkey;
url += "&field1=";
url += charVal;

Serial.print("Requesting URL: ");
Serial.println(url);

// Odeslání požadavku na server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(10);

Serial.println();
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line); // tisk informací přijatých ze serveru
}

Serial.println();
Serial.println("connection completed"); // potvrzení ukončení odesílání
Serial.println();
Serial.println();
}
else
{
Serial.println("uncorrect first temperatue");
Serial.println(); // Ošetření nesprávnosti první změřené hodnoty po připojení
scnd=true; // k napájení
}
}
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#2 Příspěvek od Le_Ze »

Když jsem přežraný salátu a ryb, tak mi to nepřemýšlí, ale jen první postřeh.

GPIO0 je na ESP-01 je při programování musí být na LOW.

Takže víš, že když připojíš na GPIO0 LOW, přepne se ti to do stavu programovaní.
A níže máš if(digitalRead(TRIGGER_PIN) == LOW)
Co se asi stane, když připojíš na ten pin GPIO0 LOW a resetneš to?
Ale možna se mylim :(
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#3 Příspěvek od markoni »

já vím že se to asi nastaví na programovacího módu ale u toho modelu ESP-01 nemáš na výběr na GPIO2 je připojené čidlo DS18B20,já bych se nejraději obešel bez tlačítka ale jak to udělat aby si mohl vynutit kdykoliv skočit do módu AP? díky
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#4 Příspěvek od Le_Ze »

Ono zaleží na co to máš.
Když budu mít ESP-01 někde na chatě a pokud se nepřipojí třeba za 5 minut, tak se spustí ten WiFi Manager je kravina.

To tlačítko je tak nejlepší nápad.
Ale nějak to ošetřit a ne to nacpat přimo do void setup.

By mělo stačit to dat do

Kód: Vybrat vše

while (WiFi.status() != WL_CONNECTED) { // Potvrzení připojení k síti 
delay(500);
Serial.print(".");
}


https://arduino.stackexchange.com/quest ... -gpio-pins
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#5 Příspěvek od markoni »

Můžeš mi poskytnou upravený příklad včetně těch proměnných ssid, password o které ve své podstatě jde uložení a pak následné dosazení do toho měřiče teploty už na tím trávím mnoho času a mám to u PC jako vrabčí hnízdo díky předem
V tom odkazu je změna GPIO a to jde? 8O
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#6 Příspěvek od Le_Ze »

Nemužu, jsem na chatě a mam jen mobil.
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#7 Příspěvek od markoni »

To tak nespěchá až budeš mít čas a předem díky
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#8 Příspěvek od Le_Ze »

prostě cele to if(digitalRead(TRIGGER_PIN) == LOW) atd. překopiruj tam, kde jsem ti předtim napsal - nad delay(500)

Bude kontrolovat zda maš na tom pinu LOW, až když se nedude moct připoji.
Neznam ten WiFi Manager, tak musiš zkusit.
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#9 Příspěvek od markoni »

Tak asi a tu knihovnu wifimanager tady podívej se na to předem díky
Přílohy
WiFiManager-master.zip
(38.71 KiB) Staženo 247 x
WifiManager.jpg
WifiManager.jpg
Uživatelský avatar
pocitujlasku
Příspěvky: 2764
Registrován: 12 pro 2005, 00:00
Bydliště: SR, Poprad

#10 Příspěvek od pocitujlasku »

ja to mam riesene tak, ze po zapnuti sa spusti rezim ap+ klient. ked sa pripoji na klienta, tak ap vypne. ak pocas behu sa odpoji od wifi automaticky opat nabieha do stavu ap+ klient. teda bud je normalne pripojeny na wifi, alebo pripojenie zlyhalo a je v rezime ap a vtedy sa viem nan pripojit a nastavit.
momentalne nemam tie zdrojaky pri sebe, ale je to par riadkov a da sa to vygooglit. len mala pripomienka, ak je tam delay 30 sekund, tak cely program stoji, teda sa nan neda pripojit. ja to riesim tak, ze si ukladam cas, a ten kontrolujem, ci uz je viac ako 30 sekund. a vtedy viem jednak reagovat hned na stav wifi a aj dokazem obsluhovat stranku
No vidis, a tak si sa bal
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#11 Příspěvek od Le_Ze »

Psal jsem, cele to IF.
Toto zpatky.
pinMode(TRIGGER_PIN, INPUT_PULLUP);

a jak psal pocitujlasku, delay(30000) je blbost.
Zjistiš teplotu, odešleš ji, a pak na 30 sekund tu ESP-01 zastavič.

Kód: Vybrat vše

unsigned long time = millis();
int toggle = 1;

void loop() {
   if(millis()-time > 30000)     
  {   
   // co je tady, se vykona každých 30 sekund
    time = millis();           
  }
}
p32
Příspěvky: 16427
Registrován: 13 led 2007, 00:00

#12 Příspěvek od p32 »

Přitom by stačilo změřenou hodnotu dát do pomocné proměnné (na začátku nulové) a potom ji s ní porovnávat dokud se nezmění anebo až neuběhne nějaký minimální čas a potom teprve posílat.
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#13 Příspěvek od markoni »

něco jako takto

Kód: Vybrat vše

if(millis()-time > 30000)

    float temp;
 
    DS18B20.requestTemperatures();               // Získání informace o teplotě teploty
    temp = DS18B20.getTempCByIndex(0);
    Serial.print("Temperature: ");
    Serial.println(temp);
 
    char charVal[12];
 
    dtostrf(temp, 8, 2, charVal);                // Konverze vyčtené teploty do stringu
                                                 // (hodnota, počet míst, počet desetinných míst,
                                                 // umístění stringu)
  if(scnd){
 
    Serial.print("connecting to ");
    Serial.println(host);
 
    WiFiClient client;
 
    const int httpPort = 80;
 
    if (!client.connect(host, httpPort)) {
      Serial.println("connection failed");
      return;
    }
 
    String url = "/update?key=";                // Vytvoření URL pro odeslání informace o teplotě
    url += APIkey;
    url += "&field1=";
    url += charVal;       
 
    Serial.print("Requesting URL: ");
    Serial.println(url);
 
                                                 // Odeslání požadavku na server
    client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n\r\n");
    delay(10);
 
    Serial.println();
    while (client.available()) {
      String line = client.readStringUntil('\r');
      Serial.print(line);                        // tisk informací přijatých ze serveru
    }
 
    Serial.println();
    Serial.println("connection completed");      // potvrzení ukončení odesílání
    Serial.println();
    Serial.println();
   }
   else
   {
    Serial.println("uncorrect first temperatue");
    Serial.println();                            // Ošetření nesprávnosti první změřené hodnoty po připojení
    scnd=true;                                   // k napájení
   }                                             
  }}

ale předáván těch parametrů SSID a heslem mezi WiFiManagerem a vlastním odesíláním teploty vůbec nevím jak řešit ,WiFiManager to někde uloží v paměti asi v eeprom po resetu ESP najede vlastní program co posílá teplotu na server ale musí někde najít ty přístupové parametry co uložil ten WiFiManager v eeprom aby se přihlásil k wifi síti
Uživatelský avatar
Le_Ze
Příspěvky: 775
Registrován: 24 črc 2014, 00:00
Bydliště: Ano, mam

#14 Příspěvek od Le_Ze »

Tak na 5" mobilu moc zázraky ode mně neočekávej.
Vyzkoušej a uvidíš. Až Ti něco nepůjde, tak se ozvi.

Jsem kdysi zkoušel ten WiFi Manager, ale moc spokojeny nebyl, tak jsem to moc neřešil.
Jsem to zkoušel na ESP8266 NodeMcu a zabere to 65% paměti.
Uživatelský avatar
markoni
Příspěvky: 2312
Registrován: 30 říj 2006, 00:00
Bydliště: Poblíž Zlína
Kontaktovat uživatele:

#15 Příspěvek od markoni »

tento příklad funguje ale musím zadat mě údaje do wifi sítě

Kód: Vybrat vše

/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-esp8266-input-data-html-form/
 
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
 
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

#include <Arduino.h>
#ifdef ESP32
  #include <WiFi.h>
  #include <AsyncTCP.h>
#else
  #include <ESP8266WiFi.h>
  #include <ESPAsyncTCP.h>
#endif
#include <ESPAsyncWebServer.h>

AsyncWebServer server(80);

// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

const char* PARAM_INPUT_1 = "input1";
const char* PARAM_INPUT_2 = "input2";
const char* PARAM_INPUT_3 = "input3";

// HTML web page to handle 3 input fields (input1, input2, input3)
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
  <title>ESP Input Form</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  </head><body>
  <form action="/get">
    input1: <input type="text" name="input1">
    <input type="submit" value="Submit">
  </form><br>
  <form action="/get">
    input2: <input type="text" name="input2">
    <input type="submit" value="Submit">
  </form><br>
  <form action="/get">
    input3: <input type="text" name="input3">
    <input type="submit" value="Submit">
  </form>
</body></html>)rawliteral";

void notFound(AsyncWebServerRequest *request) {
  request->send(404, "text/plain", "Not found");
}

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("WiFi Failed!");
    return;
  }
  Serial.println();
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  // Send web page with input fields to client
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });

  // Send a GET request to <ESP_IP>/get?input1=<inputMessage>
  server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    String inputParam;
    // GET input1 value on <ESP_IP>/get?input1=<inputMessage>
    if (request->hasParam(PARAM_INPUT_1)) {
      inputMessage = request->getParam(PARAM_INPUT_1)->value();
      inputParam = PARAM_INPUT_1;
    }
    // GET input2 value on <ESP_IP>/get?input2=<inputMessage>
    else if (request->hasParam(PARAM_INPUT_2)) {
      inputMessage = request->getParam(PARAM_INPUT_2)->value();
      inputParam = PARAM_INPUT_2;
    }
    // GET input3 value on <ESP_IP>/get?input3=<inputMessage>
    else if (request->hasParam(PARAM_INPUT_3)) {
      inputMessage = request->getParam(PARAM_INPUT_3)->value();
      inputParam = PARAM_INPUT_3;
    }
    else {
      inputMessage = "No message sent";
      inputParam = "none";
    }
    Serial.println(inputMessage);
    request->send(200, "text/html", "HTTP GET request sent to your ESP on input field ("
                                     + inputParam + ") with value: " + inputMessage +
                                     "<br><a href=\"/\">Return to Home Page</a>");
  });
  server.onNotFound(notFound);
  server.begin();
}

void loop() {
 
}


ale já potřebuji aby to vystupovalo jako AP abych si jeho jméno mohl vyvolat na telefonu a přihlásit se k tomu a tam do formuláře zadat ty údaje k té které síti bych to potřeboval nehledě k tomu ten příklad neřeší uložení údajů díky
Přílohy
ESPForm.jpg
ESPForm.jpg
Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“