![Arduino IDE con doble núcleo: control remoto: 8 pasos Arduino IDE con doble núcleo: control remoto: 8 pasos](https://i.howwhatproduce.com/images/006/image-17056-26-j.webp)
Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:39
![Image Image](https://i.howwhatproduce.com/images/006/image-17056-28-j.webp)
![](https://i.ytimg.com/vi/hkkktLZJR4E/hqdefault.jpg)
![Demostración Demostración](https://i.howwhatproduce.com/images/006/image-17056-29-j.webp)
Este video trata sobre "múltiples". Estamos tratando con multitarea, multinúcleo y multiclientes. Hace un tiempo hice un control remoto con dos ESP: un cliente y un punto de acceso. En base a esto, hoy configuraremos un servidor multicliente. Esto significa que tendremos varios clientes conectados en un solo ESP.
Por lo tanto, la lección de hoy involucra la creación de un servidor en ESP32, la adición de nuevos clientes en el bucle y el manejo de las solicitudes en otro núcleo. Los clientes enviarán información sobre el cambio de estado de sus pines y el servidor reproducirá estos cambios de estado.
Paso 1: demostración
Paso 2: Montaje del servidor
![Servidor de montaje Servidor de montaje](https://i.howwhatproduce.com/images/006/image-17056-30-j.webp)
Paso 3: ensamblaje del cliente
![Asamblea del cliente Asamblea del cliente](https://i.howwhatproduce.com/images/006/image-17056-31-j.webp)
Paso 4: Flujo - Servidor
![Flujo - Servidor Flujo - Servidor](https://i.howwhatproduce.com/images/006/image-17056-32-j.webp)
Paso 5: Flujo - Cliente
![Flujo - Cliente Flujo - Cliente](https://i.howwhatproduce.com/images/006/image-17056-33-j.webp)
Paso 6: Client.ino
Declaraciones y variables
#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 server WiFiClient client; // Estructura que define los datos que vamos a enviar (deve ser igual sin servidor) typedef struct {int number; estado int; }Alfiler; // Quantidade de pinos que iremos ler e enviar o status #define PIN_COUNT 2 // Array com os pinos definidos // No vamos trabalhar com os 21 e 19 mas você pode alterar for os pinos que desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Configuración
configuración vacía () {Serial.begin (115200); // Tempo para considerar una conexión como perdida client.setTimeout (5000); // Conectamos a WiFi e conectamos ao configuración del servidorWiFi (); connectClient (); para (int i = 0; i
Configurar WiFi
void setupWiFi () {Serial.print ("Conectando a" + Cadena (SSID)); // Conectamos a red WiFi criado pelo outro ESP WiFi.begin (SSID, CONTRASEÑA); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); retraso (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("¡Conectado!"); }
ConnectClient
void connectClient () {Serial.println ("Cliente de conexión"); // Esperamos conectar com o servidor while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); retraso (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("¡Cliente conectado!"); }
Círculo
bucle void () {// Si no está conectado a 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 no estiver conectado com o servidor, mandamos conectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Se mudou enviamos para o server o novo estado for (int i = 0; i
hasPinStatusChanged
// Verifica se o estado do pino na posição 'i' do array mudou // Retorna 'true' se mudou ou 'false' caso contrário boolean hasPinStatusChanged (int i) {// Faz a leitura do pino int pinStatus = digitalRead (pins .número); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; devuelve verdadero; } // 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)); cliente.flush (); }
Paso 7: Server.ino
Declaraciones y variables
#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos un servidor en un puerto definido por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos a adicionar los clientes conforme eles forem conectando std:: vector clients; // Estructura que define los datos que vamos a enviar (deve ser igual sin cliente) typedef struct {int number; estado int; }Alfiler;
Configuración
configuración vacía () {Serial.begin (115200); // Criamos a red WiFi e iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será ejecutada "handleClients", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (no caso não usamos) 2, // Prioridade da tarefa NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (no caso não precisamos) 0); // Número do core que será ejecutada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}
ConfiguraciónWiFi
void setupWiFi () {// Coloca este ESP como punto de acceso WiFi.mode (WIFI_AP); // SSID e Senha para se conectarem a este ESP WiFi.softAP (SSID, PASSWORD); }
Círculo
void loop () {// Verifica si novo client está intentando conectar WiFiClient client = server.available (); // Se sim colocamos ele ningún vector if (cliente) {clientes.push_back (cliente); }}
Manejar Clientes
void handleClients (void * pvParameters) {// IMPORTANTE: A tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Para cada cliente que temos no vector for (int i = 0; i
Paso 8: archivos
Descarga los archivos
INO
Recomendado:
El control remoto de TV se convierte en un control remoto de RF -- NRF24L01 + Tutorial: 5 pasos (con imágenes)
![El control remoto de TV se convierte en un control remoto de RF -- NRF24L01 + Tutorial: 5 pasos (con imágenes) El control remoto de TV se convierte en un control remoto de RF -- NRF24L01 + Tutorial: 5 pasos (con imágenes)](https://i.howwhatproduce.com/images/004/image-11727-j.webp)
El control remoto de TV se convierte en un control remoto de RF || Tutorial de NRF24L01 +: En este proyecto te mostraré cómo utilicé el popular nRF24L01 + RF IC para ajustar el brillo de una tira de LED de forma inalámbrica a través de tres botones inútiles de un control remoto de TV. ¡Empecemos
IRduino: Control remoto Arduino - Imite un control remoto perdido: 6 pasos
![IRduino: Control remoto Arduino - Imite un control remoto perdido: 6 pasos IRduino: Control remoto Arduino - Imite un control remoto perdido: 6 pasos](https://i.howwhatproduce.com/images/012/image-33548-j.webp)
IRduino: Control remoto Arduino - Imita un control remoto perdido: si alguna vez has perdido el control remoto de tu televisor o reproductor de DVD, sabes lo frustrante que es tener que caminar, buscar y usar los botones del dispositivo. A veces, estos botones ni siquiera ofrecen la misma funcionalidad que el control remoto. Rece
Convierta su control remoto IR en control remoto RF: 9 pasos (con imágenes)
![Convierta su control remoto IR en control remoto RF: 9 pasos (con imágenes) Convierta su control remoto IR en control remoto RF: 9 pasos (con imágenes)](https://i.howwhatproduce.com/images/001/image-2740-94-j.webp)
Convierta su control remoto IR en control remoto RF: en el Instructable de hoy, le mostraré cómo puede usar un módulo RF genérico sin un microcontrolador, lo que eventualmente nos llevará a construir un proyecto en el que puede convertir un control remoto IR de cualquier dispositivo en un RF. Remoto. La principal ventaja de convertir un
Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: 9 pasos
![Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: 9 pasos Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: 9 pasos](https://i.howwhatproduce.com/images/003/image-8087-24-j.webp)
Controle sus electrodomésticos con su control remoto de TV (control remoto por infrarrojos) con pantalla de temperatura y humedad: hola, soy Abhay y es mi primer blog sobre Instructables y hoy le mostraré cómo controlar sus electrodomésticos con el control remoto de su televisor construyendo esto. proyecto simple. gracias al laboratorio atl por el apoyo y el suministro de material
Liberación del cable del control remoto Olympus Evolt E510 (versión 2 con enfoque automático en el control remoto): 6 pasos (con imágenes)
![Liberación del cable del control remoto Olympus Evolt E510 (versión 2 con enfoque automático en el control remoto): 6 pasos (con imágenes) Liberación del cable del control remoto Olympus Evolt E510 (versión 2 con enfoque automático en el control remoto): 6 pasos (con imágenes)](https://i.howwhatproduce.com/images/003/image-7590-26-j.webp)
Lanzamiento del cable del control remoto Olympus Evolt E510 (versión 2 con enfoque automático en el control remoto): Ayer construí un control remoto simple de un botón para mi Olympus E510. La mayoría de las cámaras tienen un botón disparador (el que presiona para tomar una foto) que tiene dos modos. Si se presiona suavemente el botón, la cámara se enfocará automáticamente y medirá la luz