![Arduino IDE με διπλό πυρήνα: Τηλεχειριστήριο: 8 βήματα Arduino IDE με διπλό πυρήνα: Τηλεχειριστήριο: 8 βήματα](https://i.howwhatproduce.com/images/006/image-17056-26-j.webp)
Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-23 14:39
![Image Image](https://i.howwhatproduce.com/images/006/image-17056-28-j.webp)
![](https://i.ytimg.com/vi/hkkktLZJR4E/hqdefault.jpg)
![Επίδειξη Επίδειξη](https://i.howwhatproduce.com/images/006/image-17056-29-j.webp)
Αυτό το βίντεο έχει να κάνει με το "multi". Έχουμε να κάνουμε με πολλαπλές εργασίες, πολλαπλούς πυρήνες και πολλαπλά στοιχεία. Πριν από λίγο καιρό, έφτιαξα ένα τηλεχειριστήριο με δύο ESP: έναν πελάτη και ένα σημείο πρόσβασης. Με βάση αυτό, σήμερα θα δημιουργήσουμε έναν διακομιστή πολλαπλών πελατών. Αυτό σημαίνει ότι θα έχουμε πολλούς πελάτες συνδεδεμένους σε ένα μόνο ESP.
Έτσι, το μάθημα σήμερα περιλαμβάνει τη δημιουργία ενός διακομιστή στο ESP32, την προσθήκη νέων πελατών στον βρόχο και τον χειρισμό των αιτημάτων σε έναν άλλο πυρήνα. Οι πελάτες θα στείλουν πληροφορίες σχετικά με την αλλαγή κατάστασης των ακίδων τους και ο διακομιστής θα αναπαράγει αυτές τις αλλαγές κατάστασης.
Βήμα 1: Επίδειξη
Βήμα 2: Τοποθέτηση διακομιστή
![Διακομιστής τοποθέτησης Διακομιστής τοποθέτησης](https://i.howwhatproduce.com/images/006/image-17056-30-j.webp)
Βήμα 3: Συνέλευση πελατών
![Συνέλευση πελατών Συνέλευση πελατών](https://i.howwhatproduce.com/images/006/image-17056-31-j.webp)
Βήμα 4: Ροή - Διακομιστής
![Ροή - Διακομιστής Ροή - Διακομιστής](https://i.howwhatproduce.com/images/006/image-17056-32-j.webp)
Βήμα 5: Ροή - Πελάτης
![Ροή - Πελάτης Ροή - Πελάτης](https://i.howwhatproduce.com/images/006/image-17056-33-j.webp)
Βήμα 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 o 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 #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 pin [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Ρύθμιση
void setup () {Serial.begin (115200); // Tempo para υπόψη για τη δημιουργία ενός πελάτη.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, PASSWORD); // 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 ("Σύνδεση πελάτη"); // 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 terminal, 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 (pin . αριθμός); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; επιστροφή αληθινός? } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false? }
sendPinStatus
// Ενδιαφέρον για τον διακομιστή για να σας βοηθήσει να στείλετε το μήνυμα "i" do arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)); client.flush (); }
Βήμα 7: Server.ino
Δηλώσεις και μεταβλητές
#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um server na porta definida for 'SERVER_PORT' WiFiServer server (SERVER_PORT); // Vector onde vamos adicionar os client conforme eles forem conectando std:: vector clients? // 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) {clients.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: Αρχεία
Κατεβάστε τα αρχεία
ΕΓΩ ΔΕΝ
Συνιστάται:
Τηλεχειριστήριο γίνεται τηλεχειριστήριο RF -- NRF24L01+ Φροντιστήριο: 5 βήματα (με εικόνες)
![Τηλεχειριστήριο γίνεται τηλεχειριστήριο RF -- NRF24L01+ Φροντιστήριο: 5 βήματα (με εικόνες) Τηλεχειριστήριο γίνεται τηλεχειριστήριο RF -- NRF24L01+ Φροντιστήριο: 5 βήματα (με εικόνες)](https://i.howwhatproduce.com/images/004/image-11727-j.webp)
Τηλεχειριστήριο γίνεται τηλεχειριστήριο RF || NRF24L01+ Tutorial: Σε αυτό το έργο θα σας δείξω πώς χρησιμοποίησα το δημοφιλές nRF24L01+ RF IC για να προσαρμόσω ασύρματα τη φωτεινότητα μιας λωρίδας LED μέσω τριών άχρηστων κουμπιών ενός τηλεχειριστηρίου τηλεόρασης. Ας αρχίσουμε
IRduino: Τηλεχειριστήριο Arduino - Μιμήστε ένα χαμένο τηλεχειριστήριο: 6 βήματα
![IRduino: Τηλεχειριστήριο Arduino - Μιμήστε ένα χαμένο τηλεχειριστήριο: 6 βήματα IRduino: Τηλεχειριστήριο Arduino - Μιμήστε ένα χαμένο τηλεχειριστήριο: 6 βήματα](https://i.howwhatproduce.com/images/012/image-33548-j.webp)
IRduino: Arduino Remote Control - Imitate a Lost Remote: Αν έχετε χάσει ποτέ το τηλεχειριστήριο της τηλεόρασης ή του DVD player σας, γνωρίζετε πόσο απογοητευτικό είναι να περπατάτε, να βρίσκετε και να χρησιμοποιείτε τα κουμπιά της ίδιας της συσκευής. Μερικές φορές, αυτά τα κουμπιά δεν προσφέρουν καν την ίδια λειτουργικότητα με το τηλεχειριστήριο. Λήψη
Πώς να ρυθμίσετε ένα πρόγραμμα εντοπισμού σφαλμάτων πυρήνα των Windows μέσω του δικτύου σας: 6 βήματα
![Πώς να ρυθμίσετε ένα πρόγραμμα εντοπισμού σφαλμάτων πυρήνα των Windows μέσω του δικτύου σας: 6 βήματα Πώς να ρυθμίσετε ένα πρόγραμμα εντοπισμού σφαλμάτων πυρήνα των Windows μέσω του δικτύου σας: 6 βήματα](https://i.howwhatproduce.com/images/002/image-5370-22-j.webp)
Τρόπος ρύθμισης εντοπισμού σφαλμάτων πυρήνα των Windows μέσω του δικτύου σας: Η εντοπισμός σφαλμάτων είναι ένα δημοφιλές εργαλείο που χρησιμοποιείται για να εντοπίσει τη βασική αιτία ενός σφάλματος. Ένα σφάλμα μπορεί να εκδηλωθεί με πολλούς διαφορετικούς τρόπους. μπορεί να προκαλέσει συντριβή συστήματος (μπλε οθόνη/BSOD), μπορεί να προκαλέσει συντριβή εφαρμογής, μπορεί να προκαλέσει πάγωμα του συστήματός σας για να ονομάσει ένα fe
Περιστροφικός κωδικοποιητής με πίνακα πυρήνα STM32: 12 βήματα
![Περιστροφικός κωδικοποιητής με πίνακα πυρήνα STM32: 12 βήματα Περιστροφικός κωδικοποιητής με πίνακα πυρήνα STM32: 12 βήματα](https://i.howwhatproduce.com/images/004/image-10481-11-j.webp)
Περιστροφικός κωδικοποιητής με πίνακα πυρήνα STM32: Αυτό είναι ένα σεμινάριο για τη λήψη της θέσης του περιστροφικού κωδικοποιητή, ο οποίος είναι ένας σταδιακός τύπος κωδικοποιητή. Οι κωδικοποιητές είναι γενικά δύο τύπων:- ο ένας είναι ο σταδιακός άλλος είναι ο απόλυτος. Αυτός ο κωδικός μπορεί να χρησιμοποιηθεί για μικροελεγκτές STM32L476 και STM32L0 .Αν όμως
Μετατρέψτε το τηλεχειριστήριο IR σε τηλεχειριστήριο RF: 9 βήματα (με εικόνες)
![Μετατρέψτε το τηλεχειριστήριο IR σε τηλεχειριστήριο RF: 9 βήματα (με εικόνες) Μετατρέψτε το τηλεχειριστήριο IR σε τηλεχειριστήριο RF: 9 βήματα (με εικόνες)](https://i.howwhatproduce.com/images/001/image-2740-94-j.webp)
Μετατροπή του τηλεχειριστηρίου IR σε τηλεχειριστήριο RF: Στο σημερινό Instructable, θα σας δείξω πώς μπορείτε να χρησιμοποιήσετε μια γενική μονάδα RF χωρίς μικροελεγκτή που θα μας οδηγήσει τελικά στη δημιουργία ενός έργου όπου μπορείτε να μετατρέψετε ένα τηλεχειριστήριο IR οποιασδήποτε συσκευής σε RF Μακρινός. Το κύριο πλεονέκτημα της μετατροπής ενός