Taula de continguts:
- Pas 1: demostració
- Pas 2: muntatge del servidor
- Pas 3: Muntatge del client
- Pas 4: Flux: servidor
- Pas 5: Flux: client
- Pas 6: Client.ino
- Pas 7: Server.ino
- Pas 8: fitxers
Vídeo: IDE Arduino amb doble nucli: control remot: 8 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Aquest vídeo tracta sobre "multi". Ens ocupem de multitarea, multicore i multiclients. Fa un temps, vaig fer un control remot amb dos ESP: un client i un punt d’accés. Basat en això, avui crearem un servidor multiclient. Això significa que tindrem diversos clients connectats en un únic ESP.
Per tant, avui la lliçó implica la creació d’un servidor a ESP32, l’addició de nous clients al bucle i la gestió de les sol·licituds en un altre nucli. Els clients enviaran informació sobre el canvi d'estat dels seus pins i el servidor reproduirà aquests canvis d'estat.
Pas 1: demostració
Pas 2: muntatge del servidor
Pas 3: Muntatge del client
Pas 4: Flux: servidor
Pas 5: Flux: client
Pas 6: Client.ino
Declaracions i variables
#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objecte que faré una connexió amb el servidor WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef struct {int number; estat int; } Pin; // Quantidad 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ê pots alterar para os pinos que desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Configuració
configuració nul·la () {Serial.begin (115200); // Temps per considerar una connexió com a pèrdua client.setTimeout (5000); // Connecteu-vos a WiFi i connecteu-vos al servidor setupWiFi (); connectClient (); per a (int i = 0; i
Configuració de WiFi
void setupWiFi () {Serial.print ("Connexió a" + cadena (SSID)); // Connecta't a rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperem connectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); retard (500); } // Se chegou aqui està connectat a rede WiFi Serial.println (); Serial.println ("Connectat!"); }
ConnectClient
void connectClient () {Serial.println ("Connectant client"); // Esperem connectar-se amb el servidor mentre (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); retard (500); } // Es va arribar aqui està connectat amb el servidor Serial.println (); Serial.println ("El client està connectat!"); }
Bucle
void loop () {// No es connecta a WiFi, es connecta si (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
HandleConnection
void handleConnection (void * pvParameters) {// IMPORTANTE: A tarefa no can terminar, deve ficar presa em um loop infinito while (true) {// Se não estiver connectado com o server, mandamos connectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Se mudou enviamos for o server o novo state 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 .number); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; tornar cert; } // Sóc arribará aqui se o estado não foi alterado // Então retornamos falso return false; }
sendPinStatus
// Envia para o server os dados do pino na posição 'i' do arrayvoid sendPinStatus (int i) {client.write ((uint8_t *) & pins , sizeof (Pin)); client.flush (); }
Pas 7: Server.ino
Declaracions i variables
#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server na porta definida per 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os clients conforme ellos forem conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int number; estat int; } Pin;
Configuració
configuració nul·la () {Serial.begin (115200); // Criamos a rede WiFi i iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Funció que serà executada "handleClients", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parámetro da tarefa (no caso no usamos) 2, // Prioritat da tarefa NULL, // Cas queria mantenir uma referência para a tarefa que vai ser criada (no caso no precisamos) 0); // Número do core que serà executat a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}
Configuració de Wi-Fi
void setupWiFi () {// Coloca aquest ESP com a punt d'accés WiFi.mode (WIFI_AP); // SSID i Senha per connectar-se a aquest ESP WiFi.softAP (SSID, PASSWORD); }
Bucle
void loop () {// Verifica se un cliente nuevo está intentando conectar WiFiClient client = servidor.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void * pvParameters) {// IMPORTANTE: A tarefa no can terminar, deve ficar presa em a loop infinito while (true) {// Per a cada client que no tenim vector per (int i = 0; i
Pas 8: fitxers
Descarregueu els fitxers
INO
Recomanat:
IRduino: control remot Arduino: imiteu un control remot perdut: 6 passos
IRduino: control remot Arduino: imiteu un control remot perdut: si alguna vegada heu perdut el comandament a distància del vostre reproductor de TV o DVD, sabeu el frustrant que és haver d’anar, trobar i utilitzar els botons del propi dispositiu. De vegades, aquests botons ni tan sols ofereixen la mateixa funcionalitat que el comandament a distància. Rebre
Kit de control remot ordinari transformat en control remot de joguina RC de quatre canals: 4 passos
Kit de control remot ordinari transformat en control remot de joguina de quatre canals: control remot de joguina RC:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 这个 电子 项目 并 为 您 服务 玩具 玩具 车船 提供 远程 无线 控制。
Controleu-vos els aparells elèctrics amb el vostre control remot de televisió (control remot ir) amb pantalla de temperatura i humitat: 9 passos
Controleu-vos els aparells elèctrics amb el vostre control remot de televisió (control remot ir) amb pantalla de temperatura i humitat: hola, sóc Abhay i és el meu primer bloc sobre Instructables i avui us mostraré com controlar els vostres electrodomèstics amb el vostre control remot de TV construint aquest projecte senzill. gràcies al laboratori atl per obtenir suport i proporcionar el material
Liberació del cable remot Olympus Evolt E510 (versió 2 amb enfocament automàtic al control remot): 6 passos (amb imatges)
Liberació del cable remot Olympus Evolt E510 (versió 2 amb enfocament automàtic al control remot): ahir vaig construir un comandament senzill amb un botó per al meu Olympus E510. La majoria de càmeres tenen un botó de disparador (el que premeu per fer una foto) que té dos modes. Si es prem el botó suaument, la càmera enfocarà automàticament i mesurarà la llum
Control remot remot: 11 passos (amb imatges)
Control remot a distància: tinc un nadó acabat de néixer i no creu que hagi de dormir el temps que la meva dona i jo també ho desitgem. Una cosa que el manté feliç al bressol és el mòbil que li penja. Així que quan es desperti si necessitem uns 25 minuts més o menys de sl