İçindekiler:

Çift Çekirdekli Arduino IDE: Uzaktan Kumanda: 8 Adım
Çift Çekirdekli Arduino IDE: Uzaktan Kumanda: 8 Adım

Video: Çift Çekirdekli Arduino IDE: Uzaktan Kumanda: 8 Adım

Video: Çift Çekirdekli Arduino IDE: Uzaktan Kumanda: 8 Adım
Video: Arduino Joystick ile 2 Servo Motor Kontrolü - Mblock 5 2024, Haziran
Anonim
Image
Image
Gösteri
Gösteri

Bu video tamamen "çoklu" ile ilgilidir. Çoklu görev, çoklu çekirdek ve çoklu istemcilerle uğraşıyoruz. Bir süre önce iki ESP ile bir uzaktan kumanda yaptım: bir istemci ve bir erişim noktası. Buna dayanarak, bugün çok istemcili bir sunucu kuracağız. Bu, tek bir ESP'ye bağlı birden fazla istemciye sahip olacağımız anlamına gelir.

Bu nedenle, bugünkü ders, ESP32'de bir sunucunun oluşturulmasını, döngüye yeni istemcilerin eklenmesini ve isteklerin başka bir çekirdekte ele alınmasını içerir. İstemciler, pinlerinin durum değişikliği hakkında bilgi gönderecek ve sunucu bu durum değişikliklerini yeniden üretecektir.

1. Adım: Gösteri

Adım 2: Sunucuyu Kurma

Montaj Sunucusu
Montaj Sunucusu

3. Adım: İstemci Derlemesi

İstemci Meclisi
İstemci Meclisi

4. Adım: Akış - Sunucu

Akış - Sunucu
Akış - Sunucu

Adım 5: Akış - İstemci

Akış - İstemci
Akış - İstemci

Adım 6: Client.ino

Bildirimler ve değişkenler

#include //Dados da rede //Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Konex com o server WiFiClient client; //Yapısal kuyruk tanımlı işletim sistemi enviar enviar (geliştirme seri sunucu yok) typedef struct{ int sayı; int durumu; }Toplu iğne; //durum #define PIN_COUNT 2 //Array com os pinos definidos //Caso vamos trabalhar com os 21 ve 19 mas você pode alterar para os pinos que desejar Pin pinleri[PIN_COUNT] = { {.number = 21}, {.number = 19} };

Kurmak

geçersiz kurulum(){ Serial.begin(115200); //Tempo, her zaman için geçerli istemci.setTimeout(5000); //Conectamos à yeniden WiFi ve conectamos ao sunucu kurulumuWiFi(); connectClient(); for(int i=0; ben

WiFi Kurulumu

void setupWiFi(){ Serial.print("Bağlanıyor " + String(SSID)); //ESP WiFi.begin(SSID, PASSWORD); //Esperamos conectar while (WiFi.status() != WL_CONNECTED) { Serial.print("."); gecikme(500); } //WiFi Serial.println(); Serial.println("Bağlandı!"); }

ConnectClient

void connectClient(){ Serial.println("İstemci bağlanıyor"); //Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) { Serial.print("."); gecikme(500); } //Sunucu için bir bağlantı oluştur Serial.println(); Serial.println("İstemci bağlandı!"); }

Döngü

void loop(){ //WiFi, mandamos conectar if(WiFi.status() != WL_CONNECTED) { setupWiFi(); } }

TutamaçBağlantısı

void handleConnection(void* pvParameters){ //ÖNEMLİ: Bir tarefa não pode terminar, deve ficar presa em um loop sonsuz while(true) { //Sunucu için sunucu, mandamos conectar if(!client.connected())) { connectClient(); } //Para cada pino, verifikamos se mudou o estado. Se mudou enviamos para o server o novo estado for(int i=0; i

hasPinStatusChanged

//Doğrulama ve doğrulama 'i' dizi mudou yapmak//Retorna 'true' se mudou u 'yanlış' caso contrário boolean hasPinStatusChanged(int i) { //Faz bir leitura do pino int pinStatus = digitalRead(pins) .sayı); // Farklı if(pins.status != pinStatus) { //Guardamos o novo estado e retornamos true pins.status = pinStatus; true döndür; } //Söz konusu chegará aqui se o estado não foi alterado //Então retornamos falso return false; }

sendPinStatus

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

Adım 7: Server.ino

Bildirimler ve değişkenler

#include #include //Dados da rede //Müşteri seri yok #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // 'SERVER_PORT' porta tanımlı Criamos sunucusu WiFiSunucu sunucusu(SERVER_PORT); //Vector onde vamos adicionar os client'ları conecte eles forem conectando std::vector client; //Yapı que tanım os dados que vamos enviar (seri seri istemci yok) typedef struct{ int sayı; int durumu; }Toplu iğne;

Kurmak

geçersiz kurulum(){ Serial.begin(115200); //Criamos, WiFi ve sunucu kurulumuWiFi(); server.begin(); xTaskCreatePinnedToCore(handleClients, //Função que executada "handleClients", //Tarefa Nome 10000, //Tamanho da pilha NULL, //Parâmetro datarefa (caso não usamos yok) 2, //Öncelikli dara NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (caso não precisamos yok) 0); //Número do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) }

KurulumWiFi

void setupWiFi(){ //Coloca este ESP como Erişim Noktası WiFi.mode(WIFI_AP); //SSID ve ESP için geçerli bir bağlantı WiFi.softAP(SSID, PASSWORD); }

Döngü

void loop(){ //Verifica se um novo client está tenando se conectar WiFiClient client = server.available(); //Se sim colocamos ele vektör yok if(client) { client.push_back(client); } }

HandleClients

void handleClients(void* pvParameters){ //ÖNEMLİ: Bir tarefa não pode terminar, deve ficar presa em um loop sonsuz while(true) { //Para cada client que temos no vector for(int i=0; i)

8. Adım: Dosyalar

Dosyaları indirin

PDF

BEN HAYIR

Önerilen: