INHOUDSOPGAWE:

Arduino IDE met dubbele kern: afstandbeheer: 8 stappe
Arduino IDE met dubbele kern: afstandbeheer: 8 stappe

Video: Arduino IDE met dubbele kern: afstandbeheer: 8 stappe

Video: Arduino IDE met dubbele kern: afstandbeheer: 8 stappe
Video: 13 Best Tech Gadgets For Gadget Enthusiasts 2024, November
Anonim
Image
Image
Demonstrasie
Demonstrasie

Hierdie video handel oor 'multi'. Ons het te doen met multitasking, multicores en multiclients. Ek het 'n rukkie gelede 'n afstandbeheer gemaak met twee ESP's: 'n kliënt en 'n toegangspunt. Op grond hiervan sal ons vandag 'n multiclient -bediener opstel. Dit beteken dat ons meer as een kliënt in een ESP verbind.

Die les behels dus vandag die skepping van 'n bediener in ESP32, die toevoeging van nuwe kliënte in die lus en die hantering van die versoeke in 'n ander kern. Kliënte sal inligting stuur oor die toestandverandering van hul penne, en die bediener sal hierdie staatsveranderinge weergee.

Stap 1: Demonstrasie

Stap 2: Monteer bediener

Monteer bediener
Monteer bediener

Stap 3: Kliëntevergadering

Kliëntevergadering
Kliëntevergadering

Stap 4: Flow - bediener

Vloei - bediener
Vloei - bediener

Stap 5: Flow - kliënt

Flow - kliënt
Flow - kliënt

Stap 6: Client.ino

Verklarings en veranderlikes

#include // Dados da rede // Skep geen bediener nie #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objecto que vai fazer a conexão com o server WiFiClient client; // Struktuur wat ons kan definieer as ons 'n enviar (deve ser igual no server) typedef struct {int number; int status; }Speld; // 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] = { {.getal = 21}, {.getal = 19}};

Stel op

ongeldige opstelling () {Serial.begin (115200); // Tempo para considera a conexão como perdida client.setTimeout (5000); // Verbind WiFi en verbind bedieners met die opstel van WiFi (); connectClient (); vir (int i = 0; i

Stel WiFi op

void setupWiFi () {Serial.print ("Koppel aan" + string (SSID)); // Maak toegang tot WiFi deur middel van ESP WiFi.begin (SSID, WAGWOORD); // Esperamos conectar terwyl (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); vertraging (500); } // Ons kan ook 'n WiFi -reeks Serial.println () gebruik; Serial.println ("verbind!"); }

ConnectClient

void connectClient () {Serial.println ("Kliënte verbind"); // Esperamos konektoreer bediener terwyl (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); vertraging (500); } // Sien ook die bediener Serial.println (); Serial.println ("Kliënt gekoppel!"); }

Lus

leegte -lus () {// Ons kan ook 'n WiFi -verbinding aanskakel, of as 'n (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}

Hanteerverbinding

void handleConnection (void* pvParameters) {// BELANGRIK: 'n Terminale term wat u kan gebruik om 'n infinito -lus te skep, terwyl (waar) {// Ons kan 'n verbinding met 'n bediener, 'n mandamos conectar kry as (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Kyk na die bediener wat ons benodig (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 .getal); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; terugkeer waar; } // 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 (); }

Stap 7: Server.ino

Verklarings en veranderlikes

#include #include // Dados da rede // Ontwikkel byna geen kliënt #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Servers to porta definida por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vektore en klante kan ook ooreenstem met die volgende vorme: vector -kliënte; // Struktuur wat ons kan definieer as ons 'n enviar (deve ser igual no client) typedef struct {int number; int status; }Speld;

Stel op

ongeldige opstelling () {Serial.begin (115200); // Ons bied toegang tot WiFi en bediener -opstelWiFi (); bediener.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); // Nommer die kern van die funksie (as 'n kern van 0 vir 'n lus om die kern van die reeks 1)}

SetupWiFi

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

Lus

void loop () {// Verifiëring van 'n nuwe kliënt kan 'n WiFiClient -kliënt = server.available (); // Sien geen colocamos ele vector as (kliënt) {clients.push_back (kliënt); }}

Handvatselklante

void handleClients (void* pvParameters) {// BELANGRIK: 'n Terminale term wat 'n onbepaalde lus kan skep, terwyl (waar) {// Para cada client que temos no vector for (int i = 0; i

Stap 8: lêers

Laai die lêers af

PDF

EK NEE

Aanbeveel: