Telegram BOT ESP32 micropython
Telegram BOT ESP32 micropython
Основное приемущество ESP32 над той же Ардуино и другими микроконтроллерами является наличие у ESP32 Bluetooth и Wi-Fi.
В коде надо указать
ssid и pass для подключения к интернету.Для работы с ботом нужно получить bot_token и id пользователя или чата куда будут отправляться сообщения.Для примера подключим датчик температуры отсюда. Что бы не сильно спамить раз в 5 минут берутся данные с датчика и отправляются в чат. main.py
import network
import time
import onewire
import ds18x20
import urequests
from machine import Pin , UART
# Set the pin number for the LED
led_pin = 2 # Built-in LED on most ESP32 boards
# Initialize the LED pin as an output
led = Pin(led_pin, Pin.OUT)
def send_command(command):
uart.write(command + '\r\n')
time.sleep(0.1)
# Настройки Wi-Fi
SSID = 'ssid'
PASSWORD = 'pass'
# Токен вашего Telegram бота и ID чата
TELEGRAM_BOT_TOKEN = 'bot_token'
CH_ID = id
# Периодичность отправки данных (в миллисекундах)
SEND_INTERVAL = 5 * 60 * 1000 # 5 минут
# Функция для подключения к Wi-Fi
def connect_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Connecting to network...')
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('Network config:', wlan.ifconfig())
# Функция для отправки сообщения в Telegram
def send_to_telegram(message):
url = f'https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage'
data = {'chat_id': str(CH_ID), 'text': message}
headers = {'Content-Type': 'application/json'}
try:
print(f"Sending message: {message}")
print(f"URL: {url}")
print(f"Data: {data}")
response = urequests.post(url, json=data, headers=headers)
print(f"Response status: {response.status_code}")
print(f"Response text: {response.text}")
response.close()
#blink_led(1)
except Exception as e:
print(f"Error sending message: {e}")
# Инициализация датчика DS18B20
dat = Pin(4) # GPIO 4
ds_sensor = ds18x20.DS18X20(onewire.OneWire(dat))
roms = ds_sensor.scan()
# Подключение к Wi-Fi
connect_wifi(SSID, PASSWORD)
# Главный цикл программы
last_send_time = time.ticks_ms()
send_to_telegram("ESP is on")
while True:
current_time = time.ticks_ms()
if time.ticks_diff(current_time, last_send_time) >= SEND_INTERVAL:
ds_sensor.convert_temp()
time.sleep_ms(750) # Ждем, пока датчик выполнит измерение
for rom in roms:
try:
temperature = ds_sensor.read_temp(rom)
mes = f"Main temperature is {temperature:.2f} C"
if temperature > 18:
led.value(1)
else:
led.value(0)
except Exception as e:
mes = f"Error getting temperature: {e}"
last_send_time = current_time
time.sleep(1) # Задержка для экономии энергии


Комментарии
Отправить комментарий