Sommario:
- Passaggio 1: dimostrazione
- Passaggio 2: montaggio del server
- Passaggio 3: assemblaggio del cliente
- Passaggio 4: flusso - Server
- Passaggio 5: flusso - Cliente
- Passaggio 6: Client.ino
- Passaggio 7: Server.ino
- Passaggio 8: file
Video: Arduino IDE con Dual Core: Controllo remoto: 8 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Questo video parla di "multiplo". Ci occupiamo di multitasking, multicore e multiclient. Tempo fa ho realizzato un telecomando con due ESP: un client e un access point. Sulla base di questo, oggi configureremo un server multiclient. Ciò significa che avremo più client connessi in un singolo ESP.
Pertanto, la lezione di oggi prevede la creazione di un server in ESP32, l'aggiunta di nuovi client nel ciclo e la gestione delle richieste in un altro core. I client invieranno informazioni sul cambiamento di stato dei loro pin e il server riprodurrà questi cambiamenti di stato.
Passaggio 1: dimostrazione
Passaggio 2: montaggio del server
Passaggio 3: assemblaggio del cliente
Passaggio 4: flusso - Server
Passaggio 5: flusso - Cliente
Passaggio 6: Client.ino
Dichiarazioni e variabili
#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 define os dados que vamos enviar (deve ser igual no server) typedef struct{ int numero; stato int; }Spillo; //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] = { {.numero = 21}, {.numero = 19} };
Impostare
void setup(){ Serial.begin(115200); //Tempo per considerare una connessione come perdida client.setTimeout(5000); //Collegamento al nuovo WiFi e collegamento al server setupWiFi(); connectClient(); for(int i=0; i
Configurazione Wi-Fi
void setupWiFi(){ Serial.print("Connessione a " + String(SSID)); //Collegamento al nuovo WiFi dopo aver completato ESP WiFi.begin(SSID, PASSWORD); //Esperamos conectar while (WiFi.status() != WL_CONNECTED) { Serial.print("."); ritardo (500); } //Se è possibile connettersi a WiFi Serial.println(); Serial.println("Connesso!"); }
ConnectClient
void connectClient(){ Serial.println("Connessione client"); //Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) { Serial.print("."); ritardo (500); } //Se chegou aqui está conectado com o server Serial.println(); Serial.println("Cliente connesso!"); }
Ciclo continuo
void loop(){ //Se não summerr conectado a 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 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 .numero); //Se o estado do pino for diferente if(pins.status != pinStatus) { //Guardamos o novo estado e retornamos true pins.status = pinStatus; restituire vero; } //Só chegará aqui se o stado não foi alterado //Então retornamos falso return false; }
sendPinStatus
//Invia per os server os dados do pino na posição 'i' do arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pins, sizeof(Pin)); client.flush(); }
Passaggio 7: Server.ino
Dichiarazioni e variabili
#include #include //Dados da rede //Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Cerchiamo un server sulla porta definita da 'SERVER_PORT' WiFiServer server(SERVER_PORT); //Vector onde vamos adicionar os clients conforme eles forem conectando std::vector clients; //Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct{ int numero; stato int; }Spillo;
Impostare
void setup(){ Serial.begin(115200); //Criamo di nuovo WiFi e iniziamo a configurare il serverWiFi(); 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 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) }
ConfigurazioneWiFi
void setupWiFi(){ //Coloca este ESP come Access Point WiFi.mode(WIFI_AP); //SSID e Senha para se conectarem a este ESP WiFi.softAP(SSID, PASSWORD); }
Ciclo continuo
void loop(){ //Verifica se un nuovo client è stato tentato di connettere WiFiClient client = server.available(); //Se sim colocamos ele no vector if(client) { clients.push_back(client); } }
Gestire i clienti
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
Passaggio 8: file
Scarica i file
IO NO
Consigliato:
Controllo remoto basato su browser Arduino (linux): 9 passaggi (con immagini)
Telecomando basato su browser Arduino (linux): abbiamo dei bambini. Li adoro da morire, ma continuano a nascondere il telecomando del satellite e della TV quando accendono i canali dei bambini. Dopo che questo accade ogni giorno per diversi anni, e dopo che la mia cara moglie mi ha permesso di avere un
Arduino: programmi orari e controllo remoto dall'app Android: 7 passaggi (con immagini)
Arduino: programmi a tempo e controllo remoto dall'app Android: mi sono sempre chiesto cosa succede con tutte quelle schede Arduino di cui le persone non hanno bisogno dopo aver terminato i loro fantastici progetti. La verità è un po' sconvolgente: niente. L'ho osservato a casa della mia famiglia, dove mio padre ha cercato di costruire la sua casa
Telecamera di controllo remoto di Raspberry Pi: 5 passaggi (con immagini)
Telecamera di controllo remoto di Raspberry Pi: questa istruzione ti guiderà come: 1. Metti la fotocamera sul Web locale (per la visione remota tramite computer o telefono)2. Controllo della visione della telecamera (utilizzando il motoriduttore) Elenco delle parti per il progetto: 1. Motore con riduttore https://amzn.to/2OLQxxq2. Raspberry Pi B https://amzn.to
Controllo della luminosità Controllo LED basato su PWM tramite pulsanti, Raspberry Pi e Scratch: 8 passaggi (con immagini)
Controllo della luminosità Controllo LED basato su PWM tramite pulsanti, Raspberry Pi e Scratch: stavo cercando di trovare un modo per spiegare come funzionava il PWM ai miei studenti, quindi mi sono posto il compito di provare a controllare la luminosità di un LED utilizzando 2 pulsanti - un pulsante aumenta la luminosità di un LED e l'altro lo attenua. Per programmare
Unità di controllo remoto GSM/SMS basata su Arduino: 16 passaggi (con immagini)
Unità di controllo remoto GSM/SMS basata su Arduino: ! ! ! AVVISO ! ! !A causa dell'aggiornamento del ripetitore telefonico locale nella mia zona, non sono più in grado di utilizzare questo modulo GSM. La torre più recente non supporta più i dispositivi 2G. Pertanto, non posso più dare alcun supporto a questo progetto. Con un tale wi