Raspberry Pi Pico W: отправка сообщений в WhatsApp (MicroPython)
В этом руководстве вы узнаете, как отправлять сообщения в WhatsApp с Raspberry Pi Pico, используя бесплатный API CallMeBot. Это может быть полезно для получения уведомлений от вашей платы с показаниями датчиков, оповещений, когда показание датчика превышает или опускается ниже определённого порога, при обнаружении движения и во многих других приложениях.
Впервые работаете с Raspberry Pi Pico? Прочитайте следующее руководство: Начало работы с Raspberry Pi Pico (и Pico W).
Предварительные требования
Перед тем как продолжить, убедитесь, что выполнены следующие предварительные требования:
Прошивка MicroPython
Для выполнения этого руководства вам необходима прошивка MicroPython, установленная на вашу плату Raspberry Pi Pico. Вам также понадобится IDE для написания и загрузки кода на плату.
Рекомендуемой IDE для MicroPython на Raspberry Pi Pico является Thonny IDE. Следуйте приведённому ниже руководству, чтобы узнать, как установить Thonny IDE, прошить прошивку MicroPython и загрузить код на плату.
В качестве альтернативы, если вы предпочитаете программировать в VS Code, вы можете начать со следующего руководства:
Знакомство с 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-ключ в течение 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.
Если всё пройдёт как ожидается, плата должна подключиться к интернету и выполнить успешный запрос.
Через несколько секунд вы должны получить новое сообщение в вашем аккаунте WhatsApp.
Заключение
В этом руководстве вы узнали, как отправлять сообщения в ваш аккаунт WhatsApp, выполняя запрос к API callmebot. Мы показали вам, как отправить простое текстовое сообщение.
Вы можете легко модифицировать этот пример для отправки показаний датчиков или оповещений, например. У нас есть несколько вводных руководств по основным датчикам, которые могут быть вам полезны: