Daftar Isi:

Arduino IDE Dengan Dual Core: Remote Control: 8 Langkah
Arduino IDE Dengan Dual Core: Remote Control: 8 Langkah

Video: Arduino IDE Dengan Dual Core: Remote Control: 8 Langkah

Video: Arduino IDE Dengan Dual Core: Remote Control: 8 Langkah
Video: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, November
Anonim
Image
Image
Demonstrasi
Demonstrasi

Video ini adalah tentang "multi." Kita berurusan dengan multitasking, multicore, dan multiclient. Beberapa waktu yang lalu, saya membuat remote control dengan dua ESP: klien dan titik akses. Berdasarkan ini, hari ini kami akan menyiapkan server multiklien. Ini berarti kami akan memiliki banyak klien yang terhubung dalam satu ESP.

Jadi, pelajaran hari ini melibatkan pembuatan server di ESP32, penambahan klien baru dalam loop, dan penanganan permintaan di inti lain. Klien akan mengirimkan informasi tentang perubahan status pin mereka, dan server akan mereproduksi perubahan status ini.

Langkah 1: Demonstrasi

Langkah 2: Memasang Server

Memasang Server
Memasang Server

Langkah 3: Majelis Klien

Majelis Klien
Majelis Klien

Langkah 4: Aliran - Server

Aliran - Server
Aliran - Server

Langkah 5: Aliran - Klien

Aliran - Klien
Aliran - Klien

Langkah 6: Klien.ino

Deklarasi dan variabel

#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 client; //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 enviar o status #define PIN_COUNT 2 //Array com os pinos definidos //Tidak ada 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} };

Mempersiapkan

void setup(){ Serial.begin(115200); //Tempo untuk mempertimbangkan conexão como perdida client.setTimeout(5000); //Conectamos rede WiFi dan conectamos dan setup serverWiFi(); menghubungkanKlien(); untuk(int i=0; i

Siapkan WiFi

void setupWiFi(){ Serial.print("Menghubungkan ke " + String(SSID)); //Conectamos rede WiFi criado pelo outro ESP WiFi.begin(SSID, PASSWORD); //Konektar Esperamos while (WiFi.status() != WL_CONNECTED) { Serial.print("."); penundaan (500); } //Se chegou aqui está conectado rede WiFi Serial.println(); Serial.println("Terhubung!"); }

HubungkanKlien

void connectClient(){ Serial.println("Menghubungkan klien"); //Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) { Serial.print("."); penundaan (500); } //Se chegou aqui está conectado com o server Serial.println(); Serial.println("Klien terhubung!"); }

Lingkaran

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

MenanganiKoneksi

void handleConnection(void* pvParameters){ //PENTING: A tarefa não pode terminar, kembangkan ficar presa em um loop infinito while(true) { //Se no 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 atau novo estado for(int i=0; i

memilikiPinStatusBerubah

//Verifikasi se o estado do pino na posição 'i' lakukan array mudou//Retorna 'true' se mudou ou 'false' caso contrário boolean hasPinStatusChanged(int i) { //Faz a leiura do pino int pinStatus = digitalRead(pin .nomor); //Se o estado lakukan pino untuk perbedaan if(pins.status != pinStatus) { //Guardamos o novo estado dan retornamos true pins.status = pinStatus; kembali benar; } //Só chegará aqui se o estado não foi alterado //Então retornamos falso return false; }

kirimPinStatus

//Envia para o server os dados lakukan pino dan posio 'saya' lakukan arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pin, sizeof(Pin)); klien.flush(); }

Langkah 7: Server.ino

Deklarasi dan variabel

#include #include //Dados da rede //Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Criamos um server dan port yang ditentukan untuk server WiFiServer 'SERVER_PORT' (SERVER_PORT); //Vector pada klien vamos adicionar os sesuai dengan elemen sebelumnya conectando std::vektor klien; //Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct{ int number; status int; }Pin;

Mempersiapkan

void setup(){ Serial.begin(115200); //Criamos a rede WiFi dan iniciamos o server setupWiFi(); server.mulai(); 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, //Prioridade da tarefa NULL, //Prioridade da tarefa NULL Caso queria manter uma referência para a tarefa que vai ser criada (tidak ada caso não precisamos) 0); //Nmero do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) }

SiapkanWiFi

void setupWiFi(){ //Coloca este ESP como Access Point WiFi.mode(WIFI_AP); //SSID dan Senha untuk terhubung dengan ESP WiFi.softAP(SSID, PASSWORD); }

Lingkaran

void loop(){ //Memverifikasi klien baru dan terhubung dengan klien WiFiClient = server.available(); //Se sim colocamos ele no vector if(client) { clients.push_back(client); } }

MenanganiKlien

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

Langkah 8: File

Unduh file

PDF

SAYA TIDAK

Direkomendasikan: