Spisu treści:

Arduino IDE z dwurdzeniowym procesorem: zdalne sterowanie: 8 kroków
Arduino IDE z dwurdzeniowym procesorem: zdalne sterowanie: 8 kroków

Wideo: Arduino IDE z dwurdzeniowym procesorem: zdalne sterowanie: 8 kroków

Wideo: Arduino IDE z dwurdzeniowym procesorem: zdalne sterowanie: 8 kroków
Wideo: Arduino 1: POCZĄTEK 2024, Lipiec
Anonim
Image
Image
Demonstracja
Demonstracja

Ten film dotyczy „multi”. Mamy do czynienia z wielozadaniowością, wielordzeniami i multiklientami. Jakiś czas temu zrobiłem pilota z dwoma ESP: klientem i punktem dostępowym. Na tej podstawie dzisiaj skonfigurujemy serwer multiclient. Oznacza to, że będziemy mieć wielu klientów połączonych w jednym ESP.

Tak więc dzisiejsza lekcja dotyczy tworzenia serwera w ESP32, dodawania nowych klientów w pętli i obsługi żądań w innym rdzeniu. Klienci będą wysyłać informacje o zmianie stanu swoich pinów, a serwer odtworzy te zmiany stanu.

Krok 1: Demonstracja

Krok 2: Montaż serwera

Montowanie serwera
Montowanie serwera

Krok 3: Montaż klienta

Montaż klienta
Montaż klienta

Krok 4: Przepływ - serwer

Przepływ - serwer
Przepływ - serwer

Krok 5: Przepływ - Klient

Przepływ - Klient
Przepływ - Klient

Krok 6: Client.ino

Deklaracje i zmienne

#include //Dados da rede //Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Objekt que vai fazer a conexão com o server klient WiFiClient; //Struct que zdefiniuj os dados que vamos enviar (utwórz ser igual bez serwera) typedef struct{ int number; stan int; }Szpilka; //Ilość pinów que iremos ler e enviar o status #define PIN_COUNT 2 //Tablica z zdefiniowanymi pinami //Nie ma żadnych ograniczeń co do liczby 21 i 19 masowych zmian przy pinach pinów que desejar Piny [PIN_COUNT] = { {.liczba = 21}, {.liczba = 19} };

Ustawiać

void setup(){ Serial.begin(115200); //Tempo rozważenia połączenia z klientem.setTimeout(5000); //Połącz z rede Wi-Fi i połącz z konfiguracją serweraWiFi(); connectClient(); for(int i=0; i

Skonfiguruj Wi-Fi

void setupWiFi(){ Serial.print("Łączenie z " + String(SSID)); //Połącz się z przebudową Wi-Fi, łącząc się z ESP WiFi.begin (SSID, HASŁO); //Esperamos conectar while (WiFi.status() != WL_CONNECTED) { Serial.print("."); opóźnienie (500); } //Połącz się z siecią WiFi Serial.println(); Serial.println("Połączony!"); }

ConnectClient

void connectClient(){ Serial.println("Łączenie klienta"); //Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) { Serial.print("."); opóźnienie (500); } //Połącz się z serwerem Serial.println(); Serial.println("Klient podłączony!"); }

Pętla

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

Uchwyt Połączenie

void handleConnection(void* pvParameters){ //WAŻNE: Tarefa não pode terminar, ve 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

//Sprawdź, czy ustaw kod w pozycji 'i' do tablicy mudou//Retorna 'true' se mudou lub 'false' caso contrário boolean hasPinStatusChanged(int i) { //Faz a leitura do pino int pinStatus = digitalRead(pins .liczba); //Siedź o stanie zrobić pino dla różnych if(pins.status != pinStatus) { //Guardamos o nowym stanie i retornamos true pins.status = pinStatus; zwróć prawdę; } //Só chegará aqui se o estado não foi alterado //Então retornamos falso return false; }

sendPinStatus

//Envia dla serwera os dados do pino na posição 'i' wykonaj arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pins, sizeof(Pin)); klient.flush(); }

Krok 7: Server.ino

Deklaracje i zmienne

#include #include //Dados da rede //Utwórz ser igual bez klienta #define SSID "ESP32Server" #define HASŁO "87654321" #define SERVER_PORT 5000 //Criamos um server na określonym porcie przez 'SERVER_PORT'WiFiServer server (SERVER_PORT); //Vector onde vamos adicionar os client conforme eles forem conectando std::vector customers; //Struct que zdefiniuj os dados que vamos enviar (nie twórz ser igual bez klienta) typedef struct{ int number; stan int; }Szpilka;

Ustawiać

void setup(){ Serial.begin(115200); //Criamos a rede WiFi e iniciamos o server setupWiFi(); serwer.początek(); xTaskCreatePinnedToCore(handleClients, //Função que será executada "handleClients", //Nome da tarefa 10000, //Tamanho da pilha NULL, //Parametro da tarefa (bez caso não usamos) 2, //Prioridade da tarefa 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) }

KonfiguracjaWiFi

void setupWiFi(){ //Koloka est ESP como Access Point WiFi.mode(WIFI_AP); //SSID i Senha, aby połączyć się z ESP WiFi.softAP(SSID, PASSWORD); }

Pętla

void loop(){ //Zweryfikuj nowy klient jest połączony z klientem WiFiClient = server.available(); //Se sim colocamos ele bez wektora if(client) { customers.push_back(client); } }

Obsługa klientów

void handleClients(void* pvParameters){ //WAŻNE: Tarefa não pode terminar, twórz ficar presa em um loop infinito while(true) { //Para cada client que temos no vector for(int i=0; i

Krok 8: Pliki

Pobierz pliki

PDF

JA NIE

Zalecana: