Table des matières:
- Étape 1: Démonstration
- Étape 2: Montage du serveur
- Étape 3: Assemblage du client
- Étape 4: Flux - Serveur
- Étape 5: Flux - Client
- Étape 6: Client.ino
- Étape 7: Server.ino
- Étape 8: Fichiers
Vidéo: IDE Arduino avec Dual Core : Télécommande : 8 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Cette vidéo parle de "multi". Nous avons affaire au multitâche, aux multicœurs et aux multiclients. Il y a quelques temps, j'ai réalisé une télécommande avec deux ESP: un client et un point d'accès. Sur cette base, nous allons aujourd'hui mettre en place un serveur multiclient. Cela signifie que nous aurons plusieurs clients connectés dans un seul ESP.
Ainsi, la leçon d'aujourd'hui porte sur la création d'un serveur en ESP32, l'ajout de nouveaux clients dans la boucle, et le traitement des requêtes dans un autre core. Les clients enverront des informations sur le changement d'état de leurs broches et le serveur reproduira ces changements d'état.
Étape 1: Démonstration
Étape 2: Montage du serveur
Étape 3: Assemblage du client
Étape 4: Flux - Serveur
Étape 5: Flux - Client
Étape 6: Client.ino
Déclarations et 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; //Struct que définir os dados que vamos enviar (deve ser igual no server) typedef struct{ int number; état entier; }Épingler; //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] = { {.nombre = 21}, {.nombre = 19} };
Installer
void setup(){ Serial.begin(115200); //Tempo para considerar a conexão como perdida client.setTimeout (5000); //Connectez-vous à rede WiFi et connectez-vous à la configuration du serveurWiFi(); connectClient(); for(int i=0; i
Configurer le Wi-Fi
void setupWiFi(){ Serial.print("Connexion à " + String(SSID)); //Conectamos à rede WiFi criado pelo outtro ESP WiFi.begin(SSID, PASSWORD); //Esperamos conectar while (WiFi.status() != WL_CONNECTED) { Serial.print("."); retard (500); } //Se chegou aqui est connecté à rede WiFi Serial.println(); Serial.println("Connecté!"); }
Connecter le client
void connectClient(){ Serial.println("Connexion client"); // Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) { Serial.print("."); retard (500); } //Se chegou aqui est connecté au serveur Serial.println(); Serial.println("Client connecté !"); }
Boucle
void loop(){ //Se não estiver connecté à rede WiFi, mandamos conectar if(WiFi.status() != WL_CONNECTED) { setupWiFi(); } }
PoignéeConnexion
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 server, 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 .nombre); //Se o estado do pino for different if(pins.status != pinStatus) { //Guardamos o novo estado e retornamos true pins.status = pinStatus; renvoie vrai; } //Só chegará aqui se o estado não foi alterado //Então retornamos falso return false; }
sendPinStatus
//Envoyé par o serveur os dodos do pino na posição 'i' do arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pins, sizeof(Pin)); client.flush(); }
Étape 7: Server.ino
Déclarations et variables
#include #include //Dos da rede //Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Criamos um server na porta definida por 'SERVER_PORT' WiFiServer server(SERVER_PORT); //Vector onde vamos adicionar os clients conforme eles forem conectando std::vector clients; //Struct que définir os dados que vamos enviar (deve ser igual no client) typedef struct{ int number; état entier; }Épingler;
Installer
void setup(){ Serial.begin(115200); //Criamos a rede WiFi et iniciamos o server setupWiFi(); serveur.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 usamos) 2, //Prioridade da tarefa 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á executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) }
ConfigurationWiFi
void setupWiFi(){ //Coloca este ESP como Access Point WiFi.mode(WIFI_AP); //SSID et Senha para se connecter à un ESP WiFi.softAP(SSID, PASSWORD); }
Boucle
void loop () { // Vérifie que le client novo est tenté de connecter le client WiFiClient = server.available (); //Se sim colocamos ele no vector if(client) { clients.push_back(client); } }
PoignéeClients
void handleClients(void* pvParameters){ //IMPORTANTE: A tarefa não pode terminar, deve ficar presa em um loop infinito while(true) { //Para cada client que temos no vector for(int i=0; i
Étape 8: Fichiers
Télécharger les fichiers
INO
Conseillé:
La télécommande TV devient une télécommande RF -- Tutoriel NRF24L01+ : 5 étapes (avec photos)
La télécommande TV devient une télécommande RF || Tutoriel NRF24L01+ : Dans ce projet, je vais vous montrer comment j'ai utilisé le populaire IC RF nRF24L01+ pour régler la luminosité d'une bande LED sans fil à l'aide de trois boutons inutiles d'une télécommande de téléviseur. Commençons
IRduino : télécommande Arduino - Imiter une télécommande perdue : 6 étapes
IRduino : télécommande Arduino - Imitez une télécommande perdue : si vous avez déjà perdu la télécommande de votre téléviseur ou lecteur DVD, vous savez à quel point il est frustrant de devoir marcher, trouver et utiliser les boutons de l'appareil lui-même. Parfois, ces boutons n'offrent même pas les mêmes fonctionnalités que la télécommande. Recevoir
Comment contrôler les appareils ménagers avec la télécommande du téléviseur avec fonction de minuterie : 7 étapes (avec images)
Comment contrôler les appareils ménagers avec la télécommande du téléviseur avec fonction de minuterie : Même après 25 ans de son introduction sur le marché grand public, la communication infrarouge est toujours très pertinente ces derniers jours. Qu'il s'agisse de votre téléviseur 4K 55 pouces ou de votre système audio de voiture, tout a besoin d'une télécommande IR pour répondre à nos
Kit de télécommande ordinaire transformé en télécommande jouet RC à quatre canaux : 4 étapes
Kit de télécommande ordinaire transformé en télécommande jouet RC à quatre canaux : 如何将通用遥控器套件转换为玩具模型中使用的四通道遥控器。遥控器套件非常便宜。它采用2262和2272芯片和433个模块构建。 ??
Convertissez votre télécommande IR en télécommande RF : 9 étapes (avec photos)
Convertissez votre télécommande IR en télécommande RF : dans Instructable d'aujourd'hui, je vais vous montrer comment vous pouvez utiliser un module RF générique sans microcontrôleur, ce qui nous conduira éventuellement à créer un projet dans lequel vous pourrez convertir une télécommande IR de n'importe quel appareil en RF À distance. Le principal avantage de convertir un