Biblioteca Arduino para integração de ESP32 com WhatsApp API, permitindo receber e enviar mensagens através de sua própria API WhatsApp.
- Receber mensagens de usuários
- Enviar texto para usuários individuais
- Enviar texto para grupos
- Enviar mensagens com botões
- Enviar listas de opções
- Enviar localização
- Otimizado para memória limitada do ESP32
- Polling configurável
- ESP32 (qualquer modelo)
- Conexão WiFi
- Arduino IDE 1.8.x ou superior
- ESP32 Board Package
- Biblioteca ArduinoJson (v6.x)
- Conta ativa no WPIoT
- API Key válida
- Instância WhatsApp conectada
- Baixe os arquivos da biblioteca
- Copie a pasta
WhatsAppESP32para:- Windows:
Documentos/Arduino/libraries/ - Linux:
~/Arduino/libraries/ - Mac:
~/Documents/Arduino/libraries/
- Windows:
- Reinicie a Arduino IDE
- Na Arduino IDE, vá em Sketch > Include Library > Add .ZIP Library
- Selecione o arquivo ZIP da biblioteca
- Reinicie a Arduino IDE
No Arduino IDE, instale a biblioteca ArduinoJson:
- Vá em Tools > Manage Libraries
- Procure por "ArduinoJson"
- Instale a versão 6.x
#include <WiFi.h>
#include "WhatsAppESP32.h"
// Configurações
const char* ssid = "SEU_WIFI";
const char* password = "SUA_SENHA";
const char* apiUrl = "https://<sua-instancia>.wpiot.com.br";
const char* apiKey = "SUA_API_KEY";
const char* instanceKey = "minha-instancia";
// Criar objeto WhatsApp
WhatsAppESP32 whatsapp(apiUrl, apiKey, instanceKey);
void setup() {
Serial.begin(115200);
// Conectar WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Inicializar WhatsApp
whatsapp.begin();
whatsapp.setPollInterval(5000); // 5 segundos
}
void loop() {
// Receber mensagens
WhatsAppMessage messages[10];
int count = whatsapp.getMessages(messages, 10);
for (int i = 0; i < count; i++) {
Serial.println(messages[i].text);
// Responder
whatsapp.sendText(messages[i].from, "Recebi sua mensagem!");
}
delay(5000);
}A biblioteca vem com vários exemplos prontos:
Exemplo básico de recebimento e envio de mensagens.
Sistema de menu interativo com comandos.
Demonstra envio de botões, listas e localização.
WhatsAppESP32(String url, String apiKey, String instanceKey)Inicializa a biblioteca.
Define o intervalo de polling em milissegundos.
Verifica se a instância está conectada.
Retorno: true se conectado, false caso contrário.
Obtém o número de telefone da instância.
Retorno: String com o número (ex: "5511999999999").
Obtém o número de mensagens pendentes na fila.
Retorno: Quantidade de mensagens.
Obtém mensagens não processadas. As mensagens são automaticamente removidas da fila ao serem lidas.
Parâmetros:
messages: Array para armazenar as mensagensmaxMessages: Número máximo de mensagens a buscar
Retorno: Número de mensagens recebidas.
Exemplo:
WhatsAppMessage msgs[10];
int count = whatsapp.getMessages(msgs, 10);
for (int i = 0; i < count; i++) {
Serial.println(msgs[i].text);
}Envia mensagem de texto para um número.
Parâmetros:
to: Número do destinatário (ex: "5511999999999")text: Texto da mensagem
Retorno: true se enviado com sucesso.
Exemplo:
whatsapp.sendText("5511999999999", "Olá!");Envia mensagem de texto para um grupo.
Parâmetros:
groupId: ID do grupo (pode ser com ou sem @g.us)text: Texto da mensagem
Retorno: true se enviado com sucesso.
Exemplo:
whatsapp.sendTextToGroup("120363123456@g.us", "Olá grupo!");Envia mensagem com botões.
Parâmetros:
to: Número do destinatáriotext: Texto da mensagembuttons: Array de strings com os textos dos botõesbuttonCount: Número de botões
Retorno: true se enviado com sucesso.
Exemplo:
String buttons[] = {"Sim", "Não", "Talvez"};
whatsapp.sendButtons("5511999999999", "Confirma?", buttons, 3);bool sendList(String to, String text, String title, String buttonText, ListSection* sections, int sectionCount)
Envia mensagem com lista de opções.
Parâmetros:
to: Número do destinatáriotext: Texto da mensagemtitle: Título da listabuttonText: Texto do botãosections: Array de seçõessectionCount: Número de seções
Retorno: true se enviado com sucesso.
Exemplo:
String opcoes[] = {"Opção 1", "Opção 2", "Opção 3"};
ListSection section;
section.title = "Escolha";
section.rows = opcoes;
section.rowCount = 3;
whatsapp.sendList("5511999999999", "Selecione", "Menu", "Ver", §ion, 1);Envia localização.
Parâmetros:
to: Número do destinatáriolatitude: Latitudelongitude: Longitude
Retorno: true se enviado com sucesso.
Exemplo:
whatsapp.sendLocation("5511999999999", -23.550520, -46.633308);A biblioteca usa autenticação via API Key. Certifique-se de:
- Ter uma conta válida no WPIoT
- Ter uma API Key ativa
- Ter uma instância WhatsApp conectada
// Verificar mensagens a cada 3 segundos
whatsapp.setPollInterval(3000);
// Verificar mensagens a cada 10 segundos (economizar bateria)
whatsapp.setPollInterval(10000);O timeout padrão é de 10 segundos. Para alterar, edite WhatsAppESP32.h:
#define HTTP_TIMEOUT 15000 // 15 segundosPor padrão, a biblioteca busca até 10 mensagens por vez. Para alterar:
#define MAX_MESSAGES 20 // Buscar até 20 mensagensAtenção: Valores muito altos podem causar problemas de memória no ESP32.
struct WhatsAppMessage {
String id; // ID único da mensagem
String from; // Número do remetente
String text; // Texto da mensagem
unsigned long timestamp; // Timestamp Unix
};Consulte o arquivo TROUBLESHOOTING.md para soluções detalhadas.
Este projeto está sob licença MIT.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
Para suporte, abra uma issue no repositório do projeto.