Управляем ESP8266 с компьютера и телефона

24 декабря 2019
Untitled Document.md


В прошлых статьях, про создание гирлянды с помощью ESP8266, для того, что бы управлять нашим устройством мы подключались к его собственной Wi-Fi сети. Это удобно, в том случае, когда у нас одно устройство, причём не требующее подключение к Интернету. Но чаще всего, при создании устройств для т.н. Умного дома, их подключают к домашнему Wi-Fi и управляют ими централизованно.

Для управления одним устройством можно использовать веб-сайт, развёрнутый на самом устройстве, как мы делали в прошлом. Но если у нас много устройств, то гораздо проще создать некую программу для управления.

Предположим, что у нас есть несколько контроллеров, которые умеют включать и выключать лампочки. Каждый свою. Они все подключены к домашнему Wi-Fi, имеют одинаковую структуру команд и нам известны все их IP - адреса. Рассмотрим несколько способов управления такой системой.

Каждое из этих устройств является сервером, который умеет обрабатывать два запроса: включение и выключение света. Значит нам нужно просто отправлять эти запросы. Как это делать? Сейчас разберёмся.

Управление через веб-сайт с помощью JS

Что? Ведь было сказано, что это не удобно? Это не очень удобно, если сайт запущен на самом микроконтроллере. Но ведь можно запустить простой сайт для управления на компьютере или телефоне, которые находятся в той же локальной сети.

Для того, что бы отправить запрос на сервер с помощью JS, можно воспользоваться XMLHttpRequest. С его помощью можно отправить GET или POST запрос на сервер с известным IP адресом.

function sendRequest() {
 var xhttp = new XMLHttpRequest();
 xhttp.open("GET", "http://192.168.1.123/PARAMS", true);
 xhttp.send();
}

Теперь, если для какой-либо кнопки в качестве параметра onclick указать нашу функцию sendRequest(), то при её нажатии будет отправлен запрос на сервер с IP адресом 192.168.1.123 и параметрами PARAMS.

В случае, когда у нас есть несколько IP-адресов, функции которые необходимо использовать, могут выглядеть так:

function enable()
{
    IP_ARR = ['192.168.1.15','192.168.1.16','192.168.1.17']
    IP_ARR.forEach(enable_one);
}

function enable_one(ip_add)
{
    var xhttp = new XMLHttpRequest();
    xhttp.open("GET", "http://"+ip_add+"/enable", true);
    xhttp.send();
}

Функция enable_one(ip_add) отправляет необходимый запрос на сервер с заданным IP-адресом, а enable() - вызывает первую функцию для каждого из сервера.

Теперь, если мы сохраним нашу страницу с кнопками, и функциями в файл с расширением .html, то сможем запускать его на всех устройствах, где есть какой-либо браузер. Основное достоинство JS - он встроен во все браузеры и не требует дополнительных настроек сервера, так как выполняется на стороне клиента.

Управление с помощью скриптов

В общем-то отправить запрос на сервер можно с помощью практически любого языка программирования. Одним из самых простых и самых популярных является Python.
Напишем простейшую консольную программу для управления светильниками.

Для того, что бы отправлять запросы используется библиотека requests.

import requests
from termcolor import colored

def one(ip_addr, to_do = 'enable'):
    response = requests.get("http://{}/{}".format(ip_addr,to_do),timeout=2)
    return response.status_code

def all(to_do):
    ips  = ['192.168.1.15','192.168.1.16','192.168.1.17']
    for i in ips:
        stat = one(i,to_do)
        if stat != 200:
            print(colored("Ошибка на IP {} {}".format(i,stat),'red'))
        else:
              print (colored("IP {} статус: {}".format(i,to_do),'green'))
        
while True:
    to_do = input('Enable/Disable: ').lower()
    all(to_do)

Функция one(ip_addr, to_do = 'enable') включает или выключает свет на заданном IP адресе, отправляя GET запрос, а функция all(to_do) - делает всё то же самое для списка IP адресов.

Библиотека termcolor используется для окрашивания текста 
в консоли в разные цвета.  Чаще всего используют чёрный - для обычного текста,
зелёный для "позитивных" результатов и красный для "негативных"


Этот скрипт может быть запущен на компьютере под управлением любой операционной системы - Windows, Linux, или macOS, а так же на iOS, с помощью приложения которое называется Pythonista. Это полноценная оффлайн среда разработки на Python.


Данная статья является собственностью Amperkot.ru. При перепечатке данного материала активная ссылка на первоисточник, не закрытая для индексации поисковыми системами, обязательна.


Поделиться: