Სარჩევი:

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

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

ვიდეო: Arduino IDE ორმაგი ბირთვით: დისტანციური მართვა: 8 ნაბიჯი
ვიდეო: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, ნოემბერი
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

ინო

გირჩევთ: