Cov txheej txheem:

Arduino IDE Nrog Dual Core: Kev Tswj Chaw Taws Teeb: 8 Cov Kauj Ruam
Arduino IDE Nrog Dual Core: Kev Tswj Chaw Taws Teeb: 8 Cov Kauj Ruam

Video: Arduino IDE Nrog Dual Core: Kev Tswj Chaw Taws Teeb: 8 Cov Kauj Ruam

Video: Arduino IDE Nrog Dual Core: Kev Tswj Chaw Taws Teeb: 8 Cov Kauj Ruam
Video: NOOBS PLAY CLASH ROYALE FROM START LIVE 2024, Kaum ib hlis
Anonim
Image
Image
Qhia tawm
Qhia tawm

Daim vis dis aus no yog txhua yam hais txog "ntau yam." Peb tab tom cuam tshuam nrog kev ua haujlwm ntau, ntau lub ntsiab lus, thiab multiclient. Ib pliag dhau los, Kuv tau ua lub chaw taws teeb tswj nrog ob ESPs: tus neeg siv khoom thiab nkag mus siv tau. Raws li qhov no, hnub no peb yuav teeb tsa server ntau yam. Qhov no txhais tau tias peb yuav muaj ntau tus neeg siv khoom sib txuas hauv ib qho ESP.

Yog li, zaj lus qhia niaj hnub no cuam tshuam nrog kev tsim cov server hauv ESP32, ntxiv rau cov neeg siv khoom tshiab hauv lub voj, thiab tuav cov kev thov hauv lwm qhov tseem ceeb. Cov neeg siv khoom yuav xa cov ntaub ntawv hais txog lub xeev hloov pauv ntawm lawv cov pins, thiab cov neeg rau zaub mov yuav rov tsim dua cov kev hloov pauv hauv lub xeev no.

Kauj Ruam 1: Qhia tawm

Kauj ruam 2: Mounting Server

Mounting neeg rau zaub mov
Mounting neeg rau zaub mov

Kauj Ruam 3: Cov Neeg Sib Ntsib

Client Assembly
Client Assembly

Kauj ruam 4: Flow - Server

Flow - Neeg rau zaub mov
Flow - Neeg rau zaub mov

Kauj Ruam 5: Flow - Client

Txaus - Client
Txaus - Client

Kauj Ruam 6: Client.ino

Kev tshaj tawm thiab kev hloov pauv

#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 o server WiFiClient tus thov kev pab; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef struct {int tus xov tooj; int xwm txheej; } 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 pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};

Teeb

teeb tsa tsis muaj dab tsi () {Serial.begin (115200); // Tempo para considerar a conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi thiab conectamos ao server setupWiFi (); txuas Client (); rau (int i = 0; i

Teeb WiFi

void setupWiFi () {Serial.print ("Txuas rau" + Txoj hlua (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar thaum (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); ncua (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Txuas nrog!"); }

ConnectClient

void connectClient () {Serial.println ("Txuas cov neeg siv khoom"); // Esperamos conectar com o server thaum (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); ncua (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Client txuas nrog!"); }

Loop

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

Kov Txuas

void handleConnection (void* pvParameters) {// TSEEM CEEB: Tarefa não pode terminar, deve ficar presa em um loop infinito thaum (tseeb) {// Se não estiver conectado com o server, mandamos conectar yog (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Se mudou enviamos para o server o novo estado rau (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 [kuv].number); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos pins tseeb .status = pinStatus; rov muaj tseeb; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso rov dag; }

xaPinStatus

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

Kauj ruam 7: Server.ino

Kev tshaj tawm thiab kev hloov pauv

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server na porta definida por 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os cov neeg siv khoom ua raws eles forem conectando std:: vector cov neeg siv khoom; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int tus xov tooj; int xwm txheej; } Pin;

Teeb

teeb tsa tsis muaj dab tsi () {Serial.begin (115200); // Criamos rede WiFi thiab 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 (tsis muaj caso não precisamos) 0); // Número do core que será executada a tarefa (usamos o 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 e Senha para se conectarem este ESP WiFi.softAP (SSID, PASSWORD); }

Loop

void loop () {// Verifica se um novo client está tentando se conectar WiFiClient tus thov = server.available (); // Se sim colocamos ele tsis muaj vector yog (tus neeg siv khoom) {cov neeg siv khoom.push_back (tus neeg siv khoom); }}

HandleClients

void handleClients (void* pvParameters) {// TSEEM CEEB: 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

Kauj ruam 8: Cov ntaub ntawv

Rub tawm cov ntawv

PDF

INO

Pom zoo: