ESP8266 NodeMCU : envoyer des messages à WhatsApp

ESP8266 NodeMCU : envoyer des messages à WhatsApp

Dans ce guide, vous apprendrez à envoyer des messages à votre compte WhatsApp avec la carte ESP8266 NodeMCU. Cela peut être utile pour recevoir des notifications de l’ESP8266 avec des lectures de capteur, des messages d’alerte lorsqu’une lecture de capteur est supérieure ou inférieure à un certain seuil, lorsqu’un mouvement est détecté et de nombreuses autres applications. Nous programmerons l’ESP8266 à l’aide de l’IDE Arduino et pour envoyer les messages, nous utiliserons une API gratuite appelée CallMeBot.

ESP8266 NodeMCU Envoyer des messages à WhatsApp Arduino IDE

Nous avons un tutoriel similaire pour la carte ESP32 :

Présentation de WhatsApp

Logo Whatsapp

« WhatsApp Messenger, ou simplement WhatsApp, est un logiciel américain gratuit, multiplateforme centralisé de messagerie instantanée et de voix sur IP, propriété de Meta Platforms. » Il vous permet d’envoyer des messages en utilisant la connexion Internet de votre téléphone, ce qui vous permet d’éviter les frais de SMS.

WhatsApp est gratuit et disponible pour Android et iOS. Installez WhatsApp sur votre smartphone si vous ne l’avez pas déjà.

Pour envoyer des messages à votre compte WhatsApp avec l’ESP8266, nous utiliserons un service API gratuit appelé service CallMeBot. Vous pouvez en savoir plus sur CallMeBot au lien suivant :

Fondamentalement, cela fonctionne comme une passerelle qui vous permet de vous envoyer un message. Cela peut être utile pour envoyer des messages d’alerte depuis l’ESP8266.

Toutes les informations sur la façon d’envoyer des messages à l’aide de l’API peuvent être trouvées ici.

Obtenir la clé API CallMeBot

Avant de commencer à utiliser l’API, vous devez obtenir la clé API CallmeBot WhatsApp. Suivez les instructions suivantes (vérifier ce lien pour les instructions sur le site officiel).

  1. Ajoutez le numéro de téléphone +34 644 31 95 65 à vos contacts téléphoniques. (Nommez-le comme vous le souhaitez);
  2. Envoyez le message suivant : « J’autorise callmebot à m’envoyer des messages » au nouveau Contact créé (en utilisant WhatsApp bien sûr) ;
  3. Attendez de recevoir le message « API activée pour votre numéro de téléphone. Votre APIKEY est XXXXXX” du robot.
Obtenir la clé API CallMeBot

Noter: Si vous ne recevez pas la clé API dans les 2 minutes, veuillez réessayer après 24h. Le message WhatsApp du bot contiendra la clé API nécessaire pour envoyer des messages à l’aide de l’API

API CallMeBot

Pour envoyer un message à l’aide de l’API CallMeBot, vous devez effectuer une requête POST à ​​l’URL suivante (mais en utilisant vos informations) :

https://api.callmebot.com/whatsapp.php?phone=[phone_number]&text=[message]&apikey=[your_apikey]
  • [phone_number]: numéro de téléphone associé à votre compte WhatsApp au format international ;
  • [message]: le message à envoyer doit être encodé en URL.
  • [your_apikey]: la clé API que vous avez reçue lors du processus d’activation dans la section précédente.

Pour la documentation officielle, vous pouvez consulter le lien suivant : https://www.callmebot.com/blog/free-api-whatsapp-messages/

Installation de la bibliothèque URLEncode

Comme nous l’avons vu précédemment, le message à envoyer doit être encodé en URL. L’encodage d’URL convertit les caractères dans un format qui peut être transmis sur Internet. Les URL ne peuvent être envoyées que sur Internet en utilisant le jeu de caractères ASCII.

Cela nous permettra d’inclure des caractères comme ç, ª, º, à, ü dans nos messages. Vous pouvez en savoir plus sur Encodage URL ici.

Vous pouvez encoder le message vous-même, ou vous pouvez utiliser une bibliothèque, ce qui est beaucoup plus simple. Nous utiliserons le Bibliothèque UrlEncode qui peut être installé sur votre IDE Arduino.

Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et chercher URLEncode bibliothèque par Masayuki Sugahara comme indiqué ci-dessous.

Installer la bibliothèque d'encodage d'URL Arduino IDE

Envoi de messages à WhatsApp – Code ESP8266

L’exemple de code suivant envoie un message à votre compte WhatsApp lors du premier démarrage de l’ESP8266. Ceci est un exemple simple pour vous montrer comment envoyer des messages. Après avoir compris son fonctionnement, l’idée est de l’intégrer dans vos propres projets.

/* 
  Rui Santos
  Complete project details at https://Raspberryme.com/esp8266-nodemcu-send-messages-whatsapp/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <UrlEncode.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// +international_country_code + phone number
// Portugal +351, example: +351912345678
String phoneNumber = "REPLACE_WITH_YOUR_PHONE_NUMBER";
String apiKey = "REPLACE_WITH_API_KEY";

void sendMessage(String message){

  // Data to send with HTTP POST
  String url = "http://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message);
  WiFiClient client;    
  HTTPClient http;
  http.begin(client, url);

  // Specify content-type header
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  
  // Send HTTP POST request
  int httpResponseCode = http.POST(url);
  if (httpResponseCode == 200){
    Serial.print("Message sent successfully");
  }
  else{
    Serial.println("Error sending the message");
    Serial.print("HTTP response code: ");
    Serial.println(httpResponseCode);
  }

  // Free resources
  http.end();
}

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());

  // Send Message to WhatsAPP
  sendMessage("Hello from ESP8266!");
}

void loop() {
  
}

Afficher le code brut

Comment fonctionne le code

L’envoi d’un message à WhatsApp à l’aide de l’API CallMeBot est très simple. Il vous suffit de faire une requête HTTP POST.

Tout d’abord, incluez les bibliothèques nécessaires :

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <UrlEncode.h>

Insérez vos identifiants réseau dans les variables suivantes :

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Insérez votre numéro de téléphone et votre clé API. Le numéro de téléphone doit être au format international (y compris le + pancarte).

String phoneNumber = "REPLACE_WITH_YOUR_PHONE_NUMBER";
String apiKey = "REPLACE_WITH_YOUR_API_KEY";

envoyer le message()

Nous créons une fonction appelée envoyer le message() que vous pouvez appeler plus tard pour envoyer des messages à WhatsApp. Cette fonction prend en argument le message que vous souhaitez envoyer.

void sendMessage(String message){

Dans la fonction, nous préparons l’URL de la demande avec vos informations, votre numéro de téléphone, votre clé API et votre message.

Comme nous l’avons vu précédemment, le message doit être encodé en URL. Nous avons inclus le UrlEncode bibliothèque pour le faire. Il contient une fonction appelée urlEncode() qui encode le message que nous passons en argument (urlEncode(message)).

String url = "http://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message);

Créer et démarrer un Client HTTP sur cette URL :

HTTPClient http;
http.begin(url);

Spécifiez le type de contenu :

// Specify content-type header
http.addHeader("Content-Type", "application/x-www-form-urlencoded");

Enfin, envoyez la demande de publication HTTP. La ligne suivante envoie la requête et enregistre le code de réponse :

int httpResponseCode = http.POST(url);

Si le code de réponse est 200, cela signifie que la demande de publication a réussi. Sinon, quelque chose s’est mal passé.

// Send HTTP POST request
int httpResponseCode = http.POST(url);
if (httpResponseCode == 200){
  Serial.print("Message sent successfully");
}
else{
  Serial.println("Error sending the message");
  Serial.print("HTTP response code: ");
  Serial.println(httpResponseCode);
}

Enfin, libérez les ressources :

// Free resources
http.end();

mettre en place()

Dans le mettre en place()initialisez le moniteur série à des fins de débogage.

Serial.begin(115200);

Connectez-vous à votre réseau local et imprimez l’adresse IP de la carte.

WiFi.begin(ssid, password);
Serial.println("Connecting");
while(WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());

Ensuite, nous pouvons envoyer un message à WhatsApp en appelant simplement la fonction sendMessage(). Dans ce cas, nous envoyons le message Hello depuis ESP8266 !

// Send Message to WhatsAPP
sendMessage("Hello from ESP8266!");

Manifestation

Après avoir inséré vos informations d’identification réseau, votre numéro de téléphone et votre clé API, vous pouvez télécharger le code sur votre carte.

Après le téléchargement, ouvrez le moniteur série à un débit en bauds de 115200 et appuyez sur le bouton RST de la carte. Il devrait se connecter avec succès à votre réseau et envoyer le message à WhatsApp.

ESP8266 Envoyer un message au moniteur série WhatsApp

Accédez à votre compte WhatsApp. Après quelques secondes, vous devriez recevoir le message ESP8266.

WhatsApp Recevoir un message d'ESP8266

Conclusion

Dans ce didacticiel, vous avez appris à utiliser l’API CallMeBot avec l’ESP8266 pour envoyer des messages à votre compte WhatsApp. Cela peut être utile pour envoyer régulièrement des lectures de capteur à votre boîte de réception, envoyer une notification lorsqu’un mouvement est détecté, envoyer un message d’alerte lorsqu’une lecture de capteur est supérieure ou inférieure à un certain seuil, et bien d’autres applications.

Nous avons également des tutoriels pour d’autres types de messages (e-mails et messages Telegram) :

Nous espérons que vous trouverez ce tutoriel utile.

En savoir plus sur l’ESP8266 avec nos ressources :

Merci d’avoir lu.