Sadržaj:

Arduino IDE sa dvostrukim jezgrom: Daljinski upravljač: 8 koraka
Arduino IDE sa dvostrukim jezgrom: Daljinski upravljač: 8 koraka

Video: Arduino IDE sa dvostrukim jezgrom: Daljinski upravljač: 8 koraka

Video: Arduino IDE sa dvostrukim jezgrom: Daljinski upravljač: 8 koraka
Video: 35 видео со страшными призраками: мегасборник 2023 года [V1] 2024, Juli
Anonim
Image
Image
Demonstracija
Demonstracija

Ovaj video je o "multi". Bavimo se multitaskingom, višespratnicama i više klijentima. Maloprije sam napravio daljinski upravljač sa dva ESP -a: klijentom i pristupnom tačkom. Na osnovu ovoga, danas ćemo postaviti višestruki server. To znači da ćemo imati više klijenata povezanih u jednom ESP -u.

Dakle, današnja lekcija uključuje stvaranje servera u ESP32, dodavanje novih klijenata u petlju i rukovanje zahtjevima u drugom jezgru. Klijenti će slati informacije o promjeni stanja svojih pinova, a poslužitelj će reproducirati te promjene stanja.

Korak 1: Demonstracija

Korak 2: Montiranje servera

Server za montiranje
Server za montiranje

Korak 3: Sastavljanje klijenta

Skupština klijenta
Skupština klijenta

Korak 4: Tok - Server

Tok - Server
Tok - Server

Korak 5: Tok - klijent

Protok - klijent
Protok - klijent

Korak 6: Client.ino

Deklaracije i varijable

#include // Datoteke za ponovno učitavanje // Nema servera bez servera #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objekat koji želite da povežete sa serverom WiFiClient klijent; // Struct que define os dados que vamos enviar (deve ser igual bez servera) 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šene alterar para os pinos que desejar Pin pins [PIN_COUNT] = { {.broj = 21}, {.broj = 19}};

Postaviti

void setup () {Serial.begin (115200); // Vremenski parametri koji se odnose na conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi i conectamos ao server setupWiFi (); connectClient (); za (int i = 0; i

Podesite WiFi

void setupWiFi () {Serial.print ("Povezivanje sa" + niz (SSID)); // Conectamos à rede WiFi WiFi out of ESP WiFi.begin (SSID, PASSWORD); // Esperamos povezivanje while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kašnjenje (500); } // Možete provjeriti jesu li povezani povezivanjem na WiFi Serial.println (); Serial.println ("Povezano!"); }

ConnectClient

void connectClient () {Serial.println ("Povezivanje klijenta"); // Esperamos conectar com o poslužitelju while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); kašnjenje (500); } // Možete provjeriti jesu li povezani na poslužitelj Serial.println (); Serial.println ("Klijent povezan!"); }

Petlja

void loop () {// Nije potrebno sve što je potrebno za ponovno povezivanje WiFi mreže, ako je (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}

HandleConnection

void handleConnection (void* pvParameters) {// VAŽNO: A tarefa nije podešen termin, potrebno je da um umreži petlju 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. Pogledajte podatke o serveru ili novom stanju za (int i = 0; i

hasPinStatusChanged

// Verificira se o stanju do pina na poziciju '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 .broj); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novom estado e retornamos true pins .status = pinStatus; return true; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

// Omogućavanje servera da do pino -a doda poziciju 'i' u polje arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)); client.flush (); }

Korak 7: Server.ino

Deklaracije i varijable

#include #include // Datos da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server na porti definida za 'SERVER_PORT' WiFiServerski server (SERVER_PORT); // Vektorski dodaci za korisnike prilagođeni klijentima prilagođeni forem konektando std:: vektorski klijenti; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int status; } Pin;

Postaviti

void setup () {Serial.begin (115200); // Criamos a rede WiFi i inicijalizacija servera setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executada "handleClients", // Ime da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (nema caso não usamos) 2, // Prioritet da tarefa NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (no caso não precisamos) 0); // Numeričko jezgro koje izvodi izvršnu datoteku i tarefu (upotreba o jezgru 0 za petlju ili petlja o jezgri 1)}

SetupWiFi

void setupWiFi () {// Kolonije ESP -a za pristupnu točku WiFi.mode (WIFI_AP); // SSID e Senha za povezivanje i ESP WiFi.softAP (SSID, PASSWORD); }

Petlja

void loop () {// Verifikuje se um novi klijent i mora se povezati WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}

HandleClients

void handleClients (void* pvParameters) {// VAŽNO: A tarefa nije podešen terminar, potrebno je da um umreži petlju beskonačno while (true) {// Para cada klijent que temos nema vektor za (int i = 0; i

Korak 8: Datoteke

Preuzmite datoteke

PDF

JA NE

Preporučuje se: