• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - odczyt pliku z sieci
#1
Witam. 

Znalazłem/przerobiłem sobie procedurę odczytu zawartości pliku tekstowego, który mam w pamięci NodeMcu.

Kod:
String readFile(String path) {
  String WhatIwillReturn;
  File file = SPIFFS.open(path, "r");
  if (!file) {
    Serial.println("Failed to open file for reading");
    WhatIwillReturn ="-1";
  }
  while (file.available()) {
    WhatIwillReturn =  file.readStringUntil('\r');
  }
  file.close();
  return WhatIwillReturn;
}


Jak to ugryźć, żeby odczytać taki plik z sieci? np. z serwera?

Pozdrawiam.
Tomek
 
Odpowiedź
#2
(05-04-2021, 20:11)pasiu76 napisał(a): Witam. 

Znalazłem/przerobiłem sobie procedurę odczytu zawartości pliku tekstowego, który mam w pamięci NodeMcu.

Kod:
String readFile(String path) {
  String WhatIwillReturn;
  File file = SPIFFS.open(path, "r");
  if (!file) {
    Serial.println("Failed to open file for reading");
    WhatIwillReturn ="-1";
  }
  while (file.available()) {
    WhatIwillReturn =  file.readStringUntil('\r');
  }
  file.close();
  return WhatIwillReturn;
}


Jak to ugryźć, żeby odczytać taki plik z sieci? np. z serwera?

Pozdrawiam.
Tomek
 
Odpowiedź
#3
 HTTPClient http;                                                                                 
 http.begin("http://jakasstrona.com/plik.txt");
 String bufor = http.getString();

 Serial.print(bufor);


Pliki w sieci są z reguły formatowane, jeśli to jakieś API to masz JSON (fajny parser), czasami ze znacznikami, jeśli to twój serwer WWW to jeszcze inaczej (event, async, ajax)
Co dokładnie chcesz i skąd pobrać ? Poniżej np. fragment mojego kodu dla ESP/ESP8266 który pobiera z serwera API dane pogodowe i rozbraja łańcuch znaków (STRINGA) do poszczególnych zmiennych, a dane są zapisywane do int, float, double, Strong - dobrodziejstwo JSON (nie martwimy się typami), pobiera go funkcja httpGETRequest(path.c_str()); gdzie patch to ścieżka źródła

Pełny kod (8000 linijek kodu) takiego mojego ostatniego projektu (własny serwer WWW z AJAKSEM, pobieranie danych z serwera weatherapi.com, ntp, do tego sterowanie smarphonem (Telegram), wysyłanie danych na THINSPEAK, wyswietlanie na MAX7219, sterowanie przekaznikami z komórki, www i nie pamietam co to jeszcze tam robi) znajdziesz na mojej grupie ESP32 : https://www.facebook.com/groups/1100373413801234

Kod:
    PrintMSG("ESP32","MyTask", "Aktualizję pogodę z serwera : api.weatherapi.com");
   
    String path = "http://api.weatherapi.com/v1/current.json?key=xxxxxxxxxx&q=Lubin&lang=pl";
    String jsonBuffer = httpGETRequest(path.c_str());   
       
    JSON_Weather = JSON.parse(jsonBuffer);                    

    if (JSON.typeof(JSON_Weather) == "undefined")                                                
    {                                                                                        
        PrintLine(60);
        PrintMSG("DarkNet", "POGODA PARSER", "BŁĄD, BRAK DANYCH" );                                                                  
    }     

    pogoda.miejscowosc                =   JSON_Weather["location"]["name"];
    pogoda.kraj                       =   JSON_Weather["location"]["country"];
    pogoda.szerokosc_geograficzna     =   JSON_Weather["location"]["lat"];
    pogoda.dlugosc_geograficzna       =   JSON_Weather["location"]["lon"];
    pogoda.id                         =   JSON_Weather["location"]["tz_id"];
    pogoda.czas_epoch                 =   JSON_Weather["location"]["localtime_epoch"];
    pogoda.czas_lokalny               =   JSON_Weather["location"]["localtime"];
    pogoda.ostatnia_aktualizacja      =   JSON_Weather["current"]["last_updated"];
    pogoda.temperatura_C              =   JSON_Weather["current"]["temp_c"];
    pogoda.temperatura_C_odczuwalna   =   JSON_Weather["current"]["feelslike_c"];
    pogoda.kondycja                   =   JSON_Weather["current"]["condition"]["text"];
    pogoda.predkosc_wiatru_kph        =   JSON_Weather["current"]["wind_kph"];
    pogoda.kierunek_wiatru_stopnie    =   JSON_Weather["current"]["wind_degree"];
    pogoda.kierunek_wiatru_kompas     =   JSON_Weather["current"]["wind_dir"];
    pogoda.podmuchy_wiatru            =   JSON_Weather["current"]["gust_kph"];
    pogoda.cisnienie                  =   JSON_Weather["current"]["pressure_mb"];
    pogoda.opady                      =   JSON_Weather["current"]["precip_mm"];
    pogoda.wilgotnosc                 =   JSON_Weather["current"]["humidity"];
    pogoda.zachmurzenie               =   JSON_Weather["current"]["cloud"];
    pogoda.widzialnosc                =   JSON_Weather["current"]["vis_km"];
    pogoda.index_uv                   =   JSON_Weather["current"]["uv"];

i funkcja pobierania z API Weather jako STRING 
Kod:
String httpGETRequest(const char* serverName)                                                        
{                                                                                                    
    HTTPClient http;                                                                                 
    http.begin(serverName);                                                                          
    int httpResponseCode = http.GET();                                                               
    String bufor = "{}";                                                                             
                                                                                                     
    if ( httpResponseCode > 0 )                                                                      
    {                                                                                                
        #if SERIAL
            //Serial.print("\nHTTP Response code: ");                                                  
            //Serial.print(httpResponseCode);                                                      
        #endif         
                                                                                     
        bufor = http.getString();                                                                    
    }                                                                                                
    else                                                                                             
    {                                                                                                
        #if SERIAL                                                                                 
            //Serial.print("Error code: ");                                                          
            //Serial.println(httpResponseCode);                                                      
        #endif                                                                                       
    }                                                                                               
    http.end();                                                                           
    return bufor;                                                                                    
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości