Arduino IDE עם ליבה כפולה: שלט רחוק: 8 שלבים
Arduino IDE עם ליבה כפולה: שלט רחוק: 8 שלבים
Anonim
Image
Image
הפגנה
הפגנה

הסרטון הזה עוסק ב"רב ". אנו מתמודדים עם ריבוי משימות, ריבוי ליבות ורבים. לפני זמן מה עשיתי שלט רחוק עם שני מערכות ESP: לקוח ונקודת גישה. על סמך זה, היום נקים שרת מרובה לקוחות. המשמעות היא שיהיו לנו מספר לקוחות מחוברים ב- ESP אחד.

לפיכך, השיעור כיום כרוך ביצירת שרת ב- ESP32, הוספת לקוחות חדשים בלולאה וטיפול בבקשות בגרעין אחר. לקוחות ישלחו מידע על שינוי המצב של הסיכות שלהם, והשרת ישחזר את שינויי המצב האלה.

שלב 1: הפגנה

שלב 2: התקנת שרת

שרת הרכבה
שרת הרכבה

שלב 3: הרכבת לקוחות

אסיפת לקוחות
אסיפת לקוחות

שלב 4: זרימה - שרת

Flow - שרת
Flow - שרת

שלב 5: זרימה - לקוח

Flow - לקוח
Flow - לקוח

שלב 6: Client.ino

הצהרות ומשתנים

#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 with server WiFiClient client; // Struct que להגדיר os dados que vamos enviar (deve ser igual אין שרת) typedef struct {int number; סטטוס int; }פִּין; // 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 pins [PIN_COUNT] = { {. מספר = 21}, {. מספר = 19}};

להכין

הגדרת חלל () {Serial.begin (115200); // זמני לשיקול לקוח perdida client.setTimeout (5000); // חיבור אינטרנט אלחוטי והרכבה של שרת הגדרות WIFi (); connectClient (); עבור (int i = 0; i

הגדר WiFi

void setupWiFi () {Serial.print ("מתחבר ל-" + מחרוזת (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // חוברת אספרמוס בעוד (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); עיכוב (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("מחובר!"); }

ConnectClient

void connectClient () {Serial.println ("חיבור לקוח"); // Esperamos conectar com or server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); עיכוב (500); } // Se chegou aqui está conectado com בשרת Serial.println (); Serial.println ("לקוח מחובר!"); }

לוּלָאָה

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

חיבור ידית

void handleConnection (void* pvParameters) {// חשוב: טרמינאר של tarefa não pode, 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. אתה יכול לראות את השרת עבור (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 (pins . מספר); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos סיכות אמיתיות .status = pinStatus; להחזיר נכון; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

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

שלב 7: Server.ino

הצהרות ומשתנים

#include #include // Dados da rede // הגשת שירות ללא לקוח #הגדרת SSID "ESP32Server" #הגדרת סיסמה "87654321" #הגדרת SERVER_PORT 5000 // הגדרות שרת בפורמט הגדרות של 'SERVER_PORT' שרת WiFiServer (SERVER_PORT); // וקטור אונדה vamos adicionar לקוחות לקוחות conforme eles forem conectando std:: לקוחות לקוחות; // Struct que להגדיר os dados que vamos enviar (deve ser igual אין לקוח) typedef struct {int number; סטטוס int; }פִּין;

להכין

הגדרת חלל () {Serial.begin (115200); // Criamos משתמשת ב- WiFi ואינפורמציה או התקנת שרת WiFi (); server.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 (אין caso não precisamos) 0); // מספרים על הליבה שתוכל לבצע את הפעולה (מידע על הליבה 0 עבור לולאה).

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) {clients.push_back (client); }}

ידית לקוחות

void handleClients (void* pvParameters) {// IMPORTANTE: טרמינאר של tarefa não pode, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i

שלב 8: קבצים

הורד את הקבצים

PDF

INO