תוכן עניינים:

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

וִידֵאוֹ: Arduino IDE עם ליבה כפולה: שלט רחוק: 8 שלבים

וִידֵאוֹ: Arduino IDE עם ליבה כפולה: שלט רחוק: 8 שלבים
וִידֵאוֹ: RAMPS 1.6 - Basics 2024, יולי
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

מוּמלָץ: