Hallo ich betreibe einen Arduino mega mit einem ESP 8226, verbindung zum W-lan wird hergestellt und funktiniert alles. der esp Reagiert auch auf AT Befehle. Jetzt zu meinem Problem ich möchte Daten die ich mit dem Arduino aufgenommen habe an einen PC senden und Darstellen. Welches ist die beste möglichkeit hierfür ? ich finde nur recht komplizierte sachen mit mysql servern bei denen ich nicht wirklich weiter komme.... wäre für jede hilfe dankbar.
Schreibe mal, was du genau machen willst. Und deinen Kenntnisstand.
Aber im Prinzip ist das gängige, du rufst ein php skript auf und übergibst die Daten per GET Parameter.
Wo das php Skript liegt und was es mit den Daten macht, ist nun ein anderes Thema.
Im Grunde sollen daten aus einem fahrzeugbus ausgelesen und dann an einen pc gesendet. Infos wie tankfüllstand u.s.w kann mir jemand gute tipps für ne tutorialseite geben ? Nen apache server hab ich bereits am laufen. Komme aber noch nicht wirklich mit der übergabe der daten zurecht...
Apache ist schon mal gut, aber du brauchst noch mysql und php
Wenn du das ganze mit Linux machst, Stichwort LAMP
Es gibt unheimlich viele Tutorials darüber, Stichwort Thingspeak, da kriegst du den Serverplatz sogar umsonst.
Mysql und php sind natürlich auch vorhanden. Im Grunde hänge ich jetzt nur an der übertragung. Eine passende tabelle hab ich auch schon angeleget im mysql. Jetzt brauch ich nur hilfe beim eintragen der daten vom arduino aus..
#include <ESP8266WiFi.h>
#define CYCLE 60000
const char* ssid = "hier deine SSID";
const char* password = "und das Passwort des WLANs";
const char* host = "hier deinen Host eintragen";
unsigned long value = 0;
unsigned int lastcall = CYCLE;
int conn_time;
void setup() {
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
conn_time++;
if (conn_time > 20) {
break;
}
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
else {
Serial.println("");
Serial.println("no WiFi connection");
ESP.deepSleep(100000);
Serial.println("gone to sleep");
}
}
void loop() {
while (millis() - lastcall < CYCLE) {
delay(1);
}
lastcall = millis();
++value;
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// We now create a URI for the request
String url = "/w2mysql.php";
url += "?A0=";
url += millis();
url += "&A1=";
url += value;
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(1000);
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("closing connection");
}
so das script hab ich jetzt mal gefunden aber ich finde hier keine Zeile die Beschreibt Was für daten übergeben werden...
ich seh nur den aufbau einer Verbindung zu einem Server??
Steht dioch in deinem Code:
milli()s und value
Jetzt brauchst du nur noch das w2mysql.php im root deines Apachen zu erstellen, welches die beiden als Parameter übergebenen Daten in die mysql db einträgt. Idealerweise mit Zeitstempel
das ist meine w2mysql.php und liegt in dem apache ordner. hab eine datenbank namens "test" angelegt und den benutzer arduino mit dem pw "passwort" angelegt.
bekomme aber als rückmeldung
Warning: mysql_connect(): php_network_getaddresses: getaddrinfo failed: Der angegebene Host ist unbekannt. in C:\xampp\htdocs\test\data2mysql.php on line 9
Verbindung zur Datenbank fehlgeschlagen.
Probier mal:
$mysql_host = "localhost";
usw., ohne die spitzen Klammern
ok das hat schonmal funktioniert.
daten werden eingetragen.
danke schonmal werde jetzt mal versuchen die daten vom arduino senden zu lassen.
ich frage mich gerade noch ob ich den esp überhaupt richtig an den arduino angeklemmt habe ? habe die tx rx an serial3 angeschlossen. ich finde auf der sparkfun seite von wo dieses tutorial wohl stammt nichts zum anschließen...
oder ist das ganze so ausgelegt das der ESP al standalone funktioniert ? und a0 und a1 sind die 2 eingänge auf dem ESP Selber ??
Also wenn ich mir den Code von #5 ansehe: der sieht so aus, als wäre der für "ESP standalone".
Achtung! Wenn du den ESP mit dem Arduino verbindest: der ESP8266 läuft auf 3,3 Volt aber die meisten Arduino-Boards laufen auf 5 Volt. Der ESP ist nicht 5-Volt-tolerant, das heißt wenn du z.B. eine serielle Verbindung herstellst und keine Vorkehrungen triffst (zumindest ein Spannungsteiler), dann kann dein ESP kaputt gehen.
Du solltest zumindest so etwas machen wie hier (4. Abbildung).
Auch solltest du dem ESP eine eigene 3,3 Volt Stromversorgung spendieren, denn der Arduino hält das möglicherweise nicht lange durch (der ESP will kurzfristig mehr als 200mA).
Der ESP hat meines Wissens nur einen Pin mit ADC (also zum messen von Analogwerten - maximal übrigens 1 Volt), dieser heißt "ADC" ist aber nicht bei allen Boards herausgeführt. In der Arduino IDE lässt er sich mit analogRead(A0) auslesen (A1, A2, A3 etc. führt aber zu Fehlermeldungen). Möglicherweise hängt das aber auch von den Core-Libs ab, die du benutzt, ich verwende diese.
Das ist Code für Standalone ESP8266
Momentan sendest du keine erfassten Werte, sonden millis und einen Zähler, wie weiter oben schon erwähnt.
Es kommt eben darauf an, was du machen willst, ob ggf. irgend ein ESP8266 Modell reicht oder noch ein Arduino dazu muss.
Übrigens macht es wenig Sinn, den Verbindungsvorgang nach einer gewissen Anzahl Versuche abzubrechen, wenn er dann sowieso nichts anderes tut und du somit nicht mitbekommst, dass er nicht verbunden ist. also besser nach einer gewissen Anzahl Fehlversuchen einen Piepser ab und zu Piepsen lassen, und wenn er sich dann doch verbindet, piepst es halt nicht mehr und es geht.
Bei meinem ESP handekt es sichum das modell 201 das mit viel mehr eingängen bestückt ist. Trotzdem sollte es in verbindung mit einem arduino betrieben werden da es Can-Bus daten per w-lan an einen pc senden soll.
wie muss ich dann vorgehen ? kann ich per AP befehl Daten an den mysql server senden ? quasi wie die eingabe in die adressleiste ?
im endeffekt will ich daten vom arduino erfassen dann per serial3 über den esp an die datenbank senden. das würde ja durch eine einfache eingabe in die adressleiste des browsers funktionieren. das passende php script hab ich ja schon. nur wie greift der arduino darauf zu ??
AP Befehl? Du meinst sicher AT
Genau so geht es. Es gibt hierzu schon etliche Beispiele. Wichtig ist, dass du auch die Antwort auswertest und entsprechende Fehlerbehandlung einbaust. Und das ganze natürlich blockierungsfrei
ja sorry mein fehler meinte AT. hab eben was gefunden das mit TCP Arbeitet damit wohl zum Server Connectet und dann per Get/ post befehl darauf schreiben kann? meinst du die GET antwort auswerten ?
#define SSID "FRITZ!Box 6360 Cable" // Der Name vom W-Lan
#define PASS "xxxx" // Das PW
void setup() {
Serial.begin(115200); //Geschwindigkeit der Seriellen Verbindung
Serial.setTimeout(5000);
Serial3.begin(115200);
Serial3.println("AT+RST"); // Gibt auf der Seriellen Schnittstelle 3 (ESP 210) Den Reset Befehl
if(Serial3.find("ready")) { // Wenn ready als Antwort gefunden wird
Serial.println("WiFi – Module is ready"); // Wird auf dem Seriellen Monitor (USB) Module is Ready
}else{
Serial.println("Module dosn’t respond."); // ansonsten Module dosn´t respond
while(1); // while setzt das vorher stehende in eine endlosschleife bis es funktioniert
}
delay (2000);
Serial3.print("AT+CWJAP=""); // AT+CWJAP Stellt die verbindung zu einem AP her
Serial3.print(SSID); // Setzt SSID Hinter das =
Serial3.print("",""); // macht das Komma
Serial3.print(PASS); // das PW dahinter
Serial3.println('"'); // und wieder das letze "
delay (2000);
Serial.print("AT+CWJAP=""); //Das selbe nur als kontrolle ob alles richtig eingegeben wurde
Serial.print(SSID);
Serial.print("","");
Serial.print(PASS);
Serial.println('"');
//verbindung zum localhost Herstellen
Serial3.print("AT+CIPSTART=""
}
void loop() {
}
wie kann ich die CIPSTART verbindung richtig eingeben ? dahinter muss janoch mein "TCP" "localhost" "Port"
So nach dem ich ein bissel gesucht habe bin ich auf das hier gestoßen.
void loop() {
//verbindung zum localhost Herstellen
Serial3.println("AT+CIPSTART=""TCP","localhost","80")
//zu Sendende Zeichen
Serial3.println("AT+CIPSEND=länge der domain")
//die Daten in der Adresszeile
Serial3.println("die Domain")
//Verbdindung Schließen
Serial3.println("AT+CIPCLOSE")
ist das alles Korrekt ? und ab wo zählt man die länge der adresse ?
while(1); // while setzt das vorher stehende in eine endlosschleife
Tut nicht das was da steht, sondern hängt den uC auf.
Was deinen Code betrifft, sagen wir mal so, einzelne Zeilen sind bestimmt irgendwie und in irgendeinem Zusammenhang "korrekt".
Über das Thema ist schon soviel geschrieben worden, dass sich ein Verweis hier gar nicht lohnt.
Kann es sein, dass es bei dir noch an den grundlegenenden Basics hapert?
In Post 5 war es noch ESP8266 Code, jetzt ist es AT Code. Das solltest du eigentlich schon daran erkennen, das der ESP8266 keinen Serial3 hat.