Mục lục:

Arduino IDE với lõi kép: Điều khiển từ xa: 8 bước
Arduino IDE với lõi kép: Điều khiển từ xa: 8 bước

Video: Arduino IDE với lõi kép: Điều khiển từ xa: 8 bước

Video: Arduino IDE với lõi kép: Điều khiển từ xa: 8 bước
Video: Lập trình Arduino trên Tinkercard - Bài 8 - Sử dụng remote và IR 2024, Tháng mười một
Anonim
Image
Image
Trình diễn
Trình diễn

Video này là tất cả về "đa." Chúng tôi đang xử lý đa nhiệm, đa nhân và đa tâm. Một lúc trước, tôi đã tạo một điều khiển từ xa với hai ESP: một máy khách và một điểm truy cập. Dựa trên điều này, hôm nay chúng tôi sẽ thiết lập một máy chủ đa hướng. Điều này có nghĩa là chúng tôi sẽ có nhiều khách hàng được kết nối trong một ESP duy nhất.

Do đó, bài học ngày hôm nay liên quan đến việc tạo một máy chủ trong ESP32, thêm các máy khách mới trong vòng lặp và xử lý các yêu cầu trong một lõi khác. Khách hàng sẽ gửi thông tin về sự thay đổi trạng thái của các chân và máy chủ sẽ tạo lại những thay đổi trạng thái này.

Bước 1: Trình diễn

Bước 2: Gắn máy chủ

Gắn máy chủ
Gắn máy chủ

Bước 3: Hội khách hàng

Hội khách hàng
Hội khách hàng

Bước 4: Luồng - Máy chủ

Luồng - Máy chủ
Luồng - Máy chủ

Bước 5: Luồng - Khách hàng

Luồng - Khách hàng
Luồng - Khách hàng

Bước 6: Client.ino

Khai báo và biến

#include // Dados da red // 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; trạng thái int; }Ghim; // Quantidade de pinos que iremos ler e enviar o status #define PIN_COUNT 2 // Array com os pinos Defdos // No caso vamos trabalhar com os 21 e 19 mas você pode alterar para os pinos que desejar Ghim chân [PIN_COUNT] = { {.number = 21}, {.number = 19}};

Cài đặt

void setup () {Serial.begin (115200); // Tempo para coirar a conexão como perdida client.setTimeout (5000); // Conectamos à red WiFi e conectamos ao server setupWiFi (); connectClient (); for (int i = 0; i

Thiết lập WiFi

void setupWiFi () {Serial.print ("Đang kết nối với" + Chuỗi (SSID)); // Conectamos à red WiFi criado pelo outro ESP WiFi.begin (SSID, MẬT KHẨU); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); chậm trễ (500); } // Se chegou aqui está conectado à red WiFi Serial.println (); Serial.println ("Đã kết nối!"); }

ConnectClient

void connectClient () {Serial.println ("Máy khách đang kết nối"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); chậm trễ (500); } // Se chegou aqui está conectado com o server Serial.println (); Serial.println ("Máy khách đã kết nối!"); }

Vòng

void loop () {// Se não estiver conectado à red WiFi, mandamos conectar if (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}

HandleConnection

void xử lýConnection (void * pvParameters) {// QUAN TRỌNG: Một kẻ hủy diệt mã não tarefa, deve ficar presa em um loop infinito while (true) {// Se não estiver conectado com o server, mandamos conectar if (! client.connected ()) {connectClient (); } // Đoạn 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 (ghim .number); // Se o estado do pino for diferente if (pin .status! = PinStatus) {// Guardamos o novo estado e retornamos truepin .status = pinStatus; trả về true; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

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

Bước 7: Server.ino

Khai báo và biến

#include #include // Dados da red // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Máy chủ Criamos um na porta Defda por 'SERVER_PORT' Máy chủ WiFiServer (SERVER_PORT); // Vector onde vamos adicionar os client conforme eles forem conectando std:: vector client; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef struct {int number; trạng thái int; }Ghim;

Cài đặt

void setup () {Serial.begin (115200); // Criamos a red WiFi e iniciamos o server setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executive "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 referenceência para a tarefa que vai ser criada (no caso não Preisamos) 0); // Número do core que será executive a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

SetupWiFi

void setupWiFi () {// Coloca este ESP como Điểm truy cập WiFi.mode (WIFI_AP); // SSID e Senha para se conectarem a este ESP WiFi.softAP (SSID, PASSWORD); }

Vòng

void loop () {// Verifica se um novo client está lềuando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {client.push_back (client); }}

HandleClients

void handleClients (void * pvParameters) {// QUAN TRỌNG: Một kẻ hủy diệt mã não tarefa, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i

Bước 8: Tập tin

Tải xuống các tệp

PDF

NS

Đề xuất: