فهرست مطالب:

Arduino IDE با دو هسته: کنترل از راه دور: 8 مرحله
Arduino IDE با دو هسته: کنترل از راه دور: 8 مرحله

تصویری: Arduino IDE با دو هسته: کنترل از راه دور: 8 مرحله

تصویری: Arduino IDE با دو هسته: کنترل از راه دور: 8 مرحله
تصویری: Control 10 output pins or relay using 10 push button switch with 1 Arduino input pin ANPB-V2 2024, جولای
Anonim
Image
Image
تظاهرات
تظاهرات

این ویدئو همه در مورد "چند" است. ما با چند وظیفه ای ، چند هسته ای و چند کاره سروکار داریم. چندی پیش ، من یک کنترل از راه دور با دو ESP ایجاد کردم: مشتری و نقطه دسترسی. بر این اساس ، امروز ما سرور چند مشتری را راه اندازی می کنیم. این بدان معناست که ما چندین مشتری در یک ESP واحد متصل داریم.

بنابراین ، درس امروز شامل ایجاد یک سرور در ESP32 ، افزودن کلاینت های جدید در حلقه و رسیدگی به درخواست ها در هسته دیگر است. مشتریان اطلاعات مربوط به تغییر وضعیت پین های خود را ارسال می کنند و سرور نیز این تغییرات حالت را بازسازی می کند.

مرحله 1: تظاهرات

مرحله 2: نصب سرور

نصب سرور
نصب سرور

مرحله 3: مونتاژ مشتری

مجمع مشتریان
مجمع مشتریان

مرحله 4: جریان - سرور

جریان - سرور
جریان - سرور

مرحله 5: جریان - مشتری

جریان - مشتری
جریان - مشتری

مرحله 6: Client.ino

بیانیه ها و متغیرها

#شامل // Dados da rede // Deve ser giual no Server #تعریف SSID "ESP32Server" #definine PASSWORD "87654321" #deverine SERVER_PORT 5000 // Objeto que vai fazer a conexão com or server WiFiClient client؛ // Struct que define os dados que vamos enviar (deve ser igual no server) typedef struct {int number؛ وضعیت int ؛ } پین ؛ // Quantidade de pinos que iremos ler e enviar o status #deinine 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_COUNT] = { {.number = 21}، {.number = 19}}؛

برپایی

void setup () {Serial.begin (115200)؛ // Tempo paracommrar a conexão como perdida client.setTimeout (5000)؛ // Conectamos de rede WiFi e conectamos ao server setupWiFi ()؛ connectClient ()؛ برای (int i = 0 ؛ i

WiFi را راه اندازی کنید

void setupWiFi () {Serial.print ("اتصال به" + رشته (SSID)) ؛ // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID ، PASSWORD) ؛ // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print (".")؛ تأخیر (500) ؛ } // Se chegou aqui está conectado de rede WiFi Serial.println ()؛ Serial.println ("متصل است!") ؛ }

ConnectClient

void connectClient () {Serial.println ("اتصال مشتری")؛ // Esperamos conectar com o server while (! client.connect (WiFi.gatewayIP ()، SERVER_PORT)) {Serial.print (".")؛ تأخیر (500) ؛ } // Se chegou aqui está conectado com o server Serial.println ()؛ Serial.println ("مشتری متصل است!") ؛ }

حلقه

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

HandleConnection

void handleConnection (void* pvParameters) {// IMPORTANTE: a tarefa não pode termin، deve ficar presa em um loop infinito while (true) {// 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 for (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 (پین [من].شماره) ؛ // Se o estado do pino for diferente if (pins .status! = pinStatus) {// Guardamos o novo estado e retornamos pin واقعی .status = pinStatus؛ بازگشت واقعی ؛ } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false؛ }

sendPinStatus

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

مرحله 7: Server.ino

بیانیه ها و متغیرها

#include #include // Dados da rede // Deve ser igual no Client #definine SSID "ESP32Server" #define PASSWORD "87654321" #deverine SERVER_PORT 5000 // Criamos um server و porta definida por 'SERVER_PORT' سرور WiFiServer (SERVER_PORT) ؛ // وکتور onde vamos adicionar os client conforme eles forem conectando std:: vector client؛ // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int number؛ وضعیت int ؛ } پین ؛

برپایی

void setup () {Serial.begin (115200)؛ // Criamos a rede WiFi e iniciamos o server setupWiFi ()؛ server.begin ()؛ xTaskCreatePinnedToCore (handleClients، // Função que será exeada "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á exeada 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 a este ESP WiFi.softAP (SSID، PASSWORD)؛ }

حلقه

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

HandleClients

void handleClients (void* pvParameters) {// IMPORTANTE: A tarefa não pode terminal، deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0؛ i

مرحله 8: فایل ها

فایلها را بارگیری کنید

PDF

من نه

توصیه شده: