You are reading a single comment by @Gordon and its replies. Click here to read the full conversation.
  • Finally, HTTPS on Pico with ESP8266 now works!

    You just need one of the latest builds - or the changes will be in 1v85 when it is released.

    The trick is to store the variables in flash memory, and to then use memoryArea to reference them. You could probably load from a connected SD card too if you needed to.

    The following code runs, with 1300 JsVars (out of 5100 total) free right in the middle of the HTTPS request, so there's actually a reasonable amount of space left over for your code, although not masses.

    It looks like TLS/HTTPS takes around 3000 variables just to run, and potentially more when it's setting up a connection.

    // The 128kB of flash memory on Pico that's not supposed to exist :)
    var addr = process.memory().flash_start + process.memory().flash_length;
    print("Address 0x"+addr.toString(16));
    // flash memory module
    var flash = require("Flash");
    // Erase all data in that flash page
    flash.erasePage(addr);
    
    /* This writes data to flash, and returns a 'memoryArea' -
    a reference to the actual bytes in flash*/
    function fwrite(data) {
      var len = data.length;
      while (data.length&3) data+="\xFF";
      var a = addr;
      flash.write(data, addr);
      addr += data.length;
      return E.memoryArea(a,len);
    }
    
    // Load up the key, certificates, etc
    var options = url.parse("https://192.168.1.50:443");
    options.key = fwrite( atob("MIIEogIBAAKCAQEAwcBeteXIax0S+gNFv4­f0K+q4LOv/E7kmiT8IvZl85NvUDF/slro/x/EreR­MGmjcxoeT7+U62nrVu07lZhc+WAiluBX6Ykb2h7l­J/1M3MKV4uK5Yq92p1MxVXzYhVbCKBmcKrPu7Od+­hLIMLIMTu0zwc23cE4tSUP4WV38BAzol3k9Rhd1M­IjdZ3QUBTYYrvPveUv1TCdsQNsAGv5ZhJx57Anm5­2W7jTzwBw1O4cn31TD0KD3US/yDKL2IH7BSBFiad­N5AzBJbh/ch16/aOfUBIlKNZf9LofMOVLxNm9hxp­P2vgckl9u9nTtWiCR5EmKZaTqTqN7bsoLkNKR1GJ­6yBwIBIwKCAQAQm3XVE7IXz0rE+PdZj09xeoTQpo­OT+e1cOJpZZO1ys8G36vcFmu+GKp1ThUm1cnH37w­5Ikbfht8erv24SyKZ1NsBJnSMFLYLoirp/9GH06t­DB6EzTYOV5aDq52HxZudCYJqD2xAMRl5FpNURb/c­2rWGPJ3Vyhz/oMAWINQzegM8in120G0ZmEnbdvdD­WivWKJ4Ap1/fqiWr6yBLbG7gKnLkU3PksQG0YtTa­hSGXdfEPAi7+CIcRi8svM2Agecm7DH3MW/pgHY8J­X87psAmgqCONyVqcAiBlBwQrIk59pczKuzCOSp66­STM5S7pXwIuWz/YDJPaGPIL8U/GAyQvJxjAoGBAP­fc71FJNg+pKvQMUybGutDtACkexYBNVInpkAKBtG­szPjN8xVmmh9huHj+zooFSxQPB2FmsNW7i69pf09­FFFgf2tDL22BcG9VldpJR8l77EVw2arovoKC1TyC­WxNvD+LYA6VIdd0OXUfUIXG9RGnnnNmHplO5IQ4k­a2KI3XEuBtAoGBAMgcrRSRVBTBQtWEyz/cCivdrz­dV2AaoNtv5+k0o2pJrViHvrCbhGZNBc/R0u4s3dM­53L2IX0w065LD1PeyKjaFXZO2lx3Iu3lf4L8U6oE­VQ8C8eLQUOwJ8dK1fWp304Z/iwStwmTa0TZE05KK­hl+31NlSOlNr2CHfWeY1So81vDAoGBAKn2lXmRSa­RWvl40VkZ5pKyFQfBPnV9K+CQN3xepZcXZ/sQ4TM­/CpktEMf/LoqHSWzXGwD19ZnfsD3ErxHI+AHp9SF­12EITRkkvocNrZF5jBJcAvjaHDw8dPZKwhv0Yqot­uVtk4xs9DMOKJY/SPYpy7zYT38RhsEQ2OwG8754Q­7rAoGASlPLQidZvpDs8DijQ5rfNN1PtXeoAnj+bv­Zy6XWTAy8unuP+HRHHq7k5spHCAIJP9Opwr2fvTg­6PdO1gJKh9v5V9QlOEmCAJcSGrV+KTTPItU1RZ3U­6fUQrVlaeACfBhIdsUfafTtVBYdHRQ7hdAJzoS0r­m1PxMScSwzhdhaY+kCgYEAtpWlQzz7u+lurGKbKZ­Y1cTPiFprA9PIsCtl0A5PdQ1XPnYfBgVAlB26oF9­ubNy8VxpoerT7VlfILOSBRHx4n2VaUe/7iyZX4yN­C+J8zKyLLq8ea0GC76d/masFMuWvZcuOk0afnBZ4­VffGUxYMdjP8CEWFJjYjJpsWzW3uWB2ek="));
    options.cert = fwrite( atob("MIIFijCCA3KgAwIBAgIJAJhrfxuduldTMA­0GCSqGSIb3DQEBCwUAMIGBMQswCQYDVQQGEwJVUz­ELMAkGA1UECBMCTUExDzANBgNVBAcTBkJvc3Rvbj­ETMBEGA1UEChMKRXhhbXBsZSBDbzEQMA4GA1UECx­MHdGVjaG9wczELMAkGA1UEAxMCY2ExIDAeBgkqhk­iG9w0BCQEWEWNlcnRzQGV4YW1wbGUuY29tMB4XDT­E1MTEyNzEyMjM1NloXDTE4MDgyMjEyMjM1NlowgY­YxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJNQTEPMA­0GA1UEBxMGQm9zdG9uMRMwEQYDVQQKEwpFeGFtcG­xlIENvMRAwDgYDVQQLEwd0ZWNob3BzMRAwDgYDVQ­QDEwdjbGllbnQxMSAwHgYJKoZIhvcNAQkBFhFjZX­J0c0BleGFtcGxlLmNvbTCCAiIwDQYJKoZIhvcNAQ­EBBQADggIPADCCAgoCggIBANEmBWwVwLrRcIzF2J­uu45tfP0CO88/80QlBMZPPAT7HbIo1YLeBGy3d12­LxywT8/1zGlsxxA5xJS1wumUE3xIOAZRZG++6Jsh­stfNPvUNbmIFNNvr3cKpppWX7rPqK39/cKniBaoL­Ll6RaYrIuBDcgL1Pofs5XbdsPk92fn82KyDrpyYz­uI6KNjWMTtyoIDiC8vftY9JeL+IMAVQ3s+oNdxQi­E1sU252BSDVXymGxoKDs8+EpbCnTkU8HdffZ4o7r­WFEj9FzM/PgZmNF9c2YLsLLlh3QmMxZhfXdMmElg­fCbK54uKsujFFxQI+whX2gwy1qeWkJBywSpj7g4S­DizIN8jXetT5J4r/zSURKwlMeboZdUd5fs1us4Jt­N0Ba2D7Tch+cKenyM/iRo3HPVXvsL2FA4cuEdEwO­M8kADeZqIO9yrfp3rNsKkEY/a8e96jLniRx1DD9C­sk8xvXk95UBTAuSZeg3oGFPBALa6XK3PKLd1EHm4­un9DO2TvgaypfSIudz0hXqapOavxz2IyOyqigpJq­DR9fXe9WKa3oD0fwS5SgBmcjmy/73JTDDiv4fgCz­tLPZgSftMPNBy3HDJxyf1uRVyOOMebL4jfxVrgM/­kIzMSz4YSMGazKLknKz9x6PtEmjEeVlJNAmoXmT6­zXA9N+4+kUanG6XE2IrvD+MfnrAgMBAAEwDQYJKo­ZIhvcNAQELBQADggIBAAPv3w4KVca2vZeaPN4kHb­7ln1ZkXimZ/jZYJMdFh0xcwnTgGQiW+P2voIJuA1­GsrrdLvD27RnV1UKtDbJT+MZB5nM/mt7BMyQKdHE­Gy1YFFLFQz4YMaUEoif5OXFFnmunEu76C90qwbxB­pUiS3lB97Gipy3VDBJKFE2kYaypYJc0XqIJcnypz­sLBU/K9Bl13Xvj7QNN2VyqDGKlw6v6UJWRyYT7ef­qvvJ5Ljglmdn1UxX+WmfLzKtO+aMBoSuOgyFEttL­LKESYXYRRcomfCRxqIH3XA3PzyDEN5R/wG38IQD3­Y0Zt+UYabS6qUKtD2jMD8dL1gr7NWLraDSPAre2f­BbHtjskr8vyR5PjrBFLJWOzEQKzclxW3O6cmZKyj­wd092JuNn+FSjgo/glWik8jyFXJzK5bLXgGFa31Y­FnrmWKDrxbAWCuJL6UcRx4rX9qdPkZpwPTqN1sEh­1YqdZShxDTFjbxDrE8gL5xbo62q9bdzbN/TMzhVo­1BYvQytt7MbX2ZEXDXOup2QiOs23MqcQsf3yjT25­OD5V9w3NWXDcd+TLsNCdKFnY+EpWOe4qs7k4UuXJ­McW/zAPPBZDPEBsi+AAYsNYEo8QdsCcNtiWD818f­TjHR6nmNRsMjRH9jeM9x0N/fJvsuCrrMQZF5KNpn­tOP0lV1ktAIcjQJUf93rN+"));
    options.ca = fwrite( atob("MIIFgDCCA2gCCQD1KANs3obrTjANBgkqhk­iG9w0BAQsFADCBgTELMAkGA1UEBhMCVVMxCzAJBg­NVBAgTAk1BMQ8wDQYDVQQHEwZCb3N0b24xEzARBg­NVBAoTCkV4YW1wbGUgQ28xEDAOBgNVBAsTB3RlY2­hvcHMxCzAJBgNVBAMTAmNhMSAwHgYJKoZIhvcNAQ­kBFhFjZXJ0c0BleGFtcGxlLmNvbTAeFw0xNTExMj­cxMjIyMzFaFw00MzA0MTMxMjIyMzFaMIGBMQswCQ­YDVQQGEwJVUzELMAkGA1UECBMCTUExDzANBgNVBA­cTBkJvc3RvbjETMBEGA1UEChMKRXhhbXBsZSBDbz­EQMA4GA1UECxMHdGVjaG9wczELMAkGA1UEAxMCY2­ExIDAeBgkqhkiG9w0BCQEWEWNlcnRzQGV4YW1wbG­UuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMI­ICCgKCAgEAwjlJ3eyrnGIiJiplY5mvIaaoMC20oR­4Jx5+FOXNJJhjSz9mOoqcpEe2U6ZmmVfcpc8zdt1­f9KkED5yjzpnF02CG+KYaRs/Rfj0NJejcpBN3Hn4­R6+yJek2rYrKi4uZyMZrWx/8PTp/lEypAEBf/2vX­9WYNgi5eWyHeHEfJ4yucRI1UgRw5W/RLYoAePAPT­1ekB66NbosBIZhRXJvjqED/jOMOlpHgNPQHTUyPj­5lR8ZTSduATUQac6qRx9pdYyVICVE8bxma56R0pX­8Cdx/wg+5gKOXUPuXW1xTPNuH4JpNTd7huJwa8Ff­0ReKTLHZk1hYB7uDzL5moc8kylYEwz2W13KyXxZb­h3kClVSNZvPbrcp1eWoyJyznLRLVv3cCWQwmEMr1­071Th4/6dnUZ/wl085HIjV93X9H8nzZ7VBkwHD8Z­HB1foW0/jgbK0qsH2gV7frGFPxZydmk/Nrwdl3Rt­oM+xEpQI7cPYDf9j/CX/ynM4LfOeHhVfMrx0I3E8­wNPX9MU+O+Pu6wsT4WbGkNhcuS4oE2As13obMnUe­bLwOxxWu4ErI8WG1ITwRVEQik72Iqj0d5vvjZw2z­5TFzkMB/Tl3qNvAp9jzpNtvRUyrS6KRY667BZOJ9­TJK/5+jenGEi7+UNq9ig490WnYDBPA/N9QSPHCx6­TLNapayQvem5UCAwEAATANBgkqhkiG9w0BAQsFAA­OCAgEAS9mpX4QgnwntvH9wutY+zOWBLejd/psjjV­mZdYzeVC6fkCaw0Qj1unszq58EHlA8275ARTYyic­RHIYLF3ZDYwMxUCu7iIQJUzVYJRqowV2Ap4OeMlh­5sUb/Wlmhs5TauSZ1gz4LqMqnGkVMrvvU+1WX2eP­Fl81nnr1UMb2+dLzC0Gj2jH3tlzW76yFD4gElR8W­4ypgvAw9pFKlSuOc4y6KS32jaOJk9zWSigPQadI1­pOSSk+iKuPp98BBY/gDw+FBKUNARo3ci5F2s1dJZ­wQSCnuBhVb1r+3aHjnp4PAO7Mq7YyFf7qwSmuA++­nF7TGhu3lf3hY1Jzgo+rOi+pFZtebCsewLDJjyNU­xhQkOIf4TutC9wPJUtCKDpLA0iJso1AX5297iap5­g7y0J0fUls16U+F0arsBHhgIN5ARifImeE+1bVVx­7kLtklA23njczUt88ylgsCEnYyu0U+0+kwAkMDyP­WDd3KPfDhykhQJ0Ev/44+JTDk3zydO2YvCpqMqLu­hbZr9mvmV7uzJVbFnLr3sU75upv0N4JQLIn3XyTt­DbWjTqA8d6qbG5BxYL5xkrWRxo3Fd6r1AyFje1il­KUkwZ1YZZCDvgv/2uEFyL0VlgfHfBhNbN2nsTTxi­jKc19ROeIRXl7eqWq/cyIbA/5LzEy2UbbEhKIroP­GosQML4sc="));
    
    // hey, let's just see how much memory we're using
    print(process.memory().usage + " vars used");
    
    // And connect to WiFi, then request the web page
    digitalWrite(B9,1); // enable on Pico Shim V2
    Serial2.setup(115200, { rx: A3, tx : A2 });
    var wifi = require("ESP8266WiFi_0v25").connect(Seri­al2, function(err) {  
      if (err) throw err;
      console.log("Connecting to WiFi");
      wifi.connect("Espruino","helloworld", function(err) {
        if (err) throw err;
        wifi.getIP(function(e,ip) {
          console.log(ip);
          require("http").get(options, function(res) {
            console.log("Got response: " + JSON.stringify(res));
            res.on('data', function(data) { 
                console.log(">" + data);
              });
          }).on("error", function(e) {
            console.log("GOT ERROR: "+e);
          });
          console.log("Back to idle...");
        });
      });
    });
    
    

    Note: the key and certificate above work, but have been randomly generated. Please don't post keys/certificates that you intend on using in production up here :)

About

Avatar for Gordon @Gordon started