Cuprins:
- Pasul 1: demonstrație
- Pasul 2: Montarea serverului
- Pasul 3: Asamblarea clientului
- Pasul 4: Flow - Server
- Pasul 5: Flux - Client
- Pasul 6: Client.ino
- Pasul 7: Server.ino
- Pasul 8: Fișiere
Video: Arduino IDE cu Dual Core: telecomandă: 8 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Acest videoclip este despre „multi”. Avem de-a face cu multitasking, multicores și multiclients. Acum ceva timp, am făcut o telecomandă cu două ESP-uri: un client și un punct de acces. Pe baza acestui fapt, astăzi vom configura un server multiclient. Aceasta înseamnă că vom avea mai mulți clienți conectați într-un singur ESP.
Astfel, lecția de astăzi implică crearea unui server în ESP32, adăugarea de noi clienți în buclă și gestionarea cererilor într-un alt nucleu. Clienții vor trimite informații despre modificarea stării pinilor lor, iar serverul va reproduce aceste modificări de stare.
Pasul 1: demonstrație
Pasul 2: Montarea serverului
Pasul 3: Asamblarea clientului
Pasul 4: Flow - Server
Pasul 5: Flux - Client
Pasul 6: Client.ino
Declarații și variabile
#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objeto that will fazer a connection with server WiFiClient client; // Struct que define os dados que vamos send (deve ser igual no server) typedef struct {int number; statutul int; } Pin; // Quantitate de pinos care iremos ler e enviar o status #define PIN_COUNT 2 // Array com os pinos definidos // No case vamos trabalhar com os 21 e 19 mas você can alterar for os pinos that desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Înființat
void setup () {Serial.begin (115200); // Tempo pentru a considera o conexiune ca pierdut client.setTimeout (5000); // Conectați-vă la WiFi și conectați-vă la server setupWiFi (); connectClient (); pentru (int i = 0; i
Configurați WiFi
void setupWiFi () {Serial.print ("Conectarea la" + Șir (SSID)); // Conectează-te la WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); întârziere (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Conectat!"); }
ConnectClient
void connectClient () {Serial.println ("Conectarea clientului"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); întârziere (500); } // Se ajunge aqui está conectado cu server Serial.println (); Serial.println ("Client conectat!"); }
Buclă
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 nu poate termina, trebuie să-l iau cu o buclă infinită while (true) {// Se não estiver conectado com o server, mandamos conectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificam se mudou o stare. Se mudou enviamos pentru o server o novo stare 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 (pins .număr); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e returnamos true pins .status = pinStatus; întoarce-te adevărat; } // Só ajungá aqui se o estado não foi alterado // Então returnamos 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 (); }
Pasul 7: Server.ino
Declarații și variabile
#include #include // Dados da rede // 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 unde vamos adicionar os clients conforme they forem conectando std:: vector clients; // Struct que define os dados que vamos send (deve ser igual no client) typedef struct {int number; statutul int; } Pin;
Înființat
void setup () {Serial.begin (115200); // Criamos a rede WiFi și iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Funcția care va fi executată "handleClients", // Numele da tarefa 10000, // Tamanho da pilha NULL, // Parámetro da tarefa (no caso não usamos) 2, // Prioritatea da tarefa NULL, // Caso queria manter uma referência para a tarefa that vai ser criada (no caso não precisamos) 0); // Numărul de bază care va fi executat la o tarefa (utilizăm o bază 0 pentru o buclă de livrare com o bază 1)}
SetupWiFi
void setupWiFi () {// Coloca este ESP ca Access Point WiFi.mode (WIFI_AP); // SSID și Senha pentru conectarea la ESP WiFi.softAP (SSID, PASSWORD); }
Buclă
void loop () {// Verifică un client nou care se conectează WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void * pvParameters) {// IMPORTANTE: A tarefa nu poți termina, trebuie să-ți iei o buclă infinită while (true) {// Pentru fiecare client că nu avem vector pentru (int i = 0; i
Pasul 8: Fișiere
Descărcați fișierele
EU NU
Recomandat:
Telecomanda TV devine o telecomandă RF -- NRF24L01 + Tutorial: 5 pași (cu imagini)
Telecomanda TV devine o telecomandă RF || Tutorial NRF24L01 +: În acest proiect vă voi arăta cum am folosit popularul IC nRF24L01 + RF pentru a regla luminozitatea unei benzi LED fără fir prin trei butoane inutile ale unei telecomenzi TV. Să începem
IRduino: telecomandă Arduino - Imitați o telecomandă pierdută: 6 pași
IRduino: Telecomandă Arduino - Imitați o telecomandă pierdută: Dacă ați pierdut vreodată telecomanda pentru televizor sau DVD player, știți cât de frustrant este să mergeți, să găsiți și să folosiți butoanele de pe dispozitivul însuși. Uneori, aceste butoane nici măcar nu oferă aceeași funcționalitate ca telecomanda. Primiți
Set de telecomandă obișnuit transformat în telecomandă cu jucărie RC cu patru canale: 4 pași
Kit de telecomandă obișnuit transformat în telecomandă RC cu patru canale pentru jucărie:改造 方法 非常 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 电子 项目 并 为 您 服务。 玩具 车船 提供 远程 无线 控制。
Convertiți telecomanda IR la telecomandă RF: 9 pași (cu imagini)
Convertiți telecomanda IR la telecomandă RF: În Instructable de astăzi, vă voi arăta cum puteți utiliza un modul RF generic fără microcontroler, ceea ce ne va conduce în cele din urmă la construirea unui proiect în care puteți converti o telecomandă IR a oricărui dispozitiv la un RF La distanta. Principalul avantaj al conversiei unui
Controlează-ți aparatele electrice cu telecomanda TV (telecomandă ir) cu afișaj de temperatură și umiditate: 9 pași
Controlați-vă aparatele electrice cu telecomanda dvs. TV (telecomandă ir) Cu afișaj de temperatură și umiditate: salut, sunt Abhay și este primul meu blog pe Instructables și astăzi vă voi arăta cum să vă controlați aparatele electrice cu telecomanda dvs. TV prin construirea acestui proiect simplu. mulțumesc laboratorului atl pentru asistență și furnizarea materialului