Turinys:

„Arduino IDE“su dvigubu branduoliu: nuotolinis valdymas: 8 žingsniai
„Arduino IDE“su dvigubu branduoliu: nuotolinis valdymas: 8 žingsniai

Video: „Arduino IDE“su dvigubu branduoliu: nuotolinis valdymas: 8 žingsniai

Video: „Arduino IDE“su dvigubu branduoliu: nuotolinis valdymas: 8 žingsniai
Video: Lesson 06: Arduino Variables Data Types | Robojax Arduino Step By Step Course 2024, Lapkritis
Anonim
Image
Image
Demonstracija
Demonstracija

Šis vaizdo įrašas yra apie „multi“. Mes susiduriame su daugiafunkciniu darbu, daugiasluoksniais ir daugiasluoksniais klientais. Prieš kurį laiką sukūriau nuotolinio valdymo pultą su dviem ESP: klientu ir prieigos tašku. Remdamiesi tuo, šiandien nustatysime kelių klientų serverį. Tai reiškia, kad turėsime kelis klientus, prijungtus prie vieno ESP.

Taigi šiandien pamoka apima serverio sukūrimą ESP32, naujų klientų įtraukimą į ciklą ir užklausų tvarkymą kitame branduolyje. Klientai atsiųs informaciją apie savo smeigtukų būsenos pasikeitimą, o serveris atkurs šiuos būsenos pakeitimus.

1 žingsnis: demonstracija

2 veiksmas: serverio montavimas

Montavimo serveris
Montavimo serveris

3 žingsnis: Kliento surinkimas

Klientų surinkimas
Klientų surinkimas

4 žingsnis: srautas - serveris

Srautas - serveris
Srautas - serveris

5 žingsnis: srautas - klientas

Srautas - klientas
Srautas - klientas

6 žingsnis: Client.ino

Deklaracijos ir kintamieji

#include // Dados da rede // Sukurti serverį be serverio #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objeto que vai fazer a conexão com or server WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef structure {int numeris; int statusas; } Smeigtukas; // 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 pin [PIN_COUNT] = { {.number = 21}, {.number = 19}};

Sąranka

void setup () {Serial.begin (115200); // Tempo para harkint a conexão como perdida client.setTimeout (5000); // „Conectamos“ir „Wi -Fi“prijungimas prie serverio sąrankos „Wi -Fi“(); connectClient (); už (int i = 0; i

Nustatykite „WiFi“

void setupWiFi () {Serial.print ("Prisijungimas prie" + eilutė (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos konektorius while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); vėlavimas (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Prisijungta!"); }

„ConnectClient“

void connectClient () {Serial.println („Jungiamasis klientas“); // Esperamos conectar com serveris while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); vėlavimas (500); } // Se chegou aqui está conectado com or server Serial.println (); Serial.println ("Klientas prijungtas!"); }

Kilpa

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

HandleConnection

void handleConnection (void* pvParameters) {// SVARBU: Tarefa não pode terminalas, 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 . skaičius); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; grįžti tiesa; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

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

7 žingsnis: Server.ino

Deklaracijos ir kintamieji

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // „Criamos“serveris, kurio portalas apibrėžtas „SERVER_PORT“„WiFiServer server“(SERVER_PORT); // Vector onde vamos adicionar os customers conforme eles forem conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef structure {int numeris; int statusas; } Smeigtukas;

Sąranka

void setup () {Serial.begin (115200); // „Criamos“ir „WiFi“e iniciamos arba serverio sąrankaWiFi (); 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); // Número do core que será executab a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

„Wi -Fi“sąranka

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

Kilpa

void loop () {// Patikrinkite, ar tai naujas klientas, ar nėra „WiFiClient“kliento = serverio. prieinama (); // Se sim colocamos ele no vector, jei (klientas) {klientai.push_back (klientas); }}

RankenaKlientai

void handleClients (void* pvParameters) {// SVARBU: Tarefa não pode terminalas, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i

8 žingsnis: failai

Atsisiųskite failus

PDF

AŠ NE

Rekomenduojamas: