Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Bu video hamısı "multi" mövzusundadır. Çox vəzifəli, çox mərkəzli və çoxlu müştəri ilə məşğul oluruq. Bir müddət əvvəl iki ESP ilə uzaqdan idarəetmə qurdum: müştəri və giriş nöqtəsi. Buna əsaslanaraq, bu gün çoxfunksiyalı bir server quracağıq. Bu o deməkdir ki, bir ESP -də birdən çox müştərimiz olacaq.
Beləliklə, bugünkü dərs ESP32 -də bir serverin yaradılması, döngəyə yeni müştərilərin əlavə edilməsi və başqa bir nüvədə olan sorğuların işlənməsini əhatə edir. Müştərilər pinlərinin vəziyyət dəyişikliyi haqqında məlumat göndərəcək və server bu vəziyyət dəyişikliklərini təkrarlayacaq.
Addım 1: nümayiş
Addım 2: Serverin quraşdırılması
Addım 3: Müştəri Məclisi
Addım 4: Flow - Server
Addım 5: Flow - Müştəri
Addım 6: Client.ino
Bəyannamələr və dəyişənlər
#daxil edin // Yenidən qurun // Server qurun #SSID "ESP32Server" təyin edin #ŞİFRE "87654321" #define SERVER_PORT 5000 // WiFiClient müştəri ilə əlaqə qurun; // Strukturu təyin edin və ya yoxlayın (heç bir server yoxdur) typedef struct {int number; int statusu; }Pin; // Vəziyyət #PIN_COUNT 2 -ni təyin edin // Array com os pinos definitos // No 21 casus vabos trabalhar com os 21 e 19 mas poke alterar para pin pines pin pin [PIN_COUNT] = { {.sayı = 21}, {.sayı = 19}};
Qurmaq
void setup () {Serial.begin (115200); // Müvəqqəti müştəri müştəri.setTimeout (5000); // Wi -Fi və ya server qurmaq üçün Wi -Fi bağlantısı (); connectClient (); üçün (int i = 0; i
WiFi qurmaq
boş quraşdırmaWiFi () {Serial.print ("Bağlanır" + String (SSID)); // ESP WiFi.begin (SSID, PASSWORD) ilə işləyən WiFi bağlantısı; // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); gecikmə (500); } // WiFi Serial.println () ilə əlaqə qurun; Serial.println ("Bağlandı!"); }
ConnectClient
void connectClient () {Serial.println ("Müştəri bağlayır"); // Esperamos server serveri ilə əlaqə qurarkən (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); gecikmə (500); } // Serial.println () serveri ilə əlaqə qurun; Serial.println ("Müştəri bağlı!"); }
Döngə
void loop () {// Wi -Fi -nı dəyişdirmək, əgər (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
Əlaqə Əlaqəsi
void handleConnection (void* pvParameters) {// ÖNƏMİZ: İstifadəçi məlumatlarını sona çatdırmaq üçün vaxt ayırmaqla (doğru) {// İstifadəçi serverlə əlaqə qurursa, mandamos conectar if (! client.connected ()) {connectClient (); } // Müqəddəs Yazıların müddəaları. (İnt i = 0; i
hasPinStatusChanged
// Verilənlər sıralanır və ya sıralanır. .sayı); // Diferente if (sancaqlar . Statusu! = PinStatus) {// mühafizəsi əsl sancaqlar .status = pinStatus; doğru qayıtmaq; } // Şəxsi məlumatların dəyişdirilməsi // Səhvlərin geri qaytarılması yalan; }
sendPinStatus
// Göndərmə ilə əlaqəli server göndərmək üçün SendPinStatus (int i) {client.write ((uint8_t*) & pinlər , ölçüsü (Pin)); müştəri.flush (); }
Addım 7: Server.ino
Bəyannamələr və dəyişənlər
#include #include // Dados da rede // Heç bir Müştəri yoxla #SSID "ESP32Server" ni təyin et #PAROLU "87654321" #define SERVER_PORT 5000 // 'SERVER_PORT' WiFiServer serveri (SERVER_PORT) üçün heç bir server yoxdur. // Müştərilər bir -biri ilə əlaqə qurduqdan sonra: vektor müştəriləri; // Strukturu müəyyən edin və ya yoxlayın (müştəri yoxdur) typedef struct {int number; int statusu; }Pin;
Qurmaq
void setup () {Serial.begin (115200); // WiFi qurmaq və ya server qurmaq üçün Wi -Fi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Funcão que será executada "handleClients", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parametro da tarefa (no caso não usamos) 2, // Priorityade da tarefa NULL, // İstifadəçi məlumatlarının təhlili (heç bir dəqiqlik yoxdur) 0); // Başlanğıcda bir tapşırıq yerinə yetirmək lazımdır (əsas 0 -dan çox olmayan dövrdə)
Wi -Fi qurmaq
etibarsız quraşdırmaWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID və ESP WiFi.softAP (SSID, PASSWORD) ilə əlaqə qurmaq; }
Döngə
void loop () {// WiFi müştəri ilə əlaqə qurmaq üçün WiFiClient müştəri = server.available (); // Heç bir vektor yoxdursa (müştəri) {clients.push_back (müştəri); }}
HandleClients
void handleClients (void* pvParameters) {// ÖNEMLİ: Bir terminalı yoxlamaq, sona çatdırmaq üçün sonsuz vaxt (doğru) {// Para cada müştəri üçün heç bir vektor yoxdur (int i = 0; i
Addım 8: Fayllar
Faylları yükləyin
MƏN YOX