Cuprins:

Arduino IDE cu Dual Core: telecomandă: 8 pași
Arduino IDE cu Dual Core: telecomandă: 8 pași

Video: Arduino IDE cu Dual Core: telecomandă: 8 pași

Video: Arduino IDE cu Dual Core: telecomandă: 8 pași
Video: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Noiembrie
Anonim
Image
Image
Demonstrație
Demonstrație

Acest videoclip este despre „multi”. Avem de-a face cu multitasking, multicores și multiclients. Acum ceva timp, am făcut o telecomandă cu două ESP-uri: un client și un punct de acces. Pe baza acestui fapt, astăzi vom configura un server multiclient. Aceasta înseamnă că vom avea mai mulți clienți conectați într-un singur ESP.

Astfel, lecția de astăzi implică crearea unui server în ESP32, adăugarea de noi clienți în buclă și gestionarea cererilor într-un alt nucleu. Clienții vor trimite informații despre modificarea stării pinilor lor, iar serverul va reproduce aceste modificări de stare.

Pasul 1: demonstrație

Pasul 2: Montarea serverului

Server de montare
Server de montare

Pasul 3: Asamblarea clientului

Asamblarea clientului
Asamblarea clientului

Pasul 4: Flow - Server

Flow - Server
Flow - Server

Pasul 5: Flux - Client

Flux - Client
Flux - Client

Pasul 6: Client.ino

Declarații și variabile

#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objeto that will fazer a connection with server WiFiClient client; // Struct que define os dados que vamos send (deve ser igual no server) typedef struct {int number; statutul int; } Pin; // Quantitate de pinos care iremos ler e enviar o status #define PIN_COUNT 2 // Array com os pinos definidos // No case vamos trabalhar com os 21 e 19 mas você can alterar for os pinos that desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};

Înființat

void setup () {Serial.begin (115200); // Tempo pentru a considera o conexiune ca pierdut client.setTimeout (5000); // Conectați-vă la WiFi și conectați-vă la server setupWiFi (); connectClient (); pentru (int i = 0; i

Configurați WiFi

void setupWiFi () {Serial.print ("Conectarea la" + Șir (SSID)); // Conectează-te la WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); întârziere (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Conectat!"); }

ConnectClient

void connectClient () {Serial.println ("Conectarea clientului"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); întârziere (500); } // Se ajunge aqui está conectado cu server Serial.println (); Serial.println ("Client conectat!"); }

Buclă

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

HandleConnection

void handleConnection (void * pvParameters) {// IMPORTANTE: A tarefa nu poate termina, trebuie să-l iau cu o buclă infinită while (true) {// Se não estiver conectado com o server, mandamos conectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificam se mudou o stare. Se mudou enviamos pentru o server o novo stare 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 .număr); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e returnamos true pins .status = pinStatus; întoarce-te adevărat; } // Só ajungá aqui se o estado não foi alterado // Então returnamos 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 (); }

Pasul 7: Server.ino

Declarații și variabile

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server na porta definida por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector unde vamos adicionar os clients conforme they forem conectando std:: vector clients; // Struct que define os dados que vamos send (deve ser igual no client) typedef struct {int number; statutul int; } Pin;

Înființat

void setup () {Serial.begin (115200); // Criamos a rede WiFi și iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Funcția care va fi executată "handleClients", // Numele da tarefa 10000, // Tamanho da pilha NULL, // Parámetro da tarefa (no caso não usamos) 2, // Prioritatea da tarefa NULL, // Caso queria manter uma referência para a tarefa that vai ser criada (no caso não precisamos) 0); // Numărul de bază care va fi executat la o tarefa (utilizăm o bază 0 pentru o buclă de livrare com o bază 1)}

SetupWiFi

void setupWiFi () {// Coloca este ESP ca Access Point WiFi.mode (WIFI_AP); // SSID și Senha pentru conectarea la ESP WiFi.softAP (SSID, PASSWORD); }

Buclă

void loop () {// Verifică un client nou care se conectează WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}

HandleClients

void handleClients (void * pvParameters) {// IMPORTANTE: A tarefa nu poți termina, trebuie să-ți iei o buclă infinită while (true) {// Pentru fiecare client că nu avem vector pentru (int i = 0; i

Pasul 8: Fișiere

Descărcați fișierele

PDF

EU NU

Recomandat: