В этом руководстве вы узнаете, как отправлять сообщения в свою учетную запись WhatsApp с помощью платы ESP8266 NodeMCU. Это может быть полезно для получения уведомлений от ESP8266 с показаниями датчиков, предупреждающих сообщений, когда показания датчика превышают или ниже определенного порога, при обнаружении движения и многих других приложений. Мы запрограммируем ESP8266 с помощью Arduino IDE, а для отправки сообщений мы будем использовать бесплатный API под названием CallMeBot.
Что такое WhatsApp
“WhatsApp Messenger, или просто WhatsApp, - это американский бесплатный кроссплатформенный сервис централизованного обмена мгновенными сообщениями и передачи голоса по IP, доступный на международном уровне и принадлежащий Meta Platforms”. Это позволяет отправлять сообщения, используя подключение к Интернету вашего телефона, что позволяет избежать платы за SMS.
WhatsApp бесплатен и доступен для Android и iOS. Установите WhatsApp на свой смартфон, если у вас его еще нет.
CallMeBot WhatsApp API
Чтобы отправлять сообщения в вашу учетную запись WhatsApp с помощью ESP8266, мы будем использовать бесплатный сервис API под названием CallMeBot service. Вы можете узнать больше о CallMeBot по следующей ссылке:
По сути, он работает как шлюз, который позволяет вам отправить сообщение самому себе. Это может быть полезно для отправки предупреждающих сообщений с ESP8266.
Всю информацию о том, как отправлять сообщения с помощью API, можно найти здесь.
Получение КЛЮЧА API CallMeBot
Прежде чем начать использовать API, вам необходимо получить ключ API CallmeBot WhatsApp. Следуйте следующим инструкциям (проверьте эту ссылку для получения инструкций на официальном сайте).
- Добавьте номер телефона +34 644 31 95 65 к вашим Телефонным контактам. (Назовите это по своему усмотрению);
- Отправьте новому созданному Контакту следующее сообщение: “I allow callmebot to send me messages” (с помощью WhatsApp).;
- Подождите, пока не получите сообщение “API Activated for your phone number. Your APIKEY is XXXXXX” от бота.
Примечание: Если вы не получили ключ API через 2 минуты, повторите попытку через 24 часа. Сообщение WhatsApp от бота будет содержать ключ API, необходимый для отправки сообщений с использованием API
CallMeBot API
Чтобы отправить сообщение с помощью API CallMeBot, вам необходимо отправить запрос POST на следующий URL-адрес (но с использованием вашей информации):
https://api.callmebot.com/whatsapp.php?phone =[номер телефона]&текст=[сообщение]&apikey=[your_apikey]- [номер телефона]: номер телефона, связанный с вашей учетной записью WhatsApp в международном формате;
- [сообщение]: отправляемое сообщение должно быть закодировано по URL.
- [your_apikey]: ключ API, который вы получили в процессе активации в предыдущем разделе.
Для получения официальной документации вы можете перейти по следующей ссылке: https://www.callmebot.com/blog/free-api-whatsapp-messages /
Установка библиотеки URLEncode
Как мы видели ранее, отправляемое сообщение должно быть закодировано по URL. Кодировка URL преобразует символы в формат, который может быть передан через Интернет. URL-адреса можно отправлять только через Интернет, используя набор символов ASCII.
Это позволит нам включать в наши сообщения такие символы, как ç, ª, º, à, ü. Вы можете узнать больше о кодировке URL-адресов здесь.
Вы можете закодировать сообщение самостоятельно или использовать библиотеку, что намного проще. Мы будем использовать библиотеку UrlEncode, которую можно установить на ваш Arduino IDE.
Перейдите в раздел Скетч> Подключить библиотеку> Управлять библиотеками и найдите библиотеку URLEncode Масаюки Сугахары, как показано ниже.
Отправка сообщений в WhatsApp – Код ESP8266
Следующий пример кода отправляет сообщение в вашу учетную запись WhatsApp при первой загрузке ESP8266. Это простой пример, который покажет вам, как отправлять сообщения. Поняв, как это работает, вы сможете включить это в свои собственные проекты.
#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() {
}
Как работает код
Отправка сообщения в WhatsApp с помощью API CallMeBot очень проста. Вам просто нужно сделать HTTP-запрос POST.
Во-первых, включите необходимые библиотеки:
#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";
Введите свой номер телефона и ключ API. Номер телефона должен быть в международном формате (включая знак +).
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Send Message ()
Мы создаем функцию SendMessage (), которую вы можете вызвать позже для отправки сообщений в WhatsApp. Эта функция принимает в качестве аргумента сообщение, которое вы хотите отправить.
void sendMessage(String message)
Внутри функции мы готовим URL-адрес для запроса с вашей информацией, номером телефона, ключом API и сообщением.
Как мы видели ранее, сообщение должно быть закодировано по URL. Для этого мы включили библиотеку UrlEncode. Он содержит функцию urlEncode(), которая кодирует любое сообщение, которое мы передаем в качестве аргумента (urlEncode (message)).
String url = "http://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message);
Создайте и запустите HttpClient по этому URL:
HTTPClient http;
http.begin(url);
Укажите тип содержимого:
// Specify content-type header http.addHeader("Content-Type", "application/x-www-form-urlencoded");
Наконец, отправьте запрос HTTP post. Следующая строка отправляет запрос и сохраняет код ответа:
int httpResponseCode = http.POST(url);
Если код ответа равен 200, это означает, что запрос post прошел успешно. В противном случае что-то пошло не так.
// 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();
Setup ()
В setup () инициализируйте последовательный монитор для целей отладки.
Serial.begin(115200);
Подключитесь к своей локальной сети и распечатайте IP-адрес платы.
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());
Затем мы можем отправить сообщение в WhatsApp, просто вызвав функцию SendMessage(). В этом случае мы отправляем сообщение Hello from ESP8266!
// Send Message to WhatsAPP
sendMessage("Hello from ESP8266!");
Демонстрация
После ввода ваших сетевых учетных данных, номера телефона и ключа API вы можете загрузить код на свою плату.
После загрузки откройте Монитор порта со скоростью передачи 115200 бод и нажмите кнопку RST на плате. Он должен успешно подключиться к вашей сети и отправить сообщение в WhatsApp.
Перейдите в свою учетную запись WhatsApp. Через несколько секунд вы должны получить сообщение ESP8266.
Подведение итогов
В этом уроке вы узнали, как использовать API CallMeBot с ESP8266 для отправки сообщений в вашу учетную запись WhatsApp. Это может быть полезно для регулярной отправки показаний датчиков на ваш почтовый ящик, отправки уведомлений при обнаружении движения, отправки предупреждающего сообщения, когда показания датчика превышают или ниже определенного порога, и многих других приложений.