Inhaltsverzeichnis:

Arduino IDE mit Dual Core: Fernbedienung - Gunook
Arduino IDE mit Dual Core: Fernbedienung - Gunook

Video: Arduino IDE mit Dual Core: Fernbedienung - Gunook

Video: Arduino IDE mit Dual Core: Fernbedienung - Gunook
Video: ESP32 Dual Core with Arduino IDE 2024, November
Anonim
Image
Image
Demonstration
Demonstration

In diesem Video dreht sich alles um „Multi“. Wir haben es mit Multitasking, Multicores und Multiclients zu tun. Vor einiger Zeit habe ich eine Fernbedienung mit zwei ESPs gemacht: einem Client und einem Access Point. Darauf aufbauend richten wir heute einen Multiclient-Server ein. Das bedeutet, dass wir mehrere Clients mit einem einzigen ESP verbunden haben.

So umfasst die Lektion heute die Erstellung eines Servers in ESP32, das Hinzufügen neuer Clients in der Schleife und die Bearbeitung der Anfragen in einem anderen Kern. Clients senden Informationen über die Zustandsänderung ihrer Pins und der Server reproduziert diese Zustandsänderungen.

Schritt 1: Demonstration

Schritt 2: Server montieren

Mounten des Servers
Mounten des Servers

Schritt 3: Client-Montage

Kundenmontage
Kundenmontage

Schritt 4: Flow - Server

Flow - Server
Flow - Server

Schritt 5: Flow - Client

Flow - Kunde
Flow - Kunde

Schritt 6: Client.ino

Deklarationen und Variablen

#include //Dados da rede //Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Zur Verbindung mit einem Server WiFiClient-Client; //Struct que define os dados que vamos enviar (deve ser igual kein Server) typedef struct{ int number; int-Status; }Stift; //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] = { {. Zahl = 21}, {. Zahl = 19} };

Aufstellen

Void setup () {Serial.begin (115200); //Tempo für eine gleichzeitige Dauer client.setTimeout(5000); //Conectamos à rede WiFi und conectamos ao server setupWiFi(); connectClient(); for(int i=0; i

WLAN einrichten

Void setupWiFi () {Serial.print ("Verbindung mit" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar während (WiFi.status ()! = WL_CONNECTED) { Serial.print ("."); Verzögerung (500); } //Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Verbunden!"); }

ConnectClient

Void connectClient () {Serial.println ("Client wird verbunden"); // Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) {Serial.print("."); Verzögerung (500); } //Se chegou aqui está conectado com oder server Serial.println (); Serial.println ("Client verbunden!"); }

Schleife

Void loop () {//Se não estiver conectado à rede WiFi, mandamos conectar if (WiFi.status () != WL_CONNECTED) { setupWiFi (); } }

GriffVerbindung

void handleConnection(void* pvParameters){ //WICHTIG: Ein 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 oder 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 . Zahl); //Se o estado do pino for diferente if(pins.status != pinStatus) { //Guardamos o novo estado and retornamos true pins.status = pinStatus; true zurückgeben; } //Só chegará 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(); }

Schritt 7: Server.ino

Deklarationen und Variablen

#include #include //Dados da rede //Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Criamos um Server mit definiertem Port für 'SERVER_PORT' WiFiServer server(SERVER_PORT); //Vector onde vamos adicionar osclients konforme Elemente forem conectando std::vector client; //Struct que define os dados que vamos enviar (deve ser igual kein Client) typedef struct{ int number; int-Status; }Stift;

Aufstellen

Void setup () {Serial.begin (115200); //Criamos a rede WiFi e iniciamos o Server setupWiFi (); 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 (keine 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) }

WLAN einrichten

Void setupWiFi () {//Coloca este ESP Como Access Point WiFi.mode (WIFI_AP); //SSID und Senha für die Verbindung mit einem ESP WiFi.softAP (SSID, PASSWORD); }

Schleife

Void Schleife () {//Verifica se um einen neuen Client zu verwenden, der mit einem WiFiClient-Client verbunden ist = server.available (); //Se sim colocamos ele kein Vektor if(client) {clients.push_back(client); } }

HandleClients

void handleClients(void* pvParameters){ //WICHTIG: 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

Schritt 8: Dateien

Laden Sie die Dateien herunter

PDF

INO

Empfohlen: