Zapis danych za pomocą ESP do bazy danych MySQL


Ten artykuł zaprezentuje Ci w jaki sposób dokonać zapisu danych za pomocą płytek z ESP8266 w bazie danych MySQL.

Ja do prezentacji użyję klona płytki WeMos D1 Mini ale kod przedstawiony w tym poradniku będzie działać dla wszystkich płytek których sercem jest ESP8266, np WeMos D1, NodeMCU i wielu innych.

Lista potrzebnych elementów:

  • Płytka z ESP8266 (w przykładzie użyty WeMos D1 Mini)
  • Dowolny serwer WWW obsługujący PHP
  • Dowolny serwer MySQL

Lista elementów dodatkowych:

  • Płytka stykowa
  • Przewody
  • Przycisk
  • Termometr DS18B20
  • Rezystor 4,7kΩ

Zacznijmy od utworzenia bazy danych w MySQL gdzie zaczniemy od utworzenia tabeli o nazwie “test” która będzie zawierać kolumny o nazwach “ID” z włączoną opcją Auto Increment, “Dane1″ i” Dane2″ z ustawionym typem zmiennej text. Gotowa tabela powinna wyglądać tak jak na załączonym obrazku:

Tabelę można dodać np. w popularnym phpMyAdmin który znajdziemy w większości hostingów lub w mniej popularnym lubianym prze zemnie lekkim skrypcie Adminer.

Teraz utworzymy plik PHP który będzie dodawać dane do naszej bazy danych, plik nazwiemy add.php oraz umieścimy go na serwerze WWW.

[pastacode lang=”php” manual=”%3C%3Fphp%0A%24servername%20%3D%20%22mysql.ct8.pl%22%3B%20%2F%2FAdres%20serwera%20MySQL%0A%24username%20%3D%20%22m2969_tutorial%22%3B%20%2F%2FNazwa%20konta%20u%C5%BCytkownika%20MySQL%0A%24password%20%3D%20%22Tutorial123%22%3B%20%2F%2FHas%C5%82o%20do%20konta%20u%C5%BCytkownika%20MySQL%0A%24dbname%20%3D%20%22m2969_tutorial%22%3B%20%2F%2FNazwa%20bazy%20danych%0A%20%0A%24conn%20%3D%20new%20mysqli(%24servername%2C%20%24username%2C%20%24password%2C%20%24dbname)%3B%20%2F%2FUtworzenie%20po%C5%82%C4%85czenia%20z%20MySQL%0A%0Aif%20(%24conn-%3Econnect_error)%20%7B%20%2F%2FSprawdzenie%20po%C5%82%C4%85czenia%20z%20MySQL%0A%20%20%20%20die(%22Connection%20failed%3A%20%22%20.%20%24conn-%3Econnect_error)%3B%20%2F%2FWy%C5%9Bwietlenie%20informacji%20o%20problemie%20z%20po%C5%82%C4%85czeniem%0A%7D%0A%0A%24a%20%3D%20%24_GET%5B%22a%22%5D%3B%20%2F%2FOdebranie%20danych%20wys%C5%82anych%20przez%20ESP%0A%24b%20%3D%20%24_GET%5B%22b%22%5D%3B%20%2F%2FOdebranie%20danych%20wys%C5%82anych%20przez%20ESP%0A%0A%24sql%20%3D%20%22INSERT%20INTO%20test%20(Dane1%2C%20Dane2)%0A%20VALUES%20(‘%24a’%2C%20’%24b’)%22%3B%20%0A%20%2F%2FW%20pierwszej%20lini%20nast%C4%99puje%20zdefiniowanie%20nazwy%20tabeli%20oraz%20kolumn%20do%20kt%C3%B3rych%20maj%C4%85%20zosta%C4%87%20dodane%20dane%0A%20%2F%2Fa%20w%20drugiej%20definiowanie%20danych%20kt%C3%B3re%20zostan%C4%85%20dodane%20to%20tabeli%0A%0A%20%2F%2F%20%20Mo%C5%BCna%20to%20polecenie%20tak%C5%BCe%20zapisa%C4%87%20w%20formie%20jednej%20lini%20ale%20polecam%20pozosta%C4%87%20przy%20zapisie%20w%20dw%C3%B3ch%20liniach%20poniewa%C5%BC%20jest%20bardziej%20przejrzysty%0A%20%2F%2F%20%20%24sql%20%3D%20%22INSERT%20INTO%20test%20(Dane1%2C%20Dane2)%20VALUES%20(‘%24a’%2C%20’%24b’)%22%3B%20%0A%20%0Aif%20(%24conn-%3Equery(%24sql)%20%3D%3D%3D%20TRUE)%20%7B%20%2F%2FSprawdzenie%20czy%20dane%20zosta%C5%82y%20poprawnie%20dodane%20do%20tabeli%0A%20%20%20%20echo%20%22Rekord%20zostal%20dodany%20poprawnie!%22%3B%20%2F%2FWy%C5%9Bwietlenie%20komunikatu%20o%20powodzeniu%0A%7D%20else%20%7B%0A%20%20%20%20echo%20%22Error%3A%20%22%20.%20%24sql%20.%20%22%3Cbr%3E%22%20.%20%24conn-%3Eerror%3B%20%2F%2FWy%C5%9Bwietlenie%20komunikatu%20o%20niepowodzeniu%20wraz%20z%20informacjami%20na%20temat%20b%C5%82%C4%99du%0A%7D%0A%20%0A%24conn-%3Eclose()%3B%20%2F%2FZamkni%C4%99cie%20po%C5%82%C4%85czenia%20z%20MySQL%0A%3F%3E” message=”” highlight=”” provider=”manual”/]

Teraz w celu przetestowania czy poprawnie skonfigurowaliśmy skrypt PHP możemy wejść na naszą stronę zawierającą plik php.
Po wejściu na stronę powinniśmy ujrzeć komunikat “Rekord zostal dodany poprawnie!” a w bazie danych powinien pojawić się pusty wiersz posiadający ID 1 tak jak na załączonej grafice.

Zapis do bazy danych od strony serwera mamy już gotowy, teraz nadszedł czas na zaprogramowanie naszego ESP.

A więc zacznijmy od przykładu który po uruchomieniu ESP wyśle do bazy danych wartość zwróconą przez millis() oraz napis test.

[pastacode lang=”c” manual=”%23include%20%3CESP8266WiFi.h%3E%20%2F%2Fdodanie%20biblioteki%20odpowiedzialnej%20za%20komunikacje%20WiFi%0A%23include%20%3CESP8266WiFiMulti.h%3E%20%2F%2Fdodanie%20biblioteki%20odpowiedzialnej%20za%20komunikacje%20WiFi%0A%23include%20%3CESP8266HTTPClient.h%3E%20%2F%2Fdodanie%20biblioteki%20odpowiedzialnej%20za%20komunikacje%20WiFi%0AESP8266WiFiMulti%20WiFiMulti%3B%20%2F%2FUtworzenie%20zmiennej%20przechowujacej%20dane%20o%20sieci%20WiFi%0A%0Avoid%20setup()%20%7B%0A%09Serial.begin(115200)%3B%20%2F%2FUruchomienie%20polaczenia%20o%20szybkosci%20115200%0A%09WiFiMulti.addAP(%22NazwaSieciWiFi%22%2C%20%22HasloDoSieciWiFi%22)%3B%20%2F%2FUstalenie%20danych%20do%20polaczenia%20z%20WiFi%0A%09while%20((WiFiMulti.run()%20!%3D%20WL_CONNECTED))%20%7B%20%2F%2Foczekiwanie%20na%20polaczenie%0A%09%09Serial.print(%22.%22)%3B%20%2F%2Fwyswietlanie%20kropek%20w%20czasie%20oczekiwania%20na%20polaczenie%0A%09%09delay(200)%3B%20%2F%2Fodczekanie%20200ms%20do%20kolejnego%20sprawdzenia%20czy%20upolaczono%20z%20siecia%0A%09%7D%0A%09if%20((WiFiMulti.run()%20%3D%3D%20WL_CONNECTED))%20%7B%20%2F%2Fsprawdzenie%20czy%20polaczono%20z%20siecia%0A%09%09HTTPClient%20http%3B%20%2F%2Fustalenie%20zmiennej%20polaczenia%20jako%20klijent%0A%09%09String%20content%20%3D%20%22http%3A%2F%2Fstrona.pl%2Fadd.php%3Fa%3D%22%3B%20%2F%2Futworzenie%20zmiennej%20kt%C3%B3rej%20zawarto%C5%9B%C4%87%20zostanie%20potem%20wykorzystana%20do%20polaczenia%2C%20nalezy%20tutaj%20zmienic%20adres%20z%20%22strona.pl%22%20na%20adres%20naszej%20strony%0A%09%09content%20%2B%3D%20millis()%3B%20%2F%2Fdodanie%20danych%20do%20zmiennej%0A%0A%09%09content%20%2B%3D%20%22%26b%3D%22%3B%20%2F%2Fdodanie%20danych%20do%20zmiennej%0A%09%09content%20%2B%3D%20%22test%22%3B%20%2F%2Fdodanie%20danych%20do%20zmiennej%0A%0A%09%09Serial.print(%22%5BHTTP%5D%20begin…%5Cn%22)%3B%20%2F%2Fwyswietlenie%20komunikatu%20o%20oczekiwaniu%20na%20odpowiedz%20serwera%0A%09%09http.begin(content)%3B%20%2F%2Fwykonanie%20polaczenia%20z%20wykorzystaniem%20zmiennej%0A%09%09int%20httpCode%20%3D%20http.GET()%3B%20%2F%2Fodczytywanie%20informacji%20o%20polaczeniu%20z%20strona%0A%09%09if%20(httpCode%20%3E%200)%20%7B%20%2F%2Fsprawdzenie%20czy%20polaczenie%20z%20strona%20nastapilo%20poprawnie%0A%09%09%09Serial.printf(%22%5BHTTP%5D%20GET…%20code%3A%20%25d%5Cn%22%2C%20httpCode)%3B%20%2F%2Fwyswietlenie%20kodu%20polaczenia%0A%09%09%09if%20(httpCode%20%3D%3D%20HTTP_CODE_OK)%20%7B%20%2F%2Fsprawdzanie%20czy%20strona%20cos%20zwrocila%0A%09%09%09%09String%20payload%20%3D%20http.getString()%3B%20%2F%2Fodczytanie%20informacji%20zwroconych%20przez%20strone%0A%09%09%09%09Serial.println(payload)%3B%20%2F%2Fwyswietlanie%20informacji%20zwroconych%20przez%20strone%0A%09%09%09%7D%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09Serial.printf(%22%5BHTTP%5D%20GET…%20failed%2C%20error%3A%20%25s%5Cn%22%2C%20http.errorToString(httpCode).c_str())%3B%20%2F%2Fwyswietlenie%20bledu%20jesli%20polaczenie%20nie%20nastapilo%20poprawnie%0A%09%09%7D%0A%09%09http.end()%3B%20%2F%2Fzakonczenie%20polaczenia%0A%09%7D%0A%7D%0A%0Avoid%20loop()%20%7B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

Po wgraniu tego kodu w monitorze portu szeregowego powinniśmy ujrzeć podobne informacje jak ja:

“………..[HTTP] begin…
[HTTP] GET… code: 200
Rekord zostal dodany poprawnie!”

A w bazie danych powinny zostać dodane informacje (liczba może się różnić):

Teraz czas na bardziej praktyczny przykład, dodawanie danych do bazy po wciśnięciu przycisku.

Przycisk podpinamy do GND oraz pinu D5 a termometr do GND, 3,3V oraz pinu D6, między D6 a 3,3V wpinamy rezystor 4,7kΩ, na załączonym obrazku użyłem wodoodpornej wersji termometru DS18B20.

Po podłączeniu przychodzi czas na napisanie programu:

[pastacode lang=”c” manual=”%23include%20%3CESP8266WiFi.h%3E%0A%23include%20%3CESP8266WiFiMulti.h%3E%0A%23include%20%3CESP8266HTTPClient.h%3E%0AESP8266WiFiMulti%20WiFiMulti%3B%0A%0A%23include%20%3COneWire.h%3E%0A%23include%20%3CDallasTemperature.h%3E%0A%23define%20ONE_WIRE_BUS%20D6%0AOneWire%20oneWire(ONE_WIRE_BUS)%3B%0ADallasTemperature%20sensors(%26oneWire)%3B%0A%0Avoid%20setup()%20%7B%0A%09sensors.begin()%3B%0A%09Serial.begin(115200)%3B%0A%09WiFiMulti.addAP(%22NazwaSieciWiFi%22%2C%20%22HasloDoSieciWifi%22)%3B%0A%09while%20((WiFiMulti.run()%20!%3D%20WL_CONNECTED))%20%7B%0A%09%09Serial.print(%22.%22)%3B%0A%09%09delay(200)%3B%0A%09%7D%0A%09pinMode(D5%2C%20INPUT_PULLUP)%3B%0A%7D%0Aint%20dodania%20%3D%200%3B%0Avoid%20loop()%20%7B%0A%09if%20(digitalRead(D5)%20%3D%3D%20LOW)%7B%0A%09%09if%20((WiFiMulti.run()%20%3D%3D%20WL_CONNECTED))%20%7B%0A%09%09%09dodania%20%3D%20dodania%20%2B%201%3B%0A%09%09%09sensors.requestTemperatures()%3B%0A%09%09%09HTTPClient%20http%3B%0A%09%09%09String%20content%20%3D%20%22http%3A%2F%2Fstrona.pl%2Fadd.php%3Fa%3D%22%3B%0A%09%09%09content%20%2B%3D%20sensors.getTempCByIndex(0)%3B%0A%0A%09%09%09content%20%2B%3D%20%22%26b%3D%22%3B%0A%09%09%09content%20%2B%3D%20dodania%3B%0A%0A%09%09%09Serial.print(%22%5BHTTP%5D%20begin…%5Cn%22)%3B%0A%09%09%09http.begin(content)%3B%0A%09%09%09int%20httpCode%20%3D%20http.GET()%3B%0A%09%09%09if%20(httpCode%20%3E%200)%20%7B%0A%09%09%09%09Serial.printf(%22%5BHTTP%5D%20GET…%20code%3A%20%25d%5Cn%22%2C%20httpCode)%3B%0A%09%09%09%09if%20(httpCode%20%3D%3D%20HTTP_CODE_OK)%20%7B%0A%09%09%09%09%09String%20payload%20%3D%20http.getString()%3B%0A%09%09%09%09%09Serial.println(payload)%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09else%20%7B%0A%09%09%09%09Serial.printf(%22%5BHTTP%5D%20GET…%20failed%2C%20error%3A%20%25s%5Cn%22%2C%20http.errorToString(httpCode).c_str())%3B%0A%09%09%09%7D%0A%09%09%09http.end()%3B%0A%09%09%7D%0A%09%7D%0A%7D” message=”” highlight=”” provider=”manual”/]

Ja u mnie wcisnąłem przycisk 4 razy co w efekcie dało nam 4 zapisy temperatury.

Napiszmy więc teraz skrypt PHP który odczyta te dane i wyświetli na stronie, a więc zacznijmy od utworzenia pliku read.php

[pastacode lang=”php” manual=”%3Chtml%3E%0A%20%20%20%20%3Chead%3E%0A%20%20%20%20%20%20%20%20%3Ctitle%3ETutorial%3C%2Ftitle%3E%0A%20%20%20%20%3C%2Fhead%3E%0A%20%20%20%20%3Cbody%3E%0A%09%09%3C%3Fphp%0A%09%09%24servername%20%3D%20%22mysql.ct8.pl%22%3B%0A%09%09%24username%20%3D%20%22m2969_tutorial%22%3B%0A%09%09%24password%20%3D%20%22Tutorial123%22%3B%0A%09%09%24dbname%20%3D%20%22m2969_tutorial%22%3B%0A%09%09%24conn%20%3D%20new%20mysqli(%24servername%2C%20%24username%2C%20%24password%2C%20%24dbname)%3B%0A%09%09if%20(%24conn-%3Econnect_error)%20%7Bdie(%22Connection%20failed%3A%20%22%20.%20%24conn-%3Econnect_error)%3B%7D%0A%09%09%24sql%20%3D%20%22SELECT%20id%2C%20dane1%2C%20dane2%20FROM%20test%20ORDER%20BY%20id%20DESC%20LIMIT%20100%22%3B%0A%09%09%24result%20%3D%20%24conn-%3Equery(%24sql)%3B%0A%09%09if%20(%24result-%3Enum_rows%20%3E%200)%20%7B%0A%09%09%09echo%20’%3Ctable%20cellspacing%3D%220%22%20border%3D%221%22%20rules%3D%22rows%22%20bordercolor%3D%22black%22%3E’%3B%0A%09%09%09echo%20’%3Ctr%3E%0A%09%09%09%09%09%3Ctd%20width%3D%22100px%22%20bgcolor%3D%22silver%22%20align%3D%22center%22%3EID%3A%3C%2Ftd%3E%0A%09%09%09%09%09%3Ctd%20width%3D%22100px%22%20bgcolor%3D%22gray%22%20align%3D%22center%22%3EDane1%3A%3C%2Ftd%3E%0A%09%09%09%09%09%3Ctd%20width%3D%22100px%22%20bgcolor%3D%22silver%22%20align%3D%22center%22%3EDane2%3A%3C%2Ftd%3E%0A%09%09%09%09%3C%2Ftr%3E’%3B%0A%09%09%09while(%24row%20%3D%20%24result-%3Efetch_assoc())%20%7B%0A%09%09%09%09echo%20’%3Ctr%3E%0A%09%09%09%09%09%09%3Ctd%20bgcolor%3D%22silver%22%20align%3D%22center%22%3E’%20.%20%24row%5B%22id%22%5D.%20’%3C%2Ftd%3E%0A%09%09%09%09%09%09%3Ctd%20bgcolor%3D%22gray%22%20align%3D%22center%22%3E’%20.%20%24row%5B%22dane1%22%5D.’%3C%2Ftd%3E%0A%09%09%09%09%09%09%3Ctd%20bgcolor%3D%22silver%22%20align%3D%22center%22%3E’%20.%20%24row%5B%22dane2%22%5D.%20%22%3C%2Ftd%3E%0A%09%09%09%09%09%3C%2Ftr%3E%22%3B%0A%09%09%09%7D%0A%09%09%09echo%20%22%3C%2Ftable%3E%22%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09echo%20%220%20results%22%3B%0A%09%09%7D%0A%09%09%24conn-%3Eclose()%3B%0A%09%09%3F%3E%0A%20%20%20%20%3C%2Fbody%3E%0A%3C%2Fhtml%3E” message=”” highlight=”” provider=”manual”/]

Po wejściu na stronę ujrzymy taką o to tabelkę:

I to by było na tyle w dzisiejszym poradniku, dziękujemy za zainteresowanie naszymi poradnikami. 🙂

Poprzednia informacja BUDUJEMY FREZARKĘ CNC CZ. 1
Kolejna informacja Polak potrafi - Wspieramy młodych

Brak komentarzy

Zostaw odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *