Tartalomjegyzék:

Arduino IDE kettős maggal: Távirányító: 8 lépés
Arduino IDE kettős maggal: Távirányító: 8 lépés

Videó: Arduino IDE kettős maggal: Távirányító: 8 lépés

Videó: Arduino IDE kettős maggal: Távirányító: 8 lépés
Videó: BTT Octopus V1.1 - Dual Z Steppers with TMC2225 2024, Július
Anonim
Image
Image
Demonstráció
Demonstráció

Ez a videó a „multi” -ról szól. Többfeladatos, multicores és multiclientekkel van dolgunk. Régebben készítettem egy távirányítót két ESP -vel: egy kliens és egy hozzáférési pont. Ennek alapján ma egy multiclient szervert állítunk be. Ez azt jelenti, hogy több ügyfélünk lesz egy ESP -ben.

Így a mai lecke magában foglalja egy szerver létrehozását az ESP32 -ben, új ügyfelek hozzáadását a ciklushoz és a kérések kezelését egy másik magban. Az ügyfelek információt küldenek a csapjaik állapotváltozásáról, és a szerver reprodukálja ezeket az állapotváltozásokat.

1. lépés: Demonstráció

2. lépés: Szerver telepítése

Szerelő szerver
Szerelő szerver

3. lépés: Az ügyfél összeállítása

Ügyfélgyűlés
Ügyfélgyűlés

4. lépés: Folyamat - szerver

Folyamat - szerver
Folyamat - szerver

5. lépés: Folyamat - Ügyfél

Folyamat - Ügyfél
Folyamat - Ügyfél

6. lépés: Client.ino

Nyilatkozatok és változók

#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Objeto que vai fazer a conexão com or server WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef structure {int szám; int állapot; } Tű; // 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] = { {.szám = 21}, {.szám = 19}};

Beállít

void setup () {Serial.begin (115200); // Tempo para harkint a conexão como perdida client.setTimeout (5000); // Conectamos a WiFi és a szerver beállításaihoz Wi -Fi (); connectClient (); mert (int i = 0; i

WiFi beállítása

void setupWiFi () {Serial.print ("Csatlakozás" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, JELSZÓ); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); késleltetés (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Csatlakoztatva!"); }

ConnectClient

void connectClient () {Serial.println ("Csatlakozó kliens"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); késleltetés (500); } // Se chegou aqui está conectado com or server Serial.println (); Serial.println ("Kliens csatlakoztatva!"); }

Hurok

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 não pode terminary, 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 .szám); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; return true; } // 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. lépés: Server.ino

Nyilatkozatok és változók

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um szerver a "SERVER_PORT" WiFiServer szerver portján (SERVER_PORT); // Vector onde vamos adicionary os customers conforme eles forem conectando std:: vector customers; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef structure {int szám; int állapot; } Tű;

Beállít

void setup () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos vagy szerver setupWiFi (); szerver.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 beállítása

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

Hurok

void loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vector if (kliens) {ügyfelek.push_back (kliens); }}

HandleClients

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

8. lépés: Fájlok

Töltse le a fájlokat

PDF

ÉN NEM

Ajánlott: