Correo: [email protected] - Teléfono: +56979962128

En esta guía aprenderás cómo enviar mensajes a WhatsApp con la Raspberry Pi Pico usando una API gratuita CallMeBot.
Esto puede ser útil para recibir notificaciones desde tu placa, con lecturas de sensores o mensajes de alerta cuando una lectura de sensor esté por encima o por debajo de un cierto umbral, cuando se detecte movimiento, y muchas otras aplicaciones.  
Raspberry Pi Pico W Send Messages to WhatsApp MicroPython
   

Firmware de MicroPython

Para seguir este tutorial, necesitas tener el firmware de MicroPython instalado en tu placa Raspberry Pi Pico.
También necesitarás un IDE para escribir y subir el código a tu placa.

El IDE de MicroPython recomendado para la Raspberry Pi Pico es Thonny IDE.
Sigue el siguiente tutorial para aprender a instalar Thonny IDE, flashear el firmware de MicroPython y subir código a la placa.

Introducción a WhatsApp

 
WhatsApp logo
 

“WhatsApp Messenger, o simplemente WhatsApp, es un servicio internacional de mensajería instantánea y voz sobre IP, gratuito, multiplataforma y centralizado, propiedad de Meta Platforms.”
Permite enviar mensajes usando la conexión a internet de tu teléfono, evitando así los costos de SMS.

WhatsApp es gratuito y está disponible para Android y iOS.
Instala WhatsApp en tu smartphone si aún no lo tienes.

API de WhatsApp CallMeBot

Para enviar mensajes a tu cuenta de WhatsApp desde la Raspberry Pi Pico, usaremos un servicio gratuito de API llamado CallMeBot.
Puedes aprender más sobre CallMeBot en el siguiente enlace:

https://www.callmebot.com/

Obtener la clave API de CallMeBot

Antes de empezar a usar la API, necesitas obtener la clave API de WhatsApp de CallMeBot.
Sigue las siguientes instrucciones (consulta este enlace para las instrucciones oficiales en la web).

  1. Agrega el número de teléfono +34 611 01 16 37 a los contactos de tu teléfono (puedes ponerle el nombre que quieras).

      Importante: Revisa las instrucciones oficiales porque el número podría cambiar sin previo aviso.

  1. Envía el siguiente mensaje al nuevo contacto creado (usando WhatsApp, por supuesto):

I allow callmebot to send me messages
 
  1. Espera hasta recibir el mensaje del bot:  “API Activated for your phone number. Your APIKEY is XXXXXX”

Get CallMeBot API key
Nota: si no recibes la clave API en 2 minutos, vuelve a intentarlo después de 24 horas.
El mensaje de WhatsApp del bot contendrá la API key necesaria para enviar mensajes usando la API.
Además, verifica que estés enviando el mensaje al número correcto (consulta el número en la página oficial aquí).

API de CallMeBot

Para enviar un mensaje usando la API de CallMeBot, necesitas hacer una solicitud a la siguiente URL (pero usando tu información):

https://api.callmebot.com/whatsapp.php?phone=[phone_number]&text=[message]&apikey=[your_apikey]
  • [phone_number]: número de teléfono asociado a tu cuenta de WhatsApp en formato internacional.

  • [message]: el mensaje que deseas enviar, debe estar codificado en URL.

  • [your_apikey]: la clave API que recibiste durante el proceso de activación en la sección anterior.

Para la documentación oficial, puedes consultar el siguiente enlace:
https://www.callmebot.com/blog/free-api-whatsapp-messages/


Enviar mensajes a WhatsApp – Código MicroPython

Para enviar mensajes a tu cuenta de WhatsApp, la Raspberry Pi Pico necesita enviar una solicitud a la URL que vimos anteriormente.

El siguiente código envía un mensaje de prueba a tu cuenta al ejecutar el código.

# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-w-whatsapp-micropython/

import network
import requests
from time import sleep

# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

# Your phone number in international format (including the + sign)
phone_number = 'YOUR_PHONE_NUMER_INTERNATIONAL_FORMAT'
# Example: phone_number = '+351912345678'

# Your callmebot API key
api_key = 'CALLMEBOT_API_KEY'

# Init Wi-Fi Interface
def init_wifi(ssid, password):
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    # Connect to your network
    wlan.connect(ssid, password)
    # Wait for Wi-Fi connection
    connection_timeout = 10
    while connection_timeout > 0:
        if wlan.status() >= 3:
            break
        connection_timeout -= 1
        print('Waiting for Wi-Fi connection...')
        sleep(1)
    # Check if connection is successful
    if wlan.status() != 3:
        return False
    else:
        print('Connection successful!')
        network_info = wlan.ifconfig()
        print('IP address:', network_info[0])
        return True

def send_message(phone_number, api_key, message):
    # Set the URL
    url = f'https://api.callmebot.com/whatsapp.php?phone={phone_number}&text={message}&apikey={api_key}'

    # Make the request
    response = requests.get(url)
    # check if it was successful
    if (response.status_code == 200):
        print('Success!')
    else:
        print('Error')
        print(response.text)
try: 
    # Connect to WiFi
    if init_wifi(ssid, password):
        # Send message to WhatsApp "Hello"
        # ENTER YOUR MESSAGE BELOW (URL ENCODED) https://www.urlencoder.io/
        message = 'Hello%20from%20the%20Raspberry%20Pi%20Pico%21' 
        send_message(phone_number, api_key, message)
except Exception as e:
    print('Error:', e)
 
Necesitas insertar tus credenciales de red, tu número de teléfono y la clave API de CallMeBot para que funcione.

Cómo funciona el código

Echemos un vistazo rápido a cómo funciona el código.
Alternativamente, puedes saltar directamente a la sección de demostración.

Comenzamos incluyendo las librerías necesarias.
import network 
import requests 
from time import sleep
Inserte sus credenciales de red en las siguientes variables para que el Pico pueda conectarse a su red local para acceder a Internet.
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
Inserta tu número de teléfono en formato internacional ( incluido el signo + ) en la siguiente línea:
phone_number = 'YOUR_PHONE_NUMER_INTERNATIONAL_FORMAT'
Ejemplo:
phone_number = '+351912345678'
Luego, inserta la clave API de CallMeBot que tenías anteriormente.
api_key = 'CALLMEBOT_API_KEY'

Creamos una función llamada init_wifi() para conectar el Pi a su red local.

definit_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Connect to your network
wlan.connect(ssid, password)
# Wait for Wi-Fi connection
connection_timeout =10
while connection_timeout >0:
     if wlan.status()>=3:
         break
     connection_timeout -=1
     print('Waiting for Wi-Fi connection...')
     sleep(1)
 # Check if connection is successful
     if wlan.status()!=3:
        returnFalse
     else:
        print('Connection successful!')
        network_info = wlan.ifconfig()
        print('IP address:', network_info[0])
        returnTrue
  Para facilitar la adaptación del código para proyectos futuros, creamos una función llamada send_message() qque Contiene todas las instrucciones necesarias para enviar mensajes a WhatsApp. Esta función acepta como argumentos el número de teléfono, la clave API de CallMeBot y el mensaje que quieres enviar. Solo tienes que llamar a esta función con los argumentos necesarios cuando quieras enviar un mensaje.
 
defsend_message(phone_number, api_key, message):
    # Set the URL url 
    =f'https://api.callmebot.com/whatsapp.php?phone={phone_number}&text={message}&apikey={api_key}'
    # Make the request
    response = requests.get(url)
    # check if it was successful
    if(response.status_code ==400):
       print('Success!')
    else:
       print('Error')
       print(response.text)
 

Ahora que hemos creado todas las funciones necesarias, llamamos la

Función init_wifi() para conectar la Pi Pico a su red local.

if init_wifi(ssid, password):

Creamos una variable llamada message()

 contiene el texto que queremos enviar. El mensaje debe estar codificado en URL. Puedes usar  

esta herramienta

  para convertir tu texto a formato codificado en URL.




message = 'Hello%20from%20the%20Raspberry%20Pi%20Pico%21'
Por último llama la función send_message() para poder enviar el mensaje.  

Demostración

Después de insertar sus credenciales de red, número de WhatsApp y clave API de CallMeBot, ejecuta el código anterior en su Raspberry Pi Pico.

Si todo sale como se espera, debería conectarse a Internet y realizar una solicitud exitosa.

 
Raspberry Pi Pico se conecta con éxito a CallMeBot

Después de unos segundos, deberías recibir un nuevo mensaje en tu cuenta de WhatsApp.

Raspberry Pi Pico envía mensajes a whatsapp

Terminando

En este tutorial, aprendiste a enviar mensajes a tu cuenta de WhatsApp mediante una solicitud a la API de CallMeBot. Te mostramos cómo enviar un mensaje de texto simple.

Puede modificar fácilmente este ejemplo para enviar, por ejemplo, lecturas de sensores o mensajes de alerta.

Preguntas frecuentes

¿Se pueden enviar mensajes de WhatsApp desde una Raspberry Pi Pico?

Sí, usando la API gratuita CallMeBot desde MicroPython. Es una forma sencilla de recibir notificaciones desde la placa en el teléfono, sin montar un servidor propio.

¿Para qué sirve enviar WhatsApp desde un proyecto?

Para recibir alertas: lecturas de sensores, avisos cuando un valor sube o baja de cierto umbral, o notificaciones cuando se detecta movimiento, entre muchas otras aplicaciones.

¿Qué es CallMeBot?

Es el servicio de API gratuita que hace de intermediario entre la placa y WhatsApp. Hay que obtener una clave API propia siguiendo sus instrucciones antes de poder enviar mensajes.

¿Necesito una Pico W para esto?

Sí. Enviar mensajes requiere conexión a internet, así que hace falta la Raspberry Pi Pico W con su WiFi configurado y el firmware de MicroPython instalado.

¿La clave API de CallMeBot es permanente?

Hay que revisar las instrucciones oficiales del servicio, porque el número de contacto puede cambiar sin previo aviso y con ello el procedimiento para obtener la clave.

Aprende esto en un curso

Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial: