Talaan ng mga Nilalaman:

Arduino IDE With Dual Core: Remote Control: 8 Hakbang
Arduino IDE With Dual Core: Remote Control: 8 Hakbang

Video: Arduino IDE With Dual Core: Remote Control: 8 Hakbang

Video: Arduino IDE With Dual Core: Remote Control: 8 Hakbang
Video: Arduino MASTERCLASS | Full Programming Workshop in 90 Minutes! 2024, Nobyembre
Anonim
Image
Image
Pagpapakita
Pagpapakita

Ang video na ito ay tungkol sa “multi.” Nakikipag-usap kami sa multitasking, multicores, at multiclients. Kanina lang, gumawa ako ng isang remote control gamit ang dalawang mga ESP: isang kliyente at isang access point. Batay dito, magse-set up kami ngayon ng isang maraming server. Nangangahulugan ito na magkakaroon kami ng maraming kliyente na nakakonekta sa isang solong ESP.

Samakatuwid, ang aralin ngayon ay nagsasangkot ng paglikha ng isang server sa ESP32, ang pagdaragdag ng mga bagong kliyente sa loop, at ang paghawak ng mga kahilingan sa isa pang core. Ang mga kliyente ay magpapadala ng impormasyon tungkol sa pagbabago ng estado ng kanilang mga pin, at gagawa ng server ang mga pagbabagong ito ng estado.

Hakbang 1: Pagpapakita

Hakbang 2: Mounting Server

Mounting Server
Mounting Server

Hakbang 3: Assembly ng Client

Assembly ng Kliyente
Assembly ng Kliyente

Hakbang 4: Daloy - Server

Daloy - Server
Daloy - Server

Hakbang 5: Daloy - Client

Daloy - Client
Daloy - Client

Hakbang 6: Client.ino

Mga deklarasyon at variable

#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Mag-email sa isang client ng WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef struct {int number; int status; } I-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}};

Pag-set up

void setup () {Serial.begin (115200); // Tempo para isaalang-alang ang isang conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi at conectamos ao server setupWiFi (); connectClient (); para sa (int i = 0; i

Pag-setup ng WiFi

void setupWiFi () {Serial.print ("Kumokonekta sa" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar habang (WiFi.status ()! = WL_CONNected) {Serial.print ("."); pagkaantala (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Nakakonekta!"); }

ConnectClient

void connectClient () {Serial.println ("Pagkonekta sa kliyente"); // Esperamos conectar com o server habang (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); pagkaantala (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Nakakonekta ang kliyente!"); }

Loop

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

Koneksyon sa HandleConnection

void handleConnection (void * pvParameter) {// IMPORTANTE: Isang tarefa não pode terminar, deve ficar presa em um loop infinito habang (totoo) {// Se não estiver conectado com o server, mandamos conectar if (! client.connected ()) {connectClient (); } // Para cada pino, verificamos se mudou o estado. Tingnan ang server para sa server o novo estado para sa (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 .bilang); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; bumalik totoo; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

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

Hakbang 7: Server.ino

Mga deklarasyon at variable

#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 client conforme eles forem conectando std:: vector kliyente; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int status; } I-pin;

Pag-set up

void setup () {Serial.begin (115200); // Criamos a rede WiFi and iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executiveada "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á executada a tarefa (usamos o core 0 para sa loop ficar livre com o core 1)}

SetupWiFi

void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID e Senha para sa isang koneksyon ng ESP WiFi.softAP (SSID, PASSWORD); }

Loop

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

Mga kliyente sa Handle

void handleClients (void * pvParameter) {// IMPORTANTE: Isang tarefa não pode terminar, deve ficar presa em um loop infinito habang (totoo) {// Para sa mga client ay walang mga vector para sa (int i = 0; i

Hakbang 8: Mga File

I-download ang mga file

PDF

INO

Inirerekumendang: