• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266.Проблема с написанием Telegram бота

Nikitoz

New member
Добрый день, господа!Пожалуйста , помогите пофиксить код:стабильно ловлю ошибку при написании скрипта в Micropython:

Traceback (most recent call last):
File "<stdin>", line 50, in <module>
File "<stdin>", line 39, in send_telegram_message
OSError: -40

>>>

Вот сам код:

Python:
import network
import usocket as socket
import ussl

# Настройка параметров Wi-Fi
WIFI_SSID = "WiFi_name"
WIFI_PASSWORD = "myWifiPas"

# Подключение к Wi-Fi
def connect_to_wifi(ssid, password):
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        print("Подключение к Wi-Fi...")
        sta_if.active(True)
        sta_if.connect(ssid, password)
        while not sta_if.isconnected():
            pass
    print("Подключено к Wi-Fi")
    print("IP адрес:", sta_if.ifconfig()[0])

# Вызов функции для подключения к Wi-Fi
connect_to_wifi(WIFI_SSID, WIFI_PASSWORD)

bot_token = "MyToken"
chat_id = "mychatID"
message_text = "Привет от ESP8266!"

def send_telegram_message(bot_token, chat_id, text):
    host = "api.telegram.org"
    port = 443  # HTTPS порт
    url = "/bot{}/sendMessage".format(bot_token)
    message = "chat_id={}&text={}".format(chat_id, text)
    content_length = len(message)
    
    sock = socket.socket()
    addr = socket.getaddrinfo(host, port)[0][-1]
    sock.connect(addr)
    
    ssl_sock = ussl.wrap_socket(sock)
    
    request = "POST {} HTTP/1.1\r\nHost: {}\r\nContent-Length: {}\r\n\r\n{}".format(url, host, content_length, message)
    ssl_sock.write(request)
    
    response = ssl_sock.read(4096)
    print(response)
    
    ssl_sock.close()
    sock.close()

send_telegram_message(bot_token, chat_id, message_text)
 

fps

Active member
Не будет это нормально работать на 8266

На esp32 или esp32с3 без проблем
С использованием штатной библиотеки requests код получится еще проще:

Python:
import requests

def send_telegram_message(bot_token, chat_id, text):
    api_url = f"https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={chat_id}&text={text}"
    return requests.get(api_url)
 

Nikitoz

New member
Не видно, чтобы использовались сертификаты для соединения по https
Кто то уже получал такую ошибку
https://stackoverflow.com/questions/74718313/https-get-request-with-micropython-on-a-esp8266-failing
На С есть рабочие библиотеки.
На с все завелось без проблем я хочу сделать как здесь кнопку APP который открывает сайт внутри телеги без перехода в браузер
 

Вложения

Сверху Снизу