
Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02



Denne videoen handler om "multi". Vi har å gjøre med multitasking, multicores og multiclients. For en stund siden laget jeg en fjernkontroll med to ESP -er: en klient og et tilgangspunkt. Basert på dette vil vi i dag sette opp en multiklientserver. Dette betyr at vi vil ha flere klienter koblet til i én ESP.
Dermed innebærer leksjonen i dag opprettelse av en server i ESP32, tillegg av nye klienter i løkken og håndtering av forespørslene i en annen kjerne. Klienter vil sende informasjon om tilstandsendringen av pinnene sine, og serveren vil reprodusere disse tilstandsendringene.
Trinn 1: Demonstrasjon
Trinn 2: Monteringsserver

Trinn 3: Klientmontering

Trinn 4: Flow - Server

Trinn 5: Flyt - Klient

Trinn 6: Client.ino
Erklæringer og variabler
#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; // Strukturen kan definere oss som vi vil vise enviar (deve ser igual no server) typedef struct {int number; int status; } Fest; // 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] = { {.nummer = 21}, {.nummer = 19}};
Oppsett
ugyldig oppsett () {Serial.begin (115200); // Tempo for considerar a conexão como perdida client.setTimeout (5000); // Tilkobling til WiFi og tilkobling til serveroppsettWiFi (); connectClient (); for (int i = 0; i
Sett opp WiFi
void setupWiFi () {Serial.print ("Koble til" + streng (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); forsinkelse (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Tilkoblet!"); }
ConnectClient
void connectClient () {Serial.println ("Koble til klient"); // Esperamos kobler til server mens (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); forsinkelse (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Klienten er tilkoblet!"); }
Løkke
void loop () {// Se não estiver conectado à rede WiFi, mandamos conectar if (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
Håndtak Tilkobling
void handleConnection (void* pvParameters) {// IMPORTANTE: 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 (pins .nummer); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; returner sant; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }
sendPinStatus
// Envia para o server us dados do pino na posição 'i' do arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)); client.flush (); }
Trinn 7: Server.ino
Erklæringer og variabler
#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos for server na porta definida por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os clients conforme eles forem conectando std:: vector clients; // Struct que definere os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int status; } Fest;
Oppsett
ugyldig oppsett () {Serial.begin (115200); // Criamos and rede WiFi and iniciamos or 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); // Nummer for kjerne som ser utførelse og tarefa (usamos o core 0 para o loop ficar livre com o core 1)}
SetupWiFi
void setupWiFi () {// Coloca este ESP som Access Point WiFi.mode (WIFI_AP); // SSID e Senha para se conectarem a este ESP WiFi.softAP (SSID, PASSWORD); }
Løkke
void loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}
HåndtakKlienter
void handleClients (void* pvParameters) {// IMPORTANTE: A tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i
Trinn 8: Filer
Last ned filene
INO
Anbefalt:
ESP8266 - Hage vanning med timer og fjernkontroll via Internett / ESP8266: 7 trinn (med bilder)

ESP8266 - Hage vanning med timer og fjernkontroll via internett / ESP8266: ESP8266 - vanning fjernstyrt og med timing for grønnsakshager, blomsterhager og plener. Den bruker ESP-8266-kretsen og en hydraulisk / elektrisk ventil for mating av vanning. Fordeler: Lave kostnader (~ 30,00 dollar) hurtig tilgang Kommandoer over
IRduino: Arduino fjernkontroll - etterlign en tapt fjernkontroll: 6 trinn

IRduino: Arduino fjernkontroll - Imitate a Lost Remote: Hvis du noen gang har mistet fjernkontrollen for TV -en eller DVD -spilleren, vet du hvor frustrerende det er å måtte gå til, finne og bruke knappene på selve enheten. Noen ganger tilbyr disse knappene ikke engang den samme funksjonaliteten som fjernkontrollen. Motta
Hvordan kontrollere husholdningsapparater med TV -fjernkontroll med timerfunksjon: 7 trinn (med bilder)

Slik kontrollerer du husholdningsapparater med TV -fjernkontroll med timerfunksjon: Selv etter 25 år med introduksjon til forbrukermarkedet, er infrarød kommunikasjon fortsatt veldig relevant de siste dagene. Enten det er din 55 tommers 4K -TV eller billydsystemet ditt, trenger alt en IR -fjernkontroll for å svare på vår
I2C infrarød fjernkontroll med Arduino: 8 trinn (med bilder)

I2C infrarød fjernkontroll med Arduino: Preamble Denne instruksjonsinformasjonen beskriver hvordan du lager en universell fjernkontroll ved hjelp av I2C for grensesnittet. Hvor rart du sier, ved hjelp av en I2C -slaveenhet? Ja, en I2C -slaveenhet. Dette er fordi den nøyaktige timingen for IR -pakker er ganske krevende og
Slik emulerer du en TV -fjernkontroll eller annet med Arduino Irlib: 3 trinn (med bilder)

Hvordan emulere en TV -fjernkontroll eller annet med Arduino Irlib: Introduksjon Hei og velkommen til min første Instructable.I dag lærer vi, som tittelen sier, å etterligne e TV -fjernkontroll eller noe lignende som fungerer med infrarøde signaler ved hjelp av Arduino (hvilken som helst modell) .Problemet var: Hvordan kan jeg sende koder til en