OBD2-Wifi-Dongle und NodeMCU

Hallo zusammen,

ich möchte mich mit einem NodeMCU per Wifi auf einen OBD2-Dongle (http://i.ebayimg.com/00/s/MjI1WDIyNQ==/z/E6IAAOSwnDZUC-6P/$_35.JPG?set_id=2) zugreifen.

Per Telnet auf dem Laptop klappt das prima mit folgenden Werten: IP: 192.168.10, Port: 35000, Subnet 255,255,255,0.

Jetzt möchte ich das auf den NodeMCU übertragen.
Folgenden Code habe ich bisher:

#include <ESP8266WiFi.h>
#include <Ethernet.h>

byte mac[] = { 0xEE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 123);
IPAddress server(192, 168, 0, 10);
IPAddress subnet(255, 255, 255, 0);
IPAddress gateway(0, 0, 0, 0);
EthernetClient client;
char SSIDName[] = "CLKDevices";

void setup() {
 WiFi.config(ip, gateway, subnet);
 Ethernet.begin(mac);
 Serial.begin(9600);
 Serial.println();
 Serial.println("Try to connect...");

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

 Serial.println("");
 Serial.println("WiFi connected");  
 Serial.print("IP address: ");
 Serial.println(WiFi.localIP());

 if (client.connect(server, 35000))
 {
   Serial.println("OBD2-DONGLE connected");
 } 
 else 
 {
   Serial.println("connection failed");
 }
}

void loop() 
{
}

Das Ergebnis im Serialmonitor ist aber immer “Wifi connectet” und dann “connection failed”.

Kann mir jemand sagen wo der Fehler liegt?

Danke vorab

Stelle Deinen Sketch bitte direkt ins Forum, wenn Du willst, dass ihn jemand liest. Benutze dazu Codetags (</> oben links).

Mit der angegebenen IP: 192.168.10 wird es garantiert nicht funktioniert haben.
Ein Datenblatt anstelle des Bildes vom Dongle wäre auch brauchbar.

Du solltest uns auch mitteilen, wie Du per Telnet zugegriffen hast.

Gruß Tommy

Tommy56:
Stelle Deinen Sketch bitte direkt ins Forum, wenn Du willst, dass ihn jemand liest. Benutze dazu Codetags (</> oben links).

Sorry, habe ich geändert.

Tommy56:
Mit der angegebenen IP: 192.168.10 wird es garantiert nicht funktioniert haben.
Ein Datenblatt anstelle des Bildes vom Dongle wäre auch brauchbar.

Das ist die IP auf der der Dongle liegt. Ein Datenblatt gibt es leider dazu nicht. Normalerweise wird das Ding nur für Handyapps benutzt. Habe nur eine Liste mit AT-Befehlen, die zum Steuern reichen.

Tommy56:
Du solltest uns auch mitteilen, wie Du per Telnet zugegriffen hast.

Habe eine ganz normale “Telnet” verbindung mit Putty auf 192.168.0.10:35000 eingerichtet.

192.168.0.10 ist etwas anderes, als 192.168.10 (das ist keine IP).

Hast Du nur Telnet geöffnet oder hast Du auch Kommandos abgesetzt?

Dein Laptop hat sich doch vorher mit hoher Wahrscheinlichkeit ins heimische Netz eingeklinkt.
Ich vermute einfach mal mangels besserer Informationen, dass der Dongle keinen Accesspoint für ein eigenes WLAN bereit stellt? Oder?

Es fehlen für mich einfach Infos.

Gruß Tommy

Tommy56:
192.168.0.10 ist etwas anderes, als 192.168.10 (das ist keine IP).

Das werde ich gleich korrigieren, war ein tippfehler hier im Forum. Im Code ist es richtig.

Tommy56:
Hast Du nur Telnet geöffnet oder hast Du auch Kommandos abgesetzt?

Ich habe auch Kommandos abgesetzt und Werte zurückbekommen welche ich entsprechend auch auswerten konnte.

Tommy56:
Dein Laptop hat sich doch vorher mit hoher Wahrscheinlichkeit ins heimische Netz eingeklinkt.
Ich vermute einfach mal mangels besserer Informationen, dass der Dongle keinen Accesspoint für ein eigenes WLAN bereit stellt? Oder?

Doch, das OBD-Dongle-Ding ist ein AP. Im Auto sitzend verbinde ich das Laptop mit dem AP und kann dann problemlos eine Verbindung per Telnet aufbauen.

Tommy56:
Es fehlen für mich einfach Infos.

Ich gebe mein Besten um alles aufzuklären.

Client.connect in meinem Code ist doch für HTTP, oder kann ich damit auch Telnet verbindungen aufbauen?

ihmSelbst:
Client.connect in meinem Code ist doch für HTTP, oder kann ich damit auch Telnet verbindungen aufbauen?

Client.connect ist erst mal nur eine Verbindung. Was Darüber gesendet wird ist nicht festgelegt (also nicht zwingend HTTP).

In wieweit Telnet eine bestimmte Eröffnung hat, weiß ich jetzt nicht.

Gruß Tommy

Eigentlich müßte es so funktionieren. Gib dem Dongle mal etwas Zeit von Annahme der Verbindung bis zum Ansprechen des Servers.

Serial.println(WiFi.localIP());
delay(1000);  // mal etwas warten
 if (client.connect(server, 35000))

Der Port ist richtig?

Gruß Tommy

Ja der Port ist richtig.

habe jetzt den Code so abgeändert:

#include <ESP8266WiFi.h>
#include <Ethernet.h>

byte mac[] = { 0xEE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 123);
IPAddress server(192, 168, 0, 10);
IPAddress subnet(255, 255, 255, 0);
IPAddress gateway(0, 0, 0, 0);
EthernetClient client;
char SSIDName[] = "CLKDevices";

void setup() {
  WiFi.config(ip, gateway, subnet);
  
  Serial.begin(9600);
  Serial.println();
  Serial.println("Try to connect...");

  WiFi.begin("CLKDevices", "");
  while (WiFi.status() != WL_CONNECTED) 
  {
      Serial.print(".");
      delay(500);
  }
  
  Ethernet.begin(mac, ip);
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  delay(1000);
  if (client.connect(server, 35000))
  {
    Serial.println("OBD2-DONGLE connected");
  } 
  else 
  {
    Serial.println("connection failed");
  }
}

void loop() 
{
}

habe das Ethernet.begin(mac, ip) unter das WiFi.begin(“CLKDevices”,""); gezogen, so müsste es vom Aufbau her ‘richtiger’ sein.

Teste das gleich mal, muss dafür leider jedesmal zu Auto laufen.

Ethernet.begin ist für Draht. Hier völlig daneben.

Gruß Tommy

Herzlichen Dank Tommy56, das war es.

Ein Austausch gegen

WiFiClient client;

hat das Problem gelöst.

Prima, das es funktioniert. Jetzt muss noch die Kommunikation eingebaut werden?
Kan das Teil eigentlich nur Werte lesen oder auch Werte ändern?
Das wäre blöd, wenn Dir jeder ohne Passwortschutz im Vorbeifahren die Karre manipulieren könnte.

Gruß Tommy

Das Ding kann nur Werte auslesen bzw. Fehlerspeicher zurücksetzen. Zudem ist das Signal leider so schwach, dass man 1.5m neben dem Auto schon Verbindungsabbrüche hat. Reicht aber für mein Projekt.