Innehållsförteckning:

Arduino IDE Med Dual Core: Fjärrkontroll: 8 steg
Arduino IDE Med Dual Core: Fjärrkontroll: 8 steg

Video: Arduino IDE Med Dual Core: Fjärrkontroll: 8 steg

Video: Arduino IDE Med Dual Core: Fjärrkontroll: 8 steg
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, November
Anonim
Image
Image
Demonstration
Demonstration

Den här videon handlar om "multi". Vi har att göra med multitasking, multicores och multiclients. För ett tag sedan gjorde jag en fjärrkontroll med två ESP: en klient och en åtkomstpunkt. Baserat på detta kommer vi idag att skapa en server för flera klienter. Det betyder att vi kommer att ha flera klienter anslutna i en enda ESP.

Således innebär lektionen idag skapandet av en server i ESP32, tillägg av nya klienter i loop och hantering av förfrågningar i en annan kärna. Klienter kommer att skicka information om tillståndsändringen av sina nålar, och servern kommer att reproducera dessa tillståndsändringar.

Steg 1: Demonstration

Steg 2: Monteringsserver

Monteringsserver
Monteringsserver

Steg 3: Klientmontering

Kundmontering
Kundmontering

Steg 4: Flow - Server

Flöde - Server
Flöde - Server

Steg 5: Flow - Client

Flöde - klient
Flöde - klient

Steg 6: Client.ino

Deklarationer och variabler

#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 definierar os vados que vamos enviar (deve ser igual no 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] = { {.nummer = 21}, {.nummer = 19}};

Uppstart

void setup () {Serial.begin (115200); // Tempo para considerar a conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi och conectamos ao server setupWiFi (); connectClient (); för (int i = 0; i

Konfigurera WiFi

void setupWiFi () {Serial.print ("Ansluter till" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, LÖSENORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); fördröjning (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Ansluten!"); }

ConnectClient

void connectClient () {Serial.println ("Ansluter klient"); // Esperamos konverterar en server medan (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); fördröjning (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Klient ansluten!"); }

Slinga

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

Handtag Anslutning

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) .nummer); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; återvända sant; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

// Envia para o server us dados do pino na posição 'i' do arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)); client.flush (); }

Steg 7: Server.ino

Deklarationer och variabler

#include #include // Dados da rede // Utveckla inga klienter #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 definiera os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int status; }Stift;

Uppstart

void setup () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos or 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 (no caso não precisamos) 0); // Numero do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

SetupWiFi

void setupWiFi () {// Coloca este ESP som Access Point WiFi.mode (WIFI_AP); // SSID e Senha para se conectarem a este ESP WiFi.softAP (SSID, PASSWORD); }

Slinga

void loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}

HandtagKlienter

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

Steg 8: Filer

Ladda ner filerna

PDF

INO

Rekommenderad: