Forum: Mikrocontroller und Digitale Elektronik ESP8266 hängt bei gleichzeitigem senden/empfangen


von Fritz Huber (Gast)


Lesenswert?

Hallo,

Ich habe gerade etwas Probleme mit dem ESP8266,

Undzwar scheint es als würde der ESP8266 sich jedesmal aufhängen, wenn 
er gleichzeitig etwas senden und empfangen muss.

Sende ich ihm zb. eine größere Datei mittles AT Kommando, und es kommt 
dazwischen ein Link, schreibt der ESP8266 "Link" einfach zwischen die 
Zeilen meines sendens, und danach hängt er, und resettet sich oder fängt 
sich im busy p.

Kennt das phänomen jemand anders auch?

Gibt es dafür eine Abhilfe? Andere Firmware zb.?

Habe aktuell die 0018000902 Firmware drauf.

Ich verwende 9600 Baud, mit einem AtMega128. Es wird eine HTML Seite 
übertragen, die danach wiederrum einige Bilder abfragt ( Get Requests ).

Danke für eure Hilfe, bin schon am verzweifeln ;).

Gruß
Fritz

von Opeldesign (Gast)


Lesenswert?

Da hilft ein Update auf (https://github.com/nodemcu/nodemcu-firmware) 
und der Einsatz von LUA.

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

>
> Sende ich ihm zb. eine größere Datei mittles AT Kommando, und es kommt
> dazwischen ein Link, schreibt der ESP8266 "Link" einfach zwischen die
> Zeilen meines sendens, und danach hängt er, und resettet sich oder fängt
> sich im busy p.
>
> Kennt das phänomen jemand anders auch?
>
> Gibt es dafür eine Abhilfe? Andere Firmware zb.?
>
> Habe aktuell die 0018000902 Firmware drauf.
>
> Ich verwende 9600 Baud, mit einem AtMega128. Es wird eine HTML Seite
> übertragen, die danach wiederrum einige Bilder abfragt ( Get Requests ).
>

welche art von server hast du laufen single oder multi verbindungen
wenn single, haut er dir jedesmal die bestehende verbindung raus
wenn gerade eine datei übertragen wird, dann unterbricht das,
und der client bekommt keine daten mehr

wenn multi ( es können mehrere verbindugen gleichzeitig )
wie gross sind die pakete? sind sie über 2048 byte?
wenn ja musst du dich selber um die pakete kümmern
und brauchst einen multi

wieviele socket / request fallen denn da an pro webseite?
wenn es mehrere sind, dann werden nicht alle auf einmal geöffnet sondern 
eine nach der anderen ( mehrere bilder )
dann musst die verbindungszeit des servers höher gestellt werden
damit er nicht abbricht

single  multi  verbindunszeit
AT+CIPMUX
AT+CIPMODE
AT+CIPSTO


lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

@ Opeldesign:

Danke, werde ich mir gleich anschauen!
Wie genau funktioniert es, dass es mit LUA besser geht?

@Rudi:

ich verwende Multi Verbindungen, Pakete > 2048Byte splitte ich bereits 
auf, das ist kein Problem. Es kommen insgesamt ~ 15 GET Requests, 
nacheinander natürlich weil ja nur 5 gleichzeitig auf dem ESP8266 laufen 
können. Die Zeit sollte lange genug gestellt sein, zumindest braucht es 
ewig, bis der Browser aufgibt. Oder ist das eine andere Zeiteinstellung?

Lg

von Fritz Huber (Gast)


Lesenswert?

Hier ein Beispiel:
1
AT+CIPSEND=4,540
2
3
> ‰PNG
4
   
5
IHDR   #   x   xKm   sRGB ®Îé   gAMA  ±üa     pHYs    ó„   bKGD ÿ ÿ ÿ ½§“   tIMEß/  ²;‰R  ŒIDATx^í™1NÃ@EÿŽí4PphÄ
6
à2Ô95¢¡@Žwø³!å/Ü¥ø/{w=¿D‘F+·×ç—<>=âðp)gÜm
7
˜;ΰl3×€¨%$rnèýŒˆÀ!&´lXZ`áxŽÄ!',Sãµ §ˆ™±$úxùËÏoÀií8W|åŠÏÞñý³âíýÁœ›Á2Ë(,£°ŒÂ2ŠLink
8
h­U×O£×ð4æõ‡ZgTo©kלšã²Æ<&Ô8ªVgp<úó+¦ÎÜÿ²YYu_ƨU·á8’…j©ê%³+y¤Œ,jQ?a]»æÔ¬3.kÌcB{Õbg­qõÜÎüŠ“N£,Ûåø£V݆cÿg–QXFa…e–QXFa…e–QxwàÝÁ^,£°ŒÂ2Ë(,£°ŒÂ2Ë(,£°ŒÂ2Ë(,£°ŒÂ2Ë(,£°ŒÂ2Ë(üìÀÏöb…e–QXFa…e–QXFa…e·%ãMœ7q;±ŒÂ2Ë(,£°ŒÂ2Š’þ ï6cåËEr    IEND®B`‚
9
SEND OK

Hier sieht man, ich sende auf Socket 4, 540 Bytes ( ein PNG Bild ). Und 
in der Mitte kommt plötzlich ein "Link" vom ESP8266. Alles was danach 
kommt funktioniert nichtmehr. ESP8266 hängt sich auf, oder macht gleich 
einen Reset.

von R. W. (Gast)


Lesenswert?

@Fritz

machst du das selber jetzt demonstrativ eigenhändig

"AT+CIPSEND=4,540"

oder hast du einen Debug Schnipsel gepostet?

So wie das aussieht, funkt der Browser in die gleiche Socket ID nochmal 
rein, refresh schliesse ich aus, müsste ja eine neue Socket werden, die 
der ESPler dann eröffnen sollte mit neuer ID, managed Du die aktiven 
LINK Connections und !! schliesst du die dann auch wieder?..

btw:
http://bbs.espressif.com/viewtopic.php?f=5&t=64
nimm die AT 0.20 mit der 0.9.3 SDK
oder schauh dir auch mal die neueste an, die ist heute rausgekommen

http://bbs.espressif.com/viewtopic.php?f=5&t=154

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

nein das war ein Debug Schnitzel.

Auf dem gleichen Socket pfuscht er nicht rein, es ist der Link von einem 
anderen Socket, der Anforderung eines anderen Bildes, aber 
komischerweise einfach mitten im Senden, dadurch hängt alles.

Ja ich schließe die Connections gleich nach "SEND OK".

Werde mir die neuen Files gleich mal ansehen, danke!

Lg

von r_u_d_i (Gast)


Lesenswert?

@Fritz
7、espconn_recv_hold and espconn_recv_unhold to block TCP receiving data 
and unblock it.

das sollte es "vermutlich" sein neueste sdk 0.9.5

aber ich bin mir noch unsicher, wie man es versteht ob es auch so ist 
;-) komme erst am sonnabend dazu selber damit zu spielen.

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hört sich vielversprechend an,

ich lade gerade die neueste FW drauf via online Update des ESP8266, 
hoffe das klappt so.

Falls du etwas in Erfahrung bringst, sag Bescheid bitte :).

Hattest du die genannten Probleme selbst noch nie? Oder noch nie größere 
Daten damit ausgetauscht?

Lg
Fritz

von r_u_d_i (Gast)


Lesenswert?

@Fritz
Ich bin seit AT 0.20 und SDK 0.9.3 zufrieden - nur die Sache mit dem 
SSID - aber das hab ich dann selber mit der fW gelöst.

Die 0.9.4er hab ich ausgelassen, zu heavy, und die 0.9.5 sollte sich 
jetzt der Erfolg einstellen.

Kannst ja mal zwischenjubeln wenn du die 0.9.5 am laufen hast.

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

Ich verstehe :) Hoffen wir das Beste.

Mit dem aktuellen online Update ( das heißt direkt über CIUPDATE ) 
müsste ich die aktuellste 0.9.5 bekommen oder?

Habe das Update gestartet, schmeißt nur Daten raus in einer Tour, lässt 
sich nicht resetten, garnichts. Weißt du eventuell warum?

Lg

von r_u_d_i (Gast)


Lesenswert?

@Fritz:
im /bin ordner /at

Es gibt zwei Varianten für den Download der AT FW

frühere vorgehensweise

download:
boot_v1.1.bin      0x00000
user1.512.old.bin  0x01000
blank.bin          0x3e000 & 0x7e000

neuere die espressif empfielt

download:
boot_v1.2.bin      0x00000
user1.512.new.bin  0x01000
blank.bin          0x3e000 & 0x7e000

hier mal was espressif dazu schreibt:
-------------------------------------

Update steps
1.Make sure TE(terminal equipment) is in sta or sta+ap mode
ex. AT+CWMODE=3
    OK

    AT+RST

2.Make sure TE got ip address
ex. AT+CWJAP="ssid","12345678"
    OK

    AT+CIFSR
    192.168.1.134

3.Let's update
ex. AT+CIUPDATE
    +CIPUPDATE:1    found server
    +CIPUPDATE:2    connect server
    +CIPUPDATE:3    got edition
    +CIPUPDATE:4    start start

    OK

note. If there are mistakes in the updating, then break update and print 
ERROR.

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

habe das File gelesen, und probiert, bekomme aber nur ERROR nachdem ca. 
1 Minute vergangen ist.

Das heißt die 2. Möglichkeit wäre die Files direkt zu flashen? Habe das 
mit dem ESP8266 Flasher probiert, alle 3 hintereinander eingespielt, 
danach startet der ESP8266 ( egal welche Baud ) nurmehr mit kryptischen 
Zeichen.

Ev. ist der Server für das CIUPDATE down?

von r_u_d_i (Gast)


Lesenswert?

@Fritz
das kann sein, dass er down ist.

9600 baud auch nicht?
hast du eine standard FW zur hand , kannst du wieder zurückflashen?

wichtig ist halt dass der espler eine verbindung zum internet hat.
wenn du blank.bin ( das überschreibt deine einstellung zum connecten zu 
deinem i-router ) auch  geflasht hast, dann kann er sich nicht mehr zu 
deinem router verbinden..

hatte er einmal den server connected gehabt? gefunden?


lg rudi

von Fritz Huber (Gast)


Lesenswert?

Hallo, ja zurückflashen geht.

Ja er hat alle 4 Steps durch, also müsste die Verbindung klappen, IP 
Adresse bekommt er.

Das heißt die blank soll ich nicht einspielen?

von r_u_d_i (Gast)


Lesenswert?

@Fritz
nachdem du das eingespielt hast:

neuere die espressif empfielt

download:
boot_v1.2.bin      0x00000
user1.512.new.bin  0x01000
blank.bin          0x3e000 & 0x7e000

musst du ja eine neue Verbindung zu deinem Router einrichten
weil ja blank.bin deine Einstellungen überschrieben hat.
Das hast du so gemacht? Sonst könntets Dich ja nicht über deinen Router 
ins Internet einwählen.

dann hast das CIPUPDTAE ausgeführt?
dann war da:

    +CIPUPDATE:1    found server
    +CIPUPDATE:2    connect server
    +CIPUPDATE:3    got edition
    +CIPUPDATE:4    start start

oder wann hat er abgebrochen?

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

Habe mit dem ESP Flasher die besagten Files, auf die angegebenen 
Adressen geschrieben. Zuerst Boot, dann User, dann die Blanks.

Wenn ich danach starte, kommt er wohl aus dem Bootloader nichtmehr raus 
( Baudrate dürfte 75000 sein ) Und es kommt nur unlesbares heraus.

Wenn ich mit einer anderen Cloud Updatefähigen FW das CIUPDATE probiere, 
schreibt er:

AT+CIUPDATE<\r><\r><\n>
+CIPUPDATE:1<\r><\n>
+CIPUPDATE:2<\r><\n>
+CIPUPDATE:3<\r><\n>
+CIPUPDATE:4<\r><\n>
<\r><\n>
ERROR<\r><\n>


Sollte ich eine andere Flash Methode verwenden, als den ESP Flasher?

Danke
lg

von Fritz Huber (Gast)


Lesenswert?

So Rudi,

mit dem chinesischen ESP Flasher hats funktioniert:
1
AT+GMR<\r><\r><\n>AT version:0.21.0.0<\r><\n>
2
SDK version:0.9.5<\r><\n>

von Fritz Huber (Gast)


Lesenswert?

Ob die neue Version wirklich eine Verbesserung darstellt, wage ich zu 
bezweifeln.

Fehler ist nach wievor vorhanden: Siehe Debugausschnitt:
1
AT+CIPSEND=0,1381<\r><\r><\n><\r><\n>
2
OK<\r><\n>
3
> ex:2; "><\r><img src="logo.gif"/><\r></div><\r><\r><div style="position:absolute; top:300px; left:10px; z-index:2; "><\r><body><h2>Messknecht</h2><\r><br><\r><button id="button1" type="button" onclick="changeImage(1),changeImage(2)">1. DA toggeln</button><\r><button id="button2" type="button" onclick="changeImage(3),changeImage(4)">2. DA toggeln</button><\r><br><\r><br><\r><button id="button3" type="button" onclick="changeImage(5),changeImage(6)">3. DA toggeln</button><\r><button id="button4" type="button" onclick="changeImage(7),changeImage(8)">4. DA toggeln</button><\r><br><\r><br><\r><button id="button5" type="button" onclick="changeImage(9),changeImage(10)">5. DA toggeln</button><\r><button id="button6" type="button" onclick="changeImage(11),changeImage(12)">6. DA toggeln</button><\r><br><\r><br><\r><button id="button7" type="button" onclick="changeImage(13)">Erde toggeln</button><\r><br><\r><br><\r><p>Schalter dr?cken um umzuschalten.</p><\r><p id="demo"></p><\r></div><\r><\r><div><\r>  <div id="outputDiv0"></div><\r>  <div id="outputDiv1"></div><\r>  <di<\r><\n>
4
+IPD,2,300:GET /20.png HTTP/1.1<\r><\n>
5
Host: 192.168.4.1<\r><\n>
6
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0<\r><\n>
7
Accept: image/png,image/*;q=0.8,*/*;q=0.5<\r><\n>
8
Accept-Language: de,en-us;q=0.7,en;q=0.3<\r><\n>
9
Accept-Encoding: gzip, deflate<\r><\n>
10
Referer: http://192.168.4.1/<\r><\n>
11
Connection: keep-alive<\r><\n>
12
<\r><\n>
13
v id="outputDiv2"></div><\r>  <div id="outputDiv3"></div><\r>  <div id="outputDiv4"></div><\r>  <div id="outputDiv5"></div><\r>  <div idiv><\r>  <div id="outputDiv11"></div><\r>  <div id="outputDiv12"></div><\r></div><\r></body><\r></html>

Direkt unterm senden, schreibt er den GET Request rein, und schmiert ab.

Noch dazu ist es aktuell nicht möglich die Baudrate zu wechseln, der 
Befehl AT+IPR=9600 funktioniert zwar, und man kann auf 9600 Baud 
kommunizieren, nach einem "AT+RST" funktioniert aber garnichtsmehr. Nur 
ein neuflashen der user . bin bringt wieder alles auf Ausgangsposition.

von Fritz Huber (Gast)


Lesenswert?

@rudi,

habe noch eine andere Frage, wie fragst du denn die eingehenden Daten 
ab?

Habe aktuell die Library von Peter Fleury, und ich Frage, wenn immer ich 
auf ein "SEND OK" warte, den Buffer ab, ob ein "GET" drinsteckt, und 
setze flags, damit er die nachher beantwortet. Aber irgendwie ist das 
recht wenig elegant, und sollte im UART Receive Interrupt direkt gelöst 
werden oder? Dort ist aber das Problem, dass es aktuell Byte weise 
arbeitet, das heißt "G" könnte im letzten Byte des Buffers stehen und 
"E" im ersten, und damit wäre eine Abfrage mit normalen String 
Funktionen nach "GET" nicht möglich.

Wie löst du das ganze? Speicherst du bis zum LF alles in einem Buffer 
und fragst diesen ab? Hast du irgendwelche Ideen/Ansätze für mich?

Danke
Lg

von r_u_d_i (Gast)


Lesenswert?

@Fritz
bin noch unterwegs..

Fritz Huber schrieb:
> @rudi,
>
> habe noch eine andere Frage, wie fragst du denn die eingehenden Daten
> ab?

machst du das in einer eigenen Firmware oder nutzt du eine fertige 
Firmware?

>
> Habe aktuell die Library von Peter Fleury, und ich Frage, wenn immer ich
> auf ein "SEND OK" warte, den Buffer ab, ob ein "GET" drinsteckt,

Wie nennt sich bei der der Buffer?
Wie ist der definiert?
1
char Buffer[2048];


> und
> setze flags, damit er die nachher beantwortet. Aber irgendwie ist das
> recht wenig elegant, und sollte im UART Receive Interrupt direkt gelöst
> werden oder?

UART?
du nimmst einen externen µC und machst das nicht in der FW?
Oder wie machst Du das?


> Dort ist aber das Problem, dass es aktuell Byte weise
> arbeitet, das heißt "G" könnte im letzten Byte des Buffers stehen und
> "E" im ersten,

Ne nicht unbedingt im ersten aber im nächsten. Du hast ja TCP da sind 
die Packete geordnet. Du brauchst da einen "Stringbuilder" sag ich dazu

Du liest das zeichenweise ( ein zeichen ist ein Byte / char )
und sortierst aus bis es zu einem wie Du sagst 'LF' kommt oder was auch 
immer dein DELIMETER ist.



pseudo
char Buffer[2048];
Buffer = UART_RECEIVE;
im Buffer stehen jetzt zeichen die empfangen wurden
Buffer[0] wäre das 1. zeichen
Buffer[1] wäre das 2. zeichen
Buffer[2] wäre das 3. zeichen
Buffer[3] wäre das 4  zeichen
Buffer[4] wäre das 5  zeichen
Buffer[5] wäre das 6. zeichen
Buffer[6] wäre das 7. zeichen

usw

jedes zeichen das du abtastest kannst dann auf ein Wort abfragen
ich mach das jetzt extra so - es gibt andere wege wie du in einer code 
zeile alles machen kannst - ich bevorzuge schritt für schritt und 
schreibe
lieber eine Zeile mehr als eine Zeile mehr gekürzt; das macht das ganze 
auch später noch übersichtlich zum nachlesen.
1
  // COMMAND REQUEST
2
3
if ( (Buffer[0]=='G' && (Buffer[1]=='E' && (Buffer[2]=='T') )
4
5
  {
6
  
7
  // DOC REQUEST
8
  // da will jemand was haben aber was:
9
 
10
  // wenn der Request ein "/R1" ist
11
   if ( (Buffer[3]=='/' && (Buffer[4]=='R' && (Buffer[2]=='1') )
12
13
   {
14
    UART_SEND(DENE_HTML_DATEN_ALS_ANTWORT_AUF_R1);
15
   }
16
17
  // Du bist immer noch im "GET"
18
  // wenn der Request ein "/R2" ist
19
   if ( (Buffer[3]=='/' && (Buffer[4]=='R' && (Buffer[2]=='2') )
20
21
   {
22
    UART_SEND(DENE_HTML_DATEN_ALS_ANTWORT_AUF_R2);
23
   }
24
25
  
26
// USW
27
28
 // wenn der Request ein Bild ist .. 
29
 // B J steht jetzt kurz zur besseren Beispielübersicht als Bild.jpg
30
 // musst dann mehr zeichen aus dem Buffer vergleichen
31
 // BILD.JPG wäre dann 
32
 // Buffer[4]  = 'B'
33
 // Buffer[5]  = 'I'
34
 // Buffer[6]  = 'L'
35
 // Buffer[7]  = 'D'
36
 // Buffer[8]  = '.'
37
 // Buffer[9]  = 'J'
38
 // Buffer[10] = 'P'
39
 // Buffer[11] = 'G'
40
41
42
   if ( (Buffer[3]=='/' && (Buffer[4]=='B' && (Buffer[2]=='J') )
43
44
   {
45
    UART_SEND(DENE_HTML_DATEN_ALS_ANTWORT_AUF_BJ);
46
    // Also deine PNG Datei mit ordentlichen MIME Header IMAGE/PNG...
47
   }
48
   
49
50
51
  }

> und damit wäre eine Abfrage mit normalen String
> Funktionen nach "GET" nicht möglich.

Doch siehe vorher
Du kannst das weiter ausbauen mit Flags
mit einem zwei Dimmensionalen Array in Bezug auf der Request ID, also 
LINK Number usw. Das kannst Du gestalten wie du willst.
Du kannst zwischen Buffer machen wenn es sehr lange Daten sind
Streamen .. wenn was reingeht setzt einen Flag, machst Prioriräten oder 
Threads, usw... das macht jeder anders und jeder schwört auf seine 
Technik

>
> Wie löst du das ganze? Speicherst du bis zum LF alles in einem Buffer
> und fragst diesen ab? Hast du irgendwelche Ideen/Ansätze für mich?

Schauh dir den Ansatz mal an
Ich mach das auch so in anderen Programmierungen so ( Delphi, C++.. )
Du kannst damit auf alles reagieren
HTML = GET
HTML = PUT

TELNET = ...

TCP Sever      = ##### ( Deine Delimeter Abmachung )
TCP Register   = GPIO  ( Dein Register )
TCP DATA       = 04    ( Dein Pin )
TCP VALUE      = 0     ( LOW ... 1 HIGH )


also Request wäre dann "#####GPIO040"
sagt dir dann GPIO04 wenn Du es so vereinbarst,, auf LOW setzen

// TO DO
OS_SYSTEM_GPIO04(LOW);


also Request wäre dann "#####GPIO041"
sagt dir dann GPIO04 auf HIGH setzen

// TO DO
OS_SYSTEM_GPIO04(HIGH);


usw

Das kannst machen mit
I²C, SPI, PWM, GPIO und das ganze ESP8266 Zeug

Bau auf deinen eigenen Sachen auf, LUA, LIBS und fertige Sachen sind 
nett, schnell aufgespielt, aber wenns eckt,
kommt man nicht weiter, ich mach meine eigenen Sachen, auch wenn ich
einen Tag länger daran sitze, aber ich kann dann weiter machen.

Nimm das mal so an, das ist denke ich der leichteste Ansatz
und denke auch hoffentlich verständlich ;-)

wenn was unklar ist, schreib noch mal ungeniert.
Wie du einen Buffer buildest also einen String aus den einzelnen 
eingehenden Zeichen bildest kaust du jetzt erstmal selber durch,
schieb einfach bytewiese die Byte in eine Variable und vergleiche jedes 
zeichen auf dein "Stop" Zeichen, wenn das da ist dann schliesse den 
String
ab ( String = Array of Byte's ) und werte ihn aus was der Request ist.
Dann machst das auch mehr spass. Wenns eckt schreib nochmal ok!
>
> Danke

gern geschehen
mir wurde hier auch immer weitergeholfen, MOD Karl Heinz ist zwar "Rauh" 
;-) aber man muss ihn zuhören, da stecken sehr viele Details zwischen 
den Zeilen die einem den "AH" Effekt bringen.. der liest jetzt bestimmt 
mit ;-)

Bin leider noch bei der Holzarbeit, der Winter is back ;-)
> Lg

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

wow, danke für die Mühe.

Ich beantworte mal die Fragen, und probiere dann deine Tipps aus :).

Also ich benutze die Standard Firmware mit AT Befehlen, auf meinem µC ( 
AtMega128 ) sind alle html's sowie Bilder gespeichert, der µC sendet 
also nach GET Request, die Daten via AT Befehle zum ESP8266.

Du meintest wahrscheinlich, ob ich das ganze direkt im ESP8266 löse 
oder? Wäre vermutlich der bessere Ansatz, nehme ich an.

Ja, der Buffer ist als
1
 char Buffer[1024]
 definiert bei mir.

Habe die Abfragen schon zum Teil auch so probiert, werde den ganzen 
Ansatz nochmal genau durcharbeiten, und mich die nächsten Stunden ins 
programmieren stürzen ;).

Hoffentlich klappts :)

Lg

von Fritz Huber (Gast)


Lesenswert?

Tut mir Leid, dass ich nochmals ein paar Fragen habe.

Habe nochmals komplett von vorne begonnen, und es so aufgebaut, wie es 
meiner Meinung nach, ( so wie du es auch oben geschrieben hast ), am 
sinnvollsten ist.
1
ISR(USART0_RX_vect)
2
{  char data;
3
  data=UDR0;
4
  
5
  recbuffer[numb]=data;
6
  numb++;
7
  if(numb>=99)
8
    numb=0;
9
  if(data == 10)
10
  {  recbuffer[numb]=0; //String Ende einfügen
11
    numb=0;
12
    if(strstr(recbuffer,"ready"))
13
    {ready=1;}
14
    if(strstr(recbuffer,"GET"))
15
    {get=1;}
16
    if(strstr(recbuffer,"SEND OK"))
17
    {sendok=1;}
18
    if(strstr(recbuffer,"OK"))
19
    {ok=1;}
20
  }
21
  if(data == '>')
22
    groesser=1;
23
}

Der Plan ist folgender:
speichere jedes empfangene Byte im Buffer, sobald das Ende Zeichen 
erkannt wird, überprüfe ob im empfangenen String Wörter vorkommen die 
wichtig sind, wenn ja, Setze die zugehörige variable auf 1 um sie in der 
main Abfragen zu können.

Soweit so gut.

Jetzt treten 2 Hauptprobleme auf:

1) Möchte ich in meinem Hauptprogramm warten bis ein "OK" empfangen 
wurde mache ich folgendes:
1
while(ok==0)
2
{  
3
}
Normaleweise dürfte dies der optimizer nicht wegoptimieren, aber dennoch 
tut er es. Auch wenn ich
1
asm volatile ("nop"::);
 einfüge, optimiert er es weg (Wenn ich en optimizer ausstelle, 
funktioniert es).

2)
1
while(1)
2
{  if(get)
3
  {  //Wenn ein GET empfangen wurde, mache was sinnvolles
4
   }
5
}
Kann es sein, dass es ein Problem gibt, wenn er die Abfrage ausführt, 
und gleichzeitig im Interrupt das get gerade auf 1 setzt Probleme bei 
der Ausführung gibt?

Ich weiß, dass die Ausführung von get=1 im Interrupt immer funktioniert, 
aber dennoch funktioniert es nur alle paar Male, dass er in die Abfrage 
hineinspringt, und den Inhalt ausführt.

Weiß jemand Abhilfe hierfür?

Danke für die Hilfe :)

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

> Ich weiß, dass die Ausführung von get=1 im Interrupt immer funktioniert,
> aber dennoch funktioniert es nur alle paar Male, dass er in die Abfrage
> hineinspringt, und den Inhalt ausführt.
>
> Weiß jemand Abhilfe hierfür?

Mir fällt dazu ein,  Du könntest noch mit einem zusätzlichen Timer 
arbeiten und den Buffer abarbeiten ( FIFO ) , also nicht unbedingt 
darauf warten sondern gelegentlich aber schon schnell..  schauhn was im 
Buffer ist, wenn ein neues Get kommt, dann hat das Vorrang,  denke dass 
die Priorität am Datenempfangen höher gesetzt sein soll. Auswerten und 
absenden kannst dann immer noch

Stichwort : Circular Buffer // FIFO

http://en.wikipedia.org/wiki/Circular_buffer

Und vergiss das Flush beim Buffer nicht ;-)

lg rudi ;-)

von Sascha W. (sascha-w)


Lesenswert?

Fritz Huber schrieb:
> 1) Möchte ich in meinem Hauptprogramm warten bis ein "OK" empfangen
> wurde mache ich folgendes:
>
1
> while(ok==0)
2
> {
3
> }
4
>
Das scheint mir reichlich Sinnfrei, denn dann steht das Programm ja und 
macht nix anders als warten.

> Kann es sein, dass es ein Problem gibt, wenn er die Abfrage ausführt,
> und gleichzeitig im Interrupt das get gerade auf 1 setzt Probleme bei
> der Ausführung gibt?
Nicht wenn du die Variablen entsprechend volatile deklarierst.

Was passiert wenn mehr als 99Bytes kommen und das entsprechende 
"Schlüsselwort" zerschnitten wird?

Sascha

von Fritz Huber (Gast)


Lesenswert?

Hallo rudi, hallo sascha.

Danke Rudi, ich bin nun einiges weiter gekommen :)!

Sascha:

Ja er wartet nur, weil bevor dieses Wort nicht empfangen wird, darf er 
auch nicht weitermachen.

Es kann nach 99 Bytes kein Schlüsselwort mehr kommen welches von 
Interesse ist, deshalb habe ich es nach 99 Bytes abgeschnitten. GET 
Requests sind Zeilenmäßig maximal ca. 50 Bytes lang, deshalb wäre mehr 
auch unnötig.

Habe die variablen jetzt volatile markiert und das hat geholfen.

@ Rudi:

Ich habe es jetzt geschafft, dass er meine Seite incl. ( kleinerer ~ 500 
Byte großer ) Bilder aufbaut.

Bei größeren Bildern ( die ich in 2048 Byte Teile zerteilen muss ) gibt 
es allerdings Probleme.

Siehe selbst:
1
AT+CIPSEND=1,2048<\r><\r><\n>
2
> ?PNG<\r><26><\0><\0><\0><\r>IHDR<\0><\0><\0>?<\0><\0><\0><<\b><6><\0><\0><\0>7?kp<\0><\0><\0><6>bKGD<\0>?<\0>?<\0>?????<\0><\0><\0><9>pHYs<\0><\0><21><18><\0><\0><21><18><1>??<23><21><\0><\0><\0><7>tIME<7>?<1><18><6>$<21>pt?<1><\0><\0><24>!IDATx??][s<28>?u??{z?{<1><\b><18>$A??8<22>?H*Y?/??Nb9?K?<18>??I??<\r>q????*??*???Hv,_EJ$EJ4?<4>I?????t?a?????<5><22><\0>IP?S?<2>wgvfz?;???<16>?<20>?<20><9>!T?e<\0><\0>?<20>?<16>PJ?RZ???<2>!??<\f>!<4>??Q???K)??<18>?? ???k??/?,?????<16>B????q??Rp<28><7>?<16>8?<3>?<24><24>c<4>s:?D<30>'??<WI?@<3>?<4>?<6><21>!?<20>??s???_???k??S?y?Y?3??f<30>?Z?}??{?o3?????sf?s<2>?<16>B???B????RZ?L?gJb[??La3?<9>?i<18>???<6>??q?????Y????"????<16>?X?~?R? <\b>?y??<9>?????\u?]?y<14>??<4>?5?<\0>@JY??u]??[??1?<7>`?A?<26>?I?i?<1> ??<2>?y?<23>k?k?&????<28>?9|??k?3??<14>~??j????c?!?s0?I?mp?98?p]Wk<9>t:<29>?i!<4>?</?<\0><19><&??f?<6>??`6??c(????8???????q<28>??[?W??p8?xv?\?{PJ?1? <\b><16><4>??<9>?U??z=5<24><\f>??.?,?R?sdY<6>)%\?????}<31>?<16>??m???"?2<\f>?C<\b>!<\0>???m?k??6???M??9?U??d(???b<2>??a???}<4>A<\0>?u??B?$<24><\f><6>???<16>????n4<26>ss?Y<2><28>?jgg<7>?????<<15>I?@J? <\b>???<\0>!<4>???????$I@<\b>?????L;?<19>?<20>?n???<25><21>2_??W9??<9>f?[?<15>?Nn??L3Hk?0<\f>??>??<24><14>??t:p]<23>??@<\b><1>?X?<\b>????l?<25>???kkK?i????i<1>?,??l6<17>E<17>z?<30>??????[??<26>H?L1?<1><29>])??&???BU`75A<21>??B???m<\r>`:??O?<\f>?8N?<\0>Z<19>z??Z?<6>?9:?<14>??~q]}?6???;7g??<\b>~)????(5K\????":?<14>Z?<22>?8???{?k?????if?<9>?*f???7%?v??I???1?4?+<11>?jSG)?,??9G??<\0>c<\f>?n<23>??`$<\b><\b><5>?<14>?I<\f>???j??ow@<28><6>J<25>r???"?<18><4><\0>U<4> <\0>??$<18>D<17>@??CH? e~<\0><4><\0>?2_@?@?n<2>(?||<29><2><5>?<\0>@<26><23>?<7><15>???0<16>??<28>??<\f>??#?Ex?+/???@<30>;??4U?v{"<\f>??????$I?j?0<28><14>?0????b?e?1<29>?2'????k??]??)????`7?wU??d??0l????u???eYa????<????;aR?i?0????[??<24>?n<7>~=@??Pr?<28>R?J??<\0>????<1>y8??0_?m<4>~@A<1>??(<2><2><9>??s?#h>Nu%<1>?<18>$b?;????<4>$?8Mp???q??K???<28>;??$Q???E?C'?<????"<30>>|?<7><15><30>?R??J???$t<25>??<31>?<24>?<n>w?-???0<19>Z?<25>?4?f?*'?v?M2?F<31>???pt9?h???u:p?<3><16><2>P<2>?uq?????<24>??`<14>??<\0>e<\f>9<20>??? ????W??K2~?`?U?#]0??<26>?C??<1>?%$]??$Qp(????:<16>JBf9B?"?q??<11><3>???<27>X\\$?<2>?4M???z<1><14>-?<22><23><23>A)??????)j?Z<17>?.???<18>R?I?*<7>?<4>?mB???<17>'3Tjk<\b><29>v5?<14>3<1><23><4>????|?*??^???I??b??<16>*<21>honA<1><16>\AH??<31>`??*??]0%A??<28>?<18>(B <9><1>???<<18>??%?G?'PPPD<1>J?<\r><27><2>?h?<9>-???x\?<\b>?<18><2>?a<29>?z<29>???<16>???? 9?B?D?$p?<\b>??.?z?o??5p?!G<2>??????????1<28><14>?????V?<21>5:<26>d?<9>Q<21>Z?r(??_YY???.<30><x????<9>?gY???elll`cc<3>?=???=?<???"666???????<2>??o?????*??>.^?X?_3B?V???w<17>?1.^?8<1>?23g<26>3?Z<5>@??K??<17>D`Rak{<27><3>??q<14>?<9>\8}<22>W?\??_???<17>??????;?w??<28>??><20><24>?r@<29><7>"M??<11><23>?ta<5>tJiI??r????N?????????<14>n???(?????-?<15>CB<\b>4<26>??(???<15>'?J?F?0E<24>cX[[C??p]<23>y???l<22>??e<25>??n!y?R??<\b>Y??u]?i?v?=a????"#?e<25>?,C?$8?l???:??@??v ????K??<16>q?~??<7>??x????H/?????s??I?????<2>ex>?<\f><24>?<??<\f>???1,CONNECT<\r><\n>

Ich hoffe man kann es erkennen ( ganz nach rechts scrollen! ).
Er sendet alles raus, und in der Zeit wo er es überträgt schreibt er ein 
"CONNECT" und die "SEND OK" Wörter kommen nie. Das dürfte aber eher ein 
Fehler im ESP sein, weil manchmal, wenn er "CONNECT" nicht rausschreibt, 
klappt es natürlich einwandfrei.

Weißt du was ich hier machen könnte?

Habe die Version 0020000903, die neue SDK habe ich probiert, aber da ich 
sie auf 9600 Baud nicht umstellen kann ( wie oben beschrieben ) hilft 
mir das aktuell nicht viel.

Wäre über deine Hilfe sehr dankbar :)

Lg
Fritz

von r_u_d_i (Gast)


Angehängte Dateien:

Lesenswert?

Fritz Huber schrieb:

> Es kann nach 99 Bytes kein Schlüsselwort mehr kommen welches von
> Interesse ist, deshalb habe ich es nach 99 Bytes abgeschnitten. GET
> Requests sind Zeilenmäßig maximal ca. 50 Bytes lang, deshalb wäre mehr
> auch unnötig.
>
> Habe die variablen jetzt volatile markiert und das hat geholfen.
>
> @ Rudi:
>
> Ich habe es jetzt geschafft, dass er meine Seite incl. ( kleinerer ~ 500
> Byte großer ) Bilder aufbaut.

Super!!
Geht doch ;-) und hast selber gemacht! Siehste!

>
> Bei größeren Bildern ( die ich in 2048 Byte Teile zerteilen muss ) gibt
> es allerdings Probleme.


Das musst dann selber in die Hand nehmen:
Es gibt verschiedene Techniken die daten FIFO mässig rauszuschaufeln..

eine Möglichkeit ..
das riesen Paket "streamen"
ohne dabei:
- die aktuelle socket zu unterbrechen
- eine neue aufzubauen ( ohne request(adresse,id) keine 
response(adresse/id)

Du weisst wie gross das Packet ist
Du weisst welche Grösse der "sendbuffer" hat
Jetzt teilst das Paket auf in buffermax Teilpakete

SEEK!!!(0)
immer an die erste Stelle setzen beim stream!
sendeteilpaket[ConnectionRequestID] // der erste buffer ist draussen

der zeiger steht jetzt am ende! daher wieder
SEEK!!!(0)
sendeteilpaket[ConnectionRequestID] // das nächste Teilpaket
...
bis deine Bilddatenpakete kommplet draussen sind
dann erst
socket[ConnectionRequestID].close()

kommt dir ein get dazwischen, dann pausiert/pegelt hin und her je 
nachdem wie du das machen willst,
der receive buffer wird aufgefüllt
dann gehts weiter mit sendbuffer

da kannst eine "maschinerie" erstellen und abwägen wie du das am besten 
machst.

du kannst es auch zeichenweise aus einem weiteren paket buffer /  ( FIFO 
)  senden
den du danach wieder löscht /flush)  und nur bei bedarf bereitstellst,
soviel speicher wie dir dann zur verfügung steht zu dem zeitpunkt kannst 
dann dafür ( maloc ) den buffer erstellen -

btw:
ich hab meinen buffer auf char buffer[256] stehen
und hab mehr teilpakete.
allerdings mach ich das direkt in der FW und merze damit ein paar sachen 
aus.

> Er sendet alles raus, und in der Zeit wo er es überträgt schreibt er ein
> "CONNECT" und die "SEND OK" Wörter kommen nie. Das dürfte aber eher ein
> Fehler im ESP sein, weil manchmal, wenn er "CONNECT" nicht rausschreibt,
> klappt es natürlich einwandfrei.
>
> Weißt du was ich hier machen könnte?


frage, wie sieht dein µC code aus für den teil des senden der bilddatei?
also kompletter mime mit daten, hast du das png als bin und dann als 
char
1
// webdaten.h
2
..
3
..
4
char bild_blume [] = "0x.. 0x.................";
5
char bild_baum  [] = "0x.. 0x.................";
6
char bild_haus  [] = "0x.. 0x.................";
7
char bild_auto  [] = "0x.. 0x.................";
8
9
...
10
11
12
// response.c
13
14
15
if (request=="blume.jpg")
16
{
17
18
// wie sieht das bei dir aus 
19
// uart_send..()
20
21
}
22
23
24
..

schau mal auch:
Beitrag "Re: Bild als HEX in html File einbinden"



>
> Habe die Version 0020000903,

die nehme ich auch her -
die hat noch ein paar fehler ,  SSID buffer länge
aber mir reichen erst mal SSID[10] anstatt SSID[32]

Uart wackelt noch ein wenig ( dein ausschnitt ist passend )
daher buffer[256]


> die neue SDK habe ich probiert, aber da ich
> sie auf 9600 Baud nicht umstellen kann

Beitrag "Sendungen kommen alle heute 24.12. an"

baud rate support 
110,300,600,1200,2400,4800,9600,19200,38400,57600,74880,115200,230400,25 
6000,460800,921600

0.9.3.5
attached von
http://www.esp8266.com/download/file.php?id=330

oder hier quelle:
http://www.ai-thinker.com/forum.php?mod=viewthread&tid=512&extra=page%3D1

mit AT+CIOBAUD?
wird die aktuelle Baudrate ausgegeben


Setzen auf 115200 mit
AT+CIOBAUD=115200

Setzen auf 19200 mit
AT+CIOBAUD=19200

Setzen auf 9600 mit
AT+CIOBAUD=9600


..



> ( wie oben beschrieben ) hilft
> mir das aktuell nicht viel.

kannst ja mal probieren, auf dem ESP-12 ist die FW standard.

lg

rudi :-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
>
> Das musst dann selber in die Hand nehmen:
> Es gibt verschiedene Techniken die daten FIFO mässig rauszuschaufeln..
>
> eine Möglichkeit ..
> das riesen Paket "streamen"
> ohne dabei:
> - die aktuelle socket zu unterbrechen
> - eine neue aufzubauen ( ohne request(adresse,id) keine
> response(adresse/id)
>
> Du weisst wie gross das Packet ist
> Du weisst welche Grösse der "sendbuffer" hat
> Jetzt teilst das Paket auf in buffermax Teilpakete
>

Genau das dachte ich hätte ich gemacht, der ESP akzeptiert maximal 2048 
Bytes auf einem Schlag, deshalb habe ich die Bilder in 2048 Byte Teilen 
gesendet.

> SEEK!!!(0)
> immer an die erste Stelle setzen beim stream!

Das würde nur gelten, wenn man direkt den ESP programmiert oder? Oder 
auch via µC mit AT Befehl? Habe das "SEEK!!!(0)" noch nie gesehen 
vorher. Oder verstehe ich es gerade nicht ;)?

> sendeteilpaket[ConnectionRequestID] // der erste buffer ist draussen
>
> der zeiger steht jetzt am ende! daher wieder
> SEEK!!!(0)
> sendeteilpaket[ConnectionRequestID] // das nächste Teilpaket
> ...
> bis deine Bilddatenpakete kommplet draussen sind
> dann erst
> socket[ConnectionRequestID].close()

Genau so habe ich es gemacht. AT+CIPCLOSE=(mein socket)

>
> kommt dir ein get dazwischen, dann pausiert/pegelt hin und her je
> nachdem wie du das machen willst,

Sobald ein Connect dazwischen kommt, hängt der ESP
Was mir allerdings aufgefallen ist:
Angenommen auf Socket 0 kommt die Anfrage nach einem größeren Bild.

Ich sende 2048 Byte auf Socket 0, danach meint er "0,CONNECT" also als 
hätte sich etwas auf Socket 0 neu verbunden. Und es kommt auch kein SEND 
OK mehr. Sendet man trotzdem einfach etwas auf Socket 0 kommt die 
Meldung "Link is not", Als würde er die Verbindung einfach abbrechen. 
Aber ich verstehe nicht wieso? Bei kleineren Bildern ( 400-600 Byte ) 
funktioniert das.


> btw:
> ich hab meinen buffer auf char buffer[256] stehen
> und hab mehr teilpakete.
> allerdings mach ich das direkt in der FW und merze damit ein paar sachen
> aus.

Sollte ich einen kleineren Buffer probieren? Wie gesagt, aktuell habe 
ich 2048 Byte die ich auf einem Schlag sende.

>
> frage, wie sieht dein µC code aus für den teil des senden der bilddatei?
> also kompletter mime mit daten, hast du das png als bin und dann als
> char
>

Habe die PNG genommen und alle Bytes per 0x.. in ein char Feld 
geschrieben, das ganze liegt im Programm Speicher ( wegen der größe ).
Gesendet wird dann mit pgm_read_byte um es auch richtig zu lesen.
1
const char png15[] PROGMEM={0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4B,0x08,0x06,0x00,0x00,0x00,0xFA,0x7E,0x3E,0x6E,0x00,0x00,0x00,0x01,0x73,0x52,0x47,0x42,0x00,0xAE,0xCE,0x1C,0xE9,0x00,0x00,0x00,0x04,0x67,0x41,0x4D,0x41,0x00,0x00,0xB1,0x8F,0x0B,0xFC,0x61,0x05,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x15,0x12,0x00,0x00,..................,0xA3,0xB0,0x8C,0xC2,0x32,0x0A,0xCB,0x28,0x2C,0xA3,0xB0,0x8C,0xC2,0x32,0x0A,0xCB,0x28,0x2C,0xA3,0xB0,0x8C,0xE2,0x8A,0x64,0x80,0x5F,0xB8,0xE3,0xB1,0xFA,0xCE,0xDB,0x5B,0x1E,0x00,0x00,0x00,0x00,0x49,0x45,0x4E,0x44,0xAE,0x42,0x60,0x82};
(habs gekürzt damits übersichtlich bleibt.

Gesendet wird mit:
1
uart_puts("AT+CIPSEND=");  //Sende Daten
2
  uart_puts(bufferr);    // Nehme richtigen Kanal
3
  uart_puts(",540\r\n");    //Wieviele Bytes
4
  while(!groesser);   //Warte bis größer Zeichen erkannt
5
  groesser=0;
6
  for(int ii=0;ii<540;ii++)  //sende die 540 Byte die das Bild groß ist.
7
  {  uart_putc(pgm_read_byte(&(png10[ii])));    }


>
> die nehme ich auch her -
> die hat noch ein paar fehler ,  SSID buffer länge
> aber mir reichen erst mal SSID[10] anstatt SSID[32]
>
Das stört nicht, die SSID ist kein Problem.
> Uart wackelt noch ein wenig ( dein ausschnitt ist passend )
> daher buffer[256]

Wie meinst du mein Ausschnitt ist passend? bzw. "wackeln"?

> Setzen auf 9600 mit
> AT+CIOBAUD=9600
>
>

Mit CIOBAUD geht es in der aktuellen FW nichtmehr, sondern nurmehr mit 
AT+IPD=... Das geht bei der alten Firmware, die du auch verwendest ohne 
Probleme, bei der neuen funktioniert nach der Umstellung der ESP 
nichtmehr und muss neu geflasht werden.

Bin langsam am verzweifeln mit dem Ding ;).

Lg

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

>> SEEK!!!(0)
>> immer an die erste Stelle setzen beim stream!
>
> Das würde nur gelten, wenn man direkt den ESP programmiert oder? Oder
> auch via µC mit AT Befehl? Habe das "SEEK!!!(0)" noch nie gesehen
> vorher. Oder verstehe ich es gerade nicht ;)?

Etwas schwach jetzt von mir erklärt
Wenn man einen stream öffnet muss man den zeiger auf das erste byte 
setzen "seek=suchen"[0] ist nur ein array
dann folgen byteweise die daten ++i
dann steht der zeiger am ende
dann "seek[0]" an den anfang stellen
und dann wieder senden ++i

>> bis deine Bilddatenpakete kommplet draussen sind
>> dann erst
>> socket[ConnectionRequestID].close()
>
> Genau so habe ich es gemacht. AT+CIPCLOSE=(mein socket)

ok , dann passt das ja.


> Sobald ein Connect dazwischen kommt, hängt der ESP
> Was mir allerdings aufgefallen ist:
> Angenommen auf Socket 0 kommt die Anfrage nach einem größeren Bild.
>
> Ich sende 2048 Byte auf Socket 0, danach meint er "0,CONNECT" also als

mhm - das wäre nicht gut.
normalerweise schliesst der ESP die Socket nur von selber wenn AliveTime 
abgelaufen, erhöhen mit AT+CIPSTO.

> hätte sich etwas auf Socket 0 neu verbunden. Und es kommt auch kein SEND
> OK mehr.

Da überschneidet sich was, bestehendes Connect auf Socket[0] wird 
überschrieben mit neuem Connect auf Socket[0] mit neuem Request
der nicht bedient wird.

> Sendet man trotzdem einfach etwas auf Socket 0 kommt die
> Meldung "Link is not",

Ja weil er nicht weiss wohin.

> Als würde er die Verbindung einfach abbrechen.
> Aber ich verstehe nicht wieso?

An dir liegt das nicht.

> Bei kleineren Bildern ( 400-600 Byte )
> funktioniert das.

ja die gehen schnell.

>
>
>> btw:
>> ich hab meinen buffer auf char buffer[256] stehen
>> und hab mehr teilpakete.
>> allerdings mach ich das direkt in der FW und merze damit ein paar sachen
>> aus.
>
> Sollte ich einen kleineren Buffer probieren? Wie gesagt, aktuell habe
> ich 2048 Byte die ich auf einem Schlag sende.

probiere mal den buffer zu senken.

>
>>
>> frage, wie sieht dein µC code aus für den teil des senden der bilddatei?
>> also kompletter mime mit daten, hast du das png als bin und dann als
>> char
>>
>
> Habe die PNG genommen und alle Bytes per 0x.. in ein char Feld
> geschrieben, das ganze liegt im Programm Speicher ( wegen der größe ).
> Gesendet wird dann mit pgm_read_byte um es auch richtig zu lesen.

> Gesendet wird mit:

Hab mal dazwischen reingeschrieben:


>
1
> uart_puts("AT+CIPSEND=");  //Sende Daten
2
>   uart_puts(bufferr);    // Nehme richtigen Kanal
3
4
// 
5
// legst du das händisch fest wieviele bytes
6
7
>   uart_puts(",540\r\n");    //Wieviele Bytes
8
>   while(!groesser);   //Warte bis größer Zeichen erkannt
9
>   groesser=0;
10
11
// woher nimmst du den wert 540 ( ohne \r\n am Schluss ! ) ?
12
// mit Cipsend=540,.. schliest das nach dem 540 selber ab!
13
14
>   for(int ii=0;ii<540;ii++)  //sende die 540 Byte die das Bild groß ist.
15
>   {  uart_putc(pgm_read_byte(&(png10[ii])));    }
16
>
>


Ok - wie sieht es aus wenn das Paket grösser ist als 2048?
Wie splittest  du das auf, kann es sein dass ein Byte zuviel mitgeht?
kannst du ein kleines Delay einbauen bevor du die
nächsten Paket Daten sendest?


>
> Wie meinst du mein Ausschnitt ist passend? bzw. "wackeln"?

Ich hatte einen Überlauf bei > 2048 für den buffer
und meinte, dass ich am besten mit 512 und dann mit 256 byte fahre.
das wackeln meine ich damit, senden der 2048 ist nicht in einem ruck 
möglich obwohl es so sein sollte ..

ich mach das alles in der FW -
ich werde mal ein µC mit AT steuern lassen wie du es machst,
denke ich komme auf die gleiche Problematik, da man dann auf den
UART des ESP keinen Einfluss nehmen kann.


> Mit CIOBAUD geht es in der aktuellen FW nichtmehr, sondern nurmehr mit
> AT+IPD=... Das geht bei der alten Firmware, die du auch verwendest ohne
> Probleme, bei der neuen funktioniert nach der Umstellung der ESP
> nichtmehr und muss neu geflasht werden.
>
> Bin langsam am verzweifeln mit dem Ding ;).

https://www.youtube.com/watch?v=x4lBTmkmg7I

;-)

ne nicht aufgeben.

Das kann sich nur um einen Puffer Bug im Uart  handeln.
Werd das mal perUART zu einem simmulierten µC probieren.
Heut komm ich nur nicht dazu - denke Mo/Di

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
>
> Etwas schwach jetzt von mir erklärt
> Wenn man einen stream öffnet muss man den zeiger auf das erste byte
> setzen "seek=suchen"[0] ist nur ein array
> dann folgen byteweise die daten ++i
> dann steht der zeiger am ende
> dann "seek[0]" an den anfang stellen
> und dann wieder senden ++i

Achso ich verstehe, ja das habe ich im Grunde so implementiert, also 
dahingehend funktioniert die Datenabfolge.

>
>
> mhm - das wäre nicht gut.
> normalerweise schliesst der ESP die Socket nur von selber wenn AliveTime
> abgelaufen, erhöhen mit AT+CIPSTO.
>

AT+CIPSTO? ergibt 180
AT+CIPSTO=300 ergibt ein ERROR, lässt sich also nicht ändern. Aber 
selbst 3 Minuten müsste groß genug sein, denke ich.


>> hätte sich etwas auf Socket 0 neu verbunden. Und es kommt auch kein SEND
>> OK mehr.
>
> Da überschneidet sich was, bestehendes Connect auf Socket[0] wird
> überschrieben mit neuem Connect auf Socket[0] mit neuem Request
> der nicht bedient wird.

Richtig, aber ich verstehe nicht ganz was :/


>> Sollte ich einen kleineren Buffer probieren? Wie gesagt, aktuell habe
>> ich 2048 Byte die ich auf einem Schlag sende.
>
> probiere mal den buffer zu senken.

Hab ich probiert, ändert nichts.
Das einzige was ein wenig etwas bringt, wenn ich einfach mehr sende als 
ich ihm per CIPSEND vorgebe. Also zb. sage ich ihm, ich schicke 1024 
Bytes, sende aber 1040 Bytes, dann kommt es (wenig häufig zumindest) zu 
keinem Reconnect, wo er abbricht.

>
> Hab mal dazwischen reingeschrieben:
>
>>> uart_puts("AT+CIPSEND=");  //Sende Daten
>>   uart_puts(bufferr);    // Nehme richtigen Kanal
>
> //
> // legst du das händisch fest wieviele bytes

Ja!

>
>>   uart_puts(",540\r\n");    //Wieviele Bytes
>>   while(!groesser);   //Warte bis größer Zeichen erkannt
>>   groesser=0;
>
> // woher nimmst du den wert 540 ( ohne \r\n am Schluss ! ) ?

540 Bytes ist das Bild groß, deshalb 540. Ja ohne \r\n. Ich sende es 
ohne \r\n ab. Muss ich es zwingend anhängen? also 542 Daten senden mit 
den 540 Bytes des Bildes + \r\n?

> // mit Cipsend=540,.. schliest das nach dem 540 selber ab!
>

Richtig, weil das Bild ja nur 540 Bytes groß ist. Ist das falsch?


>>   for(int ii=0;ii<540;ii++)  //sende die 540 Byte die das Bild groß ist.
>>   {  uart_putc(pgm_read_byte(&(png10[ii])));    }
>> >
>
> Ok - wie sieht es aus wenn das Paket grösser ist als 2048?
> Wie splittest  du das auf, kann es sein dass ein Byte zuviel mitgeht?

Ich mache einfach eine for Schleife [i] und läuft von 0 bis 2047. danach 
eine von 2048 - 4095 usw. Nein, habe es überprüft und mich am UART 
reingehängt, es gehen genau 2048 Bytes raus.


> kannst du ein kleines Delay einbauen bevor du die
> nächsten Paket Daten sendest?
>

Ja das kann ich, hab ich auch schon versucht, aber das ändert nichts, da 
es sowieso nicht soweit kommt ein weiteres Paket zu senden, da es 
festhängt, wenn er den aktuellen Socket scheinbar neu aufbaut.

>>
>> Wie meinst du mein Ausschnitt ist passend? bzw. "wackeln"?
>
> Ich hatte einen Überlauf bei > 2048 für den buffer
> und meinte, dass ich am besten mit 512 und dann mit 256 byte fahre.
> das wackeln meine ich damit, senden der 2048 ist nicht in einem ruck
> möglich obwohl es so sein sollte ..

Ok das heißt am Besten alles auf 256 Byte große Pakete aufteilen?

>
> ich mach das alles in der FW -
> ich werde mal ein µC mit AT steuern lassen wie du es machst,
> denke ich komme auf die gleiche Problematik, da man dann auf den
> UART des ESP keinen Einfluss nehmen kann.
>

Das wäre genial wenn du das testen könntest! Kann dir garnicht genug 
danken :). So eine Hilfe ist echt nicht selbstverständlich.


> ne nicht aufgeben.
>
> Das kann sich nur um einen Puffer Bug im Uart  handeln.
> Werd das mal perUART zu einem simmulierten µC probieren.
> Heut komm ich nur nicht dazu - denke Mo/Di
>

Wäre super wenn man das erorieren könnte. :) DANKE DANKE :)

> lg rudi ;-)


Lg

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
>
> Hab ich probiert, ändert nichts.
> Das einzige was ein wenig etwas bringt, wenn ich einfach mehr sende als
> ich ihm per CIPSEND vorgebe. Also zb. sage ich ihm, ich schicke 1024
> Bytes, sende aber 1040 Bytes, dann kommt es (wenig häufig zumindest) zu
> keinem Reconnect, wo er abbricht.

ok!..
denke da ist der hund begraben
kannst du ihm mal mit 1022 + 0x00 + 0x00 füttern?
vieleicht hängt der UART


>> // mit Cipsend=540,.. schliest das nach dem 540 selber ab!
>>
>
> Richtig, weil das Bild ja nur 540 Bytes groß ist. Ist das falsch?

ne past!

>
> Ok das heißt am Besten alles auf 256 Byte große Pakete aufteilen?

hab das bei mir so in der FW drin Fritz
den wert 2048 hab ich lassen im Uart Buffer.
aber den send buffer selber nutze ich nicht aus
sondern nur immer 256 byte weise.

>
> Das wäre genial wenn du das testen könntest! Kann dir garnicht genug
> danken :). So eine Hilfe ist echt nicht selbstverständlich.

wo die liebe hinfällt:
i love esp8266 ;-)

> Wäre super wenn man das erorieren könnte. :) DANKE DANKE :)

ich mach das mit einem PIC18F2550
oder mit einem Adrudino Mini Pro als Sketch
kannst du eines nachvollziehen? oder was genau nimmst du her?

lg rudi ;-)

bis bald, thread halten wir warm ok!
ist gebookmarked ;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> Fritz Huber schrieb:
>>
>> Hab ich probiert, ändert nichts.
>> Das einzige was ein wenig etwas bringt, wenn ich einfach mehr sende als
>> ich ihm per CIPSEND vorgebe. Also zb. sage ich ihm, ich schicke 1024
>> Bytes, sende aber 1040 Bytes, dann kommt es (wenig häufig zumindest) zu
>> keinem Reconnect, wo er abbricht.
>
> ok!..
> denke da ist der hund begraben
> kannst du ihm mal mit 1022 + 0x00 + 0x00 füttern?
> vieleicht hängt der UART

Kann ich probieren, aber wieso meinst du, würde das das Hängen des UARTS 
verhindern?
Melde mich dann wenn ich es getestet hab :).


>
>>> // mit Cipsend=540,.. schliest das nach dem 540 selber ab!
>>>
>>
>> Richtig, weil das Bild ja nur 540 Bytes groß ist. Ist das falsch?
>
> ne past!
>
>>
>> Ok das heißt am Besten alles auf 256 Byte große Pakete aufteilen?
>
> hab das bei mir so in der FW drin Fritz
> den wert 2048 hab ich lassen im Uart Buffer.
> aber den send buffer selber nutze ich nicht aus
> sondern nur immer 256 byte weise.

Programmierst du den ESP8266 selbst oder? Meinst du wäre das auch für 
mich sinnvoller?

>
>>
>> Das wäre genial wenn du das testen könntest! Kann dir garnicht genug
>> danken :). So eine Hilfe ist echt nicht selbstverständlich.
>
> wo die liebe hinfällt:
> i love esp8266 ;-)
>

Wenn mal alles funktioniert - > ich auch ;). Aber bis dahin scheint es 
zu dauern :D. Hattest du nie solche Probleme ?


>> Wäre super wenn man das erorieren könnte. :) DANKE DANKE :)
>
> ich mach das mit einem PIC18F2550
> oder mit einem Adrudino Mini Pro als Sketch
> kannst du eines nachvollziehen? oder was genau nimmst du her?
>

Ich hab einen AtMega128, hätte auch ein Arduino Uno hier. Bin nur am 
vertrautesten mit den AtMegas.

> lg rudi ;-)
>
> bis bald, thread halten wir warm ok!
> ist gebookmarked ;-)

Perfekt :)
Lg

von Fritz Huber (Gast)


Lesenswert?

Nachtrag:

Sende ich CIPSEND = 0,1022 und schicke ihm dann 1022 Nutzdaten gefolgt 
von /0 /0 dann funktioniert es zumeist etwas besser. Scheint wirklich 
irgendwie zu hängen.

Wenn er aber während des sendens, einen komplett neuen GET Request 
bekommt und rausschreibt, hängt er aber nachwievor komplett und nurmehr 
ein Hardware Reset hilft.

Lg
Fritz

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
> Nachtrag:
>
> Sende ich CIPSEND = 0,1022 und schicke ihm dann 1022 Nutzdaten gefolgt
> von /0 /0 dann funktioniert es zumeist etwas besser. Scheint wirklich
> irgendwie zu hängen.

mach mal
0,1024
und schick ihm 1024 nutzdaten
und dann gleich nochmal
0,1
und schick ihm 0x00 also /0
..

>
> Wenn er aber während des sendens, einen komplett neuen GET Request
> bekommt

auf socket 0..

> und rausschreibt, hängt er aber nachwievor komplett und nurmehr
> ein Hardware Reset hilft.

da sind zwei gleiche sockets überlappt

bis mo/di

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo

Aber dann bekommt er ja falsche Daten wenn ich ihm eine 0 dazu schicke 
oder?

Wobei es ändert leider nichts. So alle 20x funktioniert alles 
einigermaßen und die Seite wird incl. Bild richtig aufgebaut.

Nein er schickt GET Requests auf anderen Sockets und dann hängt er auch, 
weil er scheinbar nicht alles empfängt oder sonst irgendwie nicht alles 
verarbeiten kann.

Lg

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

> Hallo
>
> Aber dann bekommt er ja falsche Daten wenn ich ihm eine 0 dazu schicke
> oder?

du schickst ja zwei getrennte packete
einmal die 1024 byte nutzdaten

> 0,1024
>und schick ihm 1024 nutzdaten

und dann machst ihm nochmal ein 1 byte packet
diesmal mit 0x00 bzw /0

> und dann gleich nochmal
> 0,1
> und schick ihm 0x00 also /0

>
> Wobei es ändert leider nichts. So alle 20x funktioniert alles
> einigermaßen und die Seite wird incl. Bild richtig aufgebaut.

bei welchen paket grössen fritz?
20x 256?

lg

von Fritz Huber (Gast)


Lesenswert?

Hallo

Ja, schon aber wenn ich ihm den Socket nach 1024 Bytes nicht schließe 
zählt er das "0" ja zu den Daten für den aktuellen Socket dazu, und 
damit stimmen die Daten für das PNG ja nicht, oder denke ich falsch?

Mit 20x meinte ich, wenn ich 20x alles Resette und die Seite neu laden 
versuche, klappt es irgendwann, aktuell sind die Datenpakete maximal 
1024 Byte groß, bin gerade am umschreiben, dass ich das besser zerteilen 
kann.

Lg

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

das gehört jetzt vielleicht nicht ganz zum Thema, aber weißt du ob es 
möglich ist ein 2D char Feld zu deklarieren, wo ich bereits die Inhalte 
vorinitialisiere?

Es geht drum, dass ich gerne meine char Felder mittels for Schleife 
ansprechen würde.

Aktuell heißen sie:

png10
png11 usw.

Aktuell muss ich immer eine if Abfrage machen, schöner wäre es natürlich 
einfach mit png[10] das ganze abzufragen, aber ich denke, das geht 
nicht, oder irre ich mich?

In anderen programmiersprachen ist es ja mittels png + 'x' zb. 
aufrufbar, aber mit AVR GCC dürfte das nicht gehen.

Danke


Lg

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

also mit den 256 Byte geht es eine spur besser, es scheint da wirklich 
ein problem mit dem ESP zu geben. Ich habe auch noch folgendes entdeckt.

Habe 2 RS232 - USB Wandler dran, einmal am Rx des ESP und einmal am Tx 
des ESP. Durch das automatische Echo, müssten die Daten gleich sein ( 
bis auf \n, welches er wegschneidet bei CIPSEND )

Das kommt am Rx an:
1
ng"))<9><\r><\n>
2
<9>{<9>//if(GETRequest(3))<\r><\n>
3
<9><9>{<9>image.src = "25.png";<\r><\n>
4
<9><9><9>bild.src = "26.png";<\r><\n>
5
<9><9>}<\r><\n>
6
    }<\r><\n>
7
<9>else if(image.src.match("25.png"))<9><\r><\n>
8
<9>{<9>//if(GETRequest(3))<\r><\n>
9
<9><9>{<9>image.src = "27.png";<\r><\n>
10
<9><9><9>bild.src = "28.png";<\r><\n>
11
<9><9>}<\r><\n>
12
    }<\r><\n>
13
<9><\r><\n>
14
<9>var x_unten=15;<\r><\n>
15
<9>var x_oben=0

Das kommt vom Tx raus:
1
ng"))<9><\r><9>{<9>//if(GETRequest(3))<\r><9><9>{<9>image.src = "25.png";<\r><9><9><9>bild.src = "26.png";<\r><9><9>}<\r>    }<\r><9>else if(image.src.match("25.png"))<9><\r><9>{<9>//if(GETRequest(3))<\r><9><9>{<9>image.src = "27.png";<\r><9><9><9>bild.src = "28.png";<\r><9><9>}<\r>    }<\r><9><\r><9>var x_unten=15;<\r><9>var x?????0

Schau dir diese Fragezeichen am Ende an. Am Ende kommt kein SEND OK, 
sondern der ESP hängt darin fest.

Hast du eine Idee was da Abhilfe schaffen könnte?

Lg

von Fritz Huber (Gast)


Lesenswert?

Sorry, nochmals ich :P.
1
AT+CIPSEND=4,256<\r><\r><\n>
2
> 3,CONNECT<\r><\n>
3
<\r><\n>
4
+IPD,3,341:GET /28.png HTTP/1.1<\r><\n>
5
Host: 192.168.4.1<\r><\n>
6
Connection: keep-alive<\r><\n>
7
Accept: image/webp,*/*;q=0.8<\r><\n>
8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36<\r><\n>
9
Referer: http://192.168.4.1/<\r><\n>
10
Accept-Encoding: gzip, deflate, sdch<\r><\n>
11
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4<\r><\n>
12
<\r><\n>
13
<\r><\n>
14
OK<\r><\n>
15
?PNG<\r><26><\0><\0><\0><\r>IHDR<\0><\0><\0>#<\0><\0><\0>K<\b><6><\0><\0><\0>?~>n<\0><\0><\0><6>bKGD<\0>?<\0>?<\0>?????<\0><\0><\0><9>pHYs<\0><\0><21><18><\0><\0><21><18><1>??<23><21><\0><\0><\0><7>tIME<7>?<1><\f><22>/9<\r>???<\0><\0><11>?IDATh???[?eYU??1?\k??O????<27>????t?A

Hier hängt er ebenso ( Während er auf Socket 4 senden möchte, kommt ein 
neuer Socket 3 rein, und es hängt ).

Und nochwas, ich sende etwas mit:
AT+CIPSEND=1,500

danach kommt:
link is not

Wenn ich danach im Browser auf Abbrechen gehe, kommt:
1,CLOSED

Also ist Socket 1 eigentlich aufrecht, aber trotzdem meint er, dass es 
das nicht ist!? Etwas verwirrend.

So, genug für heute, tut mir Leid :)

Lg

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,


habe mir heute mal im Internet einige Projekte angesehen, und scheinbar 
verwendet keiner die AT Kommandos, bei größeren Webserver größen, nur 
für Miniatursachen, die in einen Send Kommando passen. Alle anderen 
programmieren den ESP direkt. ( So wie auch du richtig ? )

Habe mir die VM + SDK geladen und compiliert, klappt soweit.

Die "AT" example in der SDK, ist aber nicht die Datei die quasi 
"Standard" geladen wird, und alle AT Befehle beinhaltet, oder doch?

Woran soll ich festhalten? An meiner eigentlich funktionsfähigen AtMega 
+ AT Methode ( Wobei der ESP hier das Problem scheint, weil der wohl ein 
paar UART Probleme macht ), oder umsteigen, und versuchen den ESP 
irgendwie programmiert zu bekommen?

Danke,

Lg
Fritz

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
>  ...Alle anderen
> programmieren den ESP direkt. ( So wie auch du richtig ? )

Ja :-)

>
> Habe mir die VM + SDK geladen und compiliert, klappt soweit.

Das ist die Beste Grundlage!

>
> Die "AT" example in der SDK, ist aber nicht die Datei die quasi
> "Standard" geladen wird, und alle AT Befehle beinhaltet, oder doch?

Es kommt darauf an, welche du geladen hast.
Die letzte 0.9.5 beinhaltet das SDK und eine AT Lib -

Für einen reibungslosen Ablauf empfehle ich dir die
SDK 0.9.3 und die AT Vesrion 0.20 zu nehmen

>
> Woran soll ich festhalten? An meiner eigentlich funktionsfähigen AtMega
> + AT Methode ( Wobei der ESP hier das Problem scheint, weil der wohl ein
> paar UART Probleme macht ), oder umsteigen, und versuchen den ESP
> irgendwie programmiert zu bekommen?


An beiden Fritz!
Wenn du dir die Firmware mit dem UART selber so anpasst wie du diese für 
den Mega brauchst, dann triffst zwei Fliegen auf einen Schlag.

Wenn du den ESP dann wie einen eigenständigen µC siehst ( was er auch 
ist ) dann kannst du den SoC direkt einsetzten, er hat GPIO, ADC, PWM, 
SPI, I²C, ......und eine Wifi Schnittstelle hat er auch noch.


Weisst, jeder macht mit dem SoCo und einem externen MCU was anderes, es 
ist schwierig zu sagen, mach es so oder so - oder das ist besser - jenes 
ist besser; ich hab von Anfang an den SoC als µC gesehen und versuche 
alles mit ihm zu machen, das problem ist, nicht alles ist dokumentiert, 
also selber versuchen.

Ich hab den DS18B20 versucht zu integrieren, an und für sich nichts 
schwieriges, aber ich hab mich so verhauhen - ewig kam der wdt ständig 
ein reboot - dass ich es dann lassen habe;  weisst was der fehler war?

http://bbs.espressif.com/viewtopic.php?f=7&t=44

tja - und jetzt läufts vom SoC.

Also will damit sagen, nicht an sich zweifeln, loslegen und probieren, 
wenn´s eckt, fragen, in meinem Fall konnte ich das nicht wissen, es 
steht niergend wo dass es format floats nicht unterstützt, daher kam der 
wdt immer.
dann hab ich das umgestellt auf integer, rechne zwar mit float aber 
formatierten string dann über integer und es passt.


lg
rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Danke für deine Antwort Rudi.

Das heißt ich suche mit die SDK 0.9.3 und die AT Version 0.20 und kann 
erstmal damit alles versuchen?

Muss erst schauen wo ich einige Informationen dazu finde, wie man den am 
Besten programmiert, wie gesagt bin nur AVR's gewohnt.

Hast du zufällig versucht den ESP mit dem Standard AT Befehlen zu 
betreiben um den Fehler den ich habe zu simulieren? Würde mich freuen, 
wenn ich weiß, ob es an dem ESP liegt, oder vl. doch an mir, bzw. dem 
Programm, wobei ich das kaum noch für möglich halte.

Grüße
Fritz

von Fritz Huber (Gast)


Lesenswert?

Bzw. hast du eventuell ein Beispielprogramm, wo du den ESP als reinen 
Webserver verwendest? Nur um mal einen Anhaltspunkt zu haben, wie mit 
dem WiFi Interface kommuniziert werden kann. Im Grund muss es nur simple 
Funktionen erfüllen, die meisten GET Requests kann es selbst mit der 
HTML + Bildern beantworten, kommt ein spezieller, dann schreibe einfach 
den Inhalt ( 1 Byte ) auf der UART raus, und warte bis am UART wieder 
etwas ankommt, und schicke das zurück. Also eigentlich keine große Sache 
:).

Fritz

von r_u_d_i (Gast)


Lesenswert?

Hallo Fritz,

Fritz Huber schrieb:
> Danke für deine Antwort Rudi.
>
> Das heißt ich suche mit die SDK 0.9.3

http://bbs.espressif.com/viewtopic.php?f=5&t=53

+ patch

http://bbs.espressif.com/viewtopic.php?f=5&t=55


> und die AT Version 0.20 und kann


http://bbs.espressif.com/viewtopic.php?f=5&t=64


> erstmal damit alles versuchen?


würde ich dir vorschlagen, dann änderst im ESP den UART Buffer..

>
> Muss erst schauen wo ich einige Informationen dazu finde, wie man den am
> Besten programmiert,

Windows oder Linux?

> wie gesagt bin nur AVR's gewohnt.

Na hier ;-)

;-)

oder auch auf esp8266.com
bzw bbs.espressif.com


>
> Hast du zufällig versucht den ESP mit dem Standard AT Befehlen zu
> betreiben ----

wenn ich ehrlich bin - noch nicht - der Winter kam zurück und ich hab 
die Woche ausgerechnet den Winterdienst ;-( ..


lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

alles klar, das probiere ich gleich alles :). Mit einer Webserver Demo 
wäre es natürlich leichter.

Kein Problem, falls du irgendwann mal ein paar Minuten zum testen 
findet, und Lust hast, würde es mich hald freuen :).

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
> Bzw. hast du eventuell ein Beispielprogramm, wo du den ESP als reinen
> Webserver verwendest?

Schauh mal auf esp8266.com

such dir den thread mit den meisten aufrufen.

:)

der "ESP8266 eMbeddedWebserver at SoC without extern MCU"
befindet sich unter :

http://www.esp8266.com/viewforum.php?f=12&;

das Video dazu:

https://www.youtube.com/watch?v=Zuq7CZwrsAg

eine erweiterung:

https://www.youtube.com/watch?v=l_n_N4wxvr8

> Nur um mal einen Anhaltspunkt zu haben, wie mit
> dem WiFi Interface kommuniziert werden kann.

auch von sprite den kompletten webserver dir mal anschauen.
gute ausgangslage mit heatshrink -

http://www.esp8266.com/viewtopic.php?f=6&t=376

btw:
PIC24 + ENC28J...
https://www.youtube.com/watch?v=WFo4Fs0p_NY

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

deine Videos hab ich mir schon angeschaut :).

Habe die Posts gelesen, die Sources hast du aber nicht online oder? In 
dem Github link sind nur Beschreibungen, aber keine Files.

Das heißt ich muss die Files von Sprite verwenden ja?

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

>
> Habe die Posts gelesen, die Sources hast du aber nicht online oder?

ja - hab die nicht online gestellt.


> Das heißt ich muss die Files von Sprite verwenden ja?

Die Technik die Sprite benutzt ist nicht die gleiche; der Code von 
Sprite ist online und der Teil von CGI Srcipting sollte Dir sehr 
gefallen ;-)

lg rudi ;-)

mein code wollte ich anfangs online stellen - ich hab mich aber dann für 
zwei "bücher" entschieden..

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Sehr schade :(

Zwei Bücher ;)?


Ich verstehe nur nicht ganz bei Sprites version, wie er programmiert? 
Habe eher C files erwartet wie eben auch bei den AT Demos, C files, und 
ganz einfach in der Linux Umgebung in VM Ware compilieren. Bei ihm ist 
das aber ganz anders gelöst scheinbar.

von r_u_d_i (Gast)


Angehängte Dateien:

Lesenswert?

Fritz Huber schrieb:
> Hallo!
>
> Sehr schade :(

kannst ja alles nachlesen
>
> Zwei Bücher ;)?

Ostern 2015

>
>
> Ich verstehe nur nicht ganz bei Sprites version, wie er programmiert?
> Habe eher C files erwartet wie eben auch bei den AT Demos, C files, und
> ganz einfach in der Linux Umgebung in VM Ware compilieren.

ist aber c mit gcc

> Bei ihm ist
> das aber ganz anders gelöst scheinbar.

welche umgebung nutzt du fritz?
Windows oder Linux?

welche IDE hast du?
China VM - NOVM - Espressif VM mit GCC - Eclipse mit Toolchain

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Cool rudi!!

r_u_d_i schrieb:
> ist aber c mit gcc
>

Aber die Files auf Github sind nicht in c ?!


>> Bei ihm ist
>> das aber ganz anders gelöst scheinbar.
>
> welche umgebung nutzt du fritz?
> Windows oder Linux?

Habe mir die VM geholt, Ubuntu läuft da. Ansonsten hab ich Windows 7

>
> welche IDE hast du?
> China VM - NOVM - Espressif VM mit GCC - Eclipse mit Toolchain
>

eeeeehm ;) Wie gesagt die VM, wo der compiler dabei ist ;)

> lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

>
> Aber die Files auf Github sind nicht in c ?!
>

echt?
ah sorry!!!
das ist eine modifizierte version..
mit lua )!)"(/§%§

ich such dir gleich den originalen link von Sprite raus
jetzt bin ich drauf reingefallen - ich nahm den den ersten post..


>> welche umgebung nutzt du fritz?
>> Windows oder Linux?
>
> Habe mir die VM geholt, Ubuntu läuft da. Ansonsten hab ich Windows 7

welche VM ;-)

>
>>
>> welche IDE hast du?
>> China VM - NOVM - Espressif VM mit GCC - Eclipse mit Toolchain
>>
>
> eeeeehm ;) Wie gesagt die VM, wo der compiler dabei ist ;)

;-)
bedank dich bei 'tinhead'

unter windows:
NOVM, Xtensa IDE fertig für Windows

VM ('oracle VM VirtualBox' )  von espressif mit gcc toolchain

http://1drv.ms/1BUD6Nv

in den Ordner other hacks/esp8266

alternative:
LUBUNTU installieren und Toolchain installieren von esp8266.com
oder
eclipse und toolchain
..

lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

> Aber die Files auf Github sind nicht in c ?!
>
>
>>> Bei ihm ist
>>> das aber ganz anders gelöst scheinbar.


http://www.esp8266.com/viewtopic.php?f=6&t=376&hilit=esphttpd

doch hatte ich doch den richtigen -
denn es gibt zwei.

er benutzt heatshrink und speichert die html in einem ordner
dann macht er von dem ganzen ordner ein komprimiertes bin file
das auf 0x12000 im flash liegt.

von dort werden dann die request bedient.

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo,

aktuell benutze ich das hier: 
https://drive.google.com/folderview?id=0B5bwBE9A5dBXaExvdDExVFNrUXM&usp=sharing

Dort ist die gcc tool chain dabei, und funktioniert auch im Grunde.

r_u_d_i schrieb:
> doch hatte ich doch den richtigen -
> denn es gibt zwei.
>
> er benutzt heatshrink und speichert die html in einem ordner
> dann macht er von dem ganzen ordner ein komprimiertes bin file
> das auf 0x12000 im flash liegt.
>
> von dort werden dann die request bedient.

Ah ok. Sorry!

Werde mir das anschauen.

Aber die .C Files für das Hauptprogramm ( jetzt nicht die HTML Files ) 
sind doch auch nicht online ?! Um dort die Routinen umzuschreiben, damit 
ich per UART das ausgebe was ich für mich bzw. den µC brauche.

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
>
> Aber die .C Files für das Hauptprogramm ( jetzt nicht die HTML Files )
> sind doch auch nicht online ?! Um dort die Routinen umzuschreiben, damit
> ich per UART das ausgebe was ich für mich bzw. den µC brauche.

ok...

das "projekt" esphttp hat nur die projektdateien.
das baut auf einer SDK auf - die ist nicht im github  - stimmt,
braucht man auch nicht -
denn diese ist dann in der VM oder IDE je nachdem was man verwendet -
das makefie zeigt dann auf die SDK version.

hast du das sdk 0.9.3 schon?
hast du das at 0.20 schon?

AT -> include -> driver

uart.h
uart_register.h


lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

1
...
2
#define RX_BUFF_SIZE   256
3
#define TX_BUFF_SIZE   100
4
...

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> hast du das sdk 0.9.3 schon?
> hast du das at 0.20 schon?

Hallo,

ja beides hab ich. Und mit der AT Demo auch erfolgreich compiliert mit 
der besagten VM Ware mit gcc toolchain.

Ich drücke mich glaube ich nicht richtig aus.

Die ge heatschrinkte datei ist extra, das ist klar.
Aber darin sind ja nur die html's enthalten.

Er verwendet doch eine eigene "main.c" nenne ich es jetzt einmal, worin 
er die Abfrage bei GET Requests und beantwortung mit den html Files 
erledigt.

Diese ist ja nicht öffentlich, sondern nur die schon kompilierten? Files 
in github, oder sehe ich das falsch?

Aktuell kann ich zwar die AT Demo zb. compilieren, aber  nicht seine 
Files, da diese ja keine .c files sind!?

Entweder bin ich gerade total neben der Spur, oder ich bin total neben 
der Spur :D

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

> ja beides hab ich. Und mit der AT Demo auch erfolgreich compiliert mit
> der besagten VM Ware mit gcc toolchain.

ok basis läuft.

> Er verwendet doch eine eigene "main.c" nenne ich es jetzt einmal, worin

user_main.c

mit der
httpd.c bedient er requests

mit der
cgi.c
werden CGI Scripting beabeitet

mit der ...


> Diese ist ja nicht öffentlich, sondern nur die schon kompilierten? Files
> in github, oder sehe ich das falsch?

nicht mit dem ie downloaden ;-)
du brauchst einen git clienten dafür


> Entweder bin ich gerade total neben der Spur, oder ich bin total neben
> der Spur :D

;-)
..
das hast du gesagt  ;-)

aber ich sehe jetzt mal vorsichtig nach
kann mir nicht vorstellen dass er seine files offline gestellt hat

lg

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Sorry, du hattest recht. Wusste nicht, dass das nur mit einem git client 
geht.

Habe es nun heruntergeladen, und siehe da ... C files vorhanden :D

Danke!

Jetzt sehe ich auch den html Ordner mit den html's und Bildern darin, 
worauf er ja zugreift. Das ganze wird ja mit heatshrink comprimiert. 
Geht das nur unter linux, direkt mit make, oder auch anders? Würde nun 
soweit kommen, dass ich das ganze Projekt compilieren kann, aber da 
fehlt mir ja noch der komprimierte HTML Folder.

Ich hoffe, dass ich Morgen klarer im Kopf bin :D

Bin leider kein Linux Mensch, das erschwert die Sache ungemein ;).

Danke für die Hilfe, freue mich schon auf die Bücher, wann kommt endlich 
Ostern :P?

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
> Habe es nun heruntergeladen, und siehe da ... C files vorhanden :D

na dann ;-)

> Jetzt sehe ich auch den html Ordner mit den html's und Bildern darin,
> worauf er ja zugreift. Das ganze wird ja mit heatshrink comprimiert.

Ja ;-) - glaube - wurde hier schon mal erwähnt ;-)

;-)


> Geht das nur unter linux, direkt mit make, oder auch anders?

Geht auch anders - wenn du heatshrink so benutzt.
schauh dir das makefile genauer an -
das kann man mit verschiedneen Optionen aufrufen

z.B.
make -C mkespfsimage

( sieh dir den eintrag dazu an

sollte deinen html ordner "shrinken"..
und ein webpages.bin erzeugen, das musst dann auf 0x12000 flashen


man kan auch heatshrink komplett weg lassen-
inspiziere das makefile
>Würde nun
> soweit kommen, dass ich das ganze Projekt compilieren kann, aber da
> fehlt mir ja noch der komprimierte HTML Folder.

..

> Bin leider kein Linux Mensch, das erschwert die Sache ungemein ;).

die ausrede gilt nicht -
das erleichert ungemein - das ganze geht unter windows mit der VM von 
Espressif und Toolchain ..


> Danke für die Hilfe, freue mich schon auf die Bücher, wann kommt endlich
> Ostern :P?

das fragt espressif just in time auch - die haben erst mal happy spring 
festival.. erkläre mal "Ostern" ;-)


lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

Tut mir Leid, dass ich nochmals nerve ;).

Habe mir die makefile zu gemüte geführt, alle Paths angepasst, die 
xtensa installiert, python script draufgepackt, etc.

Wenn ich jetzt make mache:

esp8266@esp8266-VirtualBox:~/Share/sdk/app$ make
FW firmware/0x00000.bin
usage: esptool [-h] [--port PORT] [--baud BAUD]
               {load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_im 
age,elf2image,read_mac,flash_id,read_flash,erase_flash}
               ...
esptool: error: argument operation: invalid choice: 'build/httpd.out' 
(choose from 'load_ram', 'dump_mem', 'read_mem', 'write_mem', 
'write_flash', 'run', 'image_info', 'make_image', 'elf2image', 
'read_mac', 'flash_id', 'read_flash', 'erase_flash')
make: *** [firmware/0x00000.bin] Error 2


Lese ich das richtig heraus, dass mit dem python script esptool.py die 
.bin erst erzeugt wird? Weil genau das funktioniert leider nicht.

Die geheatshrinkte Datei funktioniert auch nicht, eben wegen diesem 
Fehler im Python Script.

Weißt du eventuell was ich hier falsch mache?

Sorry falls ich mich doof anstelle, aber finde leider keine Lösung mehr 
:(

von Fritz Huber (Gast)


Lesenswert?

Nachtrag:

Sorry, die webpages zu erstellen funktioniert schon, ohne dem ESPTOOL 
natürlich.

Aber die eigentliche Firmware erstellt sich nicht, wegen oben genannter 
Fehlermeldung.

Lg
Fritz

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

es klappt leider trotz intensiver Suche noch immer nicht :(.

Habe mich aber in der zwischenzeit darum bemüht, meine Webseite zu 
integrieren, und bin auf ein Problem gestoßen.

Ich habe eine html entworfen, wo nur 15 Bilder untereinander drin 
stehen.

Er lädt aber nur ein paar ( meist 4 bis max. 7 ) und alle anderen lädt 
er nicht. Auf dem Uart schickt er folgendes raus:
1
FindConnData: Huh? Couldn't find connection for 0x3ffea198<\r><\n>
2
ReconCb<\r><\n>
3
FindConnData: Huh? Couldn't find connection for 0x3ffea198<\r><\n>
4
ReconCb<\r><\n>
5
FindConnData: Huh? Couldn't find connection for 0x3ffea198<\r><\n>
6
ReconCb<\r><\n>
7
FindConnData: Huh? Couldn't find connection for 0x3ffea198<\r><\n>
8
ReconCb<\r><\n>
9
FindConnData: Huh? Couldn't find connection for 0x3ffea198<\r><\n>
10
ReconCb<\r><\n>

Liegt das an der Einstellung, dass maximal 8 Connections gleichzeitig 
sein dürfen? Sollte doch eigentlich auch nicht sein, dass er die anderen 
"verwirft" bzw. "vergisst".
Aber wie gesagt, konnte ich leider noch nicht testen, da das compilieren 
nach wie vor fehl schlägt.

Und nochetwas, woran liegt es, dass der Seitenaufbau so langsam ist? 
Geschätzt etwa 10kByte/s. Ist das die maximale Geschwindigkeit vom µC, 
oder liegt es an etwas anderem?

Danke, schönen Samstag noch :).

Lg Fritz

von Fritz Huber (Gast)


Lesenswert?

Hallo nochmal Rudi,

Habs nun endlich geschafft.

Hab die Zeilen im Makefile auskommentiert, das heißt esptool wird nicht 
benutzt. Danach erstellt sich eine .out Datei in builds und mit 
esptool.py efs2image kann ich sie in die Image Dateien verwandeln.

Warum es mit der eingebauten Routine für esptool nicht funktioniert weiß 
ich nicht, aber ist egal.

Das Problem, dass er mehr als 5 Bilder nicht lädt bleibt aber. Auch wenn 
ich Maximum Connections raufsetze, er lädt immer 5 Bilder ( nicht immer 
die selben, sondern auch unterschiedlich ), und schreibt den Fehler raus 
wie oben, dass er die Connection nichtmehr findet.

Der Speed liegt übrigens bei ca. <4kByte/s ein 22kByte File braucht gut 
6 Sekunden zum übertragen. Das ist doch extremst langsam.

Lg
Manuel

von :) (Gast)


Lesenswert?

Fritz Huber schrieb:
>
> Der Speed liegt übrigens bei ca. <4kByte/s ein 22kByte File braucht gut
> 6 Sekunden zum übertragen. Das ist doch extremst langsam.

Hallo Manuel ;-)
das liegt hauptsächlich am <4mbit Uart--/ SPI..
btw:
Rufe mal die Seiten mit Android auf, du wirst staunen ;-)
lg auch an "Fritz" ;-)

von unterwegs

von Fritz Huber (Gast)


Lesenswert?

Hallo,

wieso geht es mit Android schneller? Cached der Android Browser die 
Bilder für längere Zeit?

:) schrieb:
> das liegt hauptsächlich am <4mbit Uart--/ SPI..

Wieso beschränkt der den Speed so extremst?

von Fritz Huber (Gast)


Lesenswert?

Hallo,

nach wie vor funktioniert das laden von mehr als 5 Bildern nicht ohne 
Probleme.

Habe jetzt erstmal die Webseite so umgebaut, dass es nur 5 Bilder sind, 
dann funktioniert alles ohne Probleme.

Aber die Geschwindigkeit ist echt schlimm, das sind maximal 30kBit/s, da 
kann weder ein UART noch ein SPI daran schuld sein !?

Auch die Webseiten ohne Heatshrink zu verpacken, dürfte nichts daran 
ändern oder?
Welche technischen Hintergründe sind da? Habe im wiki was von 4Mbit/s 
bei UART Loopback gelesen zb. Ich wäre schon mit einem fünfzigstel davon 
zufrieden :D.

von Stefan F. (Gast)


Lesenswert?

Mach mal einen Trace mit Wireshark und achte darauf, nach wie vielen 
Paketen (bei großen Dateien) der Web Browser ein ACK sendet und wie 
lange das dauert.

Einige IP Stacks unterstützen nur eine Window-Size von 1, so dass der 
Browser jedes einzelne Packet Acknowledgen muss.

Gewöhnliche Webserver unterstützen größere Window Sizes, so dass der 
Server mehrere Pakete am Stück an den Browser senden kann. Dann 
bestätigt der Browser z.B. nur jedes zehnte Paket.

Der Knackpunkt ist: Der IP Stack von Windows geht standardmäßig davon 
aus, dass ALLE Webserver eine Window-Size größer als 1 unterstützen. Das 
heisst, der Browser erwartet viele Pakete nacheinander. Wenn nach 200ms 
keins mehr empfangen wurde, sendet der freundlicherweise doch mal ein 
ACK. So dass im Endeffekt jedes paket 200ms Verzögerugn erfährt.

Bei Linux (und somit auch Android) gibt es den selben Effekt, jedoch ist 
da der Timeout viel kürzer.

Selbst geschriebene Anwendungsprogramme können bei Verbindungsaufbau die 
TCP Option "NODELAY" setzen. Dann beantwortet der IP Stack jedes 
empfangene Pakete sofort. Nur leider gibt es in allen mir bekannten Web 
Browsern keine Möglichkeit, diese Option einzustellen. In veralteten 
Windows Versionen konnte man das noch durch einen Registry Eintrag 
erreichen, aber diese Möglichkeit hat Microsoft inzwischen leider 
ausgebaut.

Es gab auch mal einen Workaround, der darauf beruhte, dass Windows jedes 
Paket sofort Achnowledgete, welches kleiner als die maximal zulässige 
Paketgröße ist (also ca 1400 bytes bei DSL). Man brauchte Serverseitig 
also einfach nur dafür sorgen, dass die Pakete ein byte kleiner sind, 
als notwendig. Doch leider klappt das bei aktuellen Windows Versionen (7 
und 8, eventuell auch Vista) nicht mehr.

Langer Rede kurzer Sinn: Schuld ist

a) Die Browser, weil sie die TCP_NODELAY Option nicht setzen können.
b) Dein Mikrocontroller, weil dessen IP-Stack nur Window-Size 1 
unterstützt.
c) Windows, weil man die TCP_NODELAY option nicht mehr per Registry 
erzwingen kann.
d) Windows, weil man den 200ms Timeout nicht konfigurieren kann.
e) Microsoft, weil sie das früher gute Verhalten verschlechtert haben 
(Windows 95 war nicht betroffen).
f) Microsoft, weil die immer Schuld sind :-)

Such Dir was aus.

Nachtrag: Ein bekanntes Programm, dass die TCP_NODELAY Option verwendet, 
ist Telnet. Nämlich damit der User nicht nach jedem Tastendruck eine 
Verzögerung verspürt.

von Stefan F. (Gast)


Lesenswert?

> nach wie vor funktioniert das laden von mehr als 5 Bildern
> nicht ohne Probleme.

Vermutlich, weil das Modul nur 5 Verbindungen gleichzeitig unterstützt, 
aber der Web Browser mehr Bilder gleichzeitig laden will.

Als ich mit Web Programmierung begonnen hatte, waren 2 gleichzeitige 
Verbindungen Standard. Damals konnte man die Performance in schnellen 
Netzen (nicht ISDN oder Modem) von Webseiten massiv verbessern, indem 
man die referenzierten Dateien (Bilder, CSS, Javascripte, etc) auf 
mehrere Server verteilt hat. Denn das Limit auf 2 Verbindungen galt nur 
pro Server.

Seit dem wurde dieses Limit immer wieder erhöht. Im Netzwer-Tab von 
Firebug kannst du das parallele Ladeverhalten schön beobachten.

Ein Artikel dazu: 
http://www.homepage-performance.de/firefox-http-connections.html

von Trabifahrer (Gast)


Lesenswert?

> Habe jetzt erstmal die Webseite so umgebaut, dass es nur 5 Bilder sind,
> dann funktioniert alles ohne Probleme.

Du kannst das Laden der einzelnen Bilder kontrollieren, wenn du AJAYX 
einsetzt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Trabifahrer schrieb:
> Du kannst das Laden der einzelnen Bilder kontrollieren, wenn du AJAX
> einsetzt


Oder so wie Google in der Bilder-Suche mit 'src="data:'
1
<img src="data:image/jpeg;base64,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" />

Das nennt sich data-uri. Hier ein Converter:

http://websemantics.co.uk/online_tools/image_to_data_uri_convertor/

Aber:
"Internet Explorer 8 limits data URIs to a maximum length of 32 KB".

: Bearbeitet durch User
von :) (Gast)


Lesenswert?

Torsten C. schrieb:
> Oder so wie Google in der Bilder-Suche mit 'src="data:'

> Das nennt sich data-uri.

r_u_d_i schrieb:
>
> schau mal auch:
> Beitrag "Re: Bild als HEX in html File einbinden"

simples BASE64

;-)

von Fritz Huber (Gast)


Lesenswert?

Stefan Us schrieb:
> Mach mal einen Trace mit Wireshark und achte darauf, nach wie vielen
> Paketen (bei großen Dateien) der Web Browser ein ACK sendet und wie
> lange das dauert.

Hallo!

Du hast absolut recht, es dauert ca. 199ms bis mein Rechner ein ACK 
schickt, ca. 5ms danach kommt schon das neue Paket vom Webserver.

Liegt also tatsächlich exakt daran, wie du eben sagst.

Und das heißt eben auch, dass es keinen Ausweg gibt, der ESP unterstützt 
keine größeren Window Sizes nehm ich an.

Zu den Bildern:

Ja, ich werde wahrscheinlich die kleinen Bilder direkt ins html 
integrieren müssen.
AJAYX kannte ich noch nicht, das werde ich mir mal anschauen, ob ich 
damit was erreichen kann.

Danke für die Hilfe :).

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Fritz Huber schrieb:
> AJAYX

AJAX!!! ^^

: Bearbeitet durch User
von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

@Torsten C. -> vielen Dank, "Inline Images with Data URLs" sind ein sehr 
wertvoller Tipp.

Ich habe seit ein paar Tagen auch ESP8266 (FW 0.18) rumliegen, sehe die 
Teile aber nur als ultrabillig Seriell->TCP-Wandler. Sprich, ich habe 
derzeit vor, nur die AT-Schnittstelle zu verwenden.
Um die Firmware in der angeschlossenen MCU primitiv zu halten, sollte 
der  Client nur jeweils eine Verbindung aufmachen.

Dein Hinweis hilft, trotz der Limitierungen der mitgelieferten Firmware, 
mit wenig Aufwand, doch recht interessante Ergebnisse zu erzielen - in 
meinem Fall ein HTTP 1.0 Konfigurationsinterface für eine Embedded 
Baugruppe inkl. Mini-Schwarz/Weiß Bitmaps.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Marcus H. schrieb:
> Um die Firmware in der angeschlossenen MCU primitiv zu halten, sollte
> der  Client nur jeweils eine Verbindung aufmachen.

Das kann halt schief gehen, falls mehrere Clients gleichzeitig aktiv 
sind.

Vor dem Gleichen Problem stehe ich auch. Ich habe daher mal mit einem 
komplexen Zustandsautomaten angefangen, aber ich habe ihn noch nicht 
fertig und getestet ist er auch noch nicht.

Er soll mit 'willkürlichen' "Link", "Unlink" und "+IPD…" von mehreren 
Kanälen klar kommen, die Echos schlucken und auch ein "Busy" verarbeiten 
und ggf. einen Retry veranlassen.

Mal sehen, ob der Zustandsautomat irgendwann mal fertig wird. ;-)

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

@Torsten: die möglichen Probleme sind mir klar. Insbesondere, weil die 
FW0.18 mich zwingt, mehrere Verbindungen zuzulassen, um den ESP8266 als 
Access Point betreiben zu dürfen.

Mir geht es aktuell nur um die Kommunikation zwischen genau einem Client 
und einer MCU.

Allerdings bekommt diese MCU Zugriff auch auf die ESP8266 Power bzw. 
Reset. Sobald bei Kommandos Zeitüberschreitungen bzw. falsche Antworten 
kommen ("busy"), wird die Reißleine gezogen. Nicht sehr elegant, aber 
geringer Aufwand (Hardware/Firmware) für insgesamt recht viel 
Funktionalität.

Ich gebe auch bei den Anforderungen an den Client bestimmte 
Mindestanforderungen vor: HTML5, kein Javascript - damit sollten 
halbwegs aktuelle Geräte umgehen können und nur bei Win XP muss ein 
Ersatz für IE8 her ;)

-> Komplexere Themen würde ich derzeit auch mit anderer Hardware lösen. 
<-
-> solange ich mit diesen Module nicht im EMV-Labor war, bin ich sowieso 
noch etwas skeptisch: 
http://www.mikrocontroller.net/wikifiles/5/55/ESP8266.jpg <-

von Stefan F. (Gast)


Lesenswert?

Falls du ein einfache Beispiel für AJAX, schau Dir an, wie meine 
Homepage die Naviagtions-Leiste nachlädt.

http://stefanfrings.de/index.html
http://stefanfrings.de/navigation.html
http://stefanfrings.de/navigation.js
1
<div class="navigation" id="navigation"/>
2
<script type="text/javascript">
3
  navi_load("navigation","navigation.html","");
4
</script>

Schau Dir den Quelltext der Prozedur navi_load an. Ist ganz simpel.

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Sorry wegem dem verschreiber ;). Habe es so abgeschrieben, und mir 
nichts dazu vorher angeschaut, da keine Zeit war.

Danke für die Beispiele für AJAX, werde ich mir gleich ansehen!

Was mir auch noch aufgefallen ist, wenn das laden der Seite erstmal 
funktioniert hat, und alles geladen ist, gibt es danach keine Probleme 
mehr (es werden zum Teil 1 - 2 Bilder nachgeladen).

Keine Probleme allerdings nur bei Firefox und Chrome, verwende ich das 
IPAD ( mit dem es leider funktionieren muss ), sieht die Sache anders 
aus. Da verschwindet das zuvor geladene, als würde der jedesmal die 
komplette Seite neu Anfragen, bzw. die Bilder neu Anfragen. Aber ich 
verstehe nicht wieso das Browser Abhängig sein soll !? Habt ihr eine 
Idee vielleicht? Muss mir das Morgen mal mit Debug anschauen, ob ich den 
Unterschied sehe.

Gebe Bescheid wies läuft. :)

von Fritz Huber (Gast)


Lesenswert?

Hallo nochmal,

also habe folgendes gerade herausgefunden:

Mittels Ipad (egal ob Safari oder Chrome) lädt er jedesmal die Bilder 
nach, und cached scheinbar nicht alles.

Mit Android ( egal welcher Browser ) wird gecached und es kommt keine 
Anfrage nach einem Bild mehr, sobald sie einmal geladen wurden.

Es kommt immer:
1
FindConnData: Huh? Couldn't find connection for 0x3ffeae78<\r><\n>

Was mir aber aufgefallen ist, es ist immer "0x3ffeae78"

Hat diesen Fehler noch nie jemand beobachtet?

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Fritz Huber schrieb:
> Aber ich
> verstehe nicht wieso das Browser Abhängig sein soll !?

Das ist sogar abhängig von den Versionen der Browser und evt. sogar von 
den Einstellungen. Es gibt mindestens 3 Möglichkeiten:

* Cachen (unabhängig vom Response-Header)
* 'Keep-Alive': Alles in einer Verbindung nacheinander laden
* Mehrere Verbindungen aufbauen, um z.B. Bilder 'parallel' zu laden.

von Fritz Huber (Gast)


Lesenswert?

Hallo,

dachte das wäre etwas besser mit HTML "genormt"

Wie kann ich dem Browser denn Befehlen, dass er cachen soll, und wenn 
ers im Cache hat, nicht nachladen darf?

Das parallele Laden ist ansonsten ganz ok, aber wieso der ESP Fehler 
macht ist mir nicht ganz klar, vorallem weil er das auch mit der 
normalen "Demo" Version macht, das heißt ich dürfte ja nicht der einzige 
mit dem Problem sein. Oder verzichtet ansonsten jeder auf mehrere Bilder 
in seiner Webseite?

von Sascha W. (sascha-w)


Lesenswert?

Fritz Huber schrieb:
> Hallo,
>
> dachte das wäre etwas besser mit HTML "genormt"
>
> Wie kann ich dem Browser denn Befehlen, dass er cachen soll, und wenn
> ers im Cache hat, nicht nachladen darf?

Also ob sich das caching aufm Browser des Pad's beeinflussen lässt, so 
viele Optionen werden einem ja dort nicht gelassen.
Ein korrektes caching hängt aber nicht nur vom Browser ab sondern auch 
vom Webserver also hier vom ESP. Der Server sollte dazu im 
Responseheader eine Gülitgkeisdauer und evl. ein Datum der letzten 
Änderung mitliefern. Der Browser fragt dann bei aktiviertem Cache die 
Datei nur an wenn die Gültigkeit abgelaufen ist. Schickt er dann einen 
Request wird der Zeitpunkt wann die Datei im Cache gelandet ist an den 
Server mitgeliefert und der kann dann immer noch mit "Not modified" 
antworten. Erzeugt zwar einen neue Verbindung aber es werden keine 
Nutzdaten ausgetauscht.
Welcher Browser hier wie mit dem ESP zusammenarbeitet kannst du dann 
blos mit einem Sniffer rausfinden.
Mit Mozilla lässt sich über die Entwickleroptionen aber schon mal 
einfach überprüfen was der ESP so rausgibt.

Sascha

von Ludwig (Gast)


Lesenswert?

Sascha Weber schrieb:

> Mit Mozilla lässt sich über die Entwickleroptionen aber schon mal
> einfach überprüfen was der ESP so rausgibt.

Sicher? Über welche Optionen genau?

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Hatte zuvor cache-control: max-age=0

Habe das umgestellt, hilft aber auch nichts.

Komisch ist folgendes:

Lade ich alles auf einen "normalen" Webserver, dann kann ich in den 
Flugmodus gehen, und es funktioniert alles ( wegen dem caching ).

Lade ich die selben Files auf den ESP, funktioniert das nicht, er 
versucht sie zu laden, schafft es nicht, und malt nur die Umrisse hin.

Welchen Einfluss hat der ESP hier? Das Verhalten tritt nur bei einem 
Ipad auf, bei Android Geräten funktioniert es wie schon erwähnt.

von Sebastian W. (wangnick)


Lesenswert?

Ludwig schrieb:
> Sicher? Über welche Optionen genau?

Entwickleroptionen -> Web-Konsole -> Netz

LG, Sebastian

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Okay, mit der FireFox Debug Option sieht man das etwas besser als mit 
Wireshark.

Also laut Firefox ist jetzt die .html Seite zwar mit max-age>0, aber die 
Bilder haben nach wie vor max-age=0. Aber den Bildern kann ich doch 
nicht eigens den http Header umändern, oder muss man das über 
irgendwelche Umwege machen?

Dachte das meta tag im header der HTML gilt dann für alle darin 
enthaltenen Objekte?

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Fritz Huber schrieb:
> Dachte das meta tag im header der HTML gilt dann für alle darin
> enthaltenen Objekte?

Das ist kein 'header der HTML', das ist ein Response-Header.

Bilder haben eigene Response-Header.

Fritz Huber schrieb:
> dachte das wäre etwas besser mit HTML "genormt"

Daher ist das auch für http genormt, nicht für HTML.

Fritz Huber schrieb:
> Aber den Bildern kann ich doch nicht eigens den http Header umändern

Nicht ändern, sondern nur das Richtige rein schreiben.

: Bearbeitet durch User
von Fritz Huber (Gast)


Angehängte Dateien:

Lesenswert?

Torsten C. schrieb:
> Nicht ändern, sondern nur das Richtige rein schreiben.

Aber ich binde Bilder ja nur mit
1
<img src="logo.gif"/>
ein, und kann hier dessen http Header ja nicht anders definieren?

Habe im Anhang noch ein Foto, hier sieht man, dass maximal 5 connections 
mit dem ESP gleichzeit am laufen sind, und man sieht an den ganzen 
"plain" Typen, dass hier zwar der Request gesendet wurde, aber der 
Socket scheinbar gleich wieder geschlossen wurde vom ESP. Und damit 
keine Daten übertragen werden konnten.

von ;-) (Gast)


Lesenswert?

@TO
@Fritz
@Manuel
oder wie immer du tatsächlich heist,

poste mal deinen kompletten Code und vermeide die Salami Taktik!

Mit Komplett meine ich auch Komplett.

Ein rumsstochern in allen möglichen Themen und Kreisen macht eine 
gezielte Hilfe so nicht möglich und das Thema bläht sich von A bis Z 
auf.

Die einen die durch die FW Entwicklung den UART so angepasst haben, dass 
es eben keine "Ups.." "No this is fun"  oder andere Spässchen mehr gibt, 
und auch über 4MBit laufen - machen nicht umsonst ihren Job darin still 
und leise, man hört von denen keine Probleme. So läuft es auch bei mir 
zu 99,99 Prozent reibungslos und auch über 4 Mbit.

Jeder will Dir helfen, aber die Richtungen sind schon eher am Thema 
vorbei und wird mehr gerätselt Geh das Kernproblem an - der UART hängt - 
und nimm die Ratschläge des einen oder anderen einfach an, glaub mir - 
die wissen was sie tun.

;-)

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

den Header sendest du als erste Antwort nach dem Empfang des Requests 
(GET). Das sollte sich doch dort wohl festlegen lassen.
In der HTML-Datei hast du darauf keinen Einfluss.


Sascha

von Fritz Huber (Gast)


Lesenswert?

Hallo,

alles klar, muss den aber etwas aufbereiten, kann den so nicht online 
stellen, zumindest nicht incl. den Bildern.

Naja am UART kanns nicht liegen, der wird ja nicht verwendet, da sich ja 
alles im ESP abspielt, der UART hängt frei.

Melde mich dann.

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
> Hallo nochmal,
>
> also habe folgendes gerade herausgefunden:

....
> Es kommt immer:
>
1
> FindConnData: Huh? Couldn't find connection for 0x3ffeae78<\r><\n>
2
>
>
> Was mir aber aufgefallen ist, es ist immer "0x3ffeae78"
>
> Hat diesen Fehler noch nie jemand beobachtet?


An was wird das wohl liegen ?

Du hast doch selbst die FW compiliert, du hast selbst das Web Bin File 
auf 0x12000 geflasht, was sagt dir denn 0x3ffeae78?

Schauh doch mal in den Quellcode rein? Such dir doch mal den Catch für 
die Meldung "FindConnData: Huh? Couldn't find connection for "..
Wenn du damit anfängst den Quellcode nicht nur blindlings downzuloaden, 
zu compilieren ohne ihn zu verstehen , wirst du ihn verstehen und den 
Quellcode selbst anpassen können, ja sogar selber schreiben und dich 
fragen warum du das nicht schon längst so gemacht hast.

Wenn es aber bereits beim Make anfängt zu stockern und auf biegen und 
brechen die bin files endlich herauskommen.. du solltest den Code schon 
ein wenig verstehen um deine Fehlerbeschreibung auch richtig zu deuten.

Es ist völlig egal welcher Browser die Seiten aufruft, der eine chached 
daten der andere nicht, der eine hat 100 packages der andere lädt es in 
einem schwung, wie die Request sind so musst du das bedienen, also 
anpassen, im MCU Code sowie auch in der FW.

Ich hätt dir gerne weiter geholfen , ich hab aber etwas dagegen wenn man 
sich für jemanden ausgibt der man nicht ist, meld dich mit richtigen 
namen an, dann weiss man, wer wirklich dahinter steckt. einmal fritz, 
einmal manuel...einmal kannst nicht compilieren, und dann compilierst 
sprite Webserver mir nichts dir nichts fast ohne probleme. Allein dass 
du das kannst, sagt mir, dass Du kein Anfänger bist, der sich mit dem 
Thema "Uart hängt" aufhält. So was löst du im Schlaf.

Um was geht es Dir denn wirklich? Das ist das Kernproblem, die ein 
Antworten eben offen gesagt auch noch dazu wegen der Salami Taktik - 
nicht möglich machen.


rudi

von gaaast (Gast)


Lesenswert?

r_u_d_i schrieb:
> Ich hätt dir gerne weiter geholfen , ich hab aber etwas dagegen wenn man
> sich für jemanden ausgibt der man nicht ist, meld dich mit richtigen
> namen an, dann weiss man, wer wirklich dahinter steckt. einmal fritz,
> einmal manuel...einmal kannst nicht compilieren, und dann compilierst

Autor: r_u_d_i (Gast)
Datum: 05.02.2015 21:41

von Fritz Huber (Gast)


Angehängte Dateien:

Lesenswert?

r_u_d_i schrieb:
> An was wird das wohl liegen ?
>
> Du hast doch selbst die FW compiliert, du hast selbst das Web Bin File
> auf 0x12000 geflasht, was sagt dir denn 0x3ffeae78?
Wenn ich nicht falsch liege dürfte 0x3ffeae78 weit außerhalb des Flash 
Speicher Bereiches liegen oder?

>
> Schauh doch mal in den Quellcode rein? Such dir doch mal den Catch für
> die Meldung "FindConnData: Huh? Couldn't find connection for "..
1
os_printf("FindConnData: Huh? Couldn't find connection for %p\n", arg);

Wenn ich mich nicht Irre dürfte ein %p bei arg, die Speicheradresse von 
"arg" ausgeben.

> Wenn du damit anfängst den Quellcode nicht nur blindlings downzuloaden,
> zu compilieren ohne ihn zu verstehen , wirst du ihn verstehen und den
> Quellcode selbst anpassen können, ja sogar selber schreiben und dich
> fragen warum du das nicht schon längst so gemacht hast.

Auch wenn du es mir vielleicht nicht glauben magst, das versuche ich die 
ganze Zeit, aber da ich bislang nur mit leichten bis mittelschweren C 
Programm unter Windows, und kleinen c Programmen mit AVRs zu tun hatte, 
wo wenig mit Pointern etc. vorkommt, tue ich mir hier extremst schwer 
bei dem großen Umfang durchzublicken.


> Wenn es aber bereits beim Make anfängt zu stockern und auf biegen und
> brechen die bin files endlich herauskommen.. du solltest den Code schon
> ein wenig verstehen um deine Fehlerbeschreibung auch richtig zu deuten.

Das war das erste mal, dass ich ein Makefile unter Linux ausgeführt 
habe, deshalb auch keine Ahnung davon gehabt, habe es aber dann eh nach 
vielen vielen Stunden lesen geschafft.

> Es ist völlig egal welcher Browser die Seiten aufruft, der eine chached
> daten der andere nicht, der eine hat 100 packages der andere lädt es in
> einem schwung, wie die Request sind so musst du das bedienen, also
> anpassen, im MCU Code sowie auch in der FW.

> Ich hätt dir gerne weiter geholfen , ich hab aber etwas dagegen wenn man
> sich für jemanden ausgibt der man nicht ist, meld dich mit richtigen
> namen an, dann weiss man, wer wirklich dahinter steckt. einmal fritz,
> einmal manuel...

Ja, das kommt komisch herüber, das kann ich verstehen. Ich mag es nur 
nicht im www mit richtigem Namen aufzutreten :/. Ich weiß, dass es 
komisch / schlecht wirkt. Aber im Endeffekt ist es ja nur ein Name? Das 
kann ich jetzt wohl nicht mehr gerade rücken was? Mein Name ist Manuel, 
und bin 21 Jahre alt. Habe eine Elektronik Ausbildung gemacht ( Keine 
Uni ). Leider mit Schwerpunkt Hardware, und nicht Software, deshalb nur 
marginale c bzw. c++ Kentnisse, und im Grunde von Ausbildungsseite noch 
nie mit html Programmierung zu tun gehabt.
Ich weiß, das vertrauen wird dadurch nicht wiederhergestellt, aber ich 
hoffe, dass du merkst, dass ich niemanden ärgern möchte, sondern 
tatsächlich lernen will, und es schaffen möchte, dass mein Vorhaben 
klappt :)

> einmal kannst nicht compilieren, und dann compilierst
> sprite Webserver mir nichts dir nichts fast ohne probleme. Allein dass
> du das kannst, sagt mir, dass Du kein Anfänger bist, der sich mit dem
> Thema "Uart hängt" aufhält.

Ja ich hatte Anfangs Probleme, und dann wieder nach langem lesen, 
probieren, testen, etc.pp geschafft.

> So was löst du im Schlaf.

Das wär schön :(.

> Um was geht es Dir denn wirklich? Das ist das Kernproblem, die ein
> Antworten eben offen gesagt auch noch dazu wegen der Salami Taktik -
> nicht möglich machen.

Das verstehe ich, tut mir Leid.
Im Grunde soll dieser Webserver auf einem Ipad sowie auf Android Geräten 
laufen, der Rest ist im Grunde egal.
Es geht dabei nur darum, dass er bei einem Click auf ein Bild, einen 
POST Request abschickt, das angezeigte Bild ändert, wenn der Request 
abgearbeitet wurde.

Die Probleme treten aber schon bei mehreren Sachen auf.

Das Hauptproblem: Das Laden der Bilder vom Webserver läuft nicht wie 
gewollt.
Das 2. Problem: Das Ipad verhält sich anders ( im Bezug auf cachen ) wie 
ein Android Gerät, oder Windows Browser.

Ich habe im Anhang eine .rar Datei, mit einer index.html und 8 Bildern. 
Ich habe dieses File konstruiert, damit es übersichtlich ist, und das 
Problem leicht nachvollziehbar ist. Es macht exakt die Probleme, mit 
denen ich seit Tagen kämpfe.

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
> Die Probleme treten aber schon bei mehreren Sachen auf.
>
> Das Hauptproblem: Das Laden der Bilder vom Webserver läuft nicht wie
> gewollt.

Eins nach dem anderen:
8 Bilder erscheinen ok
1.te Bild wird gedrückt, ändert es die Farbe in die des zweiten
2.te Bild wird gedrückt, ändert es die Farbe in die des dritten
usw

was soll bei Bild 8 passieren?
Bild neun gibt es ja nicht.


> Ich habe im Anhang eine .rar Datei, mit einer index.html und 8 Bildern.
> Ich habe dieses File konstruiert, damit es übersichtlich ist, und das
> Problem leicht nachvollziehbar ist. Es macht exakt die Probleme, mit
> denen ich seit Tagen kämpfe.

Jetzt mach mal Bild 8 klar.

rudi

von r_u_d_i (Gast)


Lesenswert?

Ok - wir stochern weiter ;-)

Basis dein Code

Wenn Bild 8 dann UR Farbe Bild 1 sein soll:
1
function change(number){
2
 
3
 AnzahlBilder = 8;
4
 if (number >= AnzahlBilder) {
5
 document.getElementById(number).src= (number - (AnzahlBilder -1) )+".png";
6
 }
7
 else
8
 {
9
 document.getElementById(number).src= (number+1)+".png";
10
 }
11
}

Schreib, was mit Bild 8 passieren soll,
jetzt ist zumindest kein weisser Rahmen mehr da ( 9.png not availabel )

rudi

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi!

Danke, dass du mir weiter helfen magst.

Ja ich habe es einfach offen gelassen, weil es im Grunde egal ist was 
mit Bild 8 passiert. Die Testseite ist nur zur Darstellung der Fehler. 
Aber ich werde es heute Abend noch umprogrammieren, damit dort auch ein 
anderes Bild hinkommt anstatt nicht gefunden.

Bei mir spielt sich das ganze so ab (wie auch auf den Bild mit dem 
Firefox Debug zu sehen ).

Beim Aufruf der Seite werden einige Bilder nicht geladen, der ESP 
schickt dabei diese "Huh... " Fehlermeldung raus.

Das ist Problem 1 !

Problem 2:

Android: Ist die Seite erstnal geladen, kann ich zb. in den Flugmodus 
gehen und bei Druck auf die Bilder schaltet es sich trotzdem eins 
weiter, da er es aus dem Cache nimmt.

Ipad: Gehe ich hier in den Flugmodus und drücke drauf, schickt er eine 
Anfrage an den Server, findet ihn nicht und malt nur die Umrisse bzw. 
kein Bild hin (obwohl er ws im Cache hätte )

Ich kann das ganze heute Abend ausführlicher erklären und die Seite mit 
Bild 8 berichtigen, bin nur leider gerade unterwegs.

Beste Grüße
Manuel

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

> Ja ich habe es einfach offen gelassen, weil es im Grunde egal ist was
> mit Bild 8 passiert. Die Testseite ist nur zur Darstellung der Fehler.
> Aber ich werde es heute Abend noch umprogrammieren, damit dort auch ein
> anderes Bild hinkommt anstatt nicht gefunden.

ok.
Es gibt halt verschiedene Annahmen, soll es ein Lauflicht werden, soll 
es nur ein Kontroll Bild werden für ausgelösten Zustand oder einfach nur 
ein Bild Beispiel. Ok verstanden. Ich belass es mal so dabei, es soll 
sich einfach nur umschalten, etwas tun.

Wobei es dann auf die Lebenszeit/Cache Einstellung ankommt, von welcher 
Quelle der Browser dann erneut lädt, Original ( ESP ) oder eben Chache 
(Browser). Letzteres vermittelt dann den Eindruck dass es schneller geht 
in Bezug "Caching"

btw:
Welche SDK Version nimmst du als Basis her für das compilieren des 
Sprite Servers?

SDK 0.9.0
SDK 0.9.1
SDK 0.9.2
SDK 0.9.3
SDK 0.9.4 // Patch?
SDK 0.9.5 // Patch?

> Manuel

das ist schon besser ;-)
bis heut Abend / Wochenende

lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

vergessen: push -
@Manuel
Welches Modul steht dir zur Verfügung? ESP-?..
lg rudi ;-)

von Fritz Huber (Gast)


Angehängte Dateien:

Lesenswert?

So im Anhang die umgeschriebene .html, Bild 8 wird bei druck darauf zu 
Bild 1.

Wie gesagt es ist nur eine Testdatei. Ist aber im Grunde genau das, was 
ich brauche, bei Klick auf das Bild, soll es umschalten auf ein anderes 
( aber nur dann, wenn der POST Request richtig beantwortet wurde über 
einen µC am UART des ESP, aber das kommt erst später ).


r_u_d_i schrieb:
> Fritz Huber schrieb:
>
>> Ja ich habe es einfach offen gelassen, weil es im Grunde egal ist was
>> mit Bild 8 passiert. Die Testseite ist nur zur Darstellung der Fehler.
>> Aber ich werde es heute Abend noch umprogrammieren, damit dort auch ein
>> anderes Bild hinkommt anstatt nicht gefunden.
>
> ok.
> Es gibt halt verschiedene Annahmen, soll es ein Lauflicht werden, soll
> es nur ein Kontroll Bild werden für ausgelösten Zustand oder einfach nur
> ein Bild Beispiel. Ok verstanden. Ich belass es mal so dabei, es soll
> sich einfach nur umschalten, etwas tun.
>
> Wobei es dann auf die Lebenszeit/Cache Einstellung ankommt, von welcher
> Quelle der Browser dann erneut lädt, Original ( ESP ) oder eben Chache
> (Browser). Letzteres vermittelt dann den Eindruck dass es schneller geht
> in Bezug "Caching"
>

Genau, ich hätte gerne dass es den Eindruck macht, dass es "schneller" 
geht, also respektive, dass er die Bilder alle cached, und nicht neu vom 
ESP holt.

Muss ich hierfür die Einstellungen für den Header bei den .png mime 
Einstellungen im ESP ändern?


> btw:
> Welche SDK Version nimmst du als Basis her für das compilieren des
> Sprite Servers?
>
> SDK 0.9.0
> SDK 0.9.1
> SDK 0.9.2
> SDK 0.9.3
> SDK 0.9.4 // Patch?
> SDK 0.9.5 // Patch?
>

Ich verwende die SDK 0.9.3 mit dem patch: 
"esp_iot_sdk_v0.9.3_14_11_21_patch1"

Habe das ESP-01 Modul hier.

von Fritz Huber (Gast)


Lesenswert?

Kleiner Nachtrag, wegen caching.

Müsste ich nicht mit der Erweiterung der Zeile:
1
httpdHeader(connData, "Content-Type", httpdGetMimetype(connData->url));

um die Zeile:
1
httpdHeader(connData, "Cache-Control", "public, max-age=1000";

den Cache auf eine längere Zeit einstellen können?

Werde es gleich testen und Rückmeldung geben :).

Lg
Manuel

von r_u_d_i (Gast)


Lesenswert?

Hi

vieleicht kannst Du mit dem schon mal was anfangen, MIME - HTML gegen zu 
steuern.

der gegensatz:
http://brauchbar.de/wd/artikel/49.html

Ab HTTP 1.1
cache über HTML
http://www.2uo.de/caching-tutorial/#steuern

Stichwort:
1
Cache-Control: max-age=3600, must-revalidate


lg rudi ;-)


und den Tip bei CSS spuckt google aus:

http://forum.chip.de/html-css-javascript/menue-bild-immer-cache-laden-357886.html

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

überschnitten ;-)..
aber noch eins dazu:

>
> um die Zeile:
>
1
> httpdHeader(connData, "Cache-Control", "public, max-age=1000";
2
>
>
> den Cache auf eine längere Zeit einstellen können?
>

structure weiss ich jetzt nicht auswendig, wird die sein, welche 
dateiendung es hat, dementsprechend wird der content-type ermittelt,

ja das kannst du dann theoretisch so machen, denke ein paar anpassungen 
sind noch nötig,  wobei eben wie gesagt der user das entscheidet, wenn 
er "laden aus dem cache" deaktiviert hat, dann sitzt er am längerem 
hebel.

btw:
wie ist das resultat beim IPAD ?


lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Also dieser Eintrag
1
httpdHeader(connData, "Cache-Control", "public, max-age=1000");

in die httpdespfs.c

wirkt wunder :). Jetzt cached auch das Ipad die Bilder ab, und lädt sie 
erst nach den 1000 Sekunden nach!

r_u_d_i schrieb:
> Hi
>
> vieleicht kannst Du mit dem schon mal was anfangen, MIME - HTML gegen zu
> steuern.
>
> der gegensatz:
> http://brauchbar.de/wd/artikel/49.html
>
> Ab HTTP 1.1
> cache über HTML
> http://www.2uo.de/caching-tutorial/#steuern
>
> Stichwort:Cache-Control: max-age=3600, must-revalidate
>
> lg rudi ;-)
>
> und den Tip bei CSS spuckt google aus:
>
> http://forum.chip.de/html-css-javascript/menue-bil...

Das werde ich mir gleich durchlesen :) Danke!

Es scheint übrigens, als würde der ESP maximal 5 Connections 
gleichzeitig händeln können, wenn mehr Connections gleichzeitig 
reinkommen, bricht er sie ab, und sie werden nicht ( oder nur manchmal 
beantwortet ).

Die Einstellung
1
//Max amount of connections
2
#define MAX_CONN 8

ändert daran nichts.

Beste Grüße
Manuel

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

> Hallo!
>
> Also dieser Eintrag
>
1
> httpdHeader(connData, "Cache-Control", "public, max-age=1000");
2
>
>
> in die httpdespfs.c
>
> wirkt wunder :). Jetzt cached auch das Ipad die Bilder ab, und lädt sie
> erst nach den 1000 Sekunden nach!

Ist zwar jetzt schwer vorstellbar ;-) oder hast Du die

httpStartResponse(....

Routine von HTTP/1.0 auf HTTP/1.1 geändert?


>>
>> Ab HTTP 1.1
>> cache über HTML
>> http://www.2uo.de/caching-tutorial/#steuern
>>
>> Stichwort:Cache-Control: max-age=3600, must-revalidate


>
> Es scheint übrigens, als würde der ESP maximal 5 Connections
> gleichzeitig händeln können, wenn mehr Connections gleichzeitig
> reinkommen, bricht er sie ab, und sie werden nicht ( oder nur manchmal
> beantwortet ).
>
> Die Einstellung
>
1
> //Max amount of connections
2
> #define MAX_CONN 8
3
>
>

normal kann er im standard 9 ab.

> ändert daran nichts.

Da musst tiefer rein und mit 'socket.connection[]' arbeiten,
und die connection's selber abhandeln.

>
> Beste Grüße
> Manuel

dir auch ;-)
ich muss zum Abendbrot und danach bin ich mal kurz weg ;-)

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> Fritz Huber schrieb:
>
>> Hallo!
>>
>> Also dieser Eintrag
>>> httpdHeader(connData, "Cache-Control", "public, max-age=1000");
>> >
>> in die httpdespfs.c
>>
>> wirkt wunder :). Jetzt cached auch das Ipad die Bilder ab, und lädt sie
>> erst nach den 1000 Sekunden nach!
>
> Ist zwar jetzt schwer vorstellbar ;-) oder hast Du die
>
> httpStartResponse(....
>
> Routine von HTTP/1.0 auf HTTP/1.1 geändert?

Du meinst, weil erst ab HTTP 1.1 die Cache - Control Optionen wirken ?
Habe es auf 1.0 belassen, scheinbar übergeht er die Info auf "1.0" und 
nimmt es trotzdem. Habe die Zeile nochmal rausgelöscht, Ipad cached 
nichts, wieder reingeschrieben, Ipad chached. Brauchst du ein 
Beweisvideo :P?

Habe aber jetzt trotzdem die Zeile auf HTTP/1.1 geändert. Das habe ich 
vorher echt nicht bedacht, danke!
>
>>>
>>> Ab HTTP 1.1
>>> cache über HTML
>>> http://www.2uo.de/caching-tutorial/#steuern
>>>
>>> Stichwort:Cache-Control: max-age=3600, must-revalidate
>
>>
>> Es scheint übrigens, als würde der ESP maximal 5 Connections
>> gleichzeitig händeln können, wenn mehr Connections gleichzeitig
>> reinkommen, bricht er sie ab, und sie werden nicht ( oder nur manchmal
>> beantwortet ).
>>
>> Die Einstellung
>>> //Max amount of connections
>> #define MAX_CONN 8
>> >
>
> normal kann er im standard 9 ab.
>

Hast du eine Idee wieso er hier nur 5 zulässt? Sieht man auf der 
Ladebalken Grafik von Firefox wunderbar, wenn er mehr als 5 Anfragen 
gleichzeitig an den ESP schickt, werden nur 5 beantwortet.

>> ändert daran nichts.
>
> Da musst tiefer rein und mit 'socket.connection[]' arbeiten,
> und die connection's selber abhandeln.

Werde mich darin mal einlesen, was das bewirkt. Danke für den Hinweis.

>
>>
>> Beste Grüße
>> Manuel
>
> dir auch ;-)
> ich muss zum Abendbrot und danach bin ich mal kurz weg ;-)
>

Mahlzeit!

Lg
Manuel

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:

Hi Manuel,

noch schnell..

>
> Habe aber jetzt trotzdem die Zeile auf HTTP/1.1 geändert. Das habe ich
> vorher echt nicht bedacht, danke!

1.0 als start halt, weil das die meisten verstehen,
wenn du weiter runterscrollst ( httpd.c ) dann handelt er die anderen 
sachen wieder mit 1.1


Mahlzeit
lg rudi ;-)
lies ein wenig im HTML link,da stehen auch weitere cache einstellungen.

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> Hi Manuel,
>
> noch schnell..
>
>>
>> Habe aber jetzt trotzdem die Zeile auf HTTP/1.1 geändert. Das habe ich
>> vorher echt nicht bedacht, danke!
>
> 1.0 als start halt, weil das die meisten verstehen,
> wenn du weiter runterscrollst ( httpd.c ) dann handelt er die anderen
> sachen wieder mit 1.1

Stimmt, unten macht er einiges mit 1.1.

>
> Mahlzeit
> lg rudi ;-)
> lies ein wenig im HTML link,da stehen auch weitere cache einstellungen.

Mach ich! Die Seite hatte ich gestern auch schon im Blick :), werde des 
mal genauer studieren.

Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Hallo!

Habe mir das jetzt alles angeschaut, und (hoffentlich) so eingestellt, 
dass es passt. Also aktuell cached es auf allen Seiten die Bilder so 
lange wie ich es eingestellt habe. Auch auf dem Ipad :).


Das Problem mit den maximalen Connections habe ich noch nicht in den 
Griff bekommen leider :(. Ich finde nichts, was darauf hindeuten könnte, 
warum es nicht funktionieren soll.

Habe derzeit nur 5 Bilder, damit das Problem nicht auftritt, damit werde 
ich wohl erstmal leben, bis ich es gefunden habe.

Habe mir in der Zwischenzeit angeschaut, wie das am Besten mit dem POST 
Request -> senden über UART - > auf Antwort über UART warten - > 
Response mit den UART Daten senden, mache.

Habe bei der Übergabe der Post Daten an den Uart, anstatt der einfachen 
schließung des Sockets, schon den passenden Header + Dummydaten 
reingeschrieben, funktioniert soweit ganz gut.
Wie ich gesehen habe, ist keine UART Receive Routine einprogrammiert, 
das heißt das werde ich noch machen müssen, habe mir dazu schon die AT 
Demo angesehen, wie es dort gelöst wird, um eine Ahnung zu bekommen wie 
ich das am Besten angehe. Wobei es bei mir sogar reichen würde den UART 
ohne Interrupt abzufragen, da ich sowieso auf die Antwort vom UART 
warten muss ( + Timer, falls nichts ankommt ).

Schönen Sonntag euch allen :)
Lg
Manuel

von r_u_d_i (Gast)


Angehängte Dateien:

Lesenswert?

Hi Manuel,

du kannst experimentiell mal die AT Version 0.22 versuchen,
baut auf auf dem SDK 0.9.5

Flashen wie folgt:

boot_v1.2.bin 0x00000
user1.new.bin 0x01000
blank.bin 0x3E000
und!!!
blank.bin 0x7E000


lg rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Hi Manuel

nochwas:
Die FW unterstützt bereits booten von anderen Medien.
Mach mal einen AT+RST
...

Wie das ganze geht, später ;-)
erst mal lwip > 4 bzw > 5 bilder....

;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> Hi Manuel,
>
> du kannst experimentiell mal die AT Version 0.22 versuchen,
> baut auf auf dem SDK 0.9.5
>
> Flashen wie folgt:
>
> boot_v1.2.bin 0x00000
> user1.new.bin 0x01000
> blank.bin 0x3E000
> und!!!
> blank.bin 0x7E000
>
> lg rudi ;-)

Hallo Rudi, werde ich probieren, wollte aber jetzt eigentlich bei 
Sprites Version bleiben, um alle Daten und Abhandlungen im ESP zu 
erledigen. Werde aber versuchen ob mit der SDK 0.9.5 und der neuen AT 
Demo, die Probleme weg wären.

Oder meinst du, es wäre besser mit der AT Version + externem µC zu 
arbeiten?

r_u_d_i schrieb:
> Hi Manuel
>
> nochwas:
> Die FW unterstützt bereits booten von anderen Medien.
> Mach mal einen AT+RST
> ...
>
> Wie das ganze geht, später ;-)
> erst mal lwip > 4 bzw > 5 bilder....

lwip > 4 / 5 Bilder? Hat irgendwas mit TCP/IP Stack zu tun, mehr 
verstehe ich nicht :D

Schönen Abend,
Lg
Manuel

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
>> erst mal lwip > 4 bzw > 5 bilder....
>
> lwip > 4 / 5 Bilder? Hat irgendwas mit TCP/IP Stack zu tun, mehr
> verstehe ich nicht :D

Hi Manuel,

schauh dir mal im lwip\app ordner an:
1
..
2
espconn_tcp_max_con
3
..
4
espconn_tcp_set_max_con(uint8 num )
5
..
6
extern sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn, uint8 num)
7
..



oder und
0.9.3\include

espconn.h an
1
..
2
sint8 espconn_tcp_set_max_con(uint8 num );
3
..


..
1
if(espconn_tcp_get_max_con()!=5) {
2
espconn_tcp_set_max_con(5);
3
system_restart(); // ;-) ....
4
}

schöne restwoche und gutes gelingen!

lg rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi!

Danke für die Infos,

r_u_d_i schrieb:
> Fritz Huber schrieb:
>>> erst mal lwip > 4 bzw > 5 bilder....
>>
>> lwip > 4 / 5 Bilder? Hat irgendwas mit TCP/IP Stack zu tun, mehr
>> verstehe ich nicht :D
>
> Hi Manuel,
>
> schauh dir mal im lwip\app ordner an:..
> espconn_tcp_max_con
> ..
> espconn_tcp_set_max_con(uint8 num )
> ..
> extern sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn,
> uint8 num)
> ..
>
> oder und
> 0.9.3\include
>

Die Einträge in der espconn.h habe ich gefunden, aber in der 0.9.3er 
SDK, bzw. in Sprites Programm, wird die espconn.h nicht verwendet soweit 
ich sehe? Habe alle Dateien durchsucht, und nichts gefunden, oder bin 
ich einfach nur Blind?

> espconn.h an
> ..
> sint8 espconn_tcp_set_max_con(uint8 num );
> ..
>
> ..
> if(espconn_tcp_get_max_con()!=5) {
> espconn_tcp_set_max_con(5);
> system_restart(); // ;-) ....
> }

Diese Zeilen sehen EXTREMST vielversprechend aus!!
Aber ich hab sie bei Gott nirgends gefunden :(. Wo hast du die her? Oder 
sind die aus den Demos der neuen SDK?

>
> schöne restwoche und gutes gelingen!
>

Danke, ebenso! Gutes gelingen kann ich immer brauchen :D

Lg
Manuel

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
>
> Die Einträge in der espconn.h habe ich gefunden, aber in der 0.9.3er
> SDK, bzw. in Sprites Programm, wird die espconn.h nicht verwendet soweit
> ich sehe? Habe alle Dateien durchsucht, und nichts gefunden, oder bin
> ich einfach nur Blind?

Nimms halt einfach her und pass an ;-)
Das ist die Base als SDK 0.9.3
darauf greift der compiler zu wegen der
esp connection tcp kurz espconn_tcp..
wenn die vorkommt ..

>>
>> ..
>> if(espconn_tcp_get_max_con()!=5) {
>> espconn_tcp_set_max_con(5);
>> system_restart(); // ;-) ....
>> }
>
> Diese Zeilen sehen EXTREMST vielversprechend aus!!
> Aber ich hab sie bei Gott nirgends gefunden :(. Wo hast du die her? Oder
> sind die aus den Demos der neuen SDK?

Gott ist auch im Himmel - dafür bist du weiss Gott auch noch viel zu 
jung ;->) dass du da oben warst und daher kannst es nicht dort gesucht 
haben können ;-) ;-ö)

;-)

nein - ist nur ein schelm ansatz wie espressif denkt
heisst ja
wenn max connection nicht 5
dann setz die auf 5
und reboot - daher ist ja der smilie dahinter

bau es dir passend um -
hau es in die user_init rein
damit kannst mal testen ob deine einstellung dann "zieht"
oder ob er neu bootet ;-) und espressif sich verewigt hat.

dann schaust dir mal die lib zu lwip an und suchst dir die stellen raus
oder besser -
hau dir alle files aus dem sdk durch ein suchprogramm und such nacch dem 
string "tcp_set_max_con" dann findest du die stellen auch in den libs.

du könntest Uedit32 nehmen und suche nach files funktion in einem ordner 
nach einem bestimmten string einschlisslich subfolder verwenden, dabei 
gibst das sdk als base/root an.


> ..Gutes gelingen kann ich immer brauchen :D

bekommst schon hin. wenns eckt schreibst .

lg
rudi ;-)

von r_u_d_i (Gast)


Lesenswert?

Fritz Huber schrieb:
>> ..
>> sint8 espconn_tcp_set_max_con(uint8 num );
>> ..
>>
>> ..
>> if(espconn_tcp_get_max_con()!=5) {
>> espconn_tcp_set_max_con(5);
>> system_restart(); // ;-) ....
>> }
>
> Aber ich hab sie bei Gott nirgends gefunden :(. Wo hast du die her? Oder
> sind die aus den Demos der neuen SDK?

moin moin manuel,
hab mal über deine posts mehr :) nachgedacht und muss mal hinter/nach 
fragen, du hast doch geschrieben, dass du die sdk base 0.9.3 
verwendest?.

welche api verwendest du dazu?

schauh mal unter

3.3.2.14 espconn_tcp_get_max_con
3.3.2.15 espconn_tcp_set_max_con

und auch

3.3.2.16 espconn_tcp_get_max_con_allow
3.3.2.17 espconn_tcp_set_max_con_allow

jetzt solltest klar kommen.

lg & schönes langes wochenende -

rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> Fritz Huber schrieb:
>>> ..
>>> sint8 espconn_tcp_set_max_con(uint8 num );
>>> ..
>>>
>>> ..
>>> if(espconn_tcp_get_max_con()!=5) {
>>> espconn_tcp_set_max_con(5);
>>> system_restart(); // ;-) ....
>>> }
>>
>> Aber ich hab sie bei Gott nirgends gefunden :(. Wo hast du die her? Oder
>> sind die aus den Demos der neuen SDK?
>
> moin moin manuel,
> hab mal über deine posts mehr :) nachgedacht und muss mal hinter/nach
> fragen, du hast doch geschrieben, dass du die sdk base 0.9.3
> verwendest?.

Danke :).
Sorry fürs späte Antworten, hatte die letzten Tage etwas weniger Zeit 
leider.

>
> welche api verwendest du dazu?
>

Sorry, jetzt blamiere ich mich, was genau ist unter api zu verstehen, 
google gibt dazu nichts her ( zumindest nichts was ich verstehe ;) ).

> schauh mal unter
>
> 3.3.2.14 espconn_tcp_get_max_con
> 3.3.2.15 espconn_tcp_set_max_con
>
> und auch
>
> 3.3.2.16 espconn_tcp_get_max_con_allow
> 3.3.2.17 espconn_tcp_set_max_con_allow
>
> jetzt solltest klar kommen.
>

Ich glaube ich weiß schon, wieso ich so verwirrt bin. Ich verwende 
aktuell fertig compilierte lwip ( also nurmehr die .a ) die nurmehr mit 
sprites Programm gelinkt werden. Deshalb habe ich auch die Files nicht 
finden können ( logisch ).
Hat leider etwas gedauert, bis ich das erkannt habe ;) Sorry dafür !

Das heißt ich müsste die max_con Einstellungen in der lwip vergrößern, 
dann die lwip neu compilieren, und dann mit Sprites Programm linken. 
Sehe ich das so richtig?

> lg & schönes langes wochenende -
>
> rudi ;-)

Danke!

Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Folgendes findet sich in der lwip init.c :
1
#if LWIP_TCP
2
  MEMP_NUM_TCP_PCB = 5;
3
  tcp_init();

Sieht verdächtig aus ;).

Die Funktionen set_max_con werden nie aufgerufen, die Einstellung 
scheint Standardmäßig mit der oben genannten definition = 5 zu sein.

Werde mal versuchen das umzustellen, neu zu kompilieren und alles neu zu 
linken, und dann abwarten und das Beste hoffen :).

Danke!

Lg
Manuel

von r_u_d_i (Gast)



Lesenswert?

Hi Manuel,

anbei
aktuelleste SDK 0.9.6

http://bbs.espressif.com/viewtopic.php?f=5&t=154

die "vertrauliche"  API ( letzter stand ,  Attached in fast jeder SDK  )
dazu hier attached

oder direkt bei espressif - öffentlich "vertraulich" ;-)

http://bbs.espressif.com/download/file.php?id=214

pkt:
3.8.2.15
3.8.2.16
3.8.2.17
3.8.2.18

eine SDK ( libs .a usw ) brauchst du um sprite überhaupt compilieren zu 
können. du kannst es mal mit der neuesten versuchen.

du programmierst dann unter der VM mit toolchain? darin ist die SDK 
schon eingeflossen, must mal schauhn, wo die SDK base abgelegt ist, bzw 
siehst dann in den makefiles und kannst die Version checken.

btw :

* API

http://www.gruenderszene.de/lexikon/begriffe/application-programming-interface-api

http://de.wikipedia.org/wiki/Programmierschnittstelle

lg
rudi ;-)

von Fritz Huber (Gast)


Lesenswert?

r_u_d_i schrieb:
> Hi Manuel,
>
> anbei
> aktuelleste SDK 0.9.6

Werde mal versuchen das mit Sprites Programm ans laufen zu bekommen, 
habe es letztens kurz versucht und es kamen einige compiler Errors, habe 
mich dann noch nicht näher damit beschäftigt. Werde ich heute Abend 
versuchen.

> http://bbs.espressif.com/viewtopic.php?f=5&t=154
>
> die "vertrauliche"  API ( letzter stand ,  Attached in fast jeder SDK  )
> dazu hier attached

Danke, sorry die Files waren in meiner SDK irgendwie nicht dabei.

>
> oder direkt bei espressif - öffentlich "vertraulich" ;-)
>
> http://bbs.espressif.com/download/file.php?id=214
>
> pkt:
> 3.8.2.15
> 3.8.2.16
> 3.8.2.17
> 3.8.2.18
>
> eine SDK ( libs .a usw ) brauchst du um sprite überhaupt compilieren zu
> können. du kannst es mal mit der neuesten versuchen.

Ja das ist soweit klar, darin enthalten sind ja alle Kommandos von 
Espressif um auf die Interfaces etc. zugreifen zu können.

>
> du programmierst dann unter der VM mit toolchain? darin ist die SDK
> schon eingeflossen, must mal schauhn, wo die SDK base abgelegt ist, bzw
> siehst dann in den makefiles und kannst die Version checken.

So ist es, die libs sind unter /sdk und Sprites Programm unter /app. Im 
Makefile werden die libs, mit dem compilierten Programm von Sprite 
verlinkt.

Aber jetzt bin ich mir gerade unsicher, muss ich die lwip neu 
compilieren mit anderen Paramtern oder muss ich in meiner user_main 
einfach nur die (3.8.2.16.) espconn_tcp_set_max_con mit meinem neuen 
Paramter also zb. 8 aurufen? Das müsste doch auch reichen, wenn ich mich 
nicht Irre?

>
> btw :
>
> * API
>
> http://www.gruenderszene.de/lexikon/begriffe/appli...
>
> http://de.wikipedia.org/wiki/Programmierschnittstelle
>
> lg
> rudi ;-)

Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

Habe es soeben ausprobiert, die Zeile zum ändern der maximalen 
connections funktioniert. Allerdings scheint es RAM Probleme zu geben. 
Bzw. Probleme mit der Heap size, die aber wohl bekannt sind, scheinbar 
reserviert er einen gewissen Speicher, und gibt den erst nach einem 
Timer Timeout wieder frei, und nicht nach einem ACK. So kommt es, wenn 
man den Timer nicht abwartet zu einem:
1
malloc assert!<\r><\n>

Und das Modul rebootet komplett.

Ansonsten scheint es allerdings zu funktionieren. Was mich nur wundert 
ist auch folgendes:
1
Con req, conn=0x3fff5a30, pool slot 0<\r><\n>
2
URL = /1.png<\r><\n>
3
Is url index 12<\r><\n>
4
Heatshrink compressed file; decode parms = b4<\r><\n>
5
Con req, conn=0x3fff6b98, pool slot 1<\r><\n>
6
URL = /2.png<\r><\n>
7
Is url index 12<\r><\n>
8
Heatshrink compressed file; decode parms = b4<\r><\n>
9
Con req, conn=0x3fff6da0, pool slot 2<\r><\n>
10
URL = /3.png<\r><\n>
11
Is url index 12<\r><\n>
12
Heatshrink compressed file; decode parms = b4<\r><\n>
13
Con req, conn=0x3fff6e00, pool slot 3<\r><\n>
14
URL = /4.png<\r><\n>
15
Is url index 12<\r><\n>
16
Heatshrink compressed file; decode parms = b4<\r><\n>
17
Con req, conn=0x3fff6e60, pool slot 4<\r><\n>
18
URL = /5.png<\r><\n>
19
Is url index 12<\r><\n>
20
Heatshrink compressed file; decode parms = b4<\r><\n>
21
Con req, conn=0x3fff6960, pool slot 5<\r><\n>
22
URL = /6.png<\r><\n>
23
Is url index 12<\r><\n>
24
Heatshrink compressed file; decode parms = b4<\r><\n>

Er verwendet immer nur pool slot 0 - 5. Obwohl ich aktuell sage er kann 
10 Connections gleichzeitig aufbauen. Ich lade 9 Bilder gleichzeitig, 
eigentlich müsste er doch bis auf pool slot 8 hoch gehen. Macht er aber 
nicht.

Werde noch die SDK 0.9.5 probieren, vl. sind da schon einige Probleme 
beseitigt :).

Schönen Abend Rudi,

Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Noch eine kleine Frage Rudi,

da ich ja einen Rx Interrupt brauche, weil ich zur Kommunikation zum µC 
einen Rückkanal brauche, könnte ich doch einfach die implementierten 
UART Funktionen von Sprite weggeben, und die API uart_init() 
uart0_tx_buffer und uart0_rx_intr_handler verwenden, richtig?

Das heißt die richtige lib mitlinken und die uart.h in meiner .c 
einbinden, und ich müsste diese Funktionen verwenden können.

Im Grunde verwendet ja, wenn ich das so richtig verstehe, Sprite eine 
selbst geschriebene UART Senderoutine, er gibt allerdings nur Debugdinge 
aus, die ich natürlich am µC nicht brauche ( die wichtigsten kann ich ja 
trotzdem mit uart0_tx_buffer wieder rausschicken ).

Dann hätte ich am einfachsten die Implementierung zur Verwendung des 
UART Rx um einen Rückkanal für die µC Kommunikation zu haben oder?

Tut mir Leid, für die vielleicht etwas doofe Frage, aber mit den vielen 
.c und .h und .a wird mir schon ganz schwummrig ;).

Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Hey Rudi,

So, läuft nun mit SDK 0.9.5, eine Verbesserung gibts, das Modul Resettet 
nichtmehr, wenn ihm der RAM ausgeht, sondern er verharrt, bis RAM frei 
ist, und dann schickt er die restlichen Daten raus ( Aber wieder nur 
nach Timer ablauf ).

Habe jetzt auch schon die UART Sende / Empfangsroutine auf die uart.c / 
h von espressif umgebaut. Funktioniert soweit sehr gut.

Habe nur ein Problem, auf dessen Lösung ich seit einer Stunde nicht 
komme,
1
    while (READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)) {
2
        RcvChar = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
3
4
        /* you can add your handle code below.*/
5
        *(pRxBuff->pWritePos) = RcvChar;
6
7
        // insert here for get one command line from uart
8
        if (RcvChar == '\r') {
9
            pRxBuff->BuffState = WRITE_OVER;
10
      os_printf((const char *)pRxBuff->pRcvMsgBuff);
11
      strcpy(currState,(const char *)pRxBuff->pRcvMsgBuff);
12
        }

Ich kann zwar hier den Buffer auslesen ( wobei ich mir nicht sicher bin, 
ob das richtig ist ), aber ich habe keine Ahnung wie ich den Buffer 
wieder leere, habe es versucht mit WritePos auf 0 stellen, klappt aber 
auch nicht. Kannst du mir vielleicht einen klitzekleinen Denkanstoß 
geben :)?

Das wär super!

Danke dir vielmals,
Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Hallo Rudi,

ich nerv nochmal :D.

Hoffentlich nimmst dus mir nicht übel.

Habe ein wenig weiterprogrammiert, habe es zwar nicht geschafft, mit der 
eingebauten Routine die eine komplette Zeile übergibt es ans laufen zu 
bekommen, habe mir aber meine eigene geschrieben.

Das funktioniert soweit.

Jetzt habe ich noch folgendes Problem: ich schicke einen POST Request 
zum ESP, der ESP schickt am UART Den Inhalt raus, und darf erst dann den 
Socket schließen, wenn er wieder etwas empfangen hat.

Jetzt habe ich einen Timer am laufen, der startet, wenn der POST Request 
am ESP ankommt, der läuft 5 Sekunden. Aber wie schaffe ich es, den 
Socket erst nach Ablauf zu schließen?

Habe mittlerweile alles durchprobiert, mit HTTPD_CGI_MORE scheint es 
nicht zu funktionieren, das einzige was mir noch einfällt, dass ich den 
Socket händisch in meiner Timer Funktion schließen muss, aber der Aufruf 
der cgi Funktion, erwartet doch einen return Wert, damit er den Socket 
schließen kann. Damit kann es also auch nicht funktionieren :/.

Hoffentlich kannst du mir vl. einen kleinen Tipp geben.

Danke, schönes Wochenende :).
Lg
Manuel

von Fritz Huber (Gast)


Lesenswert?

Hallo,

es ist schon gut zwei Wochen her, habe es in der Zwischenzeit so gelöst, 
dass ich nach einem 3 Sekunden Timer eine weitere Anfrage vom Host an 
den ESP schicke, und dann den Wert den ich erhalte übergebe.

Leider ist dies nicht ganz so wie gewollt, da diese 3 Sekunden doch 
einfach nur aus der Luft gegriffen sind und etwas störend lange.

Rudi: Ich weiß nich tob du hier noch mitliest, falls ja, hättest du eine 
Idee, wie ich den Socket solange offen lassen kann, bis ich eine Antwort 
via UART erhalte, und erst danach die Daten rausschicke, und den Sockel 
schließe?

Habe schon vieles versucht, aber bin leider bislang immer gescheitert.

Danke für deine Mühen,
Lg
Manuel

von Schab nix xacht (Gast)


Lesenswert?

Fritz Huber schrieb:
> Gesendet wird mit:uart_puts("AT+CIPSEND=");  //Sende Daten
>   uart_puts(bufferr);    // Nehme richtigen Kanal
>   uart_puts(",540\r\n");    //Wieviele Bytes
>   while(!groesser);   //Warte bis größer Zeichen erkannt
>   groesser=0;
>   for(int ii=0;ii<540;ii++)  //sende die 540 Byte die das Bild groß ist.
>   {  uart_putc(pgm_read_byte(&(png10[ii])));    }

Sorry, tl;dr. Vielleicht habt ihr das ja auch schon bemerkt, oder es ist 
inzwischen egal, aber diese Codepassage sieht falsch aus:
uart_puts(bufferr);    // Nehme richtigen Kanal
Das liefert ja die Kanalnummer nicht ASCII-Codiert, oder etwa doch?
richtiger wäre vermutlich: uart_puts(bufferr+0x30); ?!?

von M. G. (looking)


Lesenswert?

r_u_d_i schrieb:
> Fritz Huber schrieb:
>> Hallo!
>>
>> Sehr schade :(
>
> kannst ja alles nachlesen
>>
>> Zwei Bücher ;)?
>
> Ostern 2015
>

Hallo,

sind die 2 Bücher zum ESP8266 inzwischen verfügbar und wenn ja, wo?
Danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.