Sadržaj:
- Korak 1: Demonstracija
- Korak 2: Montiranje poslužitelja
- Korak 3: Skupština klijenta
- Korak 4: Tok - poslužitelj
- Korak 5: Tok - klijent
- Korak 6: Client.ino
- Korak 7: Server.ino
- Korak 8: Datoteke
Video: Arduino IDE s dvostrukom jezgrom: daljinski upravljač: 8 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Ovaj video govori o "multi". Bavimo se multitaskingom, multi -core -om i multi -client -om. Prije nekog vremena napravio sam daljinski upravljač s dva ESP -a: klijentom i pristupnom točkom. Na temelju toga, danas ćemo postaviti višestruki poslužitelj. To znači da ćemo imati više klijenata povezanih u jednom ESP -u.
Dakle, današnja lekcija uključuje stvaranje poslužitelja u ESP32, dodavanje novih klijenata u petlji i rukovanje zahtjevima u drugoj jezgri. Klijenti će slati informacije o promjeni stanja svojih pinova, a poslužitelj će reproducirati te promjene stanja.
Korak 1: Demonstracija
Korak 2: Montiranje poslužitelja
Korak 3: Skupština klijenta
Korak 4: Tok - poslužitelj
Korak 5: Tok - klijent
Korak 6: Client.ino
Deklaracije i varijable
#include // Dados da rede // Deve serial 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 bez poslužitelja) typedef struct {int number; int status; } Pin; // 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 pins [PIN_COUNT] = { {.broj = 21}, {.broj = 19}};
Postaviti
void setup () {Serial.begin (115200); // Tempo para consurar a conexão como perdida client.setTimeout (5000); // Conectamos à rede WiFi i conectamos ao server setupWiFi (); connectClient (); za (int i = 0; i
Postavi WiFi
void setupWiFi () {Serial.print ("Povezivanje s" + niz (SSID)); // Conectamos à rede WiFi criado pelo out ESP WiFi.begin (SSID, PASSWORD); // Esperamos konektar while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kašnjenje (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Povezano!"); }
ConnectClient
void connectClient () {Serial.println ("Povezivanje klijenta"); // Esperamos conectar com o poslužitelju while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); kašnjenje (500); } // Se chegou aqui está conectado com o poslužitelju Serial.println (); Serial.println ("Klijent povezan!"); }
Petlja
void loop () {// Se não estiver conectado à rede WiFi, mandamos conektar if (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
HandleConnection
void handleConnection (void* pvParameters) {// VAŽNO: 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. 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 (pins .broj); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; return true; } // Só chegará aqui se o estado não foi alterado // Então retornamos falso return false; }
sendPinStatus
// Pošaljite zahtjev za poslužitelj da do pino na pozicionirate 'i' do arrayvoid sendPinStatus (int i) {client.write ((uint8_t*) & pins , sizeof (Pin)); client.flush (); }
Korak 7: Server.ino
Deklaracije i varijable
#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos um poslužitelj na porta definida za 'SERVER_PORT' WiFiServerski poslužitelj (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 bez klijenta) typedef struct {int number; int status; } Pin;
Postaviti
void setup () {Serial.begin (115200); // Criamos a rede WiFi i inicijalizacija servera setupWiFi (); server.begin (); xTaskCreatePinnedToCore (handleClients, // Função que será executada "handleClients", // Ime da tarefa 10000, // Tamanho da pilha NULL, // Parâmetro da tarefa (nema caso não usamos) 2, // Prioritet 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 petlja ficar livre com o core 1)}
SetupWiFi
void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID e Senha para se povezuje s ESP WiFi.softAP (SSID, PASSWORD); }
Petlja
void loop () {// Verifica se um new client está tentando se povezuje WiFiClient client = server.available (); // Se sim colocamos ele no vector if (client) {clients.push_back (client); }}
HandleClients
void handleClients (void* pvParameters) {// VAŽNO: A tarefa não pode terminar, deve ficar presa em um loop petlje infinito while (true) {// Para cada client que temos no vector for (int i = 0; i
Korak 8: Datoteke
Preuzmite datoteke
INO
Preporučeni:
Klonirajte bilo koji daljinski upravljač s Arduino Nano: 5 koraka
Klonirajte bilo koji daljinski upravljač s Arduino Nano: Klonirajte bilo koji daljinski upravljač s Arduino Nano
TV daljinski upravljač postaje RF daljinski -- NRF24L01+ Vodič: 5 koraka (sa slikama)
TV daljinski upravljač postaje RF daljinski || Vodič za NRF24L01+: U ovom projektu ću vam pokazati kako sam koristio popularni nRF24L01+ RF IC za bežično podešavanje svjetline LED trake putem tri beskorisna gumba na daljinskom upravljaču televizora. Započnimo
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: 6 koraka
IRduino: Arduino daljinski upravljač - oponašajte izgubljeni daljinski upravljač: Ako ste ikada izgubili daljinski upravljač za televizor ili DVD uređaj, znate koliko je frustrirajuće morati hodati do, pronaći i koristiti gumbe na samom uređaju. Ponekad ti gumbi čak ne nude istu funkcionalnost kao daljinski. Primiti
Daljinski video daljinski upravljač za računalo Video player: 6 koraka
Daljinski video daljinski upravljač za računalo Video player: Izrađujem daljinski upravljač koji se povezuje s računalom putem USB -a. Veliki daljinski upravljač omogućuje mom djetetu odabir i reprodukciju videozapisa na starom računalu. Ovo je relativno jednostavan projekt. Osnovna komponenta je ili USB tipkovnica ili bežična USB tipkovnica. Zatim
Izrada jednostavnog induktora sa jezgrom zraka (indukcijska zavojnica): 5 koraka
Izrada jednostavnog induktora sa jezgrom zraka (indukcijska zavojnica): Ova instrukcija će vam reći kako napraviti jednostavan induktor sa jezgrom sa zračnom jezgrom, posebno za Niftymitter. Niftymitter je FM odašiljač otvorenog koda temeljen na Najjednostavnijem FM odašiljaču Tetsuo Kogawe, slobodni krug oscilatora, dakle