Programação do ESP32 - 리가/데스리가 모터

Github do projeto



Todo o código esta disponível em meu github .

PlatformIO IDE 없음 VS 코드



Para programar o ESP32 doit-devkit-v1(modelo) eu usei a extensão PlatformIO no VS code.



브로커 로단도 노 라즈베리





ESP32를 사용하지 않는 코디고



프로그래밍 언어로 C++를 사용하고, 처음부터 책을 가져오지 마십시오.

// Bibliotecas necessárias
#include <Arduino.h>
#include "WiFi.h"
#include "PubSubClient.h"


PlatformIO를 활용하려면 Arduino가 중요합니다.

Depois defini as variáveis ​​que irei utilizar.

#define PIN_LED 25 // Pino usado no ESP-32

#define TOPICO_SUBSCRIBE_LED "topico_liga_desliga_led" // Nome do Tópico, pode ser qualquer nome
#define ID_MQTT "esp32_mqtt" // ID do seu MQTT

const char* SSID = "Nome_Rede_Wifi";
const char* PASSWORD = "sua_senha";

const char* BROKER_MQTT = "Endereço do MQTT Broker";
int BROKER_PORT = 1883;//porta_do_broker

WiFiClient espClient;
PubSubClient MQTT(espClient);



//Declarando funções
void initMQTT(void);
void mqtt_callback(char* topic, byte* payload, unsigned int length);
void reconnectMQTT(void);
void reconnectWiFi(void);
void VerificaConexoesWiFIEMQTT(void);



/* Função: inicializa e conecta-se na rede WI-FI desejada */
void initWiFi(void) 
{
    delay(10);
    Serial.println("------Conexao WI-FI------");
    Serial.print("Conectando-se na rede: ");
    Serial.println(SSID);
    Serial.println("Aguarde");

    reconnectWiFi();
}



/* Função: inicializa parâmetros de conexão MQTT(endereço do broker, porta e seta função de callback) */
void initMQTT(void) 
{
    MQTT.setServer(BROKER_MQTT, BROKER_PORT); //informa qual broker e porta deve ser conectado
    MQTT.setCallback(mqtt_callback); //atribui função de callback (função chamada quando qualquer informação de um dos tópicos subescritos chega)
}


재미있는 mqtt_callback 로드는 로지카 주요 응용 프로그램이며, fazendo com que o motor seja iniciado e desligado após 9 segundos. com o sinal enviado via celular para o broker MQTT, que esta no raspberry.

/* Função: função de callback */
void mqtt_callback(char* topic, byte* payload, unsigned int length) 
{
    String msg;

    /* obtém a string do payload recebido */
    for(int i = 0; i < length; i++) 
    {
       char c = (char)payload[i];
       msg += c;
    }

    Serial.print("Chegou a seguinte mensagem via MQTT: ");
    Serial.println(msg);

    if (msg.equals("1"))
    {
        digitalWrite(PIN_LED, HIGH);
        Serial.print("LED aceso mediante comando MQTT");
        delay(9000);
        digitalWrite(PIN_LED, LOW);
    }

}


Caso o 가입자는 중개인과 연결되어 있고 연결되어 있지 않습니다.

/* Função: reconecta-se ao broker MQTT */
void reconnectMQTT(void) 
{
    while (!MQTT.connected()) 
    {
        Serial.print("* Tentando se conectar ao Broker MQTT: ");
        Serial.println(BROKER_MQTT);
        if (MQTT.connect(ID_MQTT)) 
        {
            Serial.println("Conectado com sucesso ao broker MQTT!");
            MQTT.subscribe(TOPICO_SUBSCRIBE_LED); 
        } 
        else
        {
            Serial.println("Falha ao reconectar no broker.");
            Serial.println("Haverá nova tentativa de conexão em 2s");
            delay(2000);
        }
    }
}



이 기능은 Wi-Fi와 Broker MQTT에 연결되어 있는지 확인합니다.

VerificaConexoesWiFIEMQTT 기능은 MQTT를 다시 연결하고 WiFi를 다시 연결하는 기능입니다.

/* Função: verifica o estado das conexões WiFI e ao broker MQTT. */
void VerificaConexoesWiFIEMQTT(void)
{
    if (!MQTT.connected()) 
        reconnectMQTT();

     reconnectWiFi();
}

/* Função: reconecta-se ao WiFi */
void reconnectWiFi(void) 
{
    if (WiFi.status() == WL_CONNECTED)
        return;

    WiFi.begin(SSID, PASSWORD); 

    while (WiFi.status() != WL_CONNECTED) 
    {
        delay(100);
        Serial.print(".");
    }

    Serial.println();
    Serial.print("Conectado com sucesso na rede ");
    Serial.print(SSID);
    Serial.println("IP obtido: ");
    Serial.println(WiFi.localIP());
}


초기 설정에서 초기 설정으로 프로그램을 시작하고 직렬에서 정의하고 초기 설정에서 초기 설정으로 초기화하려면 itWiFi 및 initMQTT를 funções로 사용하십시오.

void setup() {
  Serial.begin(115200);

  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED,LOW);

  initWiFi();

  initMQTT();
}


A função loop fica chamando periodicamente à cada 2 segundos as funções VerificaConexoesWiFIEMQTT, MQTT.loop

void loop() {
    VerificaConexoesWiFIEMQTT();

    MQTT.loop();
    delay(2000);
}


PlatformIO 구성




[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200
upload_speed = 921600
upload_port = COM3 ; Porta serial do seu computador
lib_deps = knolleary/PubSubClient@^2.8 ; biblioteca necessárias para o uso do MQTT


A porta serial você pode encontra no Gerenciador de Dispositivos, o meu no caso esta na porta 3 (COM3), lembre-se de instalar o drive da placa para que seu computador reconheça o dispositivo.



ESP32를 실행하는 예



예를 들어, 프로토보드가 주도하고 있으며, 9단계로 진행되고 있습니다.

좋은 웹페이지 즐겨찾기