Skocz do zawartości

sitar

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O sitar

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Dziękuję serdecznie, to rozwiązało problem. Na ogół warto brać biblioteki od razu bezpośrednio z GitHuba, czy te dostępne w IDE są w miarę na bieżąco?
  2. Dzień dobry, od wczoraj męczę się z uruchomieniem MySQL Connector na ESP32. Samo połączenie z WiFi działa, dodanie bibliotek MySQL_Connection.h i MySQL_Cursor.h generuje błędy już podczas kompilacji: In file included from C:\Users\sitar\Documents\Arduino\libraries\MySQL_Connector_Arduino\src/MySQL_Packet.h:36:0, from C:\Users\sitar\Documents\Arduino\libraries\MySQL_Connector_Arduino\src/MySQL_Connection.h:37, from C:\Users\sitar\Desktop\connectwifi\connectwifi.ino:2: C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:258:2: error: invalid abstract return type 'EthernetClient' EthernetClient available(); ^ C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:214:7: note: because the following virtual functions are pure within 'EthernetClient': class EthernetClient : public Client { ^ In file included from C:\Users\sitar\Documents\Arduino\hardware\espressif\esp32\cores\esp32/Arduino.h:151:0, from sketch\connectwifi.ino.cpp:1: C:\Users\sitar\Documents\Arduino\hardware\espressif\esp32\cores\esp32/Client.h:31:17: note: virtual int Client::connect(IPAddress, uint16_t, int) virtual int connect(IPAddress ip, uint16_t port, int timeout) =0; ^ C:\Users\sitar\Documents\Arduino\hardware\espressif\esp32\cores\esp32/Client.h:32:17: note: virtual int Client::connect(const char*, uint16_t, int) virtual int connect(const char *host, uint16_t port, int timeout) =0; ^ In file included from C:\Users\sitar\Documents\Arduino\libraries\MySQL_Connector_Arduino\src/MySQL_Packet.h:36:0, from C:\Users\sitar\Documents\Arduino\libraries\MySQL_Connector_Arduino\src/MySQL_Connection.h:37, from C:\Users\sitar\Desktop\connectwifi\connectwifi.ino:2: C:\Program Files (x86)\Arduino\libraries\Ethernet\src/Ethernet.h:259:2: error: invalid abstract return type 'EthernetClient' EthernetClient accept(); ^ Znaleziono wiele bibliotek w "WiFi.h" Wykorzystane: C:\Users\sitar\Documents\Arduino\hardware\espressif\esp32\libraries\WiFi Niewykorzystane: C:\Program Files (x86)\Arduino\libraries\WiFi exit status 1 Błąd kompilacji dla płytki DOIT ESP32 DEVKIT V1. Profilaktycznie przeinstalowałem całe Arduino IDE i zainstalowałem ESP zgodnie z instrukcją na GitHubie. MySQL Connector zainstalowany z IDE. Jakieś pomysły, jak sobie z tym poradzić? Skromny, a już nie działający kod: #include <WiFi.h> #include <MySQL_Connection.h> #include <MySQL_Cursor.h> const char* ssid = "login"; const char* password = "haslo"; //WiFiClient client; //MySQL_Connection conn(&client); //MySQL_Cursor* cursor; void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); } Serial.println("Connected to the WiFi network"); } void loop() { }
  3. @ethanak może źle się wyraziłem, tzn. wszystkie moduły działają na logice i zasilaniu 3,3V. Jedynie FC-37 zwraca 5 V, a PMS3003 potrzebuje zasilania 5 V, ale to żaden problem
  4. @ethanak rozumiem uszczypliwość, ale tym zdaniem raczej chciałem odrzucić Arduino Mega Na 5 V właściwie jest tylko FC37, ewentualnie chciałem dorzucić wentylator z kompa jako czujnik wiatru (12 V), ale to nie będzie problem. Tak to jeszcze PMS3003 działa na logice 3,3 V, ale potrzebuje zasilania 5 V. Dla ścisłości pozwolę się jeszcze dopytać, bo jestem nieco zagubiony we wszystkich wersjach - może być ta wersja spod tego LINKU?
  5. @ethanak no dobra, cena ESP nie jest problemem. Obecnie zależy mi na czymś, co najprościej będzie podmienić zamiast Arduino Uno i doprowadzenia do działającego stanu. A skoro zmieniać platformę, to najlepiej coś z wbudowanym ESP. Jako, że jestem początkującym użytkownikiem Arduino, to tym bardziej mam średnie rozeznanie w innych platformach Z czym pokrótce muszę się mierzyć przy przesiadce na ESP32? Złącza analogowe wykorzystuje się jak w Arduino? Dla modułów działających na 5V wystarczy dorzucić dwukierunkowy konwerter 5V<-->3.3V? @FlyingDutch Liczę, że większość będzie się dało dostosować, bo to jednak popularne czujniki
  6. @ethanak @FlyingDutch dzięki Panowie za odpowiedź. Czy zmieniając platformę, nie łatwiej będzie przejść na wspomniane przeze mnie NodeMCU v3? Jest tańsze i mniejsze od Waszych propozycji i ma 4MB flash. Nie wiem tylko jak to do końca wygląda z portami, obecnie wykorzystuję 5 analogowych (w tym A4, A5 do I2C), i 6 cyfrowych nie licząc ESP (w tym I2C i RX, TX do Seriala). Jeśli wyrzucę jedno złączę, to będzie akurat na styk z tymi 10x GPIO, czy są jakieś obostrzenia z nimi związane?
  7. Dzień dobry! Tworzę własną stację meteo na platformie Arduino. Wykorzystuję do tego kilka czujników: ESP-01 - wysyłanie danych na serwer MySQL DS18B20 - temperatura otoczenia BMP280 - ciśnienie (tylko) DHT22 - wilgotność (tylko) ML8511 - UV PMS3003 - zanieczyszczenie powietrza FC37 - deszcz MLX90614 - mierzę temperaturę gdy jest wycelowany w niebo, do informacji o zachmurzeniu. Dane mają zostać odczytane i wysłane na serwer. Problem w tym, że nie mieszczę się z wszystkim w pamięci. Po napisaniu kodu (poniżej) dostaję komunikat: Mimo, że jeszcze nie pojawia się komunikat o dużym wykorzystaniu pamięci, to kod nie działa, tzn. nie łączy się z bazą danych. Skąd teza, że to przez brak pamięci? Po usunięciu z kodu wszystkiego związanego np. z BMP280 ten sam program zajmuje już 66% pamięci programu i 66% pamięci dynamicznej, a połączenie z bazą jest nawiązane normalnie. Warto zauważyć, że do bazy jeszcze nawet nie wpisuję zebranych danych, bo przykładowy insert dla biblioteki MySQL Connector zawiera tablice charów i funkcje dtostrf() i sprintf(), których użycie już całkowicie zajmuje miejsce i zgłasza ostrzeżenie o możliwej niestabilności programu. Również nie wiem jak to rozwiązać bardziej pamięciooszczędnie. Zdecydowanie najwięcej pamięci zabiera część odpowiedzialna za komunikację (ESP i MySQL Connector). Może da się łatwo odchudzić biblioteki ze zbędnych funkcji, których nie wykorzystuję w kodzie, szczególnie, że w BMP i DHT nie korzystam ze wszystkich sensorów? Dodam tylko, że nigdy wcześniej nie pisałem nic w C++, więc pewnie wykorzystywanie niektórych funkcji jest w tym przypadku niezalecane. Jest inne rozwiązanie poza przesiadką na NodeMCU? Kod: #include <WiFiEsp.h> //ESP #include <SoftwareSerial.h> //ESP #include <MySQL_Cursor.h> //ESP, MySQL #include <Adafruit_MLX90614.h> //MLX #include <Adafruit_BMP280.h> //BMP #include <DHT.h> //DHT #include <DS18B20.h> //DS byte sensorAddress[8] = {0x28, 0xAA, 0x55, 0xE, 0x41, 0x14, 0x1, 0xCC}; //DS adress OneWire onewire(5); //DS PIN DS18B20 ds(&onewire); int UVOUT = A1; //ML PINS int REF_3V3 = A2; Adafruit_MLX90614 mlx = Adafruit_MLX90614(); Adafruit_BMP280 bmp; unsigned char bufor [23]; //PMS int PM25 = 0, PM10 = 0; int wartoscPM25(unsigned char *thebuf); int wartoscPM10(unsigned char *thebuf); char sprawdzLancuch(unsigned char *thebuf, char leng); char ssid[] = "OWN_NETWORK"; // network SSID char pass[] = "12345#xD"; // network password char user[] = "arduino"; // MySQL user login username char password[] = ""; // MySQL user login password IPAddress server_addr(192,168,43,165); int status = WL_IDLE_STATUS; // the Wifi radio's status WiFiEspClient espclient; SoftwareSerial soft(2,3); // RX, TX DHT dht(4, DHT22); //DHTPIN DHTTYPE MySQL_Connection conn((Client *)&espclient); void setup() { Serial.begin(9600); // initialize serial for debugging soft.begin(115200); // initialize serial for ESP module soft.write("AT+UART_DEF=9600,8,1,0,0\r\n"); soft.begin(9600); mlx.begin(); bmp.begin(); dht.begin(); ds.begin(); pinMode(UVOUT, INPUT); pinMode(REF_3V3, INPUT); WiFi.init(&soft); // initialize ESP if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); // don't continue } while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to "); Serial.println(ssid); status = WiFi.begin(ssid, pass); } } void loop() { float skytemp = mlx.readObjectTempC(); //read skytemperature int pressure = bmp.readPressure()/100; //read pressure int humidity = dht.readHumidity(); //read humidity int rain = analogRead(A2); //read rain ds.request(sensorAddress); //read temperature while(!ds.available()); float temp = ds.readTemperature(sensorAddress); int uvLevel = averageAnalogRead(UVOUT); //read UV int refLevel = averageAnalogRead(REF_3V3); float outputVoltage = 3.3 / refLevel * uvLevel; float uvIntensity = mapfloat(outputVoltage, 0.99, 2.8, 0.0, 15.0); if(Serial.find(0x42)) //read air Serial.readBytes(bufor,23); if(bufor[0] == 0x4d){ PM25=wartoscPM25(bufor); PM10=wartoscPM10(bufor); } if (conn.connect(server_addr, 3306, user, password)) { //connect MySQL delay(1000); MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); cur_mem->execute("INSERT INTO weather.parameters (temperature, pressure, humidity, rain) VALUES (20, 1013, 50, 1);"); delete cur_mem; Serial.println("Data recorded."); conn.close(); } else { Serial.println("Connection failed."); } delay(180000); } int averageAnalogRead(int pinToRead) { byte numberOfReadings = 8; unsigned int runningValue = 0; for(int x = 0 ; x < numberOfReadings ; x++) runningValue += analogRead(pinToRead); runningValue /= numberOfReadings; return(runningValue); } float mapfloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } int wartoscPM25(unsigned char *buf) { int PM25v; PM25v=((buf[11]<<8) + buf[12]); return PM25v; } int wartoscPM10(unsigned char *buf) { int PM10v; PM10v=((buf[13]<<8) + buf[14]); return PM10v; }
  8. Z pomocą innej osoby udało mi się rozwiązać problem z łączeniem się do serwera. Wystarczyło zmienić baudrate ESP na 9600. Obecnie w rozwiązaniu ze skryptem PHP połączenie z serwerem jest nawiązane za każdym razem, skrypt się wykonuje, choć wciąż zgłasza błędy: [WiFiEsp] Data packet send error (2) [WiFiEsp] Failed to write to socket 3 [WiFiEsp] Disconnecting 3 W drugim rozwiązaniu z MySQL Connection należało poza zmianą baudrate jeszcze po udanym połączeniu wrzucić delaya. Połaczenie z bazą danych jest poprawne, kwerenda się wykonuje, pod jednym istotnym warunkiem - użytkownik nie posiada hasła. W innym wypadku połączenie z bazą danych kończy się odmową: [WiFiEsp] Connecting to 192.168.43.165 [WiFiEsp] TIMEOUT: 35 ERROR: Timeout waiting for client. Error: 80 = Access denied for user 'arduino'@'192.168.43.199' (using password: YES). Connection failed. Skłaniam się ku wnioskowi, że problem leży po stronie serwera, jednak wciąż nie udało mi się tego rozwiązać.
  9. Dzień dobry, jestem świeżym użytkownikiem forum jak i Arduino. Zwracam się z prośbą o pomoc w rozwiązaniu problemu. Chcę wysyłać dane z Arduino Uno przy pomocy modułu ESP8266-01 (piny 2 i 3) do serwera MySQL (Xampp) przy pomocy skryptu PHP na serwerze i metody GET. Po uruchomieniu kodu (załącznik) moduł łączy się z siecią, problem jest jednak w połączeniu z serwerem. Połączenie albo nie zostaje nawiązane w ogóle, albo w pierwszym obrocie pętli (czasem kilka pierwszych obrotów) łączy się z serwerem, ale zwraca błędy. Później już połączenie z serwerem nie zostaje nawiązane. Informacje z Serial Monitora: [WiFiEsp] Connecting to 192.168.43.165 !!!Connected!!! [WiFiEsp] >>> TIMEOUT >>> [WiFiEsp] Data packet send error (2) [WiFiEsp] Failed to write to socket 3 [WiFiEsp] Disconnecting 3 [WiFiEsp] >>> TIMEOUT >>> [WiFiEsp] Connecting to 192.168.43.165 [WiFiEsp] >>> TIMEOUT >>> --> connection failed [WiFiEsp] Connecting to 192.168.43.165 [WiFiEsp] >>> TIMEOUT >>> --> connection failed i tak dalej... Po przeszukaniu podobnych tematów na forach polsko- i angielskojęzycznych niestety nie znalazłem rozwiązania. Jako, że dopiero zaczynam przygodę z Arduino, być może błąd jest bezpośrednio w kodzie, a ja nie potrafię go wychwycić. Mój kod: #include <WiFiEsp.h> #include <WiFiEspClient.h> #include <WiFiEspUdp.h> #include <SoftwareSerial.h> #include <PubSubClient.h> #include <SPI.h> char ssid[] = "OWN_NETWORK"; // network SSID char pass[] = "12345678"; // network password char server[] = "192.168.43.165"; int status = WL_IDLE_STATUS; // the Wifi radio's status WiFiEspClient espclient; SoftwareSerial soft(2,3); // RX, TX void setup() { Serial.begin(115200);// initialize serial for debugging soft.begin(115200); // initialize serial for ESP module WiFi.init(&soft); // initialize ESP module delay(5000); if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); // don't continue } while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to "); Serial.println(ssid); status = WiFi.begin(ssid, pass); } } void loop() { if (espclient.connect(server, 80)) { Serial.println("!!!Connected!!!"); espclient.println("Connection: close\r\n"); espclient.println(); } else { Serial.println("--> connection failed\n"); } delay(5000); } Znalazłem natomiast informacje o bibliotece MySQL Connector, która pozwala na bezpośrednie połączenie z bazą danych i wykonanie kwerendy. Rozwiązanie wydaje się być lepsze, jednak tutaj podobnie utknąłem na etapie połączenia z bazą danych. Połączenie zupełnie nie jest nawiązywane, tzn. zwracane jest w kółko "Connecting to..." i timeout . Kod dla podglądu: IPAddress ip(192,168,43,199); IPAddress server_addr(192,168,43,165); char ssid[] = "OWN_NETWORK"; // network SSID char pass[] = "12345678"; // network password char user[] = "arduino"; // MySQL user login username char password[] = "haslo"; // MySQL user login password int status = WL_IDLE_STATUS; // the Wifi radio's status WiFiEspClient espclient; SoftwareSerial soft(2,3); // RX, TX MySQL_Connection conn((Client *)&espclient); void setup() { Serial.begin(115200); // initialize serial for debugging soft.begin(115200); // initialize serial for ESP module WiFi.init(&soft); // initialize ESP module delay(5000); if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); // don't continue } while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to "); Serial.println(ssid); status = WiFi.begin(ssid, pass); } } void loop() { if (conn.connect(server_addr, 3306, user, password)) { delay(2000); Serial.println("Print po udanym polaczeniu"); } else { Serial.println("Connection failed."); } delay(10000); } Niestety zmagam się z tym problemem od kilku dni i brakuje mi już pomysłów co może być nie tak. Ponadto dodam, że urządzenia w sieci się wzajemnie pingują, wchodząc na serwer przez telefon mogę uruchomić skrypt PHP, który działa poprawnie.
×