Arduino ESP2866 i SQL

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
greg54
Młodszy majsterkowicz
Posty: 4
Rejestracja: 17 sie 2018, 22:23

Arduino ESP2866 i SQL

Post autor: greg54 » 18 sie 2018, 10:23

Poszukuje rozwiązania problemy z połączeniem arduino z sql
chccę by esp laczyl sie z baza danych i pobierał dane z konkretnej komórki np: 1 lub 0
a tym samym zapisywał je w swojej pamieć jako zmienna.

bez problemu zapisuje mi temperatury date igodzine przez plik php ale nie mam pojecia jak to zrobic w druga strone

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Bob2462
Majsterkowicz
Posty: 79
Rejestracja: 13 mar 2016, 00:11

Re: Arduino ESP2866 i SQL

Post autor: Bob2462 » 18 sie 2018, 14:46

Wystarczy, że w skrypcie PHP użyjesz instrukcji echo.
Powoduje ona wysłanie danej wartości do klienta.

Np:

Kod: Zaznacz cały

$number = 10;
echo "Hello world! $number";
Po uruchomieniu tego skryptu w przeglądarce wyświetli ci się "Hello world! 10".
Po stronie arduino musisz po prostu odczytać odpowiedź i ją przetworzyć.
greg54
Młodszy majsterkowicz
Posty: 4
Rejestracja: 17 sie 2018, 22:23

Re: Arduino ESP2866 i SQL

Post autor: greg54 » 18 sie 2018, 22:49

rozumiem ale czy możesz podpowiedzieć w jaki sposób odczytać te dane z arduino ? jakis przykładowy skrypt?
Bob2462
Majsterkowicz
Posty: 79
Rejestracja: 13 mar 2016, 00:11

Re: Arduino ESP2866 i SQL

Post autor: Bob2462 » 19 sie 2018, 20:22

Jakie biblioteki do obsługi ESP8266 masz zainstalowane?
Jeśli się nie mylę to prawdopodobnie jest tam biblioteka ESP8266HTTPClient.
Jeśli tak to możesz wypróbować przykład BasicHTTPClient.

Kod: Zaznacz cały


/**
   BasicHTTPClient.ino
    Created on: 24.05.2015
*/

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;

void setup() {

  USE_SERIAL.begin(115200);
  // USE_SERIAL.setDebugOutput(true);

  USE_SERIAL.println();
  USE_SERIAL.println();
  USE_SERIAL.println();

  for (uint8_t t = 4; t > 0; t--) {
    USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
    USE_SERIAL.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("SSID", "PASSWORD");

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    HTTPClient http;

    USE_SERIAL.print("[HTTP] begin...\n");
    http.begin("http://192.168.1.12/test.html"); //HTTP

    USE_SERIAL.print("[HTTP] GET...\n");
    // start connection and send HTTP header
    int httpCode = http.GET();

    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

      // file found at server
      if (httpCode == HTTP_CODE_OK) {
        String payload = http.getString();
        USE_SERIAL.println(payload);
      }
    } else {
      USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
    }

    http.end();
  }

  delay(10000);
}

Odpytuje on serwer i odbiera odpowiedź.
Odpowiedź powinna znaleźć się w postaci tekstu w zmiennej payload.
greg54
Młodszy majsterkowicz
Posty: 4
Rejestracja: 17 sie 2018, 22:23

Re: Arduino ESP2866 i SQL

Post autor: greg54 » 20 sie 2018, 01:55

ok ale nie widze tu skladni która wskazywała by na konkretny text, co do bibliotek to

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>

myslałem że jest szansa by sie dostac bezposrednio z arduino do sql-a i pobrać dane z jednej z komórek tak by było znacznie prościej.
Bob2462
Majsterkowicz
Posty: 79
Rejestracja: 13 mar 2016, 00:11

Re: Arduino ESP2866 i SQL

Post autor: Bob2462 » 20 sie 2018, 14:28

Pewnie się tak też da ale dawanie klientowi bezpośredniego dostępu do bay danych jest bardzo złą i niebezpieczną praktyką. Prościej i bezpieczniej jest napisać API (Aplication Interface) w PHP które będzie odbierało żądania od arduino a następnie pobierało i zwracało odpowiednią wartość.

Po stronie skryptu musisz pobrać parametry żądania za pomocą metody GET (parametr zapisany w linku) lub POST (parametr wysyłany w żądaniu) a następnie pobrać odpowiednią komórkę z bazy danych i zwrócić ją przy pomocy instrukcji echo.

Czy mógłbyś wstawić to co już napisałeś (skrypt PHP i program arduino)?
Najprawdopodobniej wystarczą tylko niewielkie modyfikacje tak żeby dodać tą funkcjonalność.
Awatar użytkownika
ethanak
Złota rączka
Posty: 772
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Arduino ESP2866 i SQL

Post autor: ethanak » 20 sie 2018, 15:02

Można się dostać bezpośrednio do SQL-a.
Nie wiem co tam masz po stronie serwera (pewnie MySQL, bo wszyscy początkujący HGW WHY uważają że to jedyny słuszny serwer i MySQL to to samo co SQL), ale poszukaj sobie w googlu "esp8266 mysql connector" - gdzieś tam na pierwszej stronie masz link do githuba. Niestety - konektor ma pewne problemy bo autor zapomniał o zaimplementowaniu pełnej reprezentacji protokołu.
Jeśli to PostgreSQL - jest moja biblioteka. Sprawdzona, działa.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
ODPOWIEDZ

Strony partnerskie: