Arduino IDE ორმაგი ბირთვით: დისტანციური მართვა: 8 ნაბიჯი
Arduino IDE ორმაგი ბირთვით: დისტანციური მართვა: 8 ნაბიჯი
Anonim
Image
Image
დემონსტრაცია
დემონსტრაცია

ეს ვიდეო არის "მრავალზე". ჩვენ საქმე გვაქვს მრავალ ამოცანასთან, მრავალმხრივ და მრავალმხრივ კომპონენტებთან. ცოტა ხნის წინ, მე გავაკეთე დისტანციური მართვა ორი ESP- ით: კლიენტი და წვდომის წერტილი. ამის საფუძველზე, დღეს ჩვენ შევქმნით მრავალ კლიენტის სერვერს. ეს ნიშნავს, რომ ჩვენ გვეყოლება რამდენიმე კლიენტი, რომლებიც დაკავშირებულია ერთ ESP- ში.

ამრიგად, დღეს გაკვეთილი მოიცავს სერვერის შექმნას ESP32- ში, ახალი კლიენტების დამატებას მარშრუტში და მოთხოვნების დამუშავებას სხვა ბირთვში. კლიენტები გაგზავნიან ინფორმაციას მათი ქინძისთავების მდგომარეობის შეცვლის შესახებ და სერვერი ამ მდგომარეობის ცვლილებების რეპროდუცირებას მოახდენს.

ნაბიჯი 1: დემონსტრაცია

ნაბიჯი 2: სერვერის დამონტაჟება

სამონტაჟო სერვერი
სამონტაჟო სერვერი

ნაბიჯი 3: კლიენტების შეკრება

კლიენტების შეკრება
კლიენტების შეკრება

ნაბიჯი 4: ნაკადი - სერვერი

ნაკადი - სერვერი
ნაკადი - სერვერი

ნაბიჯი 5: ნაკადი - კლიენტი

ნაკადი - კლიენტი
ნაკადი - კლიენტი

ნაბიჯი 6: Client.ino

დეკლარაციები და ცვლადები

#ჩართეთ // Dados da rede // Deve ser giual no Server #განსაზღვრეთ 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 struct {int ნომერი; int სტატუსი; } ჩამაგრება; // Quantidade de pinos que iremos ler e enviar o status #define PIN_COUNT 2 // მასივი 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] = { {. რიცხვი = 21}, {. რიცხვი = 19}};

Აწყობა

void setup () {Serial.begin (115200); // Tempo para parasyshrar a conexão como perdida client.setTimeout (5000); // Conectamos de rede WiFi e conectamos ao server setupWiFi (); connectClient (); for (int i = 0; i

WiFi- ის დაყენება

void setupWiFi () {Serial.print ("დაკავშირება" + სიმებიანი (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); დაგვიანება (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("დაკავშირებულია!"); }

ConnectClient

void connectClient () {Serial.println ("კლიენტის დაკავშირება"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); დაგვიანება (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("კლიენტი დაკავშირებულია!"); }

მარყუჟი

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 não pode terminal, 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 (pin . რიცხვი); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; ჭეშმარიტი დაბრუნება; } // 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 (); }

ნაბიჯი 7: Server.ino

დეკლარაციები და ცვლადები

#ჩართეთ #ჩართეთ // Dados da rede // Deve ser igual no Client #განსაზღვრეთ SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server და porta definida for 'SERVER_PORT' WiFiServer server (SERVER_PORT) server; // Vector onde vamos adicionar os clients conforme eles forem conectando std:: ვექტორული კლიენტები; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int ნომერი; int სტატუსი; } ჩამაგრება;

Აწყობა

void setup () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos ან server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será exeada "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á exeada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

SetupWiFi

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

მარყუჟი

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

სახელური კლიენტები

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

ნაბიჯი 8: ფაილები

ჩამოტვირთეთ ფაილები

PDF

ინო

გირჩევთ: