Hirdetés

Új hozzászólás Aktív témák

  • Tomika86

    senior tag

    Sziasztok!

    Kettő részből áll a kérdésem:

    - Tud valaki jó tutorial-, vagy leírást, hogy a weboldalon lévő javascript kód hogy adja át az adatokat az esp32-nek. ESPAsyncWebservert-t használok, ebbe hogy jönnek át az adatok.

    - Ki van aki beleásta magát az ESPAsyncWebserver könyvtár rejtelmeibe?
    Egy WebServer könyvtárral íródott programot szeretnék átalakítani async könyvtárra, de nem akar menni.

    Példaként, itt egy html kód:
    <!DOCTYPE html>
    <html>
    <head>
    <script type='text/javascript'>
    var file,cmp,partSize=100,offset=0;
    function upload(){
    file=document.querySelector('input[name=file]').files[0],
    partSize=parseInt(document.querySelector('input[name=partSize]').value),
    cmp=document.getElementById('completed'),
    file?sendInfo(file.size):alert('Choose firmware file.')
    }
    function sendDataHandler(e){
    if(null==e.target.error){
    cmp.innerText=(100*offset/file.size).toFixed(1)+'%',
    offset+=e.target.result.byteLength;
    var t=new XMLHttpRequest;
    t.onreadystatechange=function(){
    4 == t.readyState && 200 == t.status && (offset<file.size?sendData():cmp.innerText='All data was sent')
    },
    t.open('post','/nextion_update'),
    t.send(e.target.result)
    }
    else alert('Error: '+e.target.error)
    }
    function sendData(){
    var e=new FileReader,
    t=file.slice(offset,partSize+offset);
    e.onload=sendDataHandler,
    e.readAsArrayBuffer(t)
    }
    function sendInfo(e){
    var t=new XMLHttpRequest;
    t.onreadystatechange=function(){
    4==t.readyState&&200==t.status&&sendData()
    },
    t.open('post','/nextion_fs'),
    t.send(e)
    }
    </script>
    </head>
    <body>
    <input type='file' name='file'/>
    <input type='button' value='upload' onclick='upload()'/> <br/>
    <label id='completed'></label>
    <br/> Chunk size: <input type='text' name='partSize' value='1024' size='4'/>
    </body>
    </html>

    Ebben történik adatküldés esp felé, és ESP programban megérkezik, de hogyan?

    // Receive file size
    server.on("/nextion_fs", HTTP_POST, [](AsyncWebServerRequest * request){},
    NULL,
    [](AsyncWebServerRequest * request, uint8_t *data, size_t len, size_t index, size_t total) {
    uint32_t fsize = atoi((const char*)data);

    Serial.println("Nextion prepare message: " + String(nextion.prepareUpload(fsize)));
    Serial.println("File size: " + String(fsize) + "bytes");
    // Filesize and connection test
    if(nextion.prepareUpload(fsize)) {
    Serial.println("Start upload. File size is: " + String(fsize) + "bytes");
    request->send(200);
    }
    else {
    Serial.print("Bad file size");
    Serial.println(nextion.statusMessage + "\n");
    request->send(500);
    }
    });

    Nem működik a kód egyébként

    Köszönöm!

Új hozzászólás Aktív témák