Isi kandungan:

Arduino IDE Dengan Dual Core: Alat Kawalan Jauh: 8 Langkah
Arduino IDE Dengan Dual Core: Alat Kawalan Jauh: 8 Langkah

Video: Arduino IDE Dengan Dual Core: Alat Kawalan Jauh: 8 Langkah

Video: Arduino IDE Dengan Dual Core: Alat Kawalan Jauh: 8 Langkah
Video: Beyond the Basics: Automatic Gatekeeper With IR Sensor And ChatGPT Generated Arduino Code 2024, November
Anonim
Image
Image
Demonstrasi
Demonstrasi

Video ini adalah mengenai "multi". Kami berurusan dengan multitasking, multicores, dan multiclients. Beberapa ketika yang lalu, saya membuat alat kawalan jauh dengan dua ESP: pelanggan dan pusat akses. Berdasarkan ini, hari ini kami akan menyediakan pelayan berbilang pelanggan. Ini bermakna kita akan mempunyai beberapa pelanggan yang terhubung dalam satu ESP.

Oleh itu, pelajaran hari ini melibatkan penciptaan pelayan di ESP32, penambahan pelanggan baru dalam lingkaran, dan pengendalian permintaan dalam inti lain. Pelanggan akan menghantar maklumat mengenai perubahan keadaan pin mereka, dan pelayan akan menghasilkan semula perubahan keadaan ini.

Langkah 1: Demonstrasi

Langkah 2: Pemasangan Pelayan

Pelayan Pemasangan
Pelayan Pemasangan

Langkah 3: Perhimpunan Pelanggan

Perhimpunan Pelanggan
Perhimpunan Pelanggan

Langkah 4: Aliran - Pelayan

Aliran - Pelayan
Aliran - Pelayan

Langkah 5: Aliran - Pelanggan

Aliran - Pelanggan
Aliran - Pelanggan

Langkah 6: Pelanggan.ino

Pernyataan dan pemboleh ubah

#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 pelayan pelanggan WiFiClient; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef struct {int number; status int; } 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] = { {.number = 21}, {.number = 19}};

Persediaan

persediaan tidak sah () {Serial.begin (115200); // Tempo untuk menganggap klien conexão como perdida.setTimeout (5000); // Conectamos à rede WiFi e conectamos ao server setupWiFi (); connectClient (); untuk (int i = 0; i

Sediakan WiFi

batal setupWiFi () {Serial.print ("Connecting to" + String (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos conectar sambil (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kelewatan (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Bersambung!"); }

Sambung Pelanggan

batal connectClient () {Serial.println ("Menghubungkan pelanggan"); // Esperamos conectar com o server sementara (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); kelewatan (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Pelanggan disambungkan!"); }

Gelung

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

PeganganSambungan

void handleConnection (void * pvParameters) {// PENTING: Tarefa não pode terminar, deve ficar presa em um loop infinito sementara (benar) {// 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 untuk (int i = 0; i

telahPinStatusTukar

// 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 (pin .nombor); // Se o estado do pino for diferente if (pin .status! = PinStatus) {// Guardamos o novo estado e retornamos true pin .status = pinStatus; kembali benar; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

hantarPinStatus

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

Langkah 7: Server.ino

Pernyataan dan pemboleh ubah

#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' Pelayan WiFiServer (SERVER_PORT); // Vektor onde vamos adicionar os klien sesuai dengan eles forem conectando std:: pelanggan vektor; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int nombor; status int; } Pin;

Persediaan

persediaan tidak sah () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos o server setupWiFi (); pelayan.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á executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

PersediaanWiFi

batal setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID e Senha para seectectem a este ESP WiFi.softAP (SSID, PASSWORD); }

Gelung

gelung kosong () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vektor jika (klien) {clients.push_back (klien); }}

Kendalikan Pelanggan

void handleClients (void * pvParameters) {// PENTING: Tarefa não pode terminar, deve ficar presa em um loop infinito sementara (benar) {// Para cada client que temos no vektor untuk (int i = 0; i

Langkah 8: Fail

Muat turun fail

PDF

INO

Disyorkan: