Enviar mensaje a Telegram con la Esp8266 con MicroPython y JavaScript




Presentación


En el presente proyecto se desarrolla e efectos de lograr enviar mensajes a telegram desde la placa Esp8266 utilizando MicroPython como lenguaje de programación.

Para ello se monto un servidor web en la placa Esp8266 y en el mismo se coloco un página html compuesta por un formulario y un script de java script.

En el formulario se incluyeron los campos necesarios para ingresar los datos del token del bot y el id del chat a efectos de poder enviar el mensaje mas un tercer campo para colocar el mensaje.



Materiales


Placa Esp8266 Wifi

Modulo Adaptador Usb Esp-01s Programador Esp8266 Wifi


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.


Montaje del proyecto en la placa Esp8266


Para utilizar la placa Esp8266 con MicroPython es necesario flashear primero la misma con el firmware correspondiente. En el caso de la utilizada en este modelo ESP8266 with 1MiB flash se utilizó el provisto por la página de MicroPython

Una vez instalado el firmware en la placa utilizando la utilidad que viene provista por el IDE Thonny, o por aquella que ustedes utilicen además del firmware quedara grabado en la placa un archivo boot.py que fue eliminado colocando solamente el archivo main.py que contiene el código desarrollado a continuación.


Código


El código se ha escrito en ununico archivo main.py.



import network
try:
  import usocket as socket
except:
  import socket
  
#Completar con los datos de la red
red = 'xxxxxxxxxxx'
clave = 'xxxxxxxxxx'

def conecta_wifi():
    station = network.WLAN(network.STA_IF)
    station.active(True)
    station.connect(red, clave)

    while station.isconnected() == False:
        pass

    print('Conectado a Wifi')
    print(station.ifconfig())

def web_page():
 
  html = """<html>
            <head>
                <script>
                    function enviar_mensaje(){
                           token = document.getElementById("token").value;
                           id = document.getElementById("id").value;
                           mensaje = document.getElementById("mensa").value;                
                           enviotele = window.open('https://api.telegram.org/bot' + token + '/sendMessage?chat_id=' + id + '&text=' + mensaje);  
                           setTimeout(function(){enviotele.close(); }, 100);
                           token = document.getElementById("token").value = "";
                           id = document.getElementById("id").value = "";
                           mensaje = document.getElementById("mensa").value = "";
                           alert("El Mensaje fue enviado");
                    }
                </script>
            </head>
            <body align='center'>
                    <h1>Mensajes a Telegram</h1>
                    <form action="" method="get">
                          <h4>Escribir el token: </h4>
                          <input type="text" name="token" id="token">
                          <h4>Escribir el ID: </h4>
                          <input type="text" name="id" id="id">
                          <h4>Escribir mensaje: </h4>
                          <input type="text" name="mensa" id="mensa">
                    </form>
                    <button onclick="enviar_mensaje()">Enviar Mensaje</button>
                    
            </body>
            </html>"""
  return html




def conecta_web():
  conn, addr = s.accept()
  print('Tengo una conexión de %s' % str(addr))
  request = conn.recv(1024)
  request = str(request)
  print('Contenido = %s' % request)
  response = web_page()
  conn.send('HTTP/1.1 200 OK\n')
  conn.send('Content-Type: text/html\n')
  conn.send('Connection: close\n\n')
  conn.sendall(response)
  conn.close()

#***************************************

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

conecta_wifi()
while True:
    conecta_web()

  


    


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