Из данной статьи вы узнаете как отправлять сообщения в свою учетную запись приложения WhatsApp с помощью платы ESP8266 NodeMCU. Это может быть полезно для получения уведомлений от ESP8266 с показаниями датчиков, предупреждающих сообщений, когда показания датчика превышают или ниже определенного порога, при обнаружении движения и во многих других случаях. Программировать модуль ESP8266 мы будем с помощью Arduino IDE, а для отправки сообщений будем использовать бесплатное API под названием CallMeBot.
Что такое WhatsApp
Мессенджер WhatsApp - это американская бесплатная кроссплатформенная централизованная служба обмена мгновенными сообщениями и передачи голоса с помощью технологии IP . Это позволяет отправлять сообщения и совершать голосовые и видеозвонки, используя подключение вашего телефона к Интернету, что позволяет существенно экономить на услугах традиционной телефонной связи.
Приложение WhatsApp полностью бесплатное и доступно для установки на Android и iOS.
API CallMeBot
Чтобы отправлять сообщения в свою учетную запись WhatsApp с помощью ESP8266, мы будем использовать бесплатный API-сервис под названием CallMeBot. Вы можете узнать больше о нем по следующей ссылке:
По сути, он работает как шлюз, который позволяет вам отправлять сообщения самому себе. Это может быть полезно для отправки предупреждающих сообщений с ESP8266.
Всю информацию о том, как отправлять сообщения с помощью API CallMeBot, можно найти здесь.
Получение ключа API CallMeBot
Прежде чем начать использовать API CallMeBot, вам необходимо получить ключ API CallmeBot WhatsApp. Для этого выполните следующую последовательность шагов (проверьте эту ссылку для получения инструкций на официальном веб-сайте):
- Добавьте в свои контакты на телефоне номер +34 644 44 21 48 (Можете дать имя этому контакту на свое усмотрение);
- Отправьте новому созданному контакту (разумеется, с использованием WhatsApp) следующее сообщение: “I allow callmebot to send me messages”;
- Подождите, пока не получите от бота сообщение “API Activated for your phone number. Your APIKEY is XXXXXX”.
Примечание: Если вы не получите ключ API в течение 2 минут то повторите попытку через 24 часа. Сообщение WhatsApp от бота будет содержать ключ API, необходимый для отправки сообщений с использованием данного API.
Использование API CallMeBot
Чтобы отправить сообщение с помощью CallMeBot API, вам нужно отправить POST-запрос на следующий URL (но с использованием вашей информации):
1 |
https://api.callmebot.com/whatsapp.php?phone=[phone_number]&text=[message]&apikey=[your_apikey] |
- [phone number]: номер телефона, связанный с вашей учетной записью WhatsApp в международном формате;
- [message]: отправляемое сообщение должно содержать URL-кодировку;
- [your_apikey]: ключ API, который вы получили в процессе активации в предыдущем разделе.
Официальную документацию по данному вопросу вы можете посмотреть по следующей ссылке: https://www.callmebot.com/blog/free-api-whatsapp-messages
Установка библиотеки URLEncode
Как мы видели ранее, отправляемое сообщение должно быть закодировано по URL. Кодировка URL преобразует символы в формат, который можно передавать через Интернет. URL-адреса можно отправлять только через Интернет, используя набор символов ASCII.
Это позволит нам включать в наши сообщения такие символы, как ç, ª, º, à, ü. Вы можете узнать больше о кодировке URL здесь.
Вы можете закодировать передаваемое сообщение самостоятельно или воспользоваться библиотекой, что намного проще. Мы будем использовать библиотеку UrlEncode, которую можно установить в Arduino IDE. Для этого в менеджере библиотек Arduino IDE (Sketch > Include Library > Manage Libraries) выполните поиск библиотеки URLEncode,затем в результатах поиска выберите библиотеку от Masayuki Sugahara, как показано на следующем рисунке.
Объяснение кода программы
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Отправить сообщение в WhatsApp с помощью API CallMeBot достаточно просто. Вам просто нужно сделать соответствующий HTTP-запрос POST.
Первым делом в коде программы подключим необходимые библиотеки.
1 2 3 4 |
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <WiFiClient.h> #include <UrlEncode.h> |
Затем укажите параметры для доступа к своей сети WiFi.
1 2 |
const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; |
Введите свой номер телефона и ключ API. Номер телефона должен быть в международном формате (включая знак +).
1 2 |
String phoneNumber = "REPLACE_WITH_YOUR_PHONE_NUMBER"; String apiKey = "REPLACE_WITH_YOUR_API_KEY"; |
Отправка сообщений
Для отправки сообщений мы запрограммируем функцию под названием SendMessage(), которую вы можете вызвать позже для отправки сообщений в WhatsApp. Эта функция принимает в качестве аргумента сообщение, которое вы хотите отправить.
1 |
void sendMessage(String message){ |
Внутри данной функции мы конструируем URL-адрес для запроса с вашей информацией, номером телефона, ключом API и передаваемым сообщением. Для перекодировки сообщений в URL формат мы будем использовать библиотеку UrlEncode, установленную нами ранее. В ней содержится функция под названием urlEncode(), которая кодирует любое сообщение, которое мы передаем в качестве аргумента (urlEncode(message)).
1 |
String url = "http://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message); |
Затем создадим и запустим HttpClient по данному URL:
1 2 |
HTTPClient http; http.begin(url); |
Укажите тип контента:
1 2 |
// Specify content-type header http.addHeader("Content-Type", "application/x-www-form-urlencoded"); |
И, наконец, отправьте HTTP-запрос post. Следующая строка отправляет запрос и сохраняет код ответа:
1 |
int httpResponseCode = http.POST(url); |
Если код ответа равен 200, это означает, что запрос post прошел успешно. В противном случае что-то пошло не так.
1 2 3 4 5 6 7 8 9 10 |
// 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); } |
Наконец, освободите ресурсы:
1 2 |
// Free resources http.end(); |
Установка
В функции setup() мы инициализируем последовательный порт для целей отладки.
1 |
Serial.begin(115200); |
Затем подключимся к своей локальной WiFi сети и выведем на экран IP-адрес нашего модуля ESP8266.
1 2 3 4 5 6 7 8 9 |
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!"
Демонстрация работы проекта
После того как вы добавите в программу проекта, приведенную ниже, свои данные для доступа к сети WiFi, свой номера телефона и свой ключ API, вы можете загружать ее в свой модуль ESP8266.
После загрузки программы откройте монитор последовательного порта со скоростью передачи 115200 бод и нажмите на модуле ESP8266 кнопку сброса (RST). После этого он должен успешно подключиться к вашей WiFi сети и отправить вам сообщение в WhatsApp.
После этого зайдите в свою учетную запись WhatsApp. Через несколько секунд вы должны получить сообщение, переданное модулем ESP8266.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
/* Rui Santos Complete project details at https://RandomNerdTutorials.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() { } |
Воцап - ископаемое мессенджер-недоразумение, и если нет цели усложнять себе жизнь, лучше использовать телеграм, где без всяких апи можно отправлять себе сообщения напрямую с железки.
Да, телеграм во многом его уже обгоняет, но многие до сих еще пользуются ватсаппом.
Продолжают им пользоваться те, кто пока еще не заметил, как стремительно уменьшается свободная память в их устройстве. И кто еще не столкнулся с потерей данных.
А что, от других мессенджеров разве память уменьшается медленнее?