Përmbajtje:

Arduino IDE Me dy bërthama: Telekomandë: 8 hapa
Arduino IDE Me dy bërthama: Telekomandë: 8 hapa

Video: Arduino IDE Me dy bërthama: Telekomandë: 8 hapa

Video: Arduino IDE Me dy bërthama: Telekomandë: 8 hapa
Video: Home Automation: 12V Relay with LED Display Delay 0.1 seconds to 999 seconds Timer module P1 to P4 2024, Nëntor
Anonim
Image
Image
Demonstrim
Demonstrim

Kjo video ka të bëjë me "multi". Kemi të bëjmë me multitasking, multicore dhe multiclients. Pak kohë më parë, bëra një telekomandë me dy ESP: një klient dhe një pikë aksesi. Bazuar në këtë, sot ne do të krijojmë një server me shumë klientë. Kjo do të thotë që do të kemi klientë të shumtë të lidhur në një ESP të vetme.

Kështu, mësimi sot përfshin krijimin e një serveri në ESP32, shtimin e klientëve të rinj në lak dhe trajtimin e kërkesave në një bërthamë tjetër. Klientët do të dërgojnë informacion në lidhje me ndryshimin e gjendjes së kunjave të tyre, dhe serveri do të riprodhojë këto ndryshime të gjendjes.

Hapi 1: Demonstrim

Hapi 2: Montimi i serverit

Serveri i montimit
Serveri i montimit

Hapi 3: Asambleja e Klientit

Kuvendi i Klientit
Kuvendi i Klientit

Hapi 4: Flow - Server

Rrjedha - Server
Rrjedha - Server

Hapi 5: Rrjedha - Klienti

Rrjedha - Klienti
Rrjedha - Klienti

Hapi 6: Client.ino

Deklaratat dhe ndryshoret

#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objecto que vai fazer a conexão com o server WiFiClient client; // Struktura që përcakton sistemin operativ (nuk ka server) shtypni strukturën {int numrin; int statusi; }Gjilpere; // 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 masa e kodit të ndryshimit për os os pinos que desejar Pin pin [PIN_COUNT] = { {.numri = 21}, {.numri = 19}};

Konfigurimi

void setup () {Serial.begin (115200); // Tempo para shqyrtimit të një klienti të caktuar.setTimeout (5000); // Conectamos de redde WiFi dhe conectamos ao server setupWiFi (); connectClient (); për (int i = 0; i

Konfiguro WiFi

void setupWiFi () {Serial.print ("Lidhja me" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); vonesë (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("I lidhur!"); }

ConnectClient

void connectClient () {Serial.println ("Lidh klientin"); // Esperamos conectar com o server ndërsa (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); vonesë (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Klienti i lidhur!"); }

Lak

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

HandleConnection

dorezë e pavlefshme Lidhja (e pavlefshme* pvParametrat) {// E RORTNDSISHME: Një terminal i vetëm për kodin, zbuloni një paralajmërim të pafund të kohës kur (e vërtetë) {// Shihni një lidhje me serverin, mandamos konektorin nëse (! klient.lidhur ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Për më tepër ju mund të përdorni serverin e ri për (int i = 0; i

hasPinStatusChanged

// Verifikimi se çfarë do të thotë për një postim '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 .numri); // Se o estado do pino for diferente if (kunjat .status! = PinStatus) {// Guardamos o novo estado e retornamos këmbët e vërteta .status = pinStatus; kthehet e vërtetë; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

// Përgjigje për serverin tuaj dhe ju lutem bëni një postim në 'i' në arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pin , sizeof (Pin)); klient.flush (); }

Hapi 7: Server.ino

Deklaratat dhe ndryshoret

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server dhe porta definicion për 'SERVER_PORT' serverin WiFiServer (SERVER_PORT); // Vector onde vamos adicionar os client conforme eles forem conectando std:: klientët vektorë; // Struktura që përcakton os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int statusi; }Gjilpere;

Konfigurimi

void setup () {Serial.begin (115200); // Criamos a Redde WiFi dhe iniciamos ose server setupWiFi (); server.filloj (); 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 që të ekzekutojë një tarefa (përdorimi i 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 dhe Senha për lidhjen e një ESP WiFi.softAP (SSID, PASSWORD); }

Lak

void loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos nuk ka vektor nëse (klienti) {clients.push_back (klienti); }}

HandleClients

void handleClients (void* pvParameters) {// I RORTNDSISHME: Një terminal não pode, deve ficar presa em um loop infinito while (true) {// Para cada client que temos asnjë vektor për (int i = 0; i

Hapi 8: Skedarët

Shkarkoni skedarët

PDF

INO

Recommended: