Inhoudsopgave:
- Stap 1: Demonstratie
- Stap 2: Server koppelen
- Stap 3: Clientassemblage
- Stap 4: Flow - Server
- Stap 5: Flow - Klant
- Stap 6: Client.ino
- Stap 7: Server.ino
- Stap 8: Bestanden
Video: Arduino IDE met Dual Core: afstandsbediening - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Deze video gaat helemaal over "multi". We hebben te maken met multitasking, multicores en multiclients. Een tijdje geleden heb ik een afstandsbediening gemaakt met twee ESP's: een client en een toegangspunt. Op basis hiervan zullen we vandaag een multiclient-server opzetten. Dit betekent dat we meerdere clients hebben die zijn verbonden in één ESP.
De les van vandaag omvat dus het maken van een server in ESP32, het toevoegen van nieuwe clients in de lus en het afhandelen van de verzoeken in een andere kern. Clients sturen informatie over de statusverandering van hun pinnen en de server zal deze statusveranderingen reproduceren.
Stap 1: Demonstratie
Stap 2: Server koppelen
Stap 3: Clientassemblage
Stap 4: Flow - Server
Stap 5: Flow - Klant
Stap 6: Client.ino
Declaraties en variabelen
#include //Dados da rede //Ontwerp ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Objeo wat kan worden gekoppeld aan een server WiFiClient-client; //Struct que definition os dados que vamos enviar (deve ser igual no server) 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 en 19 mas você pode alterar para os pinos que desejar Pin pins [PIN_COUNT] = { {.getal = 21}, {.getal = 19} };
Opstelling
void setup(){ Serial.begin(115200); //Tempo voor rekening van een conexão como perdida client.setTimeout (5000); //Verbinding maken met wifi en verbinding met oa server setupWiFi(); connectClient(); for(int i=0; i
Wifi instellen
void setupWiFi(){ Serial.print("Verbinding maken met " + String (SSID)); //Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASWORD); // Esperamos conectar while (WiFi.status() != WL_CONNECTED) { Serial.print("."); vertraging (500); } //Zorg voor verbinding met WiFi Serial.println(); Serial.println("Verbonden!"); }
ConnectClient
void connectClient(){ Serial.println("Verbindende client"); // Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) {Serial.print("."); vertraging (500); } //Zorg voor een goede verbinding met de server Serial.println(); Serial.println ("Cliënt verbonden!"); }
Lus
void loop(){ //Se não estiver conectado à rede WiFi, mandamos conectar if(WiFi.status()!= WL_CONNECTED) { setupWiFi(); } }
HandvatVerbinding
void handleConnection (void * pvParameters) {//BELANGRIJK: Een 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 of novo estado for(int i=0; i
hasPinStatusChanged
//Verifica se o estado do pino na posição 'ik' do array mudou //Retorna 'true' se mudou ou 'false' caso contrário boolean hasPinStatusChanged (int i) {//Faz a leitura do pino int pinStatus = digitalRead (pinnen .nummer); //Se o estado do pino for diferente if(pins.status!= pinStatus) {//Guardamos o novo estado en retornamos true pins.status = pinStatus; retourneer waar; } //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 'ik' do arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pins, sizeof(Pin)); cliënt.flush(); }
Stap 7: Server.ino
Declaraties en variabelen
#include #include //Dados da rede //Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Criamos um server naar porta definida door 'SERVER_PORT' WiFiServer server(SERVER_PORT); //Vector onde vamos adicionar os clients conforme eles forem conectando std::vector clients; //Struct que definition os dados que vamos enviar (deve ser igual no client) typedef struct {int number; int-status; }Pin;
Opstelling
void setup(){ Serial.begin(115200); //Criamos a rede WiFi en iniciamos o 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 daULL Caso queria manter uma referência para a tarefa que vai ser criada (no caso não precisamos) 0); // Numero do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1)}
Wifi instellen
void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); //SSID en verbinding maken met ESP WiFi.softAP (SSID, WACHTWOORD); }
Lus
void loop () { // Verificatie van de nieuwe client is gekoppeld aan WiFiClient client = server.available (); //Se sim colocamos ele geen vector if (client) { clients.push_back (client); } }
Klanten behandelen
void handleClients (void * pvParameters) {//BELANGRIJK: Een tarefa não pode terminar, deve ficar presa em um loop infinito while (true) {//Para cada client que temos no vector for (int i=0; i
Stap 8: Bestanden
Download de bestanden
INO
Aanbevolen:
Bedien uw LED's met de afstandsbediening van uw tv?! -- Arduino IR-zelfstudie: 5 stappen (met afbeeldingen)
Bedien uw LED's met de afstandsbediening van uw tv?! || Arduino IR-zelfstudie: in dit project zal ik je laten zien hoe ik de nutteloze knoppen op de afstandsbediening van mijn tv heb hergebruikt om de LED's achter mijn tv te bedienen. Je kunt deze techniek ook gebruiken om allerlei dingen te besturen met een beetje code-editing. Ik zal ook wat vertellen over de theorie
TV-afstandsbediening wordt een RF-afstandsbediening -- NRF24L01+ zelfstudie: 5 stappen (met afbeeldingen)
TV-afstandsbediening wordt een RF-afstandsbediening || NRF24L01+ Tutorial: In dit project laat ik je zien hoe ik de populaire nRF24L01+ RF IC heb gebruikt om de helderheid van een ledstrip draadloos aan te passen via drie nutteloze knoppen van een tv-afstandsbediening. Laten we beginnen
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Afstandsbediening met voetbediening: 6 stappen (met afbeeldingen)
Afstandsbediening met voetbediening: kan ik scherpstellen en fotograferen zonder mijn handen op mijn Canon 200D? Ja dat kan
Hoe een tv-afstandsbediening of anders te emuleren met Arduino Irlib: 3 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe een tv-afstandsbediening of anders te emuleren met Arduino Irlib: Inleiding Hallo allemaal en welkom bij mijn eerste Instructable. Vandaag zullen we leren, zoals de titel al zegt, om e TV-afstandsbediening of iets dergelijks te emuleren dat werkt met infraroodsignalen met behulp van Arduino (elk model) .Het probleem was: Hoe kan ik codes naar een