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) # Задержка для экономии энергии






Комментарии

Популярные сообщения из этого блога

Установка micropython на ESP32

LORA Приемник и передатчик

LORA Upgrade E32 400M30S