Indholdsfortegnelse:

Arduino IDE Med Dual Core: Fjernbetjening: 8 trin
Arduino IDE Med Dual Core: Fjernbetjening: 8 trin

Video: Arduino IDE Med Dual Core: Fjernbetjening: 8 trin

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

Denne video handler om "multi". Vi har at gøre med multitasking, multicores og multiclients. For et stykke tid siden lavede jeg en fjernbetjening med to ESP'er: en klient og et adgangspunkt. Baseret på dette vil vi i dag oprette en multiclient -server. Det betyder, at vi har flere klienter forbundet i en enkelt ESP.

Således involverer lektionen i dag oprettelsen af en server i ESP32, tilføjelse af nye klienter i sløjfen og håndteringen af anmodningerne i en anden kerne. Klienter sender oplysninger om tilstandsændringen af deres pins, og serveren gengiver disse tilstandsændringer.

Trin 1: Demonstration

Trin 2: Monteringsserver

Monteringsserver
Monteringsserver

Trin 3: Klientmontering

Klientforsamling
Klientforsamling

Trin 4: Flow - Server

Flow - Server
Flow - Server

Trin 5: Flow - klient

Flow - Klient
Flow - Klient

Trin 6: Client.ino

Erklæringer og variabler

#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objecto que vai fazer a conexão com o server WiFiClient client; // Struktur, som definerer os, hvad vi kan bruge enviar (deve ser igual no server) typedef struct {int number; int status; }Pin; // 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}};

Opsætning

ugyldig opsætning () {Serial.begin (115200); // Tempo til overvejelse af en konexão como perdida client.setTimeout (5000); // Tilslutning af WiFi og tilslutning til bl.a. server setupWiFi (); connectClient (); for (int i = 0; i

Opsæt WiFi

void setupWiFi () {Serial.print ("Opretter forbindelse til" + streng (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); forsinkelse (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Tilsluttet!"); }

ConnectClient

void connectClient () {Serial.println ("Connecting client"); // Esperamos tilsluttede en server, mens (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); forsinkelse (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Klient forbundet!"); }

Sløjfe

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

Håndtag Tilslutning

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; vende tilbage sandt; } // 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 (); }

Trin 7: Server.ino

Erklæringer og variabler

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server to porta definida por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os clients conforme eles forem conectando std:: vector clients; // Struktur, som definerer os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int status; }Pin;

Opsætning

ugyldig opsætning () {Serial.begin (115200); // Criamos a rede WiFi and 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 (no caso não precisamos) 0); // Nummer på kerne, der ser udførelse og anvendelse (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); }

Sløjfe

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); }}

HåndtagKlienter

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

Trin 8: Filer

Download filerne

PDF

INO

Anbefalede: