Инструменты пользователя

Инструменты сайта


esp32

ESP32

ESP32 - это микроконтроллер с низким энергопотреблением(не совсем), который является новой версией нашумевшего ESP8266. В отличии от его предка, на борту у нас есть не только Wi-Fi, но и встроенный Bluetooth, что в целом и послужила его возвышении перед другими микроконтроллерами в разделе создания умного дома.

Подключение ESP32 к компьютеру

Для начала работы с ESP32 нужно подключить плату к компьютеру. Первым шагом будет открытие Arduino IDE. Затем нужно найти в «Файл» – «Настройки» и в окно «дополнительные ссылки для менеджера плат» вставить ссылку:

https://dl.espressif.com/dl/package_esp32_index.json

После этого в меню «документы» – «плата» «менеджер плат» выбрать «ESP32» и установить последнюю версию. После проделанных действий в меню «инструменты» – «плата» нужно найти ESP32 Arduino. И в случае с нашей платой выбираем ESP32 Dev Module

После того, как все необходимые данные будут установлены и скопированы, можно будет начать работать.

Примеры

Пример WebClient

GET-запрос по URL-адресу в Интернете.

// библиотека для работы с HTTP-протоколом
#include <HTTPClient.h>
// вводим имя и пароль точки доступа
const char* ssid = "WIFINAME";
const char* password = "WIFIPASSWORD";
 
void setup() {
    // иницилизируем монитор порта
    Serial.begin(115200);
    // запас времени на открытие монитора порта — 5 секунд
    delay(5000);
    // подключаемся к Wi-Fi сети
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connecting to Wi-Fi..");
    }
    Serial.println("Connected to the Wi-Fi network");
}
 
void loop() {
    // выполняем проверку подключения к беспроводной сети
    if ((WiFi.status() == WL_CONNECTED)) {
        // создаем объект для работы с HTTP
        HTTPClient http;
        // подключаемся к тестовому серверу с помощью HTTP
        http.begin("http://httpbin.org/");
        // делаем GET запрос
        int httpCode = http.GET();
        // проверяем успешность запроса
        if (httpCode > 0) {
            // выводим ответ сервера
            String payload = http.getString();
            Serial.println(httpCode);
            Serial.println(payload);
        }
        else {
            Serial.println("Error on HTTP request");
        }
        // освобождаем ресурсы микроконтроллера
        http.end();
    }
    delay(10000);
}

После подключения к Wi-Fi микроконтроллер напишет в COM порт ответ от сервера.

Создадим WEB-сервер на порту 80. С помощью веб-интерфейса будем мигать светодиодами на 16 и 17 пинах.

// подключяем библиотеку для работы с Wi-Fi server
#include <WiFi.h>
// указываем пины, к которым подключены светодиоды
#define LED_GREEN 16
#define LED_RED   17
// вводим имя и пароль точки доступа
const char* ssid     = "WIFINAME";
const char* password = "WIFIPASSWORD";
// инициализируем сервер на 80 порте
WiFiServer server(80);
// создаем буфер и счетчик для буфера
char lineBuf[80];
int charCount = 0;
 
void setup() {
    // запас времени на открытие монитора порта — 5 секунд
    delay(5000);
    // инициализируем контакты для светодиодов
    pinMode(LED_GREEN, OUTPUT);
    pinMode(LED_RED, OUTPUT);
    // инициализируем монитор порта
    Serial.begin(115200);
    // подключаемся к Wi-Fi сети
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");  
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while(WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.println("Wi-Fi connected");  
    Serial.println("IP-address: "); 
    // пишем IP-адрес в монитор порта   
    Serial.println(WiFi.localIP());
    server.begin();
}
 
void loop() {
    // анализируем канал связи на наличие входящих клиентов
    WiFiClient client = server.available();
    if (client) {
        Serial.println("New client");  
        memset(lineBuf, 0, sizeof(lineBuf));
        charCount = 0;
        // HTTP-запрос заканчивается пустой строкой
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();
                Serial.write(c);
                // считываем HTTP-запрос
                lineBuf[charCount] = c;
                if (charCount < sizeof(lineBuf) - 1) {
                    charCount++;
                }
                // на символ конца строки отправляем ответ
                if (c == '\n' && currentLineIsBlank) {
                    // отправляем стандартный заголовок HTTP-ответа
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    // тип контента: text/html
                    client.println("Connection: close");
                    // после отправки ответа связь будет отключена
                    client.println();
                    // формируем веб-страницу 
                    String webPage = "<!DOCTYPE HTML>";
                    webPage +="<html>";
                    webPage +="  <head>";
                    webPage +="    <meta name=\"viewport\" content=\"width=device-width,";
                    webPage +="    initial-scale=1\">";
                    webPage +="  </head>";
                    webPage +="  <h1>ESP32 - Web Server</h1>";
                    webPage +="  <p>LED #1";
                    webPage +="    <a href=\"on1\">";
                    webPage +="      <button>ON</button>";
                    webPage +="    </a>&nbsp;";
                    webPage +="    <a href=\"off1\">";
                    webPage +="      <button>OFF</button>";
                    webPage +="    </a>";
                    webPage +="  </p>";
                    webPage +="  <p>LED #2";
                    webPage +="    <a href=\"on2\">";
                    webPage +="      <button>ON</button>";
                    webPage +="    </a>&nbsp;";
                    webPage +="    <a href=\"off2\">";
                    webPage +="      <button>OFF</button>";
                    webPage +="    </a>";
                    webPage +="  </p>";
                    webPage +="</html>";
                    client.println(webPage);
                    break;
                }
                if (c == '\n') {
                    // анализируем буфер на наличие запросов 
                    // если есть запрос, меняем состояние светодиода
                    currentLineIsBlank = true;
                    if (strstr(lineBuf, "GET /on1") > 0) {
                        Serial.println("LED 1 ON");
                        digitalWrite(LED_GREEN, HIGH);
                    } else if (strstr(lineBuf, "GET /off1") > 0) {
                        Serial.println("LED 1 OFF");
                        digitalWrite(LED_GREEN, LOW);
                    } else if (strstr(lineBuf, "GET /on2") > 0) {
                        Serial.println("LED 2 ON");
                        digitalWrite(LED_RED, HIGH);
                    } else if (strstr(lineBuf, "GET /off2") > 0) {
                        Serial.println("LED 2 OFF");
                        digitalWrite(LED_RED, LOW);
                    }
                    // начинаем новую строку
                    currentLineIsBlank = true;
                    memset(lineBuf, 0, sizeof(lineBuf));
                    charCount = 0;
                } else if (c != '\r') {
                    // в строке попался новый символ
                    currentLineIsBlank = false;
                }
            }
        }
        // даем веб-браузеру время, чтобы получить данные
        delay(1);
        // закрываем соединение
        client.stop();
        Serial.println("client disconnected"); 
    }
}

Скопируйте IP-адрес из монитора порта и вставьте в адресную строку браузера. Если вы подключены к той же локальной сети, что и ESP32, то вы увидите веб-интерфейс. При переходе по IP-адресу из монитора порта, выводится веб-страница с кнопками.

esp32.txt · Последнее изменение: 2021/12/08 18:02 — admin

Инструменты страницы