Índice:
- Etapa 1: Demonstração
- Etapa 2: Montagem do servidor
- Etapa 3: Montagem do cliente
- Etapa 4: Fluxo - Servidor
- Etapa 5: Fluxo - Cliente
- Etapa 6: Client.ino
- Etapa 7: Server.ino
- Etapa 8: Arquivos
Vídeo: Arduino IDE com Dual Core: Controle remoto: 8 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Este vídeo é sobre “multi”. Estamos lidando com multitarefa, multicores e multiclients. Há um tempo atrás fiz um controle remoto com dois ESPs: um cliente e um ponto de acesso. Com base nisso, hoje vamos configurar um servidor multicliente. Isso significa que teremos vários clientes conectados em um único ESP.
Assim, a lição de hoje envolve a criação de um servidor no ESP32, a adição de novos clientes no loop e o tratamento das solicitações em outro núcleo. Os clientes enviarão informações sobre a mudança de estado de seus pinos e o servidor reproduzirá essas mudanças de estado.
Etapa 1: Demonstração
Etapa 2: Montagem do servidor
Etapa 3: Montagem do cliente
Etapa 4: Fluxo - Servidor
Etapa 5: Fluxo - Cliente
Etapa 6: Client.ino
Declarações e variáveis
#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objeto que vai fazer a conexão com o servidor WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no servidor) typedef struct {int number; status interno; }Alfinete; // Quantidade de pinos que iremos ler e enviar o status #define PIN_COUNT 2 // Array com os pinos definidos // No caso vamos trabalhar com os 21 e 19 mas você pode alterar para os pinos que desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Configurar
void setup () {Serial.begin (115200); // Tempo para considerar uma conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi e conectamos ao servidor setupWiFi (); connectClient (); para (int i = 0; i
Configurar WiFi
void setupWiFi () {Serial.print ("Conectando a" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); atraso (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Conectado!"); }
ConnectClient
void connectClient () {Serial.println ("Conectando cliente"); // Esperamos conectar com o servidor while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); atraso (500); } // Se chegou aqui está conectado com o servidor Serial.println (); Serial.println ("Cliente conectado!"); }
Ciclo
void loop () {// Se não estiver conectado à rede WiFi, mandamos conectar if (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
HandleConnection
void handleConnection (void * pvParameters) {// IMPORTANTE: A tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Se não estiver conectado com o servidor, mandamos conectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Se mudou enviamos para o servidor o novo estado para (int i = 0; i
hasPinStatusChanged
// Verifica se o estado do pino na posição 'i' do array mudou // Retorna 'verdadeiro' se mudou ou 'falso' caso contrário boolean hasPinStatusChanged (int i) {// Faz a leitura do pino int pinStatus = digitalRead (pins .number); // Se o estado do pino para diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; return true; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }
sendPinStatus
// Envia para o servidor os dados do pino na posição 'i' do arrayvoid sendPinStatus (int i) {client.write ((uint8_t *) & pins , sizeof (Pin)); client.flush (); }
Etapa 7: Server.ino
Declarações e variáveis
#include #include // Dados da rede // Deve ser igual no Cliente #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um servidor na porta definido por 'SERVER_PORT' servidor WiFiServer (SERVER_PORT); // Vector onde vamos adicionar os clientes conforme eles são conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int number; status interno; }Alfinete;
Configurar
void setup () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executada "handleClients", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (no caso não acoplado) 2, // Prioridade da tarefa NULL, // Caso queria manter uma referência para uma tarefa que vai ser criada (no caso não precisamos) 0); // Número do core que será executada a tarefa (localização o core 0 para o loop ficar livre com o core 1)}
SetupWiFi
void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID e Senha para se conectar a este ESP WiFi.softAP (SSID, PASSWORD); }
Ciclo
void loop () {// Verifica se um novo cliente está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vetor if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void * pvParameters) {// IMPORTANTE: A tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Para cada cliente que não temos vetor para (int i = 0; i
Etapa 8: Arquivos
Baixe os arquivos
EU NÃO
Recomendado:
O controle remoto da TV se torna um controle remoto de RF -- NRF24L01 + Tutorial: 5 etapas (com imagens)
O controle remoto da TV se torna um controle remoto RF || NRF24L01 + Tutorial: Neste projeto vou mostrar como usei o popular IC nRF24L01 + RF para ajustar o brilho de uma faixa de LED sem fio por meio de três botões inúteis de um controle remoto de TV. Vamos começar
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais: 4 etapas
Kit de controle remoto comum transformado em controle remoto de brinquedo RC de quatro canais:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板, 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务。 玩具 车船 提供 远程 无线 控制。
Converta seu controle remoto IR em RF remoto: 9 etapas (com imagens)
Converta seu Remoto IR em Remoto RF: No Instructable de hoje, vou mostrar como você pode usar um módulo RF genérico sem um microcontrolador, o que nos levará a construir um projeto onde você pode converter um Remoto IR de qualquer dispositivo em um RF Controlo remoto. A principal vantagem de converter um
Controle seus aparelhos elétricos com seu controle remoto de TV (ir remoto) com display de temperatura e umidade: 9 etapas
Controle seus aparelhos elétricos com o controle remoto da TV (ir remoto) com visor de temperatura e umidade: oi, sou Abhay e é meu primeiro blog no Instructables e hoje vou mostrar como controlar seus aparelhos elétricos com o controle remoto da TV construindo este projeto simples. obrigado ao atl lab pelo apoio e fornecimento do material
Olympus Evolt E510 Liberação de cabo remoto (versão 2 com foco automático no controle remoto): 6 etapas (com fotos)
Liberação de cabo remoto Olympus Evolt E510 (versão 2 com foco automático no controle remoto): Ontem eu construí um controle remoto simples de um botão para meu Olympus E510. A maioria das câmeras possui um botão de liberação do obturador (aquele que você pressiona para tirar uma foto) que possui dois modos. Se o botão for pressionado suavemente, a câmera fará o foco automático e medirá a luz