Satura rādītājs:

Arduino IDE ar divkodolu: tālvadība: 8 soļi
Arduino IDE ar divkodolu: tālvadība: 8 soļi

Video: Arduino IDE ar divkodolu: tālvadība: 8 soļi

Video: Arduino IDE ar divkodolu: tālvadība: 8 soļi
Video: Как управлять нагрузкой 4 переменного тока с помощью беспроводного дистанционного реле KR1204 2024, Novembris
Anonim
Image
Image
Demonstrācija
Demonstrācija

Šis video ir par “multi”. Mums ir darīšana ar vairākuzdevumu veikšanu, multicores un multiclients. Pirms kāda laika es izveidoju tālvadības pulti ar diviem ESP: klientu un piekļuves punktu. Pamatojoties uz to, šodien mēs izveidosim vairāku klientu serveri. Tas nozīmē, ka vienā ESP būs savienoti vairāki klienti.

Tādējādi šodienas mācība ietver servera izveidi ESP32, jaunu klientu pievienošanu cilpai un pieprasījumu apstrādi citā kodolā. Klienti nosūtīs informāciju par tapas stāvokļa maiņu, un serveris reproducēs šīs stāvokļa izmaiņas.

1. solis: demonstrācija

2. darbība: servera uzstādīšana

Montāžas serveris
Montāžas serveris

3. solis: klientu montāža

Klientu montāža
Klientu montāža

4. solis: plūsma - serveris

Plūsma - serveris
Plūsma - serveris

5. darbība: plūsma - klients

Plūsma - klients
Plūsma - klients

6. darbība: Client.ino

Deklarācijas un mainīgie

#include // Dados da rede // Izstrādāt serveri bez servera #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objeto que vai fazer a conexão com o server WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef structure {int numurs; int statuss; } Piespraude; // 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 pins [PIN_COUNT] = { {.skaitlis = 21}, {.numurs = 19}};

Uzstādīt

void setup () {Serial.begin (115200); // Tempo para harkint a conexão como perdida client.setTimeout (5000); // Conectamos un Wi -Fi savienojums ar servera iestatīšanuWiFi (); connectClient (); par (int i = 0; i

Iestatiet WiFi

void setupWiFi () {Serial.print ("Savienojuma izveide ar" + virkne (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kavēšanās (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Savienots!"); }

ConnectClient

void connectClient () {Serial.println ("Klienta savienojums"); // Esperamos conectar com serveris while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); kavēšanās (500); } // Skatiet chegou aqui está conectado com serveri Serial.println (); Serial.println ("Klients savienots!"); }

Cilpa

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

HandleConnection

void handleConnection (void* pvParameters) {// SVARĪGI: Tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Se não estiver conectado com o server, mandamos conectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Se mudou enviamos para o server o novo estado 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 .skaitlis); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; atgriezties patiesi; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

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

7. solis: Server.ino

Deklarācijas un mainīgie

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server ar porta definīciju no 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os customers conforme eles forem conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef structure {int numurs; int statuss; } Piespraude;

Uzstādīt

void setup () {Serial.begin (115200); // Criamos a rede WiFi e 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); // Número do core que será executab a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

Wi -Fi iestatīšana

void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID un Senha para se conectarem a este ESP WiFi.softAP (SSID, PASSWORD); }

Cilpa

void loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vector, ja (klients) {klienti.push_back (klients); }}

HandleClients

void handleClients (void* pvParameters) {// SVARĪGI: Tarefa não pode termināls, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i

8. darbība: faili

Lejupielādējiet failus

PDF

ES NĒ

Ieteicams: