Comparacion uso libreria urequests en la Esp8266 y en la Esp32




Presentación


Despues de haber hecho diversas pruebas trabajando con la libreria urequests de micropython he llegado a la conclusión que la misma si bien funciona para las paginas http tanto en las placas Esp8266 como en las Esp32 no ocurre lo mismo con las paginas https en cuyo caso solo funciona en las placas Esp32.



Materiales


Placa Esp8266 Wifi

Modulo Adaptador Usb Esp-01s Programador Esp8266 Wifi

Placa Esp32-Cam

Programador Esp32-Cam


Si bien por ser mas cómodo y práctico se ha usado el adaptador el mismo puede ser remplazado por una placa FTDI y el cableado pertinente.


Código


El codigo propuesto a continuacion permite comprobar lo dicho, el mismo se ha escrito en un unico archivo main.py.



        import urequests
        import network
        
        red = 'xxxxxxx'
        clave = 'xxxxxxxxx'
        
        def conecta_wifi():
                    wifi = network.WLAN(network.STA_IF)
                    wifi.active(True)
                    wifi.connect(red, clave)
                
                    while wifi.isconnected() == False:
                        pass
                
                    print('Conectada a Wifi')
                    print('************************')
                    print('RED:     %s' % red)
                    print('IP:      %s\nSUBNET:  %s\nGATEWAY: %s\nDNS:     %s' % wifi.ifconfig()[0:4])
                    a = wifi.config('mac')
                    print('MAC:     {:02x}:{:02x}:{:02x}:{:02x}:{:02x}'.format(a[0],a[1],a[2],a[3],a[4]))
                    print('************************+')
        
        conecta_wifi()
        
        #Para realizar la prueba hay que habilitar una u otra de las siguientes lineas 
        
        #Caso pagina http(1) 
        url = 'https://carlosvaccaro.com.ar'
        
        #Caso pagina https(2)
        #url = 'https://api.telegram.org/bot0000000000:XXXXXXXXXXXX-xxxxxxxxxxxxxxxxxxxxxx/getUpdates'
        
        #Pueden ser esar url o cualquier otra que sean http y https respectivamente
        
        response = urequests.post(url)
        
        print("response code {}".format(response.status_code))
        
        ############################################################
        #RESULTADOS:
        #***************************************************
        #Caso url http(1):
        
        # Salida por consola para Esp 8266:
        #response code 200
        
        # Salida por consola para Esp 32:
        #response code 200
        #***************************************************
        #Caso url https(2):
        
        # Salida por consola para Esp 8266:
        #Traceback (most recent call last):
        #  File "", line 38, in 
        #  File "requests/__init__.py", line 184, in post
        #  File "requests/__init__.py", line 93, in request
        #OSError: -40
        
        # Salida por consola para Esp 32:
        #response code 200
        ############################################################


    

Conclusiones


El error OSError: -40 segun algunos pareceria estar causaado por una incompatibilidad entre el MicroPython y los certificados SSL y otros sostienen que esta vinculado a que no hay suficiente memoria dinámica para comunicar SSL a servidores de Internet. Por ahora no me he formado una opinioen y seguire investigando el tema.

Mientras tanto he encontrado como una solucion intermedia para la Esp8266 mediar entre las paginas https y la placa con un servidor colocado en la misma placa donde instalo una pagina con funciones de javascritp que comunican la pagina https con el servidor y este con la placa Esp8266 veanse los ejemplos de: Enviar mensaje a Telegram con la Esp8266 con JavaScript y Controlar dos leds desde Telegram con Servidor Esp8266.



Quedo disposición de quien quiera hacerme consultas o sugerencias mi correo electronico es carlosvaccaro1960@gmail.com