Kazalo:

Arduino IDE z dvojedrnim: daljinski upravljalnik: 8 korakov
Arduino IDE z dvojedrnim: daljinski upravljalnik: 8 korakov

Video: Arduino IDE z dvojedrnim: daljinski upravljalnik: 8 korakov

Video: Arduino IDE z dvojedrnim: daljinski upravljalnik: 8 korakov
Video: Плата Arduino UNO после прожарки лампочкой! 2024, November
Anonim
Image
Image
Demonstracija
Demonstracija

Ta videoposnetek govori o "multi". Ukvarjamo se z večopravilnostjo, večopravilnostjo in več odjemalci. Pred časom sem naredil daljinski upravljalnik z dvema ESP -jema: odjemalcem in dostopno točko. Na podlagi tega bomo danes postavili večstranski strežnik. To pomeni, da bomo imeli v enem ESP povezanih več odjemalcev.

Tako današnja lekcija vključuje ustvarjanje strežnika v ESP32, dodajanje novih odjemalcev v zanki in obravnavanje zahtev v drugem jedru. Odjemalci bodo poslali informacije o spremembi stanja svojih zatičev, strežnik pa bo te spremembe stanja reproduciral.

1. korak: demonstracija

Korak: Namestitev strežnika

Montažni strežnik
Montažni strežnik

3. korak: Sestavljanje odjemalca

Skupščina strank
Skupščina strank

4. korak: Strežnik - tok

Tok - strežnik
Tok - strežnik

5. korak: Tok - odjemalec

Tok - odjemalec
Tok - odjemalec

6. korak: Client.ino

Izjave in spremenljivke

#include // Dados da rede // Deve serial no Server #define SSID "ESP32Server" #define GESLO "87654321" #define SERVER_PORT 5000 // Objeto que vai fazer a conexão com o server odjemalca WiFiClient; // Struct que define os dados que vamos enviar (deve ser igual brez strežnika) typedef struct {int number; int status; } Pin; // 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 pin [PIN_COUNT] = { {.številka = 21}, {.številka = 19}};

Nastaviti

void setup () {Serial.begin (115200); // Tempo para Regardrar a conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi in conectamos ao server setup setupWiFi (); connectClient (); za (int i = 0; i

Nastavite WiFi

void setupWiFi () {Serial.print ("Povezovanje z" + niz (SSID)); // Conectamos à rede WiFi wiriado pelo out ESP WiFi.begin (SSID, GESLO); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); zamuda (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Povezano!"); }

ConnectClient

void connectClient () {Serial.println ("Povezovalni odjemalec"); // Esperamos conectar com o strežnik while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); zamuda (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Odjemalec povezan!"); }

Zanka

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

HandleConnection

void handleConnection (void* pvParameters) {// POMEMBNO: A 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 (zatiči .število); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; vrni true; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

// Envia za strežnik, ki do pino na posição 'i' do arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)); client.flush (); }

7. korak: Server.ino

Izjave in spremenljivke

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um strežnik na porta definida za "SERVER_PORT" WiFiServerski strežnik (SERVER_PORT); // Vector onde vamos adicionar os clients conforme eles forem conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual brez odjemalca) typedef struct {int number; int status; } Pin;

Nastaviti

void setup () {Serial.begin (115200); // Criamos a rede WiFi in iniciamos o nastavitvi strežnikaWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executada "handleClients", // Nome da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (brez caso não usamos) 2, // Prioriteta da tarefa NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (no caso não precisamos) 0); // Numero do core que será executada a tarefa (usamos o core 0 para o zanka ficar livre com o core 1)}

Nastavitev Wi -Fi

void setupWiFi () {// Coloca este ESP kot dostopna točka WiFi.mode (WIFI_AP); // SSID e Senha para se poveže z ESP WiFi.softAP (SSID, GESLO); }

Zanka

void loop () {// Preveri, ali je odjemalec novega, če ga želiš povezati, odjemalec WiFiClient = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}

HandleClients

void handleClients (void* pvParameters) {// POMEMBNO: A tarefa não pode terminar, deve ficar presa em um loop loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i

8. korak: Datoteke

Prenesite datoteke

PDF

JAZ NE

Priporočena: