Arduino Mega + ESP8266 WLan Thermometer

SSID und Passwort eingetragen?
So dass sich das Ding auch bei deinem Router anmelden kann?

Baudrate für Serial1 richtig?

Verschiedene SSID probiert, Passwort und ist richtig und Baudrate mit 9600 sollte gehen ;). Am Arduino stecken allerdings nur die TX/RX Kabel gekreutzt an 18/19 die Stromversorgung kommt von Steckbrett ;).

FW Version: þüþøüø@þð øú@úBüú üô …@@Ð! und noch viel mehr davon

Da kommt bei mir eine saubere Firmware id.

Hast du evtl ein 57600 oder 115200 Baud Dingen?

Nachtrag:

die Stromversorgung

GND Arduino und GND ESP müssen verbunden werden.

Guck mal :wink:

setup begin
FW Version: 0018000902-AI03
to station ok
Join AP success
IP: 192.168.0.100
setup end

GND verbinden sehr gute Idee ;). Jetzt muss ich noch irgendtwie die IP angepasst kriegen, dann sollte die Hardware schonmal funktionieren ;).

Blacksmith:
Jetzt muss ich noch irgendtwie die IP angepasst kriegen, dann sollte die Hardware schonmal funktionieren ;).

Das Modul ist ja ein schöner China-Kracher.
Vollständige Dokumentation nur auf Chinesisch verfügbar!
Firmwareversion noch unterhalb 1.0!

Nachdem es hier im Forum bereits verschiedene Fragen zu diesem Bastelmodul gab, hatte ich mir auch mal vor einer Weile eins bestellt und mich am Wochenende dann ausgiebig damit befaßt. Hier ein Kurzbericht:

Schon dass das Modul ein reines 3.3V Modul ist, macht es ja nicht gerade bastelfreundlich für Arduino-Anfänger. An keiner Leitung ist das Teil 5V tolerant, also dürfen auch an allen Signalleitungen (Serial, Enable, etc.) nur 3.3V Signale bereitgestellt werden. Dabei kann das Ding aber locker mehr Strom ziehen als man am 3.3V Pin eines UNO oder MEGA rausholen darf. Ich habe dann also mein DUE Board rausgeholt und das Ding damit verkabelt und es angeschlossen. Der DUE hat jedenfalls seine Datensignale passend zum Modul auf 3.3V und das DUE-Board kann mit 800mA am 3.3V Pin mehr als den doppelten Strom liefern wie ein ESP8266 im Maximalfall benötigt.

Dass die auf dem Modul enthalte Version eine Firmware 0.9x enthält, also eine Versionsnummer unterhalb 1.0, weckt natürlich sofort Vertrauen. Und das Vertrauen, das man in so eine Firmware-Versionsnummer setzen kann, wird dann auch tatsächlich gerechtfertigt.

Zuerst stelle ich beim Basteln fest, dass mein Modul zwar anfänglich zu reagieren scheint und auf AT-Befehle antwortet. Meine Firmwareversion reagiert auf eine Baudrate von 9600 Baud. Aber wenn eine simple Anwendung, die auf AT-Befehle über die serielle Konsole wartet, einfach nur längere Zeit unbeschäftigt steht, und dann irgendwann wieder AT-Befehle kommen, scheint das Modul seine Baudrate vergessen zu haben: Es wird nur noch mit wirren Zeichen geantwortet. Meine weiteren Versuche ergaben dann, dass die "vergessene" Baudrate auch nach einen Power-On Reset des Moduls erhalten bleibt, wenn es nur resettet oder kurz stromlos gemacht wurde. Zusätzliche Versuche ergaben dann, dass das Modul plötzlich auf eine Baudrate von 6300 reagiert. Warum? Keine Ahnung! Jedenfalls kann man auch das resetten: Modul für 5 Minuten stromlos machen und dann neu starten, dann arbeitet es wieder mit 9600 Baud. Der Fehler ließ sich von mir beliebig reproduzieren und ließ mich dann nach einem Firmware-Update suchen.

Vorsicht: Beim Versuch eines Firmware-Updates kann man sich das Modul bricken, so dass es dann überhaupt auf gar nichts mehr reagiert. Außer auf ein korrekt durchgeführtes Firmware-Update. Also wer keine Ahnung hat, sollte ein Firmware-Update seines Moduls wohl lieber vermeiden.

Das mit dem Firmware-Update wäre sowieso eine andere Geschichte, die ich mir hier erspare.

Nur soviel: Fast alle älteren 0.x Firmwares unterstützen offenbar nur die IP-Vergabe per DHCP beim Verbinden mit dem Access-Point, also keine statische Vergabe von IP-Adressen für den Fall, dass das ESP8266 im Station Mode (1) betrieben wird.

Erst mit der Firmware-Version 0.9.5 wurde auch die statische IP-Adressfestlegung im Station Mode (1) ermöglicht, mit dem neuen AT-Befehl "AT+CIPSTA".

Also alles in allem bin ich nach etlichen Stunden Beschäftigung mit dem Modul noch nicht weit gekommen. Ich kann es an einem Arduino DUE-Board anschließen, dass es funktioniert. Ich kann solche Module bricken, dass sie tot sind und nicht mehr reagieren. Ich kann auf ein gebricktes Modul wieder eine neue Firmware draufspielen. Und ich kann AT-Befehle senden, die vom Modul beantwortet werden.

Irgendwann werde ich mich wohl nochmal damit beschäftigen müssen, um dann etwas sinnvolleres damit anstellen zu können als nur die Zeit damit totzuschlagen.

@Blacksmith: Darf ich mal fragen, was Du mit dem Modul eigentlich machen möchtest? Kannst Du Dein Projekt mal näher beschreiben, was das werden soll, wenn's fertig ist? Im ersten Posting lese ich was von "Temperaturdaten an Thingspeak senden, wo ich sie von überall übers Internet abrufen kann". Also Dein Zuhause ist mit dem Internet verbunden, und Du bist irgendwo anders auch mit dem Internet verbunden. Und die Temperaturen willst Du dann nicht über das Internet zuhause abrufen, sondern das Zuhause soll die Temperatur woanders hinsenden und Du willst die Temperatur dann woanders abrufen als von zuhause? Ist das so etwas wie "Facebook für Temperaturen"? Wenn Du Deinen Freunden Deine Bilder zeigen möchtest, postest Du sie für die ganze Welt ins Internet auf Facebook, wo sie dann jeder sehen kann. Und mit diesem Thinkspeak ("Facebook für Temperaturen") postest Du Deine Temperaturen für die ganze Welt ins Internet, wo sie dann jeder sehen kann?

So in etwa ja. Es geht bei dem Projekt um folgendes:
Das Ziel war es möglichst günstig und klein eine Temperaturüberwachung zukonstruieren. Wofür ? fragt man sich doch da.

Es geht ums Grillen, genaugenommen um BBQ, ein Beispiel: Ich habe hier eine Schweineschulter ca.4,7 Kg die kommt in den Kugelgrill und wird mit einem Kerntemperatursensor bestückt, den man auch als Bratenthermometer bezeichnen könnte. Ein weiterer Sensor ist in der Nähe am Grillrost angebracht um die Garraumtemperatur zu messen. Die beiden Fühler sind am Maverick Funkthermometer Angeklemmt so kann ich zumindest in Küche und Wohnzimmer die Daten überwachen. Da es aber 14 Std.+ braucht bis soein Pulled Pork mal fertig ist kam die Idee auf entweder die Daten vom Funk abzugreifen oder die Sensoren zuverwenden um die Daten dann auf einen Dienst wie Thingspeak hochzuladen und darzustellen als kurve oder zumindest als Temperaturdaten. Da ich meistens Pulled Pork Freitags abends ansetze wenn mein Kumpel und Nachbar mal wieder da ist, und ich keine Lust mehr habe alle halbe Stunde zum Grill zulatschen um nachzusehen ob alles in Ordnung ist, ist die Idee die Daten online abrufen zukönnen garnicht so schlecht. Normalerweise läuft der Grill die 14 Stunden ohne große Probleme durch, aber man weis ja nie, die Kohlen könnten ausgehen oder durch andere einflüsse sich die Temperatur stark ändern das man nachregeln muss, es ist wichtig zwischen 105°C und 120°C zubleiben, kleine abweichungen sind ok. Klar könnte die ganze Welt die Daten sehen, wenn sie den Kanal und mein Passwort wissen, und selbst wenn ich den Kanal Public mache, wenn es jemanden Interessiert was oder ob ich gerade Grille kanner sich gerne die Temperaturdaten angucken, und wetten ob die nächste Temperatur die gemessen wird höher oder niedriger ist ;).

Es gibt ein paar Projekte in der Richtung mit der Himbeere aber die sind meistens maßlos übertrieben mit Lüftersteuerung und lauter Zeugs das ich nicht verwenden kann. Will nur nicht sooft hin-und herlatschen müssen um zusehen das alles im Lot ist und läuft, zumal das auch die anderen im Partykeller immer stört wenn nen Film läuft und ich da dauernt rein und raus latsche. Also eigentlich ein kleines Projekt mit großer Wirkung ;).

Blacksmith:
Da ich meistens Pulled Pork Freitags abends ansetze wenn mein Kumpel und Nachbar mal wieder da ist, und ich keine Lust mehr habe alle halbe Stunde zum Grill zulatschen um nachzusehen ob alles in Ordnung ist, ist die Idee die Daten online abrufen zukönnen garnicht so schlecht.

Also der Grill grillt auf Deiner Terrasse und Du bist nebenan im Haus. Und damit Du im Haus auf dem Smartphone die aktuelle Grilltemperatur und den zeitlichen Temperaturverlauf ablesen kannst, sendest Du die Daten von Deiner Terrasse aus zu einem Server in den USA, und mit Deinem Smartphone im Haus rufst Du die Daten dann wieder aus den USA ab?

Na ja.

Blacksmith:
Es gibt ein paar Projekte in der Richtung mit der Himbeere aber die sind meistens maßlos übertrieben mit Lüftersteuerung und lauter Zeugs das ich nicht verwenden kann.

Hier im Forum hat glaube ich jemand ein "Räucherofen-Regelprojekt" gemacht, mit Arduino, das wie folgt funktioniert: Ein Arduino mißt die Temperatur und steuert zwei Servos, die am Grill die Zuluft- und Abluftklappe steuern: Weiter auf ==> mehr Luft ==> mehr Temperatur. Weiter zu ==> weniger Luft ==> weniger Temperatur. Also unabhängige Temperaturregelung, ohne Netzwerk. Und ohne Lüftermotoren, nur mit zwei Modellbauservos, die die Luftklappen verstellen. Und wenn die Temperatur bestimmte Grenzwerte überschreitet, geht ein Alarmsummer an. Oder ein Kurzstrecken-Funkmodul sendet auf 433MHz ein Funksignal ins Haus, so dass im Haus mit einer Funksteckdose irgendwas eingeschaltet wird. Oder so.

Blacksmith:
Will nur nicht sooft hin-und herlatschen müssen um zusehen das alles im Lot ist und läuft, zumal das auch die anderen im Partykeller immer stört wenn nen Film läuft und ich da dauernt rein und raus latsche.

An die Temperaturwerte Deiner Sensoren kommst Du mit dem Arduino problemlos ran, dass Du die auslesen kannst, ja? Es geht Dir jetzt nur darum die Daten mit dem ESP8266 Modul an diesem "Facebook-für-Temperaturwerte" namens ThingSpeak zu senden?

Und warum soll das ESP8266 Modul in Deinem Netzwerk nun unbedingt eine fest zugeordnete IP-Adresse bekommen? Wenn Dein Grilltemperatur-Arduino in dem Fall doch ein "Client" ist, der auf den "ThingSpeak"-Server zugreift, da wäre es doch ganz egal, welche IP-Adresse der Client hat, da Du auf den überhaupt nicht direkt zugreifen möchtest, oder? Also könnte der Grilltemperatur-Arduino nach dem Neustart Deines Netzwerks doch auch problemlos eine andere, per DHCP dynamisch zugeordnete IP-Adresse haben und damit arbeiten?

Oder weshalb geht das nicht?
Hast Du überhaupt die Firmwareversion 0.9.5 auf Deinem Wifi-Modul drauf?

Ich glaube, ich werde mir mal so einen Account bei diesem "Facebook für Temperaturen" eröffnen. Kostet ja wohl erstmal nichts. Und dann kann man sicher aus den vorhandenen Angaben im Internet etwas zusammenstricken, um darauf zuzugreifen, falls es ein HTTP-Interface zum Zugriff gibt. Denn mit HTTPS läuft mit Arduino nichts, nur einfaches HTTP, TCP oder UDP könnte man hinbekommen.

Wenn Dein Modul schon mal auf AT-Befehle reagiert, sollte das eigentlich machbar sein.
Hast Du denn mittels:

AT+CWJAP="SSIDname","WIFI-Password"

schon mal eine WIFI-Verbindung zu Deinem WLAN-Router hinbekommen?
Oder hat das mit der Verbindung zum Router bisher noch nicht funktioniert?

Nachtrag: Also einen Account bei diesem "Facebook für Temperaturen" eröffnen und Daten mit Arduino+EthernetShield hinsenden funktioniert schon mal ganz einfach.

Fehlt dann also nur noch, das mit einem ESP8266 statt mit Ethernet-Shield laufen zu lassen. Dazu nochmal die Rückfrage, wegen der Stromversorgung Deines Arduino: Hast Du beim Grill auf der Terrasse wenigstens Strom liegen, so dass Du Dein Thingie dann wenigstens per Strom aus einem 5V USB-Netzteil versorgen könntest? Oder willst Du auch noch anfangen, eine netzunabhängige mobile Stromversorgung zu basteln?

jurs:
Also der Grill grillt auf Deiner Terrasse und Du bist nebenan im Haus. Und damit Du im Haus auf dem Smartphone die aktuelle Grilltemperatur und den zeitlichen Temperaturverlauf ablesen kannst, sendest Du die Daten von Deiner Terrasse aus zu einem Server in den USA, und mit Deinem Smartphone im Haus rufst Du die Daten dann wieder aus den USA ab?

Na ja.

Nö, bzw. fast Der Arduino bzw. der ESP8266 sendet die Daten über mein Internes Netzwerk ins Internet auf Thinkspeak(Is kein Zwang aber eben der Dienst der in dem Halbfertigen Aufbau genannt wurde) oder eben woanderst hin, irgendtwo hin wo ich mit Inet von woanderst aus drauf zugreifen kann. Ich bin dann nicht im Haus ich bin ca. 100 m weiter beim Nachbarn und um mir und den anderen das hin und hergelatsche zuersparen will ich von seinem Partykeller aus von einem der PCs die Temperatur vom Grill beobachten und falls was nicht passt rüberwetzen und Problem beheben(und nein er ist nicht wircklich unbeaufsichtigt is immer wer zuhause aber an den Grill geht keiner).

jurs:
Hier im Forum hat glaube ich jemand ein "Räucherofen-Regelprojekt" gemacht, mit Arduino, das wie folgt funktioniert: Ein Arduino mißt die Temperatur und steuert zwei Servos, die am Grill die Zuluft- und Abluftklappe steuern: Weiter auf ==> mehr Luft ==> mehr Temperatur. Weiter zu ==> weniger Luft ==> weniger Temperatur. Also unabhängige Temperaturregelung, ohne Netzwerk. Und ohne Lüftermotoren, nur mit zwei Modellbauservos, die die Luftklappen verstellen. Und wenn die Temperatur bestimmte Grenzwerte überschreitet, geht ein Alarmsummer an. Oder ein Kurzstrecken-Funkmodul sendet auf 433MHz ein Funksignal ins Haus, so dass im Haus mit einer Funksteckdose irgendwas eingeschaltet wird. Oder so.

Ich kenne ein Räucherofen-Projekt mit den Pi aber das ne andere Welt, da ich weder Lüfterklappen steuern will noch großartig Räuchere ist dieses Projekt nicht so das richtige, zumal beim Räuchern je nach kalt oder warm die Temperaturen kaum über 70°C gehen sollten. Während wenn ich Rippchen oder nen Braten mache schonmal 180°C vorkommen, was für die sensoren kein Problem ist wird für Kabel oder Motoren vielleicht schon schwierig.

jurs:
An die Temperaturwerte Deiner Sensoren kommst Du mit dem Arduino problemlos ran, dass Du die auslesen kannst, ja? Es geht Dir jetzt nur darum die Daten mit dem ESP8266 Modul an diesem "Facebook-für-Temperaturwerte" namens ThingSpeak zu senden?

Die Temperatursensoren kann ich an den Arduino über die Analogen Eingänge anschließen mit 2 Klinkenbuchsen Mono 2,5 mm.

jurs:
Und warum soll das ESP8266 Modul in Deinem Netzwerk nun unbedingt eine fest zugeordnete IP-Adresse bekommen? Wenn Dein Grilltemperatur-Arduino in dem Fall doch ein "Client" ist, der auf den "ThingSpeak"-Server zugreift, da wäre es doch ganz egal, welche IP-Adresse der Client hat, da Du auf den überhaupt nicht direkt zugreifen möchtest, oder? Also könnte der Grilltemperatur-Arduino nach dem Neustart Deines Netzwerks doch auch problemlos eine andere, per DHCP dynamisch zugeordnete IP-Adresse haben und damit arbeiten?

Muss nicht fest zugeordnet sein ist eigentlich egal, nur kann ein Gerät mit 192.168.0.100 nicht mit einem Gerät 192.168.178.XXX kommunizieren, wenn DHCP gehen würde wäre das ja Supi, aber er nimmt weder AT+CWDHCP noch AT+CIPSTA an.

jurs:
Oder weshalb geht das nicht?
Hast Du überhaupt die Firmwareversion 0.9.5 auf Deinem Wifi-Modul drauf?

Könnte wetten nicht, zumindest steht da FW Version: 0018000902-AI03

jurs:
Ich glaube, ich werde mir mal so einen Account bei diesem "Facebook für Temperaturen" eröffnen. Kostet ja wohl erstmal nichts. Und dann kann man sicher aus den vorhandenen Angaben im Internet etwas zusammenstricken, um darauf zuzugreifen, falls es ein HTTP-Interface zum Zugriff gibt. Denn mit HTTPS läuft mit Arduino nichts, nur einfaches HTTP, TCP oder UDP könnte man hinbekommen.

Wenn Dein Modul schon mal auf AT-Befehle reagiert, sollte das eigentlich machbar sein.
Hast Du denn mittels:

schon mal eine WIFI-Verbindung zu Deinem WLAN-Router hinbekommen?
Oder hat das mit der Verbindung zum Router bisher noch nicht funktioniert?

Ich gehe davon aus über den USB TTL hab ich das schnell hinbekommen, und gestern abend dank freundlicher Unterstützung von combie auch über den Arduino zumindest lässt das

FW Version: 0018000902-AI03
to station ok
Join AP success
IP: 192.168.0.100

darauf vermuten. Habe allerdings kein anderes Gerät in dem IP bereich das ich ihn sehen könnte. Auf AT Befehle reagiert es nur am USB TTL nicht am Arduino.

Wenn du ne andere Lösung findest die Thinkspeak überflüssig macht, wäre das auch supi. Cool wär es wenn man das auf ner eigenen Website einbinden könnte aber das scheint wohl nicht soeinfach zu funktionieren.

Blacksmith:
Muss nicht fest zugeordnet sein ist eigentlich egal, nur kann ein Gerät mit 192.168.0.100 nicht mit einem Gerät 192.168.178.XXX kommunizieren, wenn DHCP gehen würde wäre das ja Supi, aber er nimmt weder AT+CWDHCP noch AT+CIPSTA an.

Also wenn Dein WLAN auf 192.168.178.XXX eingestellt ist, solltest Du natürlich auch eine IP-Adresse in diesem Adressbereich erhalten, wenn Du mit dem ESP8266 auf Deinen WLAN-Router zugreifst.

Wenn Dein WLAN im Bereich 192.168.178.XXX läuft und Du siehst als Adresse 192.168.0.100 beim ESP8266, dann kommen eigentlich nur wenige Fehlermöglichkeiten in Frage, z.B.:
a) das ist die IP-Adresse, mit der das Modul zuletzt erfolgreich verbunden war
b) das Modul ist überhaupt nicht verbunden
c) das Modul baut ein eigenes (zusätzliches) WLAN als Accesspoint auf

Leider zeigst Du ja auch bisher überhaupt keine Befehle, die Du sendest.
Oder Arduino-Code, den Du laufen läßt.
Daran könnte man dann schon sehen, ob Du irgendwas falsch machst.

Ich werde heute abend mal versuchen, wenigstens ein kleines Testprogramm hinzubekommen, das das Modul so konfiguriert, dass es sich als Client mit Deinem bestehenden WLAN verbindet und dabei eine richtige IP-Adresse bekommt, im Adressbereich Deines WLANs.

Blacksmith:
Wenn du ne andere Lösung findest die Thinkspeak überflüssig macht, wäre das auch supi. Coll wär es wenn man das auf ner eigenen Website einbinden könnte aber das scheint wohl nicht soeinfach zu funktionieren.

Wenn Du eine eigene Website hast, auf der eine Skriptsprache läuft, z.B. PERL/CGI oder PHP, und der Webserver auch so konfiguriert ist, dass er entweder Schreibrechte im Dateisystem des Servers hat oder auf eine MySQL-Datenbank zugreifen kann, könntest Du natürlich dahingehend etwas für den Server programmieren. Allerdings kommt dann noch der ganze Aufwand an Server- und Datenbankprogrammierung sowie die Entwicklung der Datenvisualisierung dazu, wenn Du nicht nur einfache HTML-Temperaturtabellen zu sehen bekommen möchtest. Also das mit dem Thingspeak.com ist da schon extrem viel einfacher realisierbar, weil Du dann nur die Arduino-Software selbst entwickeln mußt und auf der Webserverseite bereits alles fertig benutzbar ist. Das ist schon bequem. Und wenn der Dienst von Dir auch nur mal von Zeit zu Zeit 14 Stunden am Stück genutzt werden soll, wäre es wahrscheinlich auch kein Beinbruch, das mal auf einen anderen Dienst oder einen eigenen Webserver umzustellen, falls Thingspeak.com mal unerwartet den Dienst einstellt oder die Nutzungsbedingungen dahingehend ändert, dass es keine kostenlos nutzbaren Accounts mehr gibt.

Ich schaue mir jetzt nochmal mein ESP8266 Modul an und mache ein kleines Testprogramm. Und dabei nutze ich am besten keine Befehle, die in der Firmware 0.9.5 neu dazugekommen sind. Denn die bei Dir angezeigte Firmware "0018000902-AI03" steht glaube ich für Version 0.9.2.

/**
 * @example ConnectWiFi.ino
 * @brief The ConnectWiFi demo of library WeeESP8266. 
 * @author Wu Pengfei<pengfei.wu@itead.cc> 
 * @date 2015.03
 * 
 * @par Copyright:
 * Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version. \n\n
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#include "ESP8266.h"

#define SSID        "Wolfgang Lahn"
#define PASSWORD    "XXXXXXXXXXXXXXX"

ESP8266 wifi(Serial1);

void setup(void)
{
    Serial.begin(9600);
    Serial.print("setup begin\r\n");

    Serial.print("FW Version: ");
    Serial.println(wifi.getVersion().c_str());
    
    
    if (wifi.setOprToStation()) {
        Serial.print("to station ok\r\n");
    } else {
        Serial.print("to station err\r\n");
    }

    if (wifi.joinAP(SSID, PASSWORD)) {
        Serial.print("Join AP success\r\n");
        Serial.print("IP: ");       
        Serial.println(wifi.getLocalIP().c_str());
    } else {
        Serial.print("Join AP failure\r\n");
    }
    
    Serial.print("setup end\r\n");
}

void loop(void)
{
}

Damit hab ich gestern eben die Setupmeldung gekriegt

setup begin
FW Version: 0018000902-AI03
to station ok
Join AP success
IP: 192.168.0.100
setup end

// Based on https://github.com/wvuong/bbqsmoker/blob/master/bbqsmoker.ino

#define DST_IP "199.199.199.199" // IP der Internetseite

int led = 13; //Pin der LED
int mess1 = 0;
int vcc;
String stringValue = "";
const int numProbes = 2;
const int bufferLength = 30;
float temp;
int Temperatur;
int Temperatur1;

// probe datastructure
struct Probe {
String name;
int pin;
double A;
double B;
double C;
int buffer[bufferLength];
int currentTemp;
int resistor;
};

// probes array
Probe probes[2];


void setup() {

Serial.begin(9600);

Serial.println("AT+RST");
//WiFi modul bootup
delay(800);
//"client" mode
Serial.println("AT+CWMODE=1");
//Einwahl ins WLAN
//SSID und Passwort auf das eigene Netzwerk anpassen.
Serial.println("AT+CWJAP=\"SSID\",\"Passwort\"");

// configure probes
Probe p0 = Probe();
p0.name = "ET-732-1";
p0.pin = A1;
p0.A = 5.36924e-4;
p0.B = 1.91396e-4;
p0.C = 6.60399e-8;

p0.resistor = 22000;
probes[0] = p0;

Probe p1 = Probe();
p1.name = "ET-732-2";
p1.pin = A2;
p1.A = 5.36924e-4;
p1.B = 1.91396e-4;
p1.C = 6.60399e-8;

p1.resistor = 22001;
probes[1] = p1;

delay(2000);
}

void loop() {
int sensorValue = 0;
int outputValue = 0;

// loop für jeden Geber
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes[i];

// Wert einlesen:
outputValue = readAndOverSample((*ptr).pin, (*ptr).A, (*ptr).B, (*ptr).C, (*ptr).resistor);

// Wert in den Buffer schreiben
(*ptr).currentTemp = outputValue;

for (int i = bufferLength -1; i >= 1; i--) {
(*ptr).buffer[i] = (*ptr).buffer[i-1];
}
(*ptr).buffer[0] = outputValue;
}

for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes[i];

// maximal 4 Geber!

int x; int y;
if (i % 2 == 0) {
x = 0;
}
else if (i % 2 == 1) {
x = 8;
}
if (i / 2 == 0) {
y = 0;
}
else if (i / 2 == 1) {
y = 1;
}
}
delay(10000);

int per = 50000/numProbes/5000;

for (int p = 0; p < per; p++) {
for (int i = 0; i < numProbes; i++) {
Probe *ptr = &probes[i];

// Durchschnitt errechnen 5 Minuten
int five, fifteen, thirty;
int accum = 0;
for (int i = 0; i < 5; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer[i];
}
five = accum/5;

// Durchschnitt errechnen 15 Minuten
accum = 0;
for (int i = 0; i < 15; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer[i];
}
fifteen = accum/15;

// Durchschnitt errechnen 30 Minuten
accum = 0;
for (int i = 0; i < 30; i++) {
if ((*ptr).buffer == 0) {
accum = 0;
break;
}
accum += (*ptr).buffer[i];
}
thirty = accum/30;

}
}

// Spannungsmessung mit Spannnungsteiler
int mess1 = analogRead(mess1);
vcc = ((mess1/36.35)*1000); // Faktor für Spannungsteiler

//Vertbindung zum web server
String cmd = "AT+CIPSTART=\"TCP\",\""; //make this command: AT+CPISTART="TCP","199.199.199.199",80
cmd += DST_IP;
cmd += "\",80";
Serial.println(cmd);

//warten auf Verlinkung
delay(300);

//HTTP GET Request
cmd = "GET /datei.php?Wert1="; // Datei des Internetservices aufrufen
cmd += Temperatur;
cmd += "&Wert2=";
cmd += Temperatur1;
cmd +="&VCC=";
cmd += vcc;
cmd += " HTTP/1.0\r\n";
cmd += "Host: 217.160.107.197\r\n\r\n";

//Größe des Requests für ESP8266
Serial.print("AT+CIPSEND=");
Serial.println(cmd.length());
Serial.println(cmd);
}

int readAndOverSample(int apin, double A, double B, double C, int resistor) {
int sensorvalue = 0;
unsigned int accumulated = 0;
int numsamples = 64;
int n = 0;

sensorvalue = analogRead(apin);
delay(2);

// einlesen der 64 samples
for (int i = 0; i < numsamples; i++) {
sensorvalue = analogRead(apin);
if (sensorvalue == 0 || sensorvalue >= 1023) {
return -1;
}
accumulated += sensorvalue;
n++;
delay(2);
}

unsigned int ADCmax = (1 << 13) - 1;
unsigned int ADCval = accumulated >> 3;
float R, T;
R = log( resistor / ((ADCmax/(float)ADCval) - 1.0f));
T = 1.0f / ((C * R * R + B) * R + A);
temp = (T - 273.15f);

// Serial.print("temp="); Serial.println(temp);

if (resistor > 22000) {
Temperatur = temp; // Wert für Internetseite speichern
}

else {
Temperatur1 = temp; // Wert für Internetseite speichern
}
//return temp;
delay(60000); // 1 Minute warten
}

So wurde der Code vorgestellt vom "Entwickler" nur funktioniert er eben nicht, was mir inzwischen zumindest zum teil auch einleuchtet.

Blacksmith:
So wurde der Code vorgestellt vom "Entwickler" nur funktioniert er eben nicht, was mir inzwischen zumindest zum teil auch einleuchtet.

Hier mal ein Testcode von mir (ESP8266 mit 9600 Baud an Serial1 angeschlossen):

#define BAUD 9600L  /// ESP8266 default baudrate
#define espSerial Serial1 // define which serial port to use with ESP8266 module
#define WLAN_SSID "yourSSID"             // your WLANs SSID
#define WLAN_PASS "yourWifiPassword" // your WLANs password

boolean sendCommand(char* command, int timeoutSeconds)
{
  espSerial.println(command);
  unsigned long startTime=millis();
  while (millis()-startTime<timeoutSeconds*1000L)
  {  
    if (espSerial.available()) Serial.write(espSerial.read());
  }
}

void setup() 
{
  Serial.begin(BAUD);
  espSerial.begin(BAUD);
  Serial.println();
  Serial.println("ESP8266 Demo Test by 'jurs'");
  delay(2000);  
  sendCommand("AT+CWMODE=1",2);
  char buf[41];
  snprintf(buf,sizeof(buf),"AT+CWJAP=\"%s\",\"%s\"", WLAN_SSID, WLAN_PASS);
  sendCommand(buf,10); // try connecting to WLAN router for 10 seconds
  Serial.println("Module ready - entering loop() function now.");
}

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

Was gibt Dein Modul während der Initialisierung aus?

Wenn die Initialisierung soweit läuft und Du mal über den Seriellen Monitor das sendest:

AT+CIFSR

Was wird dann als Ergebnis angezeigt?
(Achtung: SSID und Passwort werden im Klartext angezeigt, beim Posten ggf. aus-ixen.)

Blacksmith:

#define DST_IP "199.199.199.199" // IP der Internetseite

...
//HTTP GET Request
cmd = "GET /datei.php?Wert1="; // Datei des Internetservices aufrufen



So wurde der Code vorgestellt vom "Entwickler" nur funktioniert er eben nicht, was mir inzwischen zumindest zum teil auch einleuchtet.

"Der Code vom Entwickler" greift offenbar NICHT auf eine Thingspeak-Server zu, sondern auf

  • einen eigenen Server, dessen IP Nummer im Skript durch einen Fake-Platzhalter ersetzt wurde
  • ein unbekanntes PHP-Skript, das auf diesem unbekannten Webserver läuft
    Der Code hat mit Thingspeak rein gar nichts zu tun. Die einzige Gemeinsamkeit ist "irgendwas soll an einen Webserver gesendet werden". Und der Code is allenfalls "beispielhaft", aber nicht "funktionierend".
ESP8266 Demo Test by 'jurs'
 ]p
†!Q>ú‡{ÈtxЦ
[Vendor:www.ai-thinker.com Version:0.9.2.4]
ready
Module ready - entering loop() function now.

Das kommt dann wenn der ESP8266 am Arduino hängt und gibt nach Neustart und weiterem versuch nach AT+CIFSR

192.168.0.101

OK
an.

Blacksmith:
Das kommt dann wenn der ESP8266 am Arduino hängt

Na wenigstens siehst Du da schon mal die exakte Firmwareversion (0.9.2.4), die auf Deinem Modul läuft.

Mit der Version sollte sich etwas anfangen lassen.

Allerdings läuft da irgendwas noch nicht ganz rund, weil Eingaben entweder nicht oder unzuverlässig verarbeitet werden.

So aus der Entfernung ist es natürlich etwas schwierig zu sagen, woran es liegt.

Einmal könnte es ein Problem mit dem Timing sein, also dass Dein Modul länger braucht, bis es bereit ist, AT-Befehle entgegenzunehmen. Dazu könntest Du mal versuchen, das anfängliche Startup-Delay zu verlängern:

  Serial.println("ESP8266 Demo Test by 'jurs'");
  delay(6000);

Ergibt sich dadurch eine Änderung?

Des weiteren wäre die Beschaltung der Hardware zu prüfen.
Dein MEGA ist ein 5V-Board und daran schließt Du mit dem ESP8266 ein 3.3V Modul an.

Die 3.3V betrifft dabei nicht nur die Spannungsversorgung des Moduls, sondern auch die Datenleitungen. Beschreibe doch mal genau:

  • Welche Datenleitungen am ESP8266 pullst Du wie auf welchen Spannungspegel?
  • Und auf welche Art stellst Du sicher, dass die TX-Leitung vom Arduino nicht mit 5 Volt in das Modul reinhaut? Hast Du Levelshifter in Deiner Schaltung oder nur Widerstände als Spannungsteiler?
ESP8266 Demo Test by 'jurs'
AT+CWMODE=1

no change
AT+CWJAP="Wolfgang Lahn","XXXXXXXXXXXXXX"


OK
Module ready - entering loop() function now.

Kommt da jetzt bei 6 Sek. Wartezeit.

1K und 1,8K Widerstand als Spannungsteiler.

VCC und CH_PD auf 3,3 V GND auf GND TX/RX auf RX/TX

Blacksmith:
Kommt da jetzt bei 6 Sek. Wartezeit.

1K und 1,8K Widerstand als Spannungsteiler.

Das sieht doch jetzt schon mal sehr gut aus.
Ich würde fast sagen: Besser geht es kaum.

Und was siehst Du jetzt, wenn Du die IP-Nummer abfragst, nachdem das Modul die Verbindung hergestellt und mit "OK" bestätigt hat, dass das Modul sich verbunden hat? Bei manueller Eingabe von:
AT+CIFSR

AT+CIFSR

192.168.0.101

OK

www.reichelt.de/TS-2950-CT33/3/index.html?&ACTION=3&LA=446&ARTICLE=115977&artnr=TS+2950+CT33&SEARCH=5V+3%2C3V

Die sollten morgen kommen, oder ähnliche zumindest. Hab den Fehler gefunden^^
Mal wieder ein USER fehler. Irgendwer hat den Switch resettet^^ klar das der die Werks-IP hat und ich winder mich das ich nicht draufkomm^^

Blacksmith:

AT+CIFSR

192.168.0.101

OK

Das gibt es doch gar nicht! Warum verbindet der sich nicht mit einer IP-Adresse aus dem Bereich Deines Routers?

Dein WLAN-Router läuft doch auf der Adresse 192.168.178.1?
Und "DHCP" ist auf dem Router auch aktiviert?
Und er hat auch noch freie IP-Adressen in dem Nummernbereich zu vergeben, der für DHCP reserviert ist?

Hast Du vielleicht noch einen zweiten WLAN-Accesspoint laufen?
Vielleicht einen WLAN-Repeater für Dein WLAN?
Und dieses Repeater-WLAN läuft dann auf 192.168.0.1 und ist auf dieselbe SSID konfiguriert?

Man könnte da natürlich jetzt anfangen, ein Server- oder Client-Gedöns dranzustricken, aber solange die IP-Nummer Deines ESP8266 nicht zum IP-Nummernkreis gehört, der von Deinem WLAN-Router verwaltet wird, sehe ich eher schwarz dafür, dass Du damit ins Internet oder auch nur in Dein Heimnetz kommst.

Hat Dein WLAN-Router eine HTML-Konfigurationsseite und ist per Webbrowser konfigurierbar?

Lasse Dir vielleicht erstmal eine Liste aller Accesspoints vom Modul suchen:
AT+CWLAP
Ist da in der Liste eventuell ein zweites WLAN-Netz mit derselben SSID-Bzeichnung zu sehen?

Dann könnte man natürlich mal versuchen, für den ESP8266 einen Code zu schreiben, it dem er versucht, die HTML-Konfigurationsseite auf 192.168.0.1 oder 192.168.178.1 zu laden und - falls es funktioniert - den Quelltext zu vergleichen ob es tatsächlich die Konfigurations-Loginseite Deines Routers ist, die geliefert wird. Eventuell ist in Deiner Firmwareversion auch nur die IP-Nummernanzeige fehlerhaft.

Ok, der Router will unbedingt als 2t Netzwerk laufen, ok soller dann muss ja trotzdem ne Internetverbindung möglich sein.

Ich mach nen Faß auf :wink: :stuck_out_tongue_winking_eye:

AT+CIFSR

192.168.178.161

OK