Raspberry Pi Pico W: отправка сообщений в WhatsApp (MicroPython)

В этом руководстве вы узнаете, как отправлять сообщения в WhatsApp с Raspberry Pi Pico, используя бесплатный API CallMeBot. Это может быть полезно для получения уведомлений от вашей платы с показаниями датчиков, оповещений, когда показание датчика превышает или опускается ниже определённого порога, при обнаружении движения и во многих других приложениях.

Raspberry Pi Pico W отправка сообщений в WhatsApp MicroPython

Впервые работаете с Raspberry Pi Pico? Прочитайте следующее руководство: Начало работы с Raspberry Pi Pico (и Pico W).

Предварительные требования

Перед тем как продолжить, убедитесь, что выполнены следующие предварительные требования:

Прошивка MicroPython

Для выполнения этого руководства вам необходима прошивка MicroPython, установленная на вашу плату Raspberry Pi Pico. Вам также понадобится IDE для написания и загрузки кода на плату.

Логотип MicroPython

Рекомендуемой IDE для MicroPython на Raspberry Pi Pico является Thonny IDE. Следуйте приведённому ниже руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.

В качестве альтернативы, если вы предпочитаете программировать в VS Code, вы можете начать со следующего руководства:

Знакомство с WhatsApp

Логотип WhatsApp

«WhatsApp Messenger, или просто WhatsApp, — это международно доступный американский бесплатный кроссплатформенный централизованный сервис мгновенных сообщений и VoIP, принадлежащий Meta Platforms.» Он позволяет отправлять сообщения, используя интернет-соединение вашего телефона, что позволяет избежать платы за SMS.

WhatsApp бесплатен и доступен для Android и iOS. Установите WhatsApp на свой смартфон, если вы ещё этого не сделали.

CallMeBot WhatsApp API

Для отправки сообщений в ваш аккаунт WhatsApp с Raspberry Pi Pico мы будем использовать бесплатный API-сервис под названием CallMeBot. Вы можете узнать больше о CallMeBot по следующей ссылке:

По сути, он работает как шлюз, который позволяет отправлять сообщения самому себе. Всю информацию о том, как отправлять сообщения с помощью API, можно найти здесь.

Получение API-ключа CallMeBot

Перед тем как начать использовать API, вам необходимо получить API-ключ CallMeBot для WhatsApp. Следуйте приведённым ниже инструкциям (смотрите эту ссылку для получения инструкций на официальном сайте).

1) Добавьте номер телефона +34 611 01 16 37 в свои контакты (назовите его как хотите);

Важно: Пожалуйста, проверьте официальные инструкции, так как номер может измениться без дополнительного уведомления.

2) Отправьте следующее сообщение: «I allow callmebot to send me messages» новому созданному контакту (используя, конечно, WhatsApp);

3) Дождитесь получения сообщения «API Activated for your phone number. Your APIKEY is XXXXXX» от бота.

Получение API-ключа CallMeBot

Примечание: если вы не получите API-ключ в течение 2 минут, пожалуйста, попробуйте снова через 24 часа. Сообщение WhatsApp от бота будет содержать API-ключ, необходимый для отправки сообщений через API. Кроме того, дважды проверьте, что вы отправляете сообщение на правильный номер (проверьте номер на официальной странице).

CallMeBot API

Чтобы отправить сообщение с помощью CallMeBot API, вам необходимо сделать запрос на следующий URL (используя вашу информацию):

https://api.callmebot.com/whatsapp.php?phone=[phone_number]&text=[message]&apikey=[your_apikey]
  • [phone_number]: номер телефона, связанный с вашим аккаунтом WhatsApp, в международном формате;

  • [message]: сообщение, которое нужно отправить, должно быть в URL-кодировке.

  • [your_apikey]: API-ключ, который вы получили в процессе активации в предыдущем разделе.

Для ознакомления с официальной документацией вы можете перейти по следующей ссылке:

Отправка сообщений в WhatsApp – код MicroPython

Чтобы отправлять сообщения в ваш аккаунт WhatsApp, Raspberry Pi Pico должен отправить запрос на URL, который мы рассмотрели ранее.

Следующий код отправляет тестовое сообщение в ваш аккаунт при запуске кода.

# 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)

Посмотреть исходный код

Вам необходимо вставить свои сетевые учётные данные, номер телефона и API-ключ CallMeBot, чтобы код работал.

Как работает код

Давайте кратко рассмотрим, как работает код. В качестве альтернативы вы можете перейти к разделу Демонстрация.

Мы начинаем с подключения необходимых библиотек.

import network
import requests
from time import sleep

Вставьте свои сетевые учётные данные в следующие переменные, чтобы Pico мог подключиться к вашей локальной сети для доступа в интернет.

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

Вставьте свой номер телефона в международном формате (включая знак +) в следующую строку:

phone_number = 'YOUR_PHONE_NUMER_INTERNATIONAL_FORMAT'

Пример:

phone_number = '+351912345678'

Затем вставьте API-ключ CallMeBot, который вы получили ранее.

api_key = 'CALLMEBOT_API_KEY'

Мы создаём функцию init_wifi() для подключения Pi к вашей локальной сети.

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

Чтобы упростить адаптацию кода для будущих проектов, мы создали функцию send_message(), которая содержит все необходимые инструкции для отправки сообщений в WhatsApp. Эта функция принимает в качестве аргументов номер телефона, API-ключ CallMeBot и сообщение, которое вы хотите отправить. Вам просто нужно вызвать эту функцию с необходимыми аргументами, когда хотите отправить сообщение.

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 == 400):
    print('Success!')
  else:
    print('Error')
    print(response.text)

Теперь, когда мы создали все необходимые функции, вызываем функцию init_wifi() для подключения Pico к вашей локальной сети.

if init_wifi(ssid, password):

Мы создали переменную message, которая содержит текст, который мы хотим отправить. Сообщение должно быть в формате URL-кодировки. Вы можете использовать этот инструмент для преобразования вашего текста в формат URL-кодировки.

message = 'Hello%20from%20the%20Raspberry%20Pi%20Pico%21'

Наконец, вызываем функцию send_message() для отправки сообщения.

send_message(phone_number, api_key, message)

Демонстрация

После ввода ваших сетевых учётных данных, номера WhatsApp и API-ключа CallMeBot, запустите приведённый выше код на вашем Raspberry Pi Pico.

Если всё пройдёт как ожидается, плата должна подключиться к интернету и выполнить успешный запрос.

Raspberry Pi Pico подключение к CallMeBot успешно

Через несколько секунд вы должны получить новое сообщение в вашем аккаунте WhatsApp.

Raspberry Pi Pico отправка сообщений в WhatsApp

Заключение

В этом руководстве вы узнали, как отправлять сообщения в ваш аккаунт WhatsApp, выполняя запрос к API callmebot. Мы показали вам, как отправить простое текстовое сообщение.

Вы можете легко модифицировать этот пример для отправки показаний датчиков или оповещений, например. У нас есть несколько вводных руководств по основным датчикам, которые могут быть вам полезны: