O mnie Kursy walut w NBP Rozkład jazdy PKP Animacje, czcionki, gify Wyszukiwarka Tłumacz językowy Czytelnia Stare czasopisma Krzyżówka Dzwonki na telefon Gry, zabawy, rozrywka Gry, zabawy, rozrywka Elektroniczne zestawy do samodzielnego montażu i nie tylko Test prędkości internetu




Zdalny odczyt czujnika


Zdalny odczyt czujnika z dowolnego miejsca na Ziemi (pod warunkiem że jest tam dostęp do internetu). Zasada przesyłania i pobierania danych:

Wykorzystamy do tego celu ESP32 (może być dowolny), czujnik DS18B20, router z uruchomioną siecią WiFi (2,4 GHz) w domu, biurze lub zakładzie pracy oraz skrypty php na serwerze. Podłączenie DS18B20 do ESP32:



DS w tym przykładzie jest podłączony pod D15. Można podłączyć pod inny pin tylko trzeba wtedy zmienić to w programie dla ESP.

W Arduino IDE muszą być zainstalowane 4 biblioteki: OneWire.h, DallasTemperature.h, WiFi.h oraz HTTPClient.h

Potrzebujemy jeszcze na serwerze www umieścić 2 skrypty php: Odbiorczy do którego ESP32 będzie wysyłać pomiary o nazwie zapistemp.php:




<?php

//if(isset($_GET['temperature'])) {//

$str = $_GET['temperature'];

if(!$fd = fopen("temp.txt", 'wb')){

echo("Nie mozna otworzyć");

}

else{

if(fwrite($fd, $str) === false){
echo("Nie zapisano");
}
else{
}
fclose($fd);
}
?>


oraz nadawczy z którego można odczytać liczbę o nazwie odczyttemp.php:

<?php
function getHits()
{
if(($fp = @fopen("temp.txt", "r+")) === false)
return false;
$count = fgets($fp);
return $count;
}
?>


Oba pliki php należy umieścić na serwerze www. U mnie są one umieszczone w katalogu android i podkatalogu postAtnel co widać w adresie https://www.jaglarz.info/android/postAtnel/zapistemp.php Pod ten adres dana jest wysyłana.

Jeśli wszystko będzie dobrze zrobione i wszystkie nazwy/ścieżki będa prawidłowe aktualne wyniki pomiarów można wyświetlić wywołując w przeglądarce adres https://www.jaglarz.info/android/postAtnel/odczyttemp.php

Jest tu wyświetlana temperatura w moim pokoju. Oczywiście wasz adres będzie inny. Zgodny z nazwą domeny oraz nazwą katalogów.

Można w ten sposób odczytywać dane z wszystkich czujników które da się odczytać przy pomocy mikrokontrolera - temperatury, wilgotności, ciśnienia, odległości, stany włączników/wyłączników, czujki podczerwieni.

Jeśli ktoś zna php + ewentualnie mySQL może sobie zrobić rejestrowanie danych o określonej godzinie, wykresy i inne cuda.

Wynik można pobrać z serwera wywołując w przeglądarce adres https://www.jaglarz.info/android/postAtnel/odczyttemp.php
Można także wynik pomiaru wyświetlać w aplikacji.





Link do aplikacji: http://www.jaglarz.info/android/postAtnel/result.apk

Aby sprawdzić działanie w ustawieniach należy wpisać/wkleić: www.jaglarz.info/android/postAtnel/odczyttemp.php

Przy własnych próbach należy w tym miejscu wkleić ścieżkę dostępu do własnego pliku php.

Wersja na minimum Android 7


Kod Arduino dla ESP32:

	
/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com  
*********/
 
#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFi.h>
#include <HTTPClient.h>

 
const char* ssid = "ESP32"; // Nazwa twojej sieci WiFi (tylko 2,4 GHz!)
const char* password = "m5hwhsGk_dupa_malkontenta_demt"; //hasło do twojej sieci WiFi
const char* serverName = "https://www.jaglarz.info/android/postAtnel/zapistemp.php?temperature=";
//powyższy adres musisz sobie dostosować do swojego ustawienia, nazwa domeny + katalogi + nazwa pliku php
 
  
// GPIO where the DS18B20 is connected to
const int oneWireBus = 15;    
 
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
 
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
 
int a = 0;
 
 
void setup() {
  Serial.begin(115200);
  sensors.begin();
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Łączenie z siecią Wi-Fi...");
  }
 
  Serial.println("Połączono z siecią Wi-Fi!");
}
 
 
void loop() {
 
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
 
    String serverPath = serverName;
 
    sensors.requestTemperatures();
    float temperatureC = sensors.getTempCByIndex(0);
 
      
    serverPath += temperatureC;
 
    http.begin(serverPath.c_str());
 
    int httpResponseCode = http.GET();
 
    if (httpResponseCode > 0) {
      Serial.print("Kod odpowiedzi HTTP: ");
      Serial.println(httpResponseCode);
      String response = http.getString();
      Serial.println(response);
    } else {
      Serial.print("Błąd wysyłania żądania: ");
      Serial.println(httpResponseCode);
    }
 
    http.end();
  } else {
    Serial.println("Błąd połączenia z siecią Wi-Fi");
  }
  
  delay(3000); //czas po którym na serwer zostanie wysłana następna dana, można ustawić dowolnie, jedną sekundę lub 10 minut - jak komu pasuje
 
  }