Sommario:

Arduino IDE con Dual Core: Controllo remoto: 8 passaggi
Arduino IDE con Dual Core: Controllo remoto: 8 passaggi

Video: Arduino IDE con Dual Core: Controllo remoto: 8 passaggi

Video: Arduino IDE con Dual Core: Controllo remoto: 8 passaggi
Video: NUOVO Arduino UNO R4 🤯 La rivoluzione del making 2024, Dicembre
Anonim
Image
Image
Dimostrazione
Dimostrazione

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

Server di montaggio
Server di montaggio

Passaggio 3: assemblaggio del cliente

Assemblaggio del cliente
Assemblaggio del cliente

Passaggio 4: flusso - Server

Flusso - Server
Flusso - Server

Passaggio 5: flusso - Cliente

Flusso - Cliente
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

PDF

IO NO

Consigliato: