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
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 ;-)
@ 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
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.
@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 ;-)
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
@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 ;-)
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
@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 ;-)
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
@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 ;-)
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?
@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
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?
@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?
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
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.
@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
@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
charBuffer[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.
// 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 ;-)
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
charBuffer[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
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
{chardata;
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
asmvolatile("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 :)
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 ;-)
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
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:
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
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
charbild_blume[]="0x.. 0x.................";
5
charbild_baum[]="0x.. 0x.................";
6
charbild_haus[]="0x.. 0x.................";
7
charbild_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 kannBeitrag "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 :-)
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.
(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(intii=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
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(intii=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 ;-)
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
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 ;-)
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
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
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 ;-)
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
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
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
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
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:
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
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
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
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 ;-)
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
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
Hallo Fritz,
Fritz Huber schrieb:> Danke für deine Antwort Rudi.>> Das heißt ich suche mit die SDK 0.9.3http://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 kannhttp://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 ;-)
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 :).
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?
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 ;-)
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.
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 ;-)
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 ;-)
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 ;-)
> 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 ;-)
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.
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 ;-)
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
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
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?
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 ;-)
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
:(
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
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
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
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
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?
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.
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.
> 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
> 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.
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:'
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 :).
@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.
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. ;-)
@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 <-
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. :)
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?
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.
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?
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
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?
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.
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?
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.
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.
@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.
;-)
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
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.
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
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
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.
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
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
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 ;-)
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.
>> 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 ;-)
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
>> 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
>#defineMAX_CONN8
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 ;-)
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
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.
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
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
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 ;-)
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....
;-)
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
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:
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
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 ;-)
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 ;-)
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
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
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
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
mallocassert!<\r><\n>
Und das Modul rebootet komplett.
Ansonsten scheint es allerdings zu funktionieren. Was mich nur wundert
ist auch folgendes:
1
Conreq,conn=0x3fff5a30,poolslot0<\r><\n>
2
URL=/1.png<\r><\n>
3
Isurlindex12<\r><\n>
4
Heatshrinkcompressedfile;decodeparms=b4<\r><\n>
5
Conreq,conn=0x3fff6b98,poolslot1<\r><\n>
6
URL=/2.png<\r><\n>
7
Isurlindex12<\r><\n>
8
Heatshrinkcompressedfile;decodeparms=b4<\r><\n>
9
Conreq,conn=0x3fff6da0,poolslot2<\r><\n>
10
URL=/3.png<\r><\n>
11
Isurlindex12<\r><\n>
12
Heatshrinkcompressedfile;decodeparms=b4<\r><\n>
13
Conreq,conn=0x3fff6e00,poolslot3<\r><\n>
14
URL=/4.png<\r><\n>
15
Isurlindex12<\r><\n>
16
Heatshrinkcompressedfile;decodeparms=b4<\r><\n>
17
Conreq,conn=0x3fff6e60,poolslot4<\r><\n>
18
URL=/5.png<\r><\n>
19
Isurlindex12<\r><\n>
20
Heatshrinkcompressedfile;decodeparms=b4<\r><\n>
21
Conreq,conn=0x3fff6960,poolslot5<\r><\n>
22
URL=/6.png<\r><\n>
23
Isurlindex12<\r><\n>
24
Heatshrinkcompressedfile;decodeparms=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
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
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,
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
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
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
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); ?!?
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.