Mit dieser Erkenntnis kann nun ein Programm erstellt werden, das diese Signale ausgibt.
01010101010101010101010101010101010-01010101010101010101010101010101010---- A
10100101010101010101010101010101010-10100101010101010101010101010101010---- 1
01011010010101010101010101010101010-01011010010101010101010101010101010---- 2
01010101101001010101010101010101010-01010101101001010101010101010101010---- 3
01010101010110100101010101010101010-01010101010110100101010101010101010---- 4
01010101010101011010010101010101010-01010101010101011010010101010101010---- 5
10100101010101010101010110101010010-10100101010101010101010110101010010---- up
01011010010101010101010101011010101-01011010010101010101010101011010101---- down
10100101101001010101010101010101101-10100101101001010101010101010101101---- +
10101010010110100101010101010101010-10101010010110100101010101010101010---- -
01011010101001011010010101010101010-01011010101001011010010101010101010---- stop
void setup()
{ pinMode(2, OUTPUT); } void loop() { tone(2, 40000); delayMicroseconds(77); noTone(2); delayMicroseconds(33); } |
void setup()
{ pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delayMicroseconds(77); digitalWrite(2, LOW); delayMicroseconds(33); } |
void setup()
{ pinMode(2, OUTPUT); tone(4, 40000); } void loop() { digitalWrite(2, HIGH); delayMicroseconds(77); digitalWrite(2, LOW); delayMicroseconds(33); } |
Monat |
Jahr
2000 |
Jahr
2014 |
Normalzeit |
Ortszeit |
|||||
Januar |
01.01. | 08:33 | 16:08 | 08:33 | 16:09 | 08:00 | 17:00 | 08:00 |
17:00 |
Januar | 15.01. |
08:25 | 16:28 | 08:24 | 16:29 | 08:00 |
17:00 |
08:00 |
17:00 |
Februar | 01.02. | 08:02 | 16:59 | 08:01 | 17:00 | 07:30 | 17:30 | 07:30 |
17:30 |
Februar | 15.02. |
07:36 | 17:27 | 07:34 | 17:28 | 07:00 |
18:00 |
07:00 |
18:00 |
März |
01.03. | 07:03 | 17:56 | 07:03 | 17:55 | 06:30 | 18:30 | 06:30 |
18:30 |
März | 15.03. |
06:29 | 18:22 | 06:30 | 18:21 | 06:00 |
19:00 |
06:00 |
19:00 |
April |
01.04. | 05:48 | 18:53 | 05:49 | 18:53 | 05:00 | 19:30 |
06:00 |
20:30 |
April | 15.04. |
05:15 |
19:19 |
05:16 | 19:18 |
05:00 |
20:00 |
06:00 |
21:00 |
Mai |
01.05. | 04:40 | 19:48 | 04:41 | 19:47 | 05:00 | 20:30 |
06:00 |
21:30 |
Mai | 15.05. |
04:15 |
20:12 |
04:16 |
20:11 |
05:00 | 20:30 |
06:00 | 21:30 |
Juni |
01.06. | 03:54 | 20:36 | 03:54 | 20:36 | 05:00 | 21:00 |
06:00 |
22:00 |
Juni | 15.06. |
03:47 |
20:48 |
03:47 |
20:48 |
05:00 | 21:30 |
06:00 | 22:30 |
Juli |
01.07. | 03:53 | 20:49 | 03:53 | 20:49 | 05:00 | 21:30 | 06:00 |
22:30 |
Juli | 15.07. |
04:08 |
20:38 |
04:08 |
20:38 |
05:00 | 21:30 |
06:00 | 22:30 |
August |
01.08. | 04:34 | 20:12 | 04:34 | 20:13 | 05:00 | 21:00 | 06:00 |
22:00 |
August | 15.08. |
04:58 |
19:45 |
04:57 |
19:45 |
05:00 | 20:30 |
06:00 | 21:30 |
September |
01.09. | 05:28 | 19:06 | 05:27 | 19:07 | 05:00 | 20:00 | 06:00 |
21:00 |
September | 15.09. |
05:52 |
18:32 |
05:51 |
18:33 |
05:30 | 19:30 |
06:30 | 20:30 |
Oktober |
01.10. | 06:20 | 17:53 | 06:20 | 17:54 | 06:00 | 19:00 | 07:00 |
20:00 |
Oktober | 15.10. |
06:46 |
17:20 |
06:45 |
17:21 |
06:00 | 18:00 |
07:00 |
19:00 |
November |
01.11. | 07:18 | 16:44 | 07:17 | 16:44 | 06:30 | 17:30 | 07:00 |
17:30 |
November | 15.11. |
07:44 | 16:19 | 07:43 | 16:20 | 07:00 |
17:00 |
07:00 |
17:00 |
Dezember |
01.12. | 08:11 | 16:02 | 08:10 | 16:02 | 07:30 | 16:30 | 07:30 |
16:30 |
Dezember | 15.12. |
08:27 | 15:58 | 08:27 | 15:58 | 08:00 |
16:30 |
08:00 |
16:30 |
#include
<Wire.h> #include <DS1307new.h> // http://code.google.com/p/ds1307new/ #define UP_HOUR 0 #define UP_MINUTE 1 #define DN_HOUR 2 #define DN_MINUTE 3 const int RUN_AT[12][2][4] = { // erste Dimension : 12 Monate // zweite Dimension: 0=Tag im Monat zwischen 1-14, 1=Tag im Monat zwischen 15-31 // dritte Dimension: rauf_stunde, rauf_minute, runter_stunde, runter_minute // alle Zeiten sind in Winter- bzw. Normalzeit! { { 8, 0, 17, 0 }, { 8, 0, 17, 0 } }, // 01 - Januar 08:00-17:00 08:00-17:00 { { 7, 30, 17, 30 }, { 7, 0, 18, 0 } }, // 02 - Februar 07:30-17:30 07:00-18:00 { { 6, 30, 18, 30 }, { 6, 0, 19, 0 } }, // 03 - März 06:00-18:30 06:00-19:00 { { 5, 0, 19, 30 }, { 5, 0, 20, 0 } }, // 04 - April 05:00-19:30 05:00-20:00 { { 5, 0, 20, 30 }, { 5, 0, 20, 30 } }, // 05 - Mai 05:00-20:30 05:00-20:30 { { 5, 0, 21, 0 }, { 5, 0, 21, 30 } }, // 06 - Juni 05:00-21:00 05:00-21:30 { { 5, 0, 21, 30 }, { 5, 0, 21, 30 } }, // 07 - Juli 05:00-21:30 05:00-21:30 { { 5, 0, 21, 0 }, { 5, 0, 20, 30 } }, // 08 - August 05:00-21:00 05:00-20:30 { { 5, 0, 20, 0 }, { 5, 30, 19, 30 } }, // 09 - September 05:00-20:00 05:30-19:30 { { 6, 0, 19, 0 }, { 6, 0, 18, 0 } }, // 10 - Oktober 06:00-19:00 06:00-18:00 { { 6, 30, 17, 30 }, { 7, 0, 17, 0 } }, // 11 - November 06:30-17:30 07:00-17:00 { { 7, 30, 16, 30 }, { 8, 0, 16, 30 } }, // 12 - Dezember 07:30-16:30 08:00-16:30 }; int last_up_day_g=0, last_dn_day_g=0; [....] void loop() { int rtc_month, rtc_day; RTC.getTime(); rtc_month=RTC.month-1; // Index in RUN_AT[x][][] rtc_day=(RTC.day>=15); // Index in RUN_AT[][x][] if(rtc_month>=0 && RTC.month<=11) { // RTC.month ist valide if(RTC.hour==RUN_AT[rtc_month][rtc_day][UP_HOUR] && RTC.minute==RUN_AT[rtc_month][rtc_day][UP_MINUTE]) { // aktuelle Zeit passt if(RTC.day!=last_up_day_g) { // heute noch nicht hochgefahren last_up_day_g=RTC.day; open_shutter(); } } else if(RTC.hour==RUN_AT[rtc_month][rtc_day][DN_HOUR] && RTC.minute==RUN_AT[rtc_month][rtc_day][DN_MINUTE]) { // aktuelle Zeit passt if(RTC.day!=last_dn_day_g) { // heute noch nicht runtergefahren last_dn_day_g=RTC.day; close_shutter(); } } } [....] } |
- All pins as outputs, and LOW: 0.35 µA (same as before).
- All pins as outputs, and HIGH: 1.86 µA.
- All pins as inputs, and LOW (in other words, internal pull-ups disabled): 0.35 µA (same as before).
- All pins as inputs, and HIGH (in other words, internal pull-ups enabled): 1.25 µA.
digitalWrite(DS1307_POWER_PIN,
HIGH); // RTC "einschalten" //delay(3); RTC.getTime(); digitalWrite(DS1307_POWER_PIN, LOW); // RTC "ausschalten" |
Hersteller-Doku |
http://bbs.espressif.com/ |
Module Quick Start Guide |
http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf |
Specs (confidential...hihi) |
http://www.esp8266.com/wiki/lib/exe/fetch.php?media=esp8266_specifications_english.pdf |
AT-Befehle und Pinout | http://fkainka.de/kurzinfos-zum-wlan-modul-esp8266-wi07c/ |
Firmware-Update |
https://ukhas.net/wiki/esp8266_firmware_update |
Kolban's book on the ESP8266 |
http://neilkolban.com/tech/wp.../Kolbans-Book-on-the-ESP8266-October-2015.pdf |
ArduinoPin --- R1(2.2KΩ) ---+--- R2(3.3KΩ) --- GND | +--- ESP8266-RX-Pin |
Ablauf ATmega328 | Ablauf Python-Script @ gw |
Verbindung zu gw+port# herstellen Zufallszahl empfangen MD5 aus Zufallszahl + PasswortP bilden MD5 senden Zufallszahl generieren MD5 aus Zufallszahl + PasswortA bilden MD5 empfangen wenn sie nicht zur eigenen MD5 passt Verbindung schließen Uhrzeit senden Uhrzeit empfangen Uhrzeit in RTC einstellen Zeiten-Liste senden Zeiten-Liste empfangen Verbindung schließen |
Socket öffnen und auf Connects warten bei Connect Zufallszahl generieren und senden MD5 aus Zufallszahl + PasswortP bilden MD5 empfangen wenn sie nicht zur eigenen MD5 passt Verbindung schließen Zufallszahl empfangen MD5 aus Zufallszahl + PasswortA bilden MD5 senden Uhrzeit empfangen Uhrzeit zur Info speichern Uhrzeit senden Zeiten-Liste empfangen Zeiten-Liste zur Info speichern ggf. geänderte Zeiten-Liste senden Verbindung schließen |
Log ATmega328 | Log Python-Script @ gw |
connected sent:AUTH_REQ data=230546794 sent:095bb47d0fbd8691edcb25e6b9b43292 data=AUTHORIZED sent:100016807 data=68ca8e9f6cb5d38b95619519ce473a18 own =68ca8e9f6cb5d38b95619519ce473a18 sent:AUTHORIZED data=FINE authorized sent:TIME_INFO data=OK sent:1967.06.11 01:02:03 data=OK sent:GET_TIME data=2015.10.18 19:34:01 |
dede@gw:~$
./SocketServerESP8266.py SocketServer started on port 2626 Client joined 192.168.42.101:2020 received: AUTH_REQ sende challenge sent: 230546794 received: 095bb47d0fbd8691edcb25e6b9b43292 my md5 = 095bb47d0fbd8691edcb25e6b9b43292 sent: AUTHORIZED received: 100016807 sent: 68ca8e9f6cb5d38b95619519ce473a18 received: AUTHORIZED sent: FINE received: TIME_INFO sent: OK received: 1967.06.11 01:02:03 Time-Info: 1967.06.11 01:02:03 sent: OK received: GET_TIME sent: 2015.10.18 19:34:01 Client left 192.168.42.101:2020 |
Befehl |
Funktion |
[mögliche] Antwort |
AT+CWMODE_DEF=1 | "station mode" einstellen | AT+CWMODE_DEF=1 OK |
AT+CWLAP | verfügbare WLANs anzeigen | AT+CWLAP +CWLAP:(0,"FreifunkWees01.2 (http://ffw)",-79,"64:66:b3:fa:ba:c9",1) OK |
AT+CWJAP_DEF="FreifunkWees01.2 (http://ffw)","" | mit WLAN verbinden | AT+CWJAP_DEF="FreifunkWees01.2
(http://ffw)","" WIFI CONNECTED WIFI GOT IP OK |
AT+CWAUTOCONN? | prüfen, ob Autoconnect (=1) an ist | AT+CWAUTOCONN? +CWAUTOCONN:1 OK |
AT+CIPMUX? | prüfen, ob "single connection" (=0) an ist | AT+CIPMUX? +CIPMUX:0 OK |
AT+UART_DEF=38400,8,1,0,0 | Baudrate einstellen |
AT+UART_DEF=38400,8,1,0,0 OK |
rausziehen + kurz warten + wieder
reinstecken
|
||
AT+CWJAP? | prüfen, ob sich das Modul automatisch verbindet | AT+CWJAP? +CWJAP:"FreifunkWees01.2 (http://ffw)","64:66:b3:fa:ba:c9",1,-84 OK |
AT+CIFSR | IP-Adresse anzeigen lassen | AT+CIFSR +CIFSR:STAIP,"192.168.42.102" +CIFSR:STAMAC,"18:fe:34:da:63:d0" OK |
Vcc
ESP8266 |
Antwort auf ping |
Reaktion auf AT-Befehle |
Datenaustausch mit dem Python-Script |
2.2V |
nein |
keine Reaktion | nicht möglich |
2.4V |
ja (viele DUP's) |
ASCII-Salat | nicht möglich |
2.5V |
ja |
ASCII-Salat | nicht möglich |
2.7V |
ja |
korrekt |
braucht mehrere Versuche |
2.8V |
ja |
korrekt |
braucht mehrere Versuche |
3.0V |
ja |
korrekt | braucht manchmal mehrere Versuche |
3.3V |
ja |
korrekt | stabil |
3.5V |
ja |
korrekt | stabil |
3.7V |
ja |
korrekt |
braucht manchmal mehrere Versuche |
3.9V |
ja |
korrekt |
stabil |
4.0V |
ja (viele DUP's) | korrekt |
stabil |
64
bytes from ESP8266-2.FreifunkWees01.local
(192.168.42.102): icmp_seq=147 ttl=255 time=3.75 ms 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=147 ttl=255 time=16.9 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=147 ttl=255 time=17.0 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=147 ttl=255 time=17.0 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=147 ttl=255 time=17.0 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=147 ttl=255 time=17.0 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=148 ttl=255 time=3.55 ms 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=148 ttl=255 time=4.56 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=148 ttl=255 time=8.10 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=148 ttl=255 time=11.2 ms (DUP!) 64 bytes from ESP8266-2.FreifunkWees01.local (192.168.42.102): icmp_seq=148 ttl=255 time=12.9 ms (DUP!) |
Vcc
ESP8266 |
Antwort auf ping |
Reaktion auf AT-Befehle |
Datenaustausch mit dem Python-Script |
2.2V |
nein |
keine Reaktion | nicht möglich |
2.4V |
nein |
keine Reaktion | nicht möglich |
2.5V |
nein |
keine Reaktion | nicht möglich |
2.7V |
nein |
keine Reaktion | nicht möglich |
2.8V |
ja (wenige DUP's) | korrekt |
stabil |
3.0V |
ja |
korrekt | stabil |
3.3V |
ja |
korrekt | stabil |
3.5V |
ja |
korrekt | stabil |
3.7V |
ja |
korrekt |
stabil |
3.9V |
ja |
korrekt |
stabil |
4.0V |
ja (viele DUP's) | korrekt |
stabil |
Typ |
Preis/Stück (Okt.
2015) |
LT 1086 CT3,3 | 3,99 |
LM 1117 T3,3 | 1,15 |
2015.10.31
21:00:21 Verbindung geschlossen ESP8266-1
(192.168.42.101:13374) 2015.11.01 03:00:05 Verbindung hergestellt ESP8266-1 (192.168.42.101:37414) 2015.11.01 03:00:06 Autorisierung abgeschlossen 2015.11.01 03:00:06 Abweichung [sek]: 0 2015.11.01 03:00:06 Datum/Zeit übermittelt 2015.11.01 03:00:07 Zeiten-Tabelle ist aktuell 2015.11.01 03:00:07 Akku-Spannung: 0.94V 2015.11.01 03:00:07 Firmware-Version: 1.5.1 2015.11.01 03:00:07 Verbindung geschlossen ESP8266-1 (192.168.42.101:37414) 2015.11.01 06:30:08 Verbindung hergestellt ESP8266-1 (192.168.42.101:12751) 2015.11.01 06:30:08 Info: Rollladen hoch 2015.11.01 06:30:08 Verbindung geschlossen ESP8266-1 (192.168.42.101:12751) |
Funktion |
Hostname |
numerische IP-Adresse |
ESP8266_power_on_setup_and_wait_for_ip() | 3779 ms | 3787 ms |
ESP8266_connect_TCPIP() | 2671 ms |
102 ms |
ip_address
=192.168.42.101 hostname =ESP8266-1 current_authorization_state=WAIT was_authorized =True current_socket =None last_seen_here =None last_connect_local_time =2015.11.08 19:30:18 last_time_delta_seconds =0 last_voltage =5.12 last_firmware_version =1.6.1 last_restart_timestamp =2015.11.08 19:30:18 last_warning_code =1 |
char i; static unsigned long t1, t2; get_RTC(); t1=RTC.time2000; for(i=0; i<100; i++) { sleep_PWR_DOWN(); // ca. 8 Sekunden Tiefschlaf } get_RTC(); t2=RTC.time2000; ESP8266_power_on_setup_and_wait_for_ip(10); ESP8266_connect_TCPIP(10); RTC.fillByTime2000(t1); snprintf(buf_g, 30, "INFO=%4d.%.2d.%.2d %.2d:%.2d:%.2d", RTC.year, RTC.month, RTC.day, RTC.hour, RTC.minute, RTC.second); TCPIP_send(buf_g); RTC.fillByTime2000(t2); snprintf(buf_g, 30, "INFO=%4d.%.2d.%.2d %.2d:%.2d:%.2d", RTC.year, RTC.month, RTC.day, RTC.hour, RTC.minute, RTC.second); TCPIP_send(buf_g); snprintf(buf_g, 30, "INFO=%4d", t2-t1); TCPIP_send(buf_g); ESP8266_disconnect_TCPIP(); ESP8266_disable(); |
2015.11.14 10:41:35 Verbindung hergestellt
ESP8266-2 (192.168.42.102) 2015.11.14 10:41:35 Info: 2015.11.14 10:27:53 2015.11.14 10:41:35 Info: 2015.11.14 10:41:31 2015.11.14 10:41:36 Info: 818 2015.11.14 10:41:36 Verbindung geschlossen ESP8266-2 (192.168.42.102) |
2015.11.14 11:00:46 Verbindung hergestellt
ESP8266-1 (192.168.42.101) 2015.11.14 11:00:46 Info: 2015.11.14 10:47:05 2015.11.14 11:00:46 Info: 2015.11.14 11:00:42 2015.11.14 11:00:46 Info: 817 2015.11.14 11:00:47 Verbindung geschlossen ESP8266-1 (192.168.42.101) |
2015.11.19 03:00:03 Verbindung hergestellt
ESP8266-1 (192.168.42.101) 2015.11.19 03:00:04 Autorisierung abgeschlossen 2015.11.19 03:00:04 Abweichung [sek]: 0 2015.11.19 03:00:05 Datum/Zeit übermittelt 2015.11.19 03:00:05 Zeiten-Tabelle ist aktuell 2015.11.19 03:00:05 Akku-Spannung: 5.25V 2015.11.19 03:00:05 Firmware-Version: 1.6.5 2015.11.19 03:00:05 Info: sleep_PWR_DOWN_duration_g=8350 2015.11.19 03:00:05 Info: sunw_g[0]=23 2015.11.19 03:00:05 Info: sunw_g[1]=14 2015.11.19 03:00:06 Info: sunw_g[2]=6 2015.11.19 03:00:06 Info: sunw_g[3]=52 2015.11.19 03:00:06 Info: sunw_g[4]=10 2015.11.19 03:00:06 Info: sunw_g[5]=2 2015.11.19 03:00:06 Info: sunw_g[6]=23 2015.11.19 03:00:06 Info: sunw_g[7]=15 2015.11.19 03:00:07 Info: sunw_g[8]=6 2015.11.19 03:00:07 Verbindung geschlossen ESP8266-1 (192.168.42.101) |
2015.11.20 15:00:05 Info:
sleep_PWR_DOWN_duration_g=8340 [....] 2015.11.21 03:00:03 Verbindung hergestellt ESP8266-1 (192.168.42.101) 2015.11.21 03:00:03 Autorisierung abgeschlossen 2015.11.21 03:00:04 Abweichung [sek]: 0 2015.11.21 03:00:05 Datum/Zeit übermittelt 2015.11.21 03:00:05 Zeiten-Tabelle ist aktuell 2015.11.21 03:00:05 Akku-Spannung: 5.23V 2015.11.21 03:00:05 Firmware-Version: 1.6.5 2015.11.21 03:00:05 Info: sleep_PWR_DOWN_duration_g=8380 2015.11.21 03:00:05 Info: sunw_g[0]=10 2015.11.21 03:00:06 Info: sunw_g[1]=2 2015.11.21 03:00:06 Info: sunw_g[2]=-41 2015.11.21 03:00:06 Info: sunw_g[3]=15 2015.11.21 03:00:06 Info: sunw_g[4]=6 2015.11.21 03:00:06 Verbindung geschlossen ESP8266-1 (192.168.42.101) 2015.11.21 07:00:05 Verbindung hergestellt ESP8266-1 (192.168.42.101) 2015.11.21 07:00:06 Info: open shutters 2015.11.21 07:00:06 Verbindung geschlossen ESP8266-1 (192.168.42.101) 2015.11.21 15:00:03 Verbindung hergestellt ESP8266-1 (192.168.42.101) 2015.11.21 15:00:04 Autorisierung abgeschlossen 2015.11.21 15:00:04 Abweichung [sek]: 0 2015.11.21 15:00:05 Datum/Zeit übermittelt 2015.11.21 15:00:05 Zeiten-Tabelle ist aktuell 2015.11.21 15:00:05 Akku-Spannung: 5.23V 2015.11.21 15:00:05 Firmware-Version: 1.6.5 2015.11.21 15:00:05 Info: sleep_PWR_DOWN_duration_g=8380 2015.11.21 15:00:05 Info: sunw_g[0]=54 2015.11.21 15:00:05 Info: sunw_g[1]=4 2015.11.21 15:00:06 Info: sunw_g[2]=110 2015.11.21 15:00:06 Info: sunw_g[3]=1 2015.11.21 15:00:06 Verbindung geschlossen ESP8266-1 (192.168.42.101) |