Daten Per ESP 8226 Senden

Hallo bin noch relativ Neu im Bereich microcontroller und will zugleich mal einiges in erfahrung bringen. Wegen eines Projektes in dem wir Can daten aus einem Auto auslesen und dann per W-lan an einen PC übertragen wollen, brauch ich Infos Bezüglich nutzbarer Libarys. Welche nutze ich am besten um zwischen Arduino und ESP zu Kommunizieren und welche Pins nutze ich zur Kommunikation? (Mega 2560).

Hab alles soweit das ich wenn ich RXO= Pin0 Und TXO=Pin1 nehme kann ich per AT Command den ESP Steuern. Nur Per serial.println Schreibt er mir die sachen in den Seriellen Monitor aber Verarbeitet diese nicht... Muss ich dbgSerial Nutzen ??

freue mich über jede Hilfe.

Der Mega hat 4 Hardware Serials.

Serial ist vom die USB belegt.
Klemm den ESP an Serial1, Serial2 oder, Serial3, egal...

OK also dann nehme ich RX1=pin 18 TX1= Pin19. habe diese jetzt über Kreutz an den ESP Angeschlossen.
Sehe ich das Richtig das dbgSerial für die Kommunikation zwischen 2 bauteilen verantworlich ist und somit für mich im Serial Monitor Nicht sichtbar ?

hänge mal das Momentante Script an. bekomme leider immer nur “Module doesn´t Respond” raus…

#include <SoftwareSerial.h>
SoftwareSerial dbgSerial(18, 19);

void setup() {
Serial.begin(115200);
Serial.setTimeout(5000);
dbgSerial.begin(115200);

dbgSerial.println(“AT+RST”);
delay(3000);

if(dbgSerial.find(“ready”)) {
Serial.println(“WiFi – Module is ready”);
}else{
Serial.println(“Module dosn’t respond.”);
while(1);
}
}

void loop() {
// put your main code here, to run repeatedly:

}

Software Serial raus! Du hast 4 Hardware Schnittstellen

Wenn du Serial1 verwendest, dann machst du Serial1.begin(...), Serial1.print(), etc.

Ok Also gar kein Softwareserial..

also ist Serial.println dann meine Ausgabe Am Monitor und Serial.println1 wäre die ausgabe an Pin 18 und 19.

Funktioniert Trotzdem nicht...

void setup() {
Serial.begin(115200);
Serial.setTimeout(5000);
Serial1.begin(115200);

Serial1.println("AT+RST");
delay(3000);

if(Serial1.find("ready")) {
Serial.println("WiFi – Module is ready");
}else{
Serial.println("Module dosn’t respond.");
while(1);
}
}

Wie kommst du auf: 115200 ?

naja mit 115200 kann ich auf dem monitor richtig lesen was passiert mit anderen geschwindigkeiten kommen nur komische zeichen raus... ist es zu schnell ? habs jetzt grad auch nochmal mit 9600 probiert leider auch erfolglos...

Funktioniert das " if(Serial1.find("ready")) " denn überhaupt wenn ich das nicht sehen kann auf meinem Monitor ? Passiert das selbe auch auf TX1 wie auf meinem Seriellen Monitor den ich per USB anschaue nur das ich es nicht sehe ?

Funktioniert das " if(Serial1.find("ready")) " denn überhaupt

Guter Ansatz!!

Erst mal raus damit, bis du weißt, was das überhaupt tut.
Bau erst mal eine 1:1 Durchreiche von Serial zu Serial1. Um zu sehen, ob da überhaupt was kommt.

Also 1 zu 1 funktiniert es einwandfrei.

void setup() {
Serial.begin(115200);
Serial.setTimeout(5000);
Serial1.begin(115200);

Serial1.println("hallo");
delay(3000);
if(Serial1.find("hallo")) {
Serial.println("WiFi – Module is ready");
}else{
Serial.println("Module dosn’t respond.");
while(1);
}
}

bekomme als antwort module is ready

also kann ja nur was mit der Kommunikation Zwischen arduino und ESP Nicht stimmen...

wenn ich das so lese, würde ich dir raten, 20 Schritte zurück zu gehen und dich erstmal mit grundsätzlichen Dingen vertaut zu machen. Stichwort ESP8266 Firmware, usb-serial Adapter, AT befehlsatz, etc. Wenn dir das alles nichts sagt, dann nochmals 20 Schritte weiter zurück. Ist jetzt nicht böse oder herablassend gemeint, aber wenn dann noch Canbus, blockierungsfreies Programmieren usw. dazukommt, hast du es wesentlich einfacher, wenn du die Basics aus dem FF kannst.

firmware ist die neuste drauf auf dem ESP... dass ich weiß was die AT Befehle sind sollte aus den ersten Posts heraus zulesen sein.. und was soll ich denn noch mit einem usb serial adapter...? ich nutze dafür den arduino...

eben. Und da fängt es ja schon an. Mit ohne Arduino hast du mal schon beim Austesten des ESP8266 eine große Fehlerquelle weniger. Was du als Sketch gepostet hast, ist völlig unbrauchbar.
Weisst du mit wieviel Baud der läuft? Welche FW ist drauf? Hast du die passende AT Tabelle davon?
Funktioniert der ESP8266 generell? hast du ihn schon mal manuell in dein Wlan eingeloggt?

Die Baudraten müssen passen. Für den Serial Monitor kannst du frei wählen. Du musst es lediglich am PC richtig einstellen. Bei anderen Geräten musst du auf dem Arduino die richtige Baudrate wählen.

Durchschleifen geht so:

void loop()
{
   if(Serial.available())
      Serial1.write(Serial.read());

   if(Serial1.available())
      Serial.write(Serial1.read());
}

Damit wird was man am PC eingibt direkt an die andere Schnittstelle durchgereicht und anders herum

https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference

ist die AT tabelle

FIrmware:

AT version:0.25.0.0(Jun 5 2015 16:27:16)
SDK version:1.1.1
Ai-Thinker Technology Co. Ltd.
Jun 5 2015 23:07:20

Per Monitor kann ich alle At befehle eingeben und sie Funktionieren hab ihn auch schon mit meinem w-lan verbunden und auch als Accespoint genutzt... also funktion gegeben...

per Monitor läuft er auf 115200.

Und wo ist dann das Problem?

Ich meine jetzt ausser deinem Sketch aus Post #4 ? Weil der ist nämlich Mist.

Was ist den daran mist ? Wie würdest du es machen ? Was fehlt ? Das Problem mit dem sketch ist ja das er das eingegebene im monitor printet aber der esp nicht drauf reagiert. Wenn ich den kram im monitor von hand eingebe funktioniert es ja auch nur wenn ich ein bare minimum sketch aufgespielt habe.

lass dir im Sketch über eine nichtblockierende Routine die Antwort vom ESP8266 auf den seriellen Monitor ausgeben. Dann siehst du ja, ob “Ready” drin ist oder was er so von sich gibt.

KEIN delay() im Programmcode verwenden!

So das Problem hat sich gerade erledigt habe den schnluss des ESP von serial 1 auf serial 3 geändert da Script angepasst und es funktioniert... komische sache... naja jetzt muss ich erstmal ne möglichkeit/libary finden die daten an einen Server zu senden.

Bin bei meiner Arbeit mit dem ESP auf diese library gestoßen.
Hab sie dann aber nicht verwendet, da ich den esp selbst programmiert habe, also kann ich dir nicht vielo darüber berichten :slight_smile:
Hat aber schon fertige funtkionen was zumindest etwas arbeit spart, wenn es denn funktioniert, was es auch sollte.

das nächste problem was ich habe ist das ich bei den AT Commandos die SSID und das Passwort von meinem Router in " setzen muss also AT+CWJAP= "SSID","PW"

wenn ich aber per Serial.println("AT+CWJAP="SSID","PW"") mache hab ich ja die printeingabe schon nach dem CWJAP=" geschlossen und bekomme fehler...

würde das jetzt gerne per #define lösen aber verstehe noch nicht so ganz wie ich das anwende.
vor derm Void Setup mach ich das so :

#define SSID "FRITZ!Box 6360 Cable"
#define PASS "mein passwort"

und im commando so

Serial3.println("AT+CWJAP=SSID,PASS");

aber die SSID und das Passwort werden nicht eingefügt. muss ich noch etwas anderes tun damit es funktioniert ?