Sisällysluettelo:

Arduino IDE, jossa on kaksi ydintä: Kaukosäädin: 8 vaihetta
Arduino IDE, jossa on kaksi ydintä: Kaukosäädin: 8 vaihetta

Video: Arduino IDE, jossa on kaksi ydintä: Kaukosäädin: 8 vaihetta

Video: Arduino IDE, jossa on kaksi ydintä: Kaukosäädin: 8 vaihetta
Video: Control 32 Servo over Wi-Fi using ESP32 and PCA9685 via desktop or mobile phone V5 2024, Marraskuu
Anonim
Image
Image
Esittely
Esittely

Tässä videossa on kyse monista. Käsittelemme moniajoa, monikohteita ja moniasiakkaita. Jonkin aikaa sitten tein kauko -ohjaimen, jossa oli kaksi ESP: tä: asiakas ja tukiasema. Tämän perusteella perustamme tänään monisovelluspalvelimen. Tämä tarkoittaa, että meillä on useita asiakkaita yhdistettynä yhteen ESP: hen.

Tämän päivän oppitunti sisältää siis palvelimen luomisen ESP32: een, uusien asiakkaiden lisäämisen silmukkaan ja pyyntöjen käsittelyn toisessa ytimessä. Asiakkaat lähettävät tietoja nastojensa tilanmuutoksista, ja palvelin toistaa nämä tilan muutokset.

Vaihe 1: Esittely

Vaihe 2: Palvelimen asennus

Asennuspalvelin
Asennuspalvelin

Vaihe 3: Asiakkaan kokoonpano

Asiakaskokous
Asiakaskokous

Vaihe 4: Virtaus - palvelin

Virtaus - palvelin
Virtaus - palvelin

Vaihe 5: Virtaus - asiakas

Flow - asiakas
Flow - asiakas

Vaihe 6: Client.ino

Ilmoitukset ja muuttujat

#include // Dados da rede // Deve ser giual no Server #define SSID "ESP32Server" #define SALASANA "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 no server) typedef structure {int numero; int -tila; } Nasta; // 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 nastat [PIN_COUNT] = { {.numero = 21}, {.numero = 19}};

Perustaa

void setup () {Serial.begin (115200); // Tempo para harkitsee a conexão como perdida client.setTimeout (5000); // Conectamos Wi -Fi -yhteyden ja palvelimen asennuksen yhteydessäWiFi (); connectClient (); varten (int i = 0; i

Määritä WiFi

void setupWiFi () {Serial.print ("Yhdistäminen" + merkkijono (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, SALASANA); // Esperamos conectar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); viive (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Yhdistetty!"); }

ConnectClient

void connectClient () {Serial.println ("Yhdistävä asiakas"); // Esperamos conectar com o server while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); viive (500); } // Se chegou aqui está conectado com or server Serial.println (); Serial.println ("Asiakas kytketty!"); }

Silmukka

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

KahvaKytkentä

void handleConnection (void* pvParameters) {// TÄRKEÄÄ: Tarefa não pode -pääte, 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. Katso 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 (pins .luku); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; palaa tosi; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }

sendPinStatus

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

Vaihe 7: Server.ino

Ilmoitukset ja muuttujat

#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define SALASANA "87654321" #define SERVER_PORT 5000 // Criamos -palvelin, joka on määritetty SERVER_PORT -WiFiServer -palvelimelle (SERVER_PORT); // Vektori näkyviä ostoksia asiakasohjelmat conforme eles forem conectando std:: vector customers; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef structure {int numero; int -tila; } Nasta;

Perustaa

void setup () {Serial.begin (115200); // Criamos a rede WiFi e iniciamos or server 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á executab a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}

Asenna Wi -Fi

void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID ja Senha para se conectarem a este ESP WiFi.softAP (SSID, SALASANA); }

Silmukka

void loop () {// Verifica se um novo client está tentando se conectar WiFiClient client = server.available (); // Se sim colocamos ele no vector, jos (asiakas) {asiakkaat.push_back (asiakas); }}

KahvaAsiakkaat

void handleClients (void* pvParameters) {// TÄRKEÄÄ: Tarefa não pode -pääte, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i

Vaihe 8: Tiedostot

Lataa tiedostot

PDF

INO

Suositeltava: