ዝርዝር ሁኔታ:

አርዱዲኖ አይዲኢ ባለሁለት ኮር: የርቀት መቆጣጠሪያ 8 ደረጃዎች
አርዱዲኖ አይዲኢ ባለሁለት ኮር: የርቀት መቆጣጠሪያ 8 ደረጃዎች

ቪዲዮ: አርዱዲኖ አይዲኢ ባለሁለት ኮር: የርቀት መቆጣጠሪያ 8 ደረጃዎች

ቪዲዮ: አርዱዲኖ አይዲኢ ባለሁለት ኮር: የርቀት መቆጣጠሪያ 8 ደረጃዎች
ቪዲዮ: የአርዱዪኖ ሶፍትዌርን እንዴት ማውረድ እና መጫን እንደሚቻል 2024, ሀምሌ
Anonim
Image
Image
ሰልፍ
ሰልፍ

ይህ ቪዲዮ ስለ “ብዙ” ነው። እኛ ብዙ ተግባራትን ፣ ባለብዙ መልቀቂያዎችን እና ባለብዙ ደንበኞችን እያስተናገድን ነው። ከጥቂት ጊዜ በፊት በሁለት ኢኤስፒዎች የርቀት መቆጣጠሪያ ሠራሁ - ደንበኛ እና የመዳረሻ ነጥብ። በዚህ መሠረት ዛሬ ሁለገብ አገልጋይ እናዘጋጃለን። ይህ ማለት በአንድ ነጠላ ESP ውስጥ የተገናኙ ብዙ ደንበኞች ይኖረናል ማለት ነው።

ስለዚህ ፣ ዛሬ ትምህርቱ በ ESP32 ውስጥ የአገልጋይ መፈጠርን ፣ በሉፕ ውስጥ አዳዲስ ደንበኞችን ማከል እና የጥያቄዎቹን አያያዝ በሌላ ኮር ውስጥ ያካትታል። ደንበኞች ስለ ፒኖቻቸው ሁኔታ ለውጥ መረጃ ይልካሉ ፣ እና አገልጋዩ እነዚህን የስቴት ለውጦችን ያባዛቸዋል።

ደረጃ 1 - ሰልፍ

ደረጃ 2 - የመጫኛ አገልጋይ

የመጫኛ አገልጋይ
የመጫኛ አገልጋይ

ደረጃ 3 - የደንበኛ ስብሰባ

የደንበኛ ስብሰባ
የደንበኛ ስብሰባ

ደረጃ 4 - ፍሰት - አገልጋይ

ፍሰት - አገልጋይ
ፍሰት - አገልጋይ

ደረጃ 5 - ፍሰት - ደንበኛ

ፍሰት - ደንበኛ
ፍሰት - ደንበኛ

ደረጃ 6: Client.ino

መግለጫዎች እና ተለዋዋጮች

#ያካትቱ /// ዳዶስ ዳ ሬስ // Deve ser giual no Server #define SSID “ESP32Server” #define PASSWORD”87654321” #define SERVER_PORT 5000 // Objeto que vai fazer a conexão com o server WiFiClient client; // Struct que os os dados que vamos enviar (deve ser igual no server) typedef struct {int number; int ሁኔታ; } ፒን; // 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_COUNT] = { {. ቁጥር = 21} ፣ {. ቁጥር = 19}};

አዘገጃጀት

ባዶነት ማዋቀር () {Serial.begin (115200); // ቴምፖ para para conrar a conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi እና conectamos ao server setupWiFi (); connectClient (); ለ (int i = 0; i

WiFi ን ያዋቅሩ

ባዶነት ማዋቀር Wi -Fi () {Serial.print (“ከ” + String (SSID) ጋር መገናኘት); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID ፣ PASSWORD); // Esperamos ሲገናኝ (WiFi.status ()! = WL_CONNECTED) {Serial.print (".")); መዘግየት (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("ተገናኝቷል!"); }

የግንኙነት ደንበኛ

ባዶ ግንኙነት ConnectClient () {Serial.println («ደንበኛ ማገናኘት»); // Esperamos conectar com o server ((client.connect (WiFi.gatewayIP () ፣ SERVER_PORT))) {Serial.print (".")) መዘግየት (500); } // የአገልጋይ Serial.println () ን ይመልከቱ። Serial.println ("ደንበኛ ተገናኝቷል!"); }

ሉፕ

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

HandleConnection

ባዶ እጀታ ግንኙነት (ባዶነት* pvParameters) {// አስፈላጊ: አንድ tarefa não pode terminar ፣ deve ficar presa em um loop infinito ሳለ (እውነት) {// Se não estiver conectado com o server, mandamos conectar ከሆነ (! ደንበኛ። የተገናኘ ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. ለአገልጋዩ ወይም ለአገልጋዩ ለ ‹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 .status! = PinStatus) {// Guardamos o novo estado e retornamos እውነተኛ ካስማዎች .status = pinStatus; እውነት ተመለስ; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso መመለስ ሐሰት; }

sendPinStatus

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

ደረጃ 7: Server.ino

መግለጫዎች እና ተለዋዋጮች

#ያካትቱ #ያካትቱ /// ዳዶስ ዳ ሬቤር // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server na porta definida por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os ደንበኞች conforme eles forem conectando STD:: የቬክተር ደንበኞች; // Struct que os os dados que vamos enviar (deve ser igual no ደንበኛ) typedef struct {int number; int ሁኔታ; } ፒን;

አዘገጃጀት

ባዶነት ማዋቀር () {Serial.begin (115200); // Criamos a WiFi WiFi እና iniciamos o server setupWiFi (); 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); // Nuemero do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

SetupWiFi

ባዶነት ማዋቀር Wi -Fi () {// የኮሎካ ግምት ESP como የመድረሻ ነጥብ WiFi.mode (WIFI_AP); // SSID እና Senha para se conectarem a este ESP WiFi.softAP (SSID ፣ PASSWORD) ፤ }

ሉፕ

ባዶነት loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // ሲም ኮላኮሞሞስ ምንም ቪክቶር ከሆነ (ደንበኛ) {customers.push_back (ደንበኛ) ፤ }}

ተቆጣጣሪ ደንበኞች

ባዶ እጀታ ደንበኞች (ባዶ* pvParameters) {// አስፈላጊ: አንድ tarefa não pode terminar ፣ deve ficar presa em um loop infinito ሳለ (እውነት) {// Para cada client que temos no vector for (int i = 0; i

ደረጃ 8 - ፋይሎች

ፋይሎቹን ያውርዱ

ፒዲኤፍ

INO

የሚመከር: