جدول المحتويات:

اردوينو IDE مع ثنائي النواة: التحكم عن بعد: 8 خطوات
اردوينو IDE مع ثنائي النواة: التحكم عن بعد: 8 خطوات

فيديو: اردوينو IDE مع ثنائي النواة: التحكم عن بعد: 8 خطوات

فيديو: اردوينو IDE مع ثنائي النواة: التحكم عن بعد: 8 خطوات
فيديو: التحكم في مصابيح ليد بواسطة أردوينو + الكود البرمجي | اردوينو خطوة بخطوة للمبتدئين 2024, يوليو
Anonim
Image
Image
برهنة
برهنة

يدور هذا الفيديو حول "متعدد". نحن نتعامل مع تعدد المهام ، وتعدد المهام ، والعملاء المتعددين. منذ فترة ، قمت بعمل جهاز تحكم عن بعد مع اثنين من ESP: عميل ونقطة وصول. بناءً على ذلك ، سنقوم اليوم بإعداد خادم متعدد العملاء. هذا يعني أنه سيكون لدينا العديد من العملاء المتصلين في برنامج ESP واحد.

وبالتالي ، فإن الدرس اليوم يتضمن إنشاء خادم في ESP32 ، وإضافة عملاء جدد في الحلقة ، ومعالجة الطلبات في نواة أخرى. سيرسل العملاء معلومات حول تغيير حالة دبابيسهم ، وسيقوم الخادم بإعادة إنتاج هذه التغييرات في الحالة.

الخطوة 1: العرض التوضيحي

الخطوة 2: تركيب الخادم

خادم التركيب
خادم التركيب

الخطوة 3: تجميع العميل

تجميع العميل
تجميع العميل

الخطوة 4: التدفق - الخادم

التدفق - الخادم
التدفق - الخادم

الخطوة 5: التدفق - العميل

التدفق - العميل
التدفق - العميل

الخطوة 6: Client.ino

التصريحات والمتغيرات

# تضمين // 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 حدد os dados que vamos enviar (deve ser igual no server) typedef architecture {int number؛ حالة int }دبوس؛ // Quantidade de pinos que iremos ler e enviar o status #define PIN_COUNT 2 // Array com os pinos Definidos // لا يوجد 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}} ؛

اقامة

إعداد باطل () {Serial.begin (115200) ؛ // Tempo para allowar a conexão como perdida client.setTimeout (5000) ؛ // Conectamos à rede WiFi e conectamos ao server setupWiFi () ؛ connectClient () ، لـ (int i = 0 ؛ i

إعداد WiFi

void setupWiFi () {Serial.print ("Connecting to" + String (SSID)) ؛ // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID ، كلمة المرور) ؛ // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print (".")؛ تأخير (500) ؛ } // Se chegou aqui está conectado à rede WiFi Serial.println () ؛ Serial.println ("متصل!") ؛ }

ConnectClient

void connectClient () {Serial.println ("Connecting client") ؛ // 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 ("العميل متصل!") ؛ }

حلقة

حلقة باطلة () {// Se não estiver conectado à rede WiFi، mandamos conectar if (WiFi.status ()! = WL_CONNECTED) {setupWiFi ()؛ }}

مقبض

void handleConnection (void * pvParameters) {// IMPORTANTE: A tarefa não pode terminar، 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 لـ (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 contário boolean hasPinStatusChanged (int i) {// Faz a leitura do pino int pinStatus = digitalRead (pinStatus = digitalRead) .number) ؛ // Se o estado do pino for diferente if (pin .status! = pinStatus) {// Guardamos o novo estado e retornamos true pin .status = pinStatus؛ العودة صحيح } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false؛ }

إرسال

// 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

التصريحات والمتغيرات

# تضمين # تضمين // 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 clients المطابقة eles forem conectando std:: vector clients؛ // Struct que حدد os dados que vamos enviar (deve ser igual no client) typedef Struct {int number؛ حالة int }دبوس؛

اقامة

إعداد باطل () {Serial.begin (115200) ؛ // Criamos a rede WiFi e 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á Executive a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

SetupWiFi

إعداد باطلWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP) ؛ // SSID e Senha para se conectarem a este ESP WiFi.softAP (SSID ، كلمة المرور) ؛ }

حلقة

حلقة باطلة () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available () ؛ // Se sim colocamos ele no vector if (client) {clients.push_back (client) ؛ }}

التعامل مع العملاء

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

الخطوة 8: الملفات

قم بتنزيل الملفات

بي دي إف

انا لا

موصى به: