Skocz do zawartości

Arduino MEGA i BLYNK, LCD odchodzi do lamusa...


SOYER

Pomocna odpowiedź

Z kompa to się logujesz do phpmyadmina a nie do bazy.

Zrób na razie '%', zobacz czy się zaloguje, spróbuj paru przykładów (np. wrzuć coś do tabeli i spróbuj z ESP odczytać), ja muszę tymczasem jakiegoś ESP znaleźć i wlutować w płytkę.

Link do komentarza
Share on other sites

ok, przeinstalowałem całą malinkę, raspiana, apache, php, mysql. W phpmyadmin zrobiłem bazę meteo i dwie tabele mega i pms

Do mysql dołożyłem użytkownika 'jakistam'@'%' dałem mu all privileges na bazę meteo, ale esp z tym kodem nie zapisuje nic a nic:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

char ssid[] = "xx";
char pass[] = "xx";
IPAddress server_addr(192,168,254,100);  // IP of the MySQL *server* here
char user[] = "xxx";              // MySQL user login username
char password[] = "xxx"; 
char INSERT_SQL[] = "INSERT INTO mega (tempZew) VALUES ('100')";
WiFiClient client; 
MySQL_Connection conn((Client *)&client);

void setup() {
   Serial.begin(115200); 
  WiFi.begin(ssid, pass);
  Serial.println("ok");
  Serial.println("Connecting...");
  if (conn.connect(server_addr, 3306, user, password)) {
    Serial.println("sqlOK");
    delay(1000);
  }
  else
    Serial.println("Connection failed.");
}

void loop() {
  delay(2000);

  Serial.println("Recording data.");

  // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(INSERT_SQL);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;

}

connection failed....

GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO NAZWA_USERA;      <----tak to zrobilem, nie wyrzuciło błędów....(https://arkadiuszcwiek.pl/podglad-uprawnien-oraz-ustawienie-i-zamiana-hasel-w-bazie-danych-mysql/)

tensposób u mnie nie zadziałał:

15 godzin temu, ethanak napisał:

grant all on 'nazwa_bazy'.* to 'soyer'@'%';

 

Link do komentarza
Share on other sites

Ech... powiedz, kiedy Ty zaczniesz czytać całe rozdziały podręczników i całe kody przykładów, bo na razie wygląda na to, że kończysz w połowie i uważasz że to wystarczy...

Zacznijmy od tego, że próbujesz się połączyć z bazą danych nie mając połączenia z siecią, a to nie jest specjalnie dobry pomysł.

W kodzie masz::
 

WiFi.begin(ssid, pass);
Serial.println("ok");
Serial.println("Connecting...");
if (conn.connect(server_addr, 3306, user, password)) {  

No dobra, WiFi.begin zapoczątkowuje proces łączenia z siecią (zauważ: zapoczątkowuje jak mówi sama nazwa "begin", a nie łączy!). Czyli tak, jakbyś na swoim laptopie kliknął w "połącz". Jasne,

Teraz wypisujesz na serialu "ok". Jasne - polecenie zostało wydane, odpowiednik tego, że ikonka połączenia przedstawia jakieś kręcące się kółeczko (czy jak to tam u was w tych windowsach wygląda). Jasne.

Teraz wypisujesz na serialu "Connecting"). Trochę nie ma odpowiednika w laptopie... ale:

Teraz nie czekając aż kółeczko przestanie się kręcić próbujesz połączy się z bazą... jak? Telepatycznie? Magia jakaś?

No i dziwisz się, że Twój ESP odmawia połączenia z bazą...

Pewnie gdybyś poczekał na nawiązanie połączenia (to ta druga połowa rozdziału o wifi i ta linijka z przykłądu, którą uznałeś za niepotrzebną) połączenie by się powiodło (o ile wpisałeś prawidłowy adres IP). Czyli coś takiego (przeanalizuj to sobie i więcej nie pytaj, w dokumentacji masz wszystko wyjaśnione):

    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(SSID, PASS);
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
    }
    Serial.println("Connected");

Dobra, idziemy dalej.

Mówisz, że założyłeś bazę danych o nazwie "meteo"... a dlaczego nie informujesz serwera, na jakiej bazie ma operować? Arduinowy konektor nie ma możliwości wybrania bazy przy nawiązaniu połączenia, musisz to podać serwerowi. I teraz masz dwie możliwości. Możesz użyć polecenia USE:

  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  cur_mem->execute("USE meteo"); // tu wybierasz bazę
  delete cur_mem;

  cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(INSERT_SQL);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;

Możesz również - tak jak to było podane w przykładach, których uprzejmie do końca nie przeanalizowałeś - podać bazę bezpośrednio w poleceniu INSERT, czyli w Twoim przypadku będzie to:

char INSERT_SQL[] = "INSERT INTO meteo.mega (tempZew) VALUES ('100')";

Wtedy serwer będzie wiedział, w jakiej bazie ma szukać tabeli mega.

Ale nawet jeśli to poprawisz, i tak insert nie przejdzie.

Dlaczego?

Otóż o ile prawidłowo utworzyłeś bazę danych, wszystkie pola w tabeli mega są NOT NULL i nie mają wartości domyślnej. Jest to całkiem prawidłowe - bo musisz wstawić jakąś wartość, a nie możesz nadać jakiejś wartości domyślnej bo w przypadku pomiarów nie ma to żadnego sensu. Czyli musisz w poleceniu insert wstawić wszystkie wartości (oprócz oczywiście `czas` - bo to pole będzie automatycznie inicjalizowane aktualnym czasem).

Jeśli to poprawisz, polecenie powinno przejść...

Na zakończenie kod który wrzuciłem do mojego ESP i który bardzo ładnie wrzuca mi dane (na razie losowe) do bazy:

#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

#define SSID "*****"
#define PASS "*****"
#define MyUSER "*****"
#define MyPASS "*****"
#define MyDB "*****"

#define INSERT "insert into " MyDB ".pma(pm1,pm2,pm10) values(%d,%d,%d)"
WiFiClient client;
MySQL_Connection conn((Client *)&client);

IPAddress MyServer(192,168,0,1);

void setup()
{
    Serial.begin(9600);
    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(SSID, PASS);
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
    }
    Serial.println("Connected");

}


void storeData(int pm1, int pm2, int pm10)
{
    if (conn.connect(MyServer, 3306, MyUSER, MyPASS)) {
        char query[128];
        MySQL_Cursor *cursor = new MySQL_Cursor(&conn);
        sprintf(query,INSERT,pm1,pm2,pm10);
        cursor->execute(query);
        delete cursor;        
    }
    else {
        Serial.println("Connection failed");
    }
    conn.close();
}

void loop()
{
    int pm1, pm2, pm10;
    pm1 = random(10,100);
    pm2 = random(10,100);
    pm10 = random(10,100);
    storeData(pm1,pm2,pm10);
    delay(10000);
}

 

Tak przy okazji:

GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME@HOST;

To było dwie linijki niżej... przyznaj się, do tego już nie doczytałeś?

Edytowano przez ethanak
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Po kolei:

21 minut temu, ethanak napisał:

Pewnie gdybyś poczekał na nawiązanie połączenia (to ta druga połowa rozdziału o wifi i ta linijka z przykłądu, którą uznałeś za niepotrzebną) połączenie by się powiodło (o ile wpisałeś prawidłowy adres IP). Czyli coś takiego (przeanalizuj to sobie i więcej nie pytaj, w dokumentacji masz wszystko wyjaśnione):

wyrzuciłem ta linijkę z 

 

22 minuty temu, ethanak napisał:

while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); }

bo ciągle  wywalało mi te błędy które Ci wczoraj wkleiłem, a wiem, że esp jest sprawne i potrafisię połączyć, więc nie wiem skąd te błędy... zostawiłem same wifi.begin bo tak mam też w innym programie, tylko , że tam jeszcze dodatkowo są jeszcze inne funkcje po wifi.begin  w setypie które pewnia dają mu czs na połączenie...Np. taki fragment kodu i łączy bez problemu:

Wire.begin(D2,D1);
  Serial.begin(9600);   // GPIO1, GPIO3 (TX/RX pin on ESP-12E Development Board)
  swSer.begin(9600);
  WiFi.begin(ssid, pass);
  ArduinoOTA.setHostname("PMS5003_ESP");   
  ArduinoOTA.begin();  
 //rtc.adjust(DateTime(__DATE__, __TIME__));
  rtc.begin();
  pms.passiveMode();    // Switch to passive mode
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  pinMode(pin1silnika, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1
  pinMode(pin2silnika, OUTPUT);
  pinMode(pinFan, OUTPUT);
  digitalWrite(pinFan, HIGH);
  sekunda.begin(995);
  minutDwie.begin(120000);//spr. DHT
  sekundPiec.begin(4850);//przeł. one<->two
  sekundTrzydziesci.begin(9998);//po wybudzeniu PMS
  minutDziesiec.begin(300000);//uspienie PMS
  minuta.begin(10000);//went
  sekundDziesiec.begin(9689);//blynk run
  klapka.begin(3000);//klapka
  //minutPiec.begin(299895);
}

 

27 minut temu, ethanak napisał:

Mówisz, że założyłeś bazę danych o nazwie "meteo"... a dlaczego nie informujesz serwera, na jakiej bazie ma operować? Arduinowy konektor nie ma możliwości wybrania bazy przy nawiązaniu połączenia, musisz to podać serwerowi. I teraz masz dwie możliwości.

tak podejrzewąlem, że tu jest problem, ale analizą kodu z przykladów jak słusznie zauważyłeś się nie popisałem...

 

30 minut temu, ethanak napisał:

Otóż o ile prawidłowo utworzyłeś bazę danych, wszystkie pola w tabeli mega są NOT NULL i nie mają wartości domyślnej. Jest to całkiem prawidłowe - bo musisz wstawić jakąś wartość, a nie możesz nadać jakiejś wartości domyślnej bo w przypadku pomiarów nie ma to żadnego sensu. Czyli musisz w poleceniu insert wstawić wszystkie wartości (oprócz oczywiście `czas` - bo to pole będzie automatycznie inicjalizowane aktualnym czasem).

ok thx...

 

31 minut temu, ethanak napisał:

Tak przy okazji:


GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME@HOST;

To było dwie linijki niżej... przyznaj się, do tego już nie doczytałeś?

doczytałem....

chodziło mi o te "  `  " w twoim przykładzie...grant all on 'nazwa_bazy'.* to 'soyer'@'%';

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wiesz - jak się pisze z pamięci to można czasem błąd popełnić... nie powinno być apostrofów przy nazwie bazy, natomiast zalecane są przy nazwie użytkownika i hosta. Słowo PRIVILEGES jest nadmiarowe.

Ale w sumie fajnie że znalazłeś coś dobrego o MySQL-u.

To co, wrzucasz to w ESP i Arduino i sprawę zapisu danych uznajemy za zamkniętą?

Link do komentarza
Share on other sites

(edytowany)

wrzucam, zaraz obaczymy

@ethanakniestety:

#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

char ssid[] = "xx";
char pass[] = "xx";
IPAddress server_addr(192,168,254,100);  // IP of the MySQL *server* here
char user[] = "tomek";              // MySQL user login username
char password[] = "***"; 
char INSERT_SQL[] = "INSERT INTO meteo.pms (pm1,pm2,pm3) VALUES ('20','30','40')";
WiFiClient client; 
MySQL_Connection conn((Client *)&client);

void setup() {
   Serial.begin(115200); 
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
    }
    Serial.println("Connected WiFi");
 
  Serial.println("Connecting...sql");
  if (conn.connect(server_addr, 3306, user, password)) {
    Serial.println("sqlOK");
    delay(1000);
  }
  else
    Serial.println("Connection failed.");
}

void loop() {
  delay(2000);

  Serial.println("Recording data.");

  // Initiate the query class instance
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  // Execute the query
  cur_mem->execute(INSERT_SQL);
  // Note: since there are no results, we do not need to read any data
  // Deleting the cursor also frees up memory used
  delete cur_mem;

}

connection failed, łączy z wifi prawidlowo, ale cóś z sql nie teges...

próbowałem nawet zmienić ip na 192,168,0,1 próbuje dłużej ale efekt ten sam....

 

 

wgrałem Twój kod, z moimi danymi i to samo...

może nazwa usera powinno być coś więcej niż tomek... ?

Edytowano przez SOYER
Link do komentarza
Share on other sites

a) rozumiem że malinka ma adres 192.168.254.100

b) rozumiem, że istnieje użytkownik tomek@cośtam (gdzie owo cośtam to co innego niż localhost i pasuje do Twojej sieci - np. %) i ma ustawione prawidłowe hasło

Tak?

Bo 192.168.0.1 to serwer u mnie w domu i raczej się nie połączysz 😉

 

 

Link do komentarza
Share on other sites

No to musi działać...

Znajdź gdzieś coś co się nazywa mysql.exe (nie mam Windowsa więc nie pomogę, chyba z instalatora MySQL można wybrać "tylko klient") i spróbuj się z lapka podłączyć do serwera (lapek w tej samej sieci w której jest ESP):

mysql.exe -h192.168.254.100 -utomek -p

i zobacz co on tam wypisuje (powinien wypisać dlaczego się nie może połączyć)

Link do komentarza
Share on other sites

32 minuty temu, ethanak napisał:

Znajdź gdzieś coś co się nazywa mysql.exe

ale gdzie tego szukać?

na lapku?? my sql jest na rpi przecież, a z lapka bez problemu loguję się do phpmyadmin przez tomek i hasło....

Link do komentarza
Share on other sites

Wciórności - z lapka logujesz się do phpmyadmina a nie do bazy. Rozumiesz? phpmyadmin to taka aplikacja co się łączy z bazą danych i nie ma nic wspólnego z tym co chcemy zrobić. phpmyadmin służy do klikania myszką. phpmyadmin działa na tym samym hoście co mysql - dla mysql-a logowanie z phpmyadmina to logowanie z localhosta. A ty nie chcesz się zalogować z ESP do phpmyadmina bo on myszką klikać nie umie, tylko bezpośrednio do bazy. A do tego masz mieć użytkownika z uprawnieniami które mu na to pozwalają.

Rozumiesz?

A gdzie się szuka programów pod Windowsa to nie mam zielonego pojęcia - nie jest mi to do szczęścia potrzebne, na żadnej maszynie windowsa nie mam i nie przewiduję takowego. Za moich czasów to się wpisywało w google "mysql.exe download", ale może od tego czasu coś się zmieniło...

 

Link do komentarza
Share on other sites

(edytowany)

to trza napisać że mam znaleźć program mysql pod windowsa 

1 godzinę temu, ethanak napisał:

Znajdź gdzieś coś co się nazywa mysql.exe

😉

@ethanak

can't connect to mysql server on '192.168.254.100' (10061)

Edytowano przez SOYER
Link do komentarza
Share on other sites

czyli nie jest to kwestia użytkownika, a połączenia.

rozumiem, że z tej sieci możesz wejść na phpmyadmina? jeśli tak, to kwestia ustawień mysql-a (czy w ogóle słucha na sieciowym sockecie czy tylko na lokalnym).

nie masz przypadkiem jakiegoś firewalla na malince zainstslowanego?

Link do komentarza
Share on other sites

2 minuty temu, ethanak napisał:

nie masz przypadkiem jakiegoś firewalla na malince zainstslowanego?

Nie mam, 

2 minuty temu, ethanak napisał:

(czy w ogóle słucha na sieciowym sockecie czy tylko na lokalnym).

Jak to sprawdzić? 

@ethanak 

zawartość pliku etc/mysql/my.cnf:

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.