Hallo,
vor einiger Zeit habe ich mir zur Unterstützung und Anbindung meiner (vielen) alten Revolt Steckdosen mit einem Arduino Uno und den billigen 433Mhz Sende- und Empfangsmodulen einen eigenen "CUL" für den Versand und Empfang von Schaltbefehlen für die Steckdosen bebaut. Im Anschluss habe ich mir eigene Sensoren (Arduino, 433Mhz, DHT22, BMP385, DS18x20, u.a.) gebaut und den Datenversand im Datenprotokoll (RC-Switch) versteckt... es sind ja immer nur "kleine" Zahlen. Auch das hat relativ gut funktioniert, bis auf die Tatsache der Daten Überlagerung im 433Mhz Funknetz. Daher war ich auf der Suche nach einer anderen Art und Weise der Datenübertragung zu Fhem.
Aus diesem Wunsch heraus ist ein Sensor mit Wlan Anbindung entstanden. Diesen möchte ich Euch hier kurz vorstellen. Allerdings ist alles noch nicht ganz fertig, aber bestimmt für eigene Gehversuche mit einem ESP8266 geeignet. Wer ab hier nun weiterliest, sollte sich mit dem Umgang des Arduino, der entsprechenden Hardware und der Programmierung von Sketchen auskennen.
Da eine ähnliche Diskussion in http://forum.fhem.de/index.php/topic,28905.msg251979.html#msg251979 (http://forum.fhem.de/index.php/topic,28905.msg251979.html#msg251979) einen anderen Weg eingeschlagen hat, habe ich dazu einen eigenen Thread aufgemacht.
1.) Hardware
Ich setze zur Zeit eine Arduino Uno ein. Zum Einstieg habe ich mir die ESP-01 Version des ESP8266 ausgesucht, da dieser bereits eine verlötete Stiftleiste bestitzt und man mit Zusammenstecken für den Anfang recht gut weiterkommt. Um einen einfachen Sensor zu betreiben benutze ich eine DHT22. Natürlich kann auch jeder andere Sensor genutzt werden.
Auf folgendem Schaltplan (grosse Version siehe unten) könnt ihr die Verdrahtung sehen. Der ESP8266 benötigt 3.3V. Es wird überall empfohlen den 5V Anschluss mit einem Pegelwandler auf 3.3V zu nutzen. Ich habe es einfach mal mit dem Standard 3.3V Anschluss des Uno versucht und bisher noch keine negativen Erfahrungen gemacht. Auch hält die Wlan Verbindung über 2 Stockwerke hinweg ohne Probleme... bisher.
(http://forum.fhem.de/index.php?action=dlattach;topic=33185.0;attach=26636;image) (http://forum.fhem.de/index.php?action=dlattach;topic=33185.0;attach=26638;image)
2.) Natürlich wird ein entsprechender Sketch auf dem Arduino benötigt.
a) Um die ersten Gehversuche mit den Befehlsfolgen des ESP8266 zu machen, kann folgender Sketch genutzt werden. In meinem Fall hatten die ESP-01 bereits die Firmware V 0.9.2.4 (ich selber habe noch keinen Firmware Update gemacht) und sind somit per default auf 9600 baud eingestellt. Daher bitte auch den Serial Monitor der Arduino IDE 1.0.6 auch auf 9600 baud einstellen.
#include <SoftwareSerial.h>
SoftwareSerial esp8266(8,9); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.
// This means that you need to connect the TX line from the esp to the Arduino's pin 2
// and the RX line from the esp to the Arduino's pin 3
void setup()
{
Serial.begin(9600);
esp8266.begin(9600); // your esp's baud rate might be different
}
void loop()
{
if(esp8266.available()) // check if the esp is sending a message
{
while(esp8266.available())
{
// The esp has data so display its output to the serial window
char c = esp8266.read(); // read the next character.
Serial.write(c);
}
}
if(Serial.available())
{
// the following delay is required because otherwise the arduino will read the first letter of the command but not the rest
// In other words without the delay if you use AT+RST, for example, the Arduino will read the letter A send it, then read the rest and send it
// but we want to send everything at the same time.
delay(1000);
String command="";
while(Serial.available()) // read the command character by character
{
// read one character
command+=(char)Serial.read();
}
esp8266.println(command); // send the read character to the esp8266
Serial.println("echo="+command); // send the read character to the esp8266
}
}
Danach können die AT Befehle getestet werden. So sollte es dann auch aussehen:
echo=AT+RST
OK
............
[Vendor:www.ai-thinker.com Version:0.9.2.4]
ready
echo=AT
AT
OK
usw.....
Bevor dies nicht funktioniert sollte ihr nicht weitermachen, denn entweder sind die Einstellungen noch nicht korrekt oder die Hardware ist eventuell falsch verdrahtet.
b) Danach könnt ihr den abgehangenen Sketch verwenden. Dieser Sketch soll einen Sensor darstellen. Z.Zt. beinhaltet er viele Debug Zeilen und ist daher im Serial Montor der Arduino IDE sehr "geschwätzig" ist. Der Sketch ist noch nicht endgültig fertig, aber bereits schon nutzbar. Ihr müsst die Zeile
WaitForResponseOK( F("AT+CWJAP=\"ssid\",\"pwd\""), 10000);
mit den Werten für ssid und pwd Eures eigene Wlan Netzwerkes ergänzen. Die Ausgabe sollte wie folgt aussehen:
ARDUINO: freeram=686 version=0.3.4 Vcc=5006 temp=2515
ESP8266: freeram=670 at_cmd=[AT+RST] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=682 garbage=[.............
[Vendor:www.ai-thinker.com Version:0.9.2.4]
ready
]
ESP8266: freeram=670 at_cmd=[AT+CWQAP] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=670 at_cmd=[ATE0] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=670 at_cmd=[AT+CWJAP="ssid","pwd"] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=670 at_cmd=[AT] wait_for=[OK] resp=[K]
ESP8266: freeram=670 at_cmd=[AT+CIOBAUD?] wait_for=[OK,found] resp=[+CIOBAUD:9600OK]
ESP8266: freeram=686 baud=9600
ESP8266: freeram=670 at_cmd=[AT+GMR] wait_for=[OK,found] resp=[0018000902-AI03OK]
ESP8266: freeram=686 firmware=0018000902-AI03
ESP8266: freeram=670 at_cmd=[AT+CWMODE=1] wait_for=[OK] resp=[ change]
ESP8266: freeram=670 at_cmd=[AT+CIPMUX=1] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=670 at_cmd=[AT+CIPSERVER=1,8888] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=670 at_cmd=[AT+CIPSTO=15] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=670 at_cmd=[AT+CIFSR] wait_for=[OK,found] resp=[192.168.178.43OK]
ESP8266: freeram=686 ipaddr=192.168.178.43
ESP8266: freeram=670 at_cmd=[AT+CWJAP?] wait_for=[OK,found] resp=[+CWJAP:"Buero"OK]
ESP8266: freeram=686 accesspoint ssid=Buero
ESP8266: freeram=670 at_cmd=[AT+CWLAP] wait_for=[OK,found] resp=[+CWLAP:(4,"ssid1",-38,"c0:25:06:bb:27:62",3)+CWLAP:(4,"ssid2",-66,"bc:05:43:dd:51:03",3)+CWLAP:(4,"ssid3",-64,"00:24:fe:07:8e:67",3)+CWLAP:(3,"ssid4",-52,"34:31:c4:8c:08:89",3)+CWLAP:(3,"ssid5",-61,"ac:cf:23:2e:41:c0",3)OK]
ESP8266: freeram=686 accesspoint rssi=-38
ESP8266: freeram=670 at_cmd=[AT+CIPCLOSE=3] wait_for=[OK] resp=[ink is not]
ESP8266: freeram=670 at_cmd=[AT+CIPSTART=3,"UDP","87.230.95.114",123] wait_for=[OK,found] resp=[OK]
ESP8266: freeram=642 at_cmd=[AT+CIPSEND=3,48] wait_for=[>,found] resp=[> ]
DHT22 : freeram=656 temp=222 humidity=437 date=1970-01-01 00:00:31
WEBSRV : freeram=656 inact=197
WEBSRV : freeram=656 recv=[+IPD,3,48:$ê]
NTP : freeram=656 get epoch=1422825492 time=2015-02-01 21:18:12
WEBSRV : freeram=656 inact=343
WEBSRV : freeram=656 inact=375
...
WEBSRV : freeram=656 inact=10472
ESP8266: freeram=642 at_cmd=[AT+CIPSEND=3,48] wait_for=[>,found] resp=[> ]
WEBSRV : freeram=656 inact=10670
WEBSRV : freeram=656 recv=[+IPD,3,48:$ê]
NTP : freeram=656 get epoch=1422825502 time=2015-02-01 21:18:22
NTP : freeram=656 set epoch=1422825502 time=2015-02-01 21:18:22 boot=2015-02-01 21:17:41
WEBSRV : freeram=656 inact=10847
WEBSRV : freeram=656 inact=10882
...
WEBSRV : freeram=656 inact=24624
WEBSRV : freeram=656 chn=0 len=110 urlpath=[/] recv=[+IPD,0,110:GET / HTTP/1.0
]
ESP8266: freeram=652 garbage=[Host: 192.168.178.43
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
OK
]
WEBSRV : freeram=588 len=419 content=[{ arduino: { "led": "0", "version": "0.3.4", "start": "2015-02-01 21:17:41", "uptime": "0 days 00:00:55.920", "freeram": "596", "temp": "28.43", "vcc": "4.876" }, esp8266: { "firmware": "0018000902-AI03", "baud": "9600", "ipaddr": "192.168.178.43", "accesspoint": "Buero", "rssi": "-38", "channel": "0" }, dht22: { "temperature": "22.2", "humidity": "43.7", "date": "1970-01-01 00:00:31", "lasterror": "DHT22 okay" } }
]
WEBSRV : freeram=588 len=84 header=[HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Content-Length: 419
]
WEBSRV : freeram=588 send=[AT+CIPSEND=0,503]
ESP8266: freeram=584 garbage=[
SEND OK
]
ESP8266: freeram=640 at_cmd=[AT+CIPSTATUS] wait_for=[OK,found] resp=[STATUS:3+CIPSTATUS:0,"TCP","192.168.178.50",46405,1+CIPSTATUS:3,"UDP","87.230.95.114",123,0OK]
ESP8266: freeram=640 at_cmd=[AT+CWLAP] wait_for=[OK,found] resp=[+CWLAP:(4,"ssid",-64,"00:24:fe:07:8e:67",3)+CWLAP:(3,"ssid",-52,"34:31:c4:8c:08:89",3)+CWLAP:(4,"ssid",-37,"c0:25:06:bb:27:62",3)+CWLAP:(3,"ssid",-60,"ac:cf:23:2e:41:c0",3)+CWLAP:(4,"ssid",-66,"bc:05:43:dd:51:03",3)OK]
ESP8266: freeram=656 accesspoint rssi=-37
WEBSRV : freeram=656 inact=4593
WEBSRV : freeram=656 inact=5627
DHT22 : freeram=656 temp=222 humidity=433 date=2015-02-01 21:18:41
...
Der Sketch stellt einen Webserver dar, welcher auf Anfragen antwortet. Ich habe mich absichtlich für eine pollende Abfrage entschieden, da ich so aus FHEM heraus die Zeitintervalle der Abfrage bestimme. Viel wichtiger für mich war allerdings die Logik im Sketch zu erkennen, ob noch Abfragen durchkommen. Durch folgende Logik
...
if (millis() - watchdog_millis > MY_WATCHDOG_INTERVALL) {
//reset
resetFunc(); //call reset
} else {
#if defined(MY_DEBUG)
printf_P( PSTR("WEBSRV : freeram=%d inact=%lu\n"), freeRam(), millis() - watchdog_millis );
#endif
}
....
erkennt der Sketch selber, ob er weiter via Wlan abgefragt wird. Ist dies nicht der Fall, wird automatisch ein Reboot des Arduino durchgeführt. Durch den Reboot versucht sich der Arduino wieder im Wlan Netzwerk anzumelden.
Testen kann man die Erreichbarkeit des "neuen" Sensors mittels "curl" sehr einfach:
odroid@odroid:~$ curl http://192.168.178.41:8888/
{ arduino: { "led": "1", "version": "0.3.2", "start": "2015-01-31 23:18:27", "uptime": "0 days 22:10:51.494", "freeram": "668", "temp": "28.43", "vcc": "5.073" }, esp8266: { "firmware": "0018000902-AI03OK", "baud": "9600", "ipaddr": "192.168.178.41", "accesspoint": "Buero", "rssi": "-73", "channel": "0" }, dht22: { "temperature": "16.5", "humidity": "49.1", "date": "2015-02-01 21:29:58" } }
odroid@odroid:~$
Die Daten werden im JSON Format aufbereitet.
Als Gimik antwortet der imbedded Webserver auch auf Anfrage der Form http://ip_addr:8888/cmd=AT+.... (gültiger ESP8266 AT Befehl)
odroid@odroid:~$ curl http://192.168.178.41:8888/cmd=AT+CIPSTATUS
STATUS:3
+CIPSTATUS:0,"TCP","192.168.178.50",52665,1
+CIPSTATUS:3,"UDP","87.230.95.114",123,0
OK
odroid@odroid:~$
Auf FHEM Seite habe ich mich für den HTTPMOD "Anschluss" entschieden. Mit folgenden Definitionen kann man den Sensor einbinden:
define esp8266 HTTPMOD http://192.168.178.41:8888/ 60
attr esp8266 userattr disable icon readingsName_humidity readingsName_temperature readingsRegex_humidity readingsRegex_temperature stateFormat timeout verbose
attr esp8266 disable 0
attr esp8266 icon it_wifi
attr esp8266 readingsName_humidity humidity
attr esp8266 readingsName_temperature temperature
attr esp8266 readingsRegex_humidity humidity": "([0-9.]+)
attr esp8266 readingsRegex_temperature temperature": "([0-9.]+)
attr esp8266 room KG.Vorrat
attr esp8266 stateFormat T: temperature °C H: humidity %
attr esp8266 timeout 10
Ab jetzt können alle bekannten FHEM Funktionen (Filelog, SVG, etc) genutzt werden.
In dem Sketch sind folgende Funktionen enthalten (ausserdem findet man in den Kommentaren noch einige Links zu hilfreichen Seiten im Internet):
- debug mit Filestream (spart jede Menge kostbaren Speicher)
- Schnittstelle zum esp8266
- NTP Client mit Zeit Synchronisierung
- DHT22 Abfrage
- Schaltung einer LED bei Abfrage
- reboot (automatisch und per command)
- webserver
- JSON Ausgabe
Viel Spass beim Experimentieren.
Frank
Danke für die Information, werde ich mir nachbauen. Bauteile habe ich alle da, jedoch mit einem Arduino Nano. Sollte auch klappen.
Die ESP8266 ziehen ziemlich viel Strom ab und zu. Dabei kam es bei mir zu Problemen.
Deshalb habe ich zwischen + und - noch mal einen 100uF Elko angeklemmt.
Inzwischen läuft es einwandfrei.
LG
/robin
Zitat von: fh168 am 01 Februar 2015, 22:46:31
Danke für die Information, werde ich mir nachbauen. Bauteile habe ich alle da, jedoch mit einem Arduino Nano. Sollte auch klappen.
Mit einem Arduino Nano hatte ich keinen Erfolg. Allerdings habe ich es auch nur ein einziges mal versucht... 8)
Zitat von: fh168 am 01 Februar 2015, 22:46:31
Die ESP8266 ziehen ziemlich viel Strom ab und zu. Dabei kam es bei mir zu Problemen.
Auf https://nurdspace.nl/ESP8266#Power (https://nurdspace.nl/ESP8266#Power) finden sich Angaben zu den Wifi Protokollen und der Leistungsaufnahme. Ich hatte bisher noch keine Probleme mit dem ESP8266.
Zitat von: fh168 am 01 Februar 2015, 22:46:31
Deshalb habe ich zwischen + und - noch mal einen 100uF angeklemmt.
Konntest Du dazu bitte mal einen "Schaltplan" oder ein "Verdrahtungsfoto" zeigen?
Gruß
Frank
Hi,
Stützelko siehe z.B. hier (http://arduino-hannover.de/2014/12/11/wifi-kochbuch-mit-esp8266/).
Btw.: Interessante Infos, mal schauen ;) Bezugsquellen für den ESP8266?
Gruß
Thomas
Nano klappt definitiv, habe ich schon tagelang am Laufen.
Nur die Verbindung ESP8266 mit Fhem finde ich sexy.
ich würde mir die esp8266-12 kaufen, die haben mehr GPIOs.
LG
/robin
Zitat von: Rohan am 02 Februar 2015, 11:37:53
Btw.: Interessante Infos, mal schauen ;) Bezugsquellen für den ESP8266?
Bei "China" Komponenten gehe ich immer in der Bucht auf Suche... ich grenze die Suche auf Artikelstandort Deutschland und Sofort kaufen ein. Dort suche ich mir dann einen "vertrauenswürdigen" Verkäufer aus. Damit bin ich in der Vergangenheit immer ganz gut gefahren....
Gruß
Frank
Hallo Frank,
danke für die Infos. In der Bucht habe ich es als aktiver PayPal-Verweigerer schwer. Dann muss ich eben zu dem teureren Fluss(minus "as")-Angebot greifen. Was tut man nicht alles für seine Prinzipien ;)
Gruß
Thomas
Ein sehr schönes Projekt, gut und verständlich erklärt.
Zitat von: frankbeckers am 01 Februar 2015, 21:59:32
Der ESP8266 benötigt 3.3V. Es wird überall empfohlen den 5V Anschluss mit einem Pegelwandler auf 3.3V zu nutzen. Ich habe es einfach mal mit dem Standard 3.3V Anschluss des Uno versucht und bisher noch keine negativen Erfahrungen gemacht.
Ganz schön mutig! Der Arduino UNO arbeitet mit einem Signalpegel von 5V. Die GPIO Pins des ESP8266 sind nicht 5V tolerant.
Hi,
I came along this one
http://www.ebay.com/itm/261786067796?_trksid=p2055119.m1438.l2649&ssPageName=STRK%3AMEBIDX%3AIT
And than connect a dht22 should that work with only input 5v mini usb powered?
Hallo Zusammen,
ich habe versucht die Anleitung nachzubauen, aber ohne Erfolg. Es scheitert schon an der Kommunikation zwischen Arduino und ESP Modul.
Ich habe den ersten Sketch auf den Arduino geladen und den ESP angeschlossen, aber ausser "echo=AT+RST" kommt nichts zurück.
Woran kann das liegen?
Schliesse ich das ESP Modul direkt an den PC an, meldet es sich wie folgt:
AT+RST
OK
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 1396, room 16
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4
tail 8
chksum 0xc0
csum 0xc0
2nd boot version : 1.4(b1)
SPI Speed : 40MHz
SPI Mode : DIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000
Ai-Thinker Technology Co.,Ltd.
ready
WIFI DISCONNECT
Hi,
Du hast GPIO0, 2, 15 falsch verdrahtet, deswegen bist du in einem anderen Bootmode.
Grüße
Alex
Hallo,
Danke für deine Antwort, aber ich habe GPIO0, 2 gar nicht angeschlossen. Muss ich die anschliessen?
mfg Andreas
Welchen ESP hast du denn?
Ich muss GPIO15 bei mir auf masse legen, sonst geht nix.
GPIO0 und 2 sollte auf VCC beim einschalten sein.
Ich hab nen ESP 12
Hallo! Ich habe mal eine Frage, die ich auch schon im Anfängerbereich gestellt habe:
https://forum.fhem.de/index.php/topic,50769.msg423933.html#msg423933
Da kam aber nicht so richtig Schwung in die Diskussion. Ich habe aber erst jetzt dieses Thema hier gefunden. Das ist ja eigentlich genau das was ich will!
Eigentlich müsste das doch mit etwas Glück 1:1 mit diesem Board funktionieren:
http://iot.fkainka.de/board
Damit habe ich nämlich schon ein klein wenig Erfahrung...
Hallo, das Thema ist zwar schon ein bisschen älter, wie es der Zufall will habe ich hier schon einige Nanos mit DHT22 und ESP8266.
Mit großer Vorfreude habe ich mir den Sketch gezogen und gleich mal überprüft. Dabei kamen einige Fehlermeldungen:
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino:110:36: warning: narrowing conversion of '227' from 'int' to 'char' inside { } [-Wnarrowing]
};
^
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino:110:36: warning: narrowing conversion of '236' from 'int' to 'char' inside { } [-Wnarrowing]
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28:0,
from sketch\esp8266_webserver_dht22_fhem.ino.cpp:1:
esp8266_webserver_dht22_fhem:126: error: variable 'dht22_temperature_minmax' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
int dht22_temperature_minmax[2] PROGMEM = { 50, 400 };
^
esp8266_webserver_dht22_fhem:129: error: variable 'dht22_humidity_minmax' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
int dht22_humidity_minmax[2] PROGMEM = { 50, 1000 };
^
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino: In function 'void loop()':
esp8266_webserver_dht22_fhem:415: error: 'now' was not declared in this scope
dht22_time = now();
^
esp8266_webserver_dht22_fhem:426: error: 'now' was not declared in this scope
dht22_time = now();
^
esp8266_webserver_dht22_fhem:435: error: 'year' was not declared in this scope
printf_P( PSTR("DHT22 : freeram=%d temp=%d humidity=%d date=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), dht22_temperature, dht22_humidity, year(dht22_time), month(dht22_time), day(dht22_time), hour(dht22_time), minute(dht22_time), second(dht22_time) );
^
esp8266_webserver_dht22_fhem:435: error: 'month' was not declared in this scope
printf_P( PSTR("DHT22 : freeram=%d temp=%d humidity=%d date=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), dht22_temperature, dht22_humidity, year(dht22_time), month(dht22_time), day(dht22_time), hour(dht22_time), minute(dht22_time), second(dht22_time) );
^
esp8266_webserver_dht22_fhem:435: error: 'day' was not declared in this scope
printf_P( PSTR("DHT22 : freeram=%d temp=%d humidity=%d date=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), dht22_temperature, dht22_humidity, year(dht22_time), month(dht22_time), day(dht22_time), hour(dht22_time), minute(dht22_time), second(dht22_time) );
^
esp8266_webserver_dht22_fhem:435: error: 'hour' was not declared in this scope
printf_P( PSTR("DHT22 : freeram=%d temp=%d humidity=%d date=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), dht22_temperature, dht22_humidity, year(dht22_time), month(dht22_time), day(dht22_time), hour(dht22_time), minute(dht22_time), second(dht22_time) );
^
esp8266_webserver_dht22_fhem:435: error: 'minute' was not declared in this scope
printf_P( PSTR("DHT22 : freeram=%d temp=%d humidity=%d date=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), dht22_temperature, dht22_humidity, year(dht22_time), month(dht22_time), day(dht22_time), hour(dht22_time), minute(dht22_time), second(dht22_time) );
^
esp8266_webserver_dht22_fhem:435: error: 'second' was not declared in this scope
printf_P( PSTR("DHT22 : freeram=%d temp=%d humidity=%d date=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), dht22_temperature, dht22_humidity, year(dht22_time), month(dht22_time), day(dht22_time), hour(dht22_time), minute(dht22_time), second(dht22_time) );
^
esp8266_webserver_dht22_fhem:465: error: 'year' was not declared in this scope
printf_P( PSTR("NTP : freeram=%d get epoch=%lu time=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), epoch, year(epoch), month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch) );
^
esp8266_webserver_dht22_fhem:465: error: 'month' was not declared in this scope
printf_P( PSTR("NTP : freeram=%d get epoch=%lu time=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), epoch, year(epoch), month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch) );
^
esp8266_webserver_dht22_fhem:465: error: 'day' was not declared in this scope
printf_P( PSTR("NTP : freeram=%d get epoch=%lu time=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), epoch, year(epoch), month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch) );
^
esp8266_webserver_dht22_fhem:465: error: 'hour' was not declared in this scope
printf_P( PSTR("NTP : freeram=%d get epoch=%lu time=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), epoch, year(epoch), month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch) );
^
esp8266_webserver_dht22_fhem:465: error: 'minute' was not declared in this scope
printf_P( PSTR("NTP : freeram=%d get epoch=%lu time=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), epoch, year(epoch), month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch) );
^
esp8266_webserver_dht22_fhem:465: error: 'second' was not declared in this scope
printf_P( PSTR("NTP : freeram=%d get epoch=%lu time=%u-%2.2u-%2.2u %2.2u:%2.2u:%2.2u\n"), freeRam(), epoch, year(epoch), month(epoch), day(epoch), hour(epoch), minute(epoch), second(epoch) );
^
esp8266_webserver_dht22_fhem:471: error: 'setTime' was not declared in this scope
setTime(epoch);
^
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino: In function 'void homepage(int)':
esp8266_webserver_dht22_fhem:591: error: 'year' was not declared in this scope
ledState, MY_VERSION, year(boot_time), month(boot_time), day(boot_time), hour(boot_time), minute(boot_time), second(boot_time), uptime(millis()), freeRam(), GetInternalTemp() / 100, GetInternalTemp() % 100, readVcc() / 1000, readVcc() % 1000,
^
esp8266_webserver_dht22_fhem:591: error: 'month' was not declared in this scope
ledState, MY_VERSION, year(boot_time), month(boot_time), day(boot_time), hour(boot_time), minute(boot_time), second(boot_time), uptime(millis()), freeRam(), GetInternalTemp() / 100, GetInternalTemp() % 100, readVcc() / 1000, readVcc() % 1000,
^
esp8266_webserver_dht22_fhem:591: error: 'day' was not declared in this scope
ledState, MY_VERSION, year(boot_time), month(boot_time), day(boot_time), hour(boot_time), minute(boot_time), second(boot_time), uptime(millis()), freeRam(), GetInternalTemp() / 100, GetInternalTemp() % 100, readVcc() / 1000, readVcc() % 1000,
^
esp8266_webserver_dht22_fhem:591: error: 'hour' was not declared in this scope
ledState, MY_VERSION, year(boot_time), month(boot_time), day(boot_time), hour(boot_time), minute(boot_time), second(boot_time), uptime(millis()), freeRam(), GetInternalTemp() / 100, GetInternalTemp() % 100, readVcc() / 1000, readVcc() % 1000,
^
esp8266_webserver_dht22_fhem:591: error: 'minute' was not declared in this scope
ledState, MY_VERSION, year(boot_time), month(boot_time), day(boot_time), hour(boot_time), minute(boot_time), second(boot_time), uptime(millis()), freeRam(), GetInternalTemp() / 100, GetInternalTemp() % 100, readVcc() / 1000, readVcc() % 1000,
^
esp8266_webserver_dht22_fhem:591: error: 'second' was not declared in this scope
ledState, MY_VERSION, year(boot_time), month(boot_time), day(boot_time), hour(boot_time), minute(boot_time), second(boot_time), uptime(millis()), freeRam(), GetInternalTemp() / 100, GetInternalTemp() % 100, readVcc() / 1000, readVcc() % 1000,
^
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino: In function 'void sendContent(int)':
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino:622:25: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
if (espSerial.find(">")) {
^
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino: In function 'char* WaitForResponse(const __FlashStringHelper*, int, const char*)':
C:\Users\SandIII\Documents\Arduino\esp8266_webserver_dht22_fhem\esp8266_webserver_dht22_fhem.ino:643:29: warning: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
strcpy_P(content , (const prog_char*) AT_Command);
^
esp8266_webserver_dht22_fhem:643: error: expected primary-expression before 'const'
strcpy_P(content , (const prog_char*) AT_Command);
^
esp8266_webserver_dht22_fhem:643: error: expected ')' before 'const'
exit status 1
variable 'dht22_temperature_minmax' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Die IDE hat die Ver. 1.8.0, hab extra ein Update auf die neueste Vers. gemacht, weil es mit 1.6.x auch nicht funktioniert hat.
Kann mir bitte jemand meinen Fehler erklären?
Weiters hätte ich noch die Frage, ob es möglich ist hier eine Statische IP zu verwenden?
Vielen Dank schon mal.
Tom