Съдържание:
- Стъпка 1: Демонстрация
- Стъпка 2: Монтиране на сървър
- Стъпка 3: Събиране на клиента
- Стъпка 4: Поток - Сървър
- Стъпка 5: Поток - клиент
- Стъпка 6: Client.ino
- Стъпка 7: Server.ino
- Стъпка 8: Файлове
Видео: Arduino IDE с двуядрено: Дистанционно управление: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Този видеоклип е изцяло за „мулти“. Занимаваме се с мултитаскинг, многоядрени и мултиклиенти. Преди време направих дистанционно управление с две ESP: клиент и точка за достъп. Въз основа на това днес ще настроим мултиклиентен сървър. Това означава, че ще имаме множество клиенти, свързани в един ESP.
По този начин днешният урок включва създаването на сървър в ESP32, добавянето на нови клиенти в цикъла и обработката на заявките в друго ядро. Клиентите ще изпращат информация за промяната на състоянието на своите пинове, а сървърът ще възпроизведе тези промени на състоянието.
Стъпка 1: Демонстрация
Стъпка 2: Монтиране на сървър
Стъпка 3: Събиране на клиента
Стъпка 4: Поток - Сървър
Стъпка 5: Поток - клиент
Стъпка 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 or server WiFiClient client; // Struct que define 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 pin [PIN_COUNT] = { {. номер = 21}, {. номер = 19}};
Настройвам
void setup () {Serial.begin (115200); // Темпо за разглеждане на conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi и conectamos ao server setupWiFi (); connectClient (); за (int i = 0; i
Настройка на WiFi
void setupWiFi () {Serial.print ("Свързване към" + низ (SSID)); // Conectamos à rede WiFi criado pelo out 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 сървър while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); забавяне (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Клиентът е свързан!"); }
Цикъл
void loop () {// Не се свързвайте с връзката на WiFi, връзката с мандамос if (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
HandleConnection
void handleConnection (void* pvParameters) {// ВАЖНО: 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. Вижте, за да видите сървъра или новото състояние за (int i = 0; i
hasPinStatusChanged
// Verifica se o estado do pino на 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 true pins .status = pinStatus; връщане true; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }
sendPinStatus
// Envia за сървъра, който прави пино на позицията „i“до 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_PORT' WiFiServer сървър (SERVER_PORT); // Vector onde vamos adicionar os clients conforme eles forem conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual без клиент) typedef struct {int number; int статус; } Пин;
Настройвам
void setup () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos или server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executada "handleClients", // Име на tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (без caso não usamos) 2, // Приоритет да tarefa NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (няма caso não precisamos) 0); // Numero do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}
Настройка Wi -Fi
void setupWiFi () {// Coloca este ESP като точка на достъп WiFi.mode (WIFI_AP); // SSID e Senha за свързване с ESP WiFi.softAP (SSID, PASSWORD); }
Цикъл
void loop () {// Verifica se um novo client está tentando se свързва WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void* pvParameters) {// ВАЖНО: A tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Para cada client que temos без вектор за (int i = 0; i
Стъпка 8: Файлове
Изтеглете файловете
АЗ НЕ
Препоръчано:
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: 6 стъпки
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: Ако някога сте загубили дистанционното управление за вашия телевизор или DVD плейър, знаете колко е разочароващо да се налага да ходите, да намирате и използвате бутоните на самото устройство. Понякога тези бутони дори не предлагат същата функционалност като дистанционното. Получаване
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC играчка: 4 стъпки
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC Toy: 如何 将 通用 遥控 套件 转换 为 玩具 中 使用 的 四 遥控 器。 遥控 套件 非常 便宜。 采用 62 62 2262 和 2272 芯片 433 模块 构建。方法 非常 简单。 只需 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 电子 项目 并 为 服务。 玩具 车船 提供 远程 无线 控制
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): 4 стъпки
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): Проблем На масата в хола има три дистанционни управления. За да гледате любимото си предаване, трябва точно да следвате специална последователност от натискания на бутони върху поне две от тях. И твоята съквартирантка, майка, приятелка никога не си спомня за това … Решение Купуваш
Робот с дистанционно управление с помощта на Arduino и T.V. Дистанционно: 11 стъпки
Робот с дистанционно управление с помощта на Arduino и телевизионно дистанционно: Тази кола с дистанционно управление може да се движи, използвайки практически всякакъв вид дистанционно управление, като телевизор, променлив ток и др. Той използва факта, че дистанционното излъчва IR (инфрачервено). Това свойство се използва чрез използване на IR приемник, който е много евтин сензор
Кабелно дистанционно дистанционно управление на Canon за затвор и фокус: 4 стъпки
Кабелно дистанционно дистанционно управление на Canon за затвор и фокус: Хей! Това е друга версия на кабелното дистанционно управление на Canon. Мисля, че е по -гъвкав от другите дизайни. Тази инструкция е мястото, откъдето получих моето вдъхновение. Това по принцип ви позволява да правите снимки с помощта на това дистанционно, вместо да натискате дупето