Оглавление:
- Шаг 1: демонстрация
- Шаг 2: монтирование сервера
- Шаг 3: Сборка клиента
- Шаг 4: поток - сервер
- Шаг 5: поток - клиент
- Шаг 6: Client.ino
- Шаг 7: Server.ino
- Шаг 8: файлы
Видео: Arduino IDE с двухъядерным процессором: дистанционное управление: 8 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11: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 // Задача, которую вы хотите использовать для соединения с сервером WiFiClient client; // Struct que define os dados que vamos enviar (deve ser igual no server) typedef struct {int number; int status; }Штырь; // 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 vê pode alterar para os pinos que desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Настраивать
void setup () {Serial.begin (115200); // Время для рассмотрения одновременного использования client.setTimeout (5000); // Подключить Wi-Fi и подключиться к серверу setupWiFi (); connectClient (); для (int i = 0; i
Настроить WiFi
void setupWiFi () {Serial.print ("Подключение к" + строка (SSID)); // Подключить Wi-Fi, чтобы восстановить ESP WiFi.begin (SSID, PASSWORD); // Конектар Esperamos while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); задержка (500); } // Если вы используете подключение к Wi-Fi Serial.println (); Serial.println («Подключено!»); }
ConnectClient
void connectClient () {Serial.println ("Подключение клиента"); // Коммуникационный сервер Esperamos conectar while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); задержка (500); } // Вы можете установить соединение с сервером Serial.println (); Serial.println («Клиент подключен!»); }
Петля
void loop () {// Если нет подключения к Wi-Fi, отключите его, если (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
HandleConnection
void handleConnection (void * pvParameters) {// ВАЖНО: 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 for (int i = 0; i
hasPinStatusChanged
// Подтверждение того, что установлено значение pino na posição 'i' do array mudou // Возвращает 'true' se mudou ou 'false' caso contrário boolean hasPinStatusChanged (int i) {// Faz a leitura do pino int pinStatus = digitalRead (pins .number); // Задайте значение pino для другого if (pins .status! = PinStatus) {// Защитите новое состояние и установите истинные контакты .status = pinStatus; вернуть истину; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }
sendPinStatus
// Envia для серверных данных делает 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 // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Сервер задан для порта, определенного для '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 no client) typedef struct {int number; int status; }Штырь;
Настраивать
void setup () {Serial.begin (115200); // Запускаем Wi-Fi и запускаем сервер setupWiFi (); 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 (no caso não Precisamos) 0); // Número do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}
НастройкаWiFi
void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID и пароль для подключения к ESP WiFi.softAP (SSID, PASSWORD); }
Петля
void loop () {// Проверяем, что новый клиент установлен на сервере WiFiClient client = server.available (); // Не указан вектор if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void * pvParameters) {// ВАЖНО: tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {// Для клиента нет вектора for (int i = 0; i
Шаг 8: файлы
Скачайте файлы
Я НЕТ
Рекомендуемые:
Arduino: программы времени и дистанционное управление из приложения для Android: 7 шагов (с изображениями)
Arduino: программы времени и дистанционное управление из приложения для Android: мне всегда было интересно, что происходит со всеми этими платами Arduino, которые не нужны людям после завершения своих крутых проектов. Правда немного огорчает: ничего. Я наблюдал это в доме моей семьи, где мой отец пытался построить свой собственный дом
Преобразование текста в речь Нажмите на UChip с процессором ARMbasic и другие SBC с процессором ARMbasic: 3 шага
Преобразование текста в речь Щелкните UChip на базе ARMbasic и другие SBC на базе ARMbasic: Введение: Добрый день. Меня зовут Тод. Я профессионал в области аэрокосмической и оборонной промышленности, который также немного помешан в душе. Вдохновение: Родом из эпохи удаленного доступа к BBS, 8-битных микроконтроллеров, персональных компьютеров Kaypro / Commodore / Tandy / TI-994A, когда R
Дистанционное управление роботом Arduino: 7 шагов
Дистанционное управление вашим роботом Arduino: в этой инструкции я собираюсь рассказать об использовании Adafruit Motor Shield для Arduino V2 вместе с антенной nRF24L01 для создания удаленного управляемого робота на большие расстояния. Я использую старый Adafruit Arduino 101 CurrieBot с Arduino Uno вместо
Дистанционное управление чем угодно по дешевке!: 8 шагов
Дистанционное управление чем угодно … по дешевке! Подержанные автомобили с дистанционным управлением (RC) (лодки, суда на воздушной подушке, самолеты и квадрокоптеры тоже!) Часто легко достать. Если не совсем бесплатно, вы можете получить хотя бы один дешевый. Найдите себе радиоуправляемую машину и ее контроллер. У многих детей есть хотя бы один сбор пыли
Микро: битное дистанционное управление селфи: 5 шагов (с фотографиями)
Micro: bit Selfie Remote: Что такое micro: bit? Micro Bit - это встроенная система на базе ARM, разработанная BBC для использования в компьютерном образовании в Великобритании. 5 см и имеет процессор ARM Cortex-M0, датчики акселерометра и магнитометра, Bluetooth и USB