ESP8266 + arduino komunikacja przez port szeregowy - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: ESP8266 + arduino komunikacja przez port szeregowy (/watek-esp8266-arduino-komunikacja-przez-port-szeregowy) |
ESP8266 + arduino komunikacja przez port szeregowy - husc777@gmail.com - 27-02-2023 Witam. Mam następujący problem Póbuję przesłać dane z arduino do esp8266 przez port szeregowy. Niestety esp nie odczytuje danych. Port szeregowy softwarowy na pinach 3 i 4 esp (Rx,Tx). Hardwerowy ma te dane w celach kontrolnych przesłać do portu szeregowego na komputer. Dane pochodzą z czujniika dht11 podłączonego do arduino. Początkowo pin Tx z arduino podłączyłem do pinu 3 przez konwerter napięć z 5 v na 3,3 v była też próba przez dzielnik napięcia. Brak jakiego kolwiek odzczytu. Na pinie Tx z arduino po przyłożeniu voltomierza widniej wynik około 4,98V~`5V. kod arduino: #include <DHT.h> #define DHTPIN 2 // Digital pin connected to the DHT sensor #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); delay(10); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.print("Temperature: "); Serial.print(t); Serial.print(" °C, Humidity: "); Serial.print(h); Serial.println(" %"); Serial.print("Sending data to ESP8266: "); Serial.print(t); Serial.print(","); Serial.println(h); delay(5000); // Wait 5 seconds before sending next reading } kod wgrany do esp (nie mojego autorstwa): #include <SoftwareSerial.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <WiFiClientSecure.h> #include <WiFiServer.h> SoftwareSerial arduinoSerial(3, 4); // RX, TX const char* ssid = "ssid"; const char* password = "password"; const char* server = "api.thingspeak.com"; const char* apiKey = "your_APIKEY"; WiFiClient client; void setup() { Serial.begin(9600); arduinoSerial.begin(9600); delay(10); while (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { if (arduinoSerial.available()) { String data = arduinoSerial.readStringUntil('\n'); Serial.print("Received data from Arduino: "); Serial.println(data); int commaIndex = data.indexOf(','); if (commaIndex != -1) { String t = data.substring(0, commaIndex); String h = data.substring(commaIndex + 1); String url = "/update?api_key="; url += apiKey; url += "&field1="; url += t; url += "&field2="; url += h; url += "\r\n"; if (client.connect(server, 80)) { client.print("GET "); client.print(url); client.println("HTTP/1.1"); client.print("Host: "); client.println(server); client.println("Connection: close"); client.println(); client.stop(); } } } } Celem całego projeku jest przesłanie tych danych na stronę thingspeak po dodaniu wiekszej liczby czujników. Proszę o podanie możliwej przyczyny nie przesyłania danych. RE: ESP8266 + arduino komunikacja przez port szeregowy - MadMrQ - 27-02-2023 Kod: const char* ssid = ""; A teraz odnośnie transmisji: Kod: if (arduinoSerial.available()) { Skoro nic się w programie nie dzieje, znaczy to, że arduino.Serial.available() == 0. Czyli dane nie dochodzą do ESP. Skoro dane nie dochodzą do ESP to możemy jedynie wróżyć, co jest przyczyną... Kod: if (isnan(h) || isnan(t)) { Kod: Serial.print("Temperature: "); - W przypadku połączenia Arduino <-> ESP potrzebny jest konwerter poziomu napięć. - Podłączasz RX z Arduino z TX z ESP i druga linia TX -> RX. - Bardzo ważne jest połączenie mas obydwu urządzeń. - W przypadku wątpliwości działania spróbuj na prostym kodzie, gdzie ESP odbiera i przesyła do kompa w niezmienionej postaci. A tak w ogóle to po co w to mieszać Arduino? Nie lepiej jakieś NodeMCU? |