Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
Bu video "ko'p" haqida. Biz ko'p vazifali, ko'p yadroli va ko'p mijozli bilan shug'ullanamiz. Biroz oldin men ikkita ESP bilan masofadan boshqarish pultini qildim: mijoz va kirish nuqtasi. Shunga asoslanib, bugun biz ko'p mijozli serverni o'rnatamiz. Bu shuni anglatadiki, bizda bitta ESPga ulangan bir nechta mijozlar bo'ladi.
Shunday qilib, bugungi dars ESP32 -da server yaratish, yangi mijozlarni qo'shish va so'rovlarni boshqa yadroda ishlashni o'z ichiga oladi. Mijozlar pinlarning holati o'zgarishi haqida ma'lumot yuborishadi va server bu holat o'zgarishlarini takrorlaydi.
1 -qadam: Namoyish
2 -qadam: Serverni o'rnatish
3 -qadam: mijozlarni yig'ish
4 -qadam: oqim - server
5 -qadam: oqim - mijoz
6 -qadam: Client.ino
Deklaratsiyalar va o'zgaruvchilar
#include // Dados da rede // Deve ser gigual no Server #SSID "ESP32Server" ni belgilang #PASSWORD "87654321" #SERVER_PORT 5000 -ni aniqlang // WiFiClient mijozining vazifasi; // Strukturani belgilash kerakmi? int holati; } Pin; // Maqolani aniqlang #PIN_COUNT 2 ni belgilang // Array comos pinos ta'riflari // Yo'q, hech qanday ma'lumot yo'q, bu 21 -sonli 19 -sonli pin pinlari [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Sozlash
void setup () {Serial.begin (115200); // Client.setTimeout (5000) bilan bog'liq vaqtni hisoblash. // Wi -Fi ulanishini sozlash yoki serverni sozlashWiFi (); connectClient (); uchun (int i = 0; i
WiFi -ni sozlash
void setupWiFi () {Serial.print ("Ulanish" + String (SSID)); // ESP WiFi.begin (SSID, PASSWORD) dan foydalangan holda Wi -Fi tarmog'ini qayta ishlash; // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kechikish (500); } // WiFi Serial.println () ni tanlang; Serial.println ("Ulangan!"); }
ConnectClient
void connectClient () {Serial.println ("Mijoz ulanmoqda"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT))) {Serial.print ("."); kechikish (500); } // Serial.println () serverini tanlang. Serial.println ("Mijoz ulandi!"); }
Loop
void loop () {// Agar siz Wi -Fi tarmog'ini ishlatmasangiz, unda (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
Handle Connection
void handleConnection (void* pvParameters) {// MUHIM: Noutbukning oxirgi nuqtasi, vaqtni uzluksiz hisoblashda (haqiqiy),) {ulanishClient (); } // Para -pino, verificamos seudou o estado. (Int i = 0; i
hasPinStatusChanged
// Muvaffaqiyatli ishlarni bajarishga ruxsat berish // "to'g'ri" ni tanlashda "noto'g'ri", chunki bu "mantiqiy" hasPinStatusChanged (int i) {// Aniqlanishicha, pinStatus = digitalRead (pins) .sonli); // Se o estado do pino for diferente if (pins . Status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; haqiqatga qaytish; } // Savol -javob: "Qayta tiklash noto'g'ri"; }
sendPinStatus
// SendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)) qatorini o'chirib qo'yish uchun serverni ishga tushirish kerak; mijoz.flush (); }
7 -qadam: Server.ino
Deklaratsiyalar va o'zgaruvchilar
#include #include // Dados da rede // Mijozlarsiz ishlash #aniqlang SSID "ESP32Server" #parolni aniqlang "87654321" #SERVER_PORT 5000ni aniqlang // "SERVER_PORT" WiFiServer serverining serveri (SERVER_PORT); // Vektorli mijozlar mijozlarning talablariga muvofiq, stect:: vektorli mijozlar; // Strukturani belgilash kerakmi? int holati; } Pin;
Sozlash
void setup () {Serial.begin (115200); // Wi -Fi -ni sozlash yoki serverni sozlashWiFi () ni ishlating; server.begin (); xTaskCreatePinnedToCore (handleClients, // funktsiyalarni bajarish "handleClients", // 10000 nomlari, // Tamanho da pilha NULL, // Parametrlar ham (hech qanday noo usamos yo'q) 2, // Tarafa NULL, // O'ylaymanki, siz hech qanday ma'lumotga ega bo'lmaysiz (0); // Noma'lum vazifalar bajarilgan bo'lsa (yadro 0 ga teng)
Wi -Fi -ni sozlash
void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID va ESP WiFi.softAP (SSID, PASSWORD) ma'lumotlarini birlashtirish uchun; }
Loop
void loop () {// Internet -mijozlar uchun WiFiClient mijoz = server.available (); // Se sim colocamos ele hech vektor if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void* pvParameters) {// MUHIM: Noma'lum vaqt oralig'ida, lekin hech bo'lmaganda (haqiqiy) {// mijoz mijozlari uchun vektor yo'q (int i = 0; i)
8 -qadam: fayllar
Fayllarni yuklab oling
INO