Turinys:
- 1 žingsnis: demonstracija
- 2 veiksmas: serverio montavimas
- 3 žingsnis: Kliento surinkimas
- 4 žingsnis: srautas - serveris
- 5 žingsnis: srautas - klientas
- 6 žingsnis: Client.ino
- 7 žingsnis: Server.ino
- 8 žingsnis: failai
Video: „Arduino IDE“su dvigubu branduoliu: nuotolinis valdymas: 8 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šis vaizdo įrašas yra apie „multi“. Mes susiduriame su daugiafunkciniu darbu, daugiasluoksniais ir daugiasluoksniais klientais. Prieš kurį laiką sukūriau nuotolinio valdymo pultą su dviem ESP: klientu ir prieigos tašku. Remdamiesi tuo, šiandien nustatysime kelių klientų serverį. Tai reiškia, kad turėsime kelis klientus, prijungtus prie vieno ESP.
Taigi šiandien pamoka apima serverio sukūrimą ESP32, naujų klientų įtraukimą į ciklą ir užklausų tvarkymą kitame branduolyje. Klientai atsiųs informaciją apie savo smeigtukų būsenos pasikeitimą, o serveris atkurs šiuos būsenos pakeitimus.
1 žingsnis: demonstracija
2 veiksmas: serverio montavimas
3 žingsnis: Kliento surinkimas
4 žingsnis: srautas - serveris
5 žingsnis: srautas - klientas
6 žingsnis: Client.ino
Deklaracijos ir kintamieji
#include // Dados da rede // Sukurti serverį be serverio #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 no server) typedef structure {int numeris; int statusas; } Smeigtukas; // 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 pin [PIN_COUNT] = { {.number = 21}, {.number = 19}};
Sąranka
void setup () {Serial.begin (115200); // Tempo para harkint a conexão como perdida client.setTimeout (5000); // „Conectamos“ir „Wi -Fi“prijungimas prie serverio sąrankos „Wi -Fi“(); connectClient (); už (int i = 0; i
Nustatykite „WiFi“
void setupWiFi () {Serial.print ("Prisijungimas prie" + eilutė (SSID)); // Conectamos à rede WiFi criado pelo outro ESP WiFi.begin (SSID, PASSWORD); // Esperamos konektorius while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); vėlavimas (500); } // Se chegou aqui está conectado à rede WiFi Serial.println (); Serial.println ("Prisijungta!"); }
„ConnectClient“
void connectClient () {Serial.println („Jungiamasis klientas“); // Esperamos conectar com serveris while (! Client.connect (WiFi.gatewayIP (), SERVER_PORT)) {Serial.print ("."); vėlavimas (500); } // Se chegou aqui está conectado com or server Serial.println (); Serial.println ("Klientas prijungtas!"); }
Kilpa
void loop () {// Se não estiver conectado à rede WiFi, mandamos conectar if (WiFi.status ()! = WL_CONNECTED) {setupWiFi (); }}
HandleConnection
void handleConnection (void* pvParameters) {// SVARBU: Tarefa não pode terminalas, 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 . skaičius); // Se o estado do pino for diferente if (pins .status! = PinStatus) {// Guardamos o novo estado e retornamos true pins .status = pinStatus; grįžti tiesa; } // 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*) & pins , sizeof (Pin)); client.flush (); }
7 žingsnis: Server.ino
Deklaracijos ir kintamieji
#include #include // Dados da rede // Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // „Criamos“serveris, kurio portalas apibrėžtas „SERVER_PORT“„WiFiServer server“(SERVER_PORT); // Vector onde vamos adicionar os customers conforme eles forem conectando std:: vector clients; // Struct que define os dados que vamos enviar (deve ser igual no client) typedef structure {int numeris; int statusas; } Smeigtukas;
Sąranka
void setup () {Serial.begin (115200); // „Criamos“ir „WiFi“e iniciamos arba serverio sąrankaWiFi (); 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)}
„Wi -Fi“sąranka
void setupWiFi () {// Coloca este ESP como Access Point WiFi.mode (WIFI_AP); // SSID ir Senha para se conectarem a este ESP WiFi.softAP (SSID, PASSWORD); }
Kilpa
void loop () {// Patikrinkite, ar tai naujas klientas, ar nėra „WiFiClient“kliento = serverio. prieinama (); // Se sim colocamos ele no vector, jei (klientas) {klientai.push_back (klientas); }}
RankenaKlientai
void handleClients (void* pvParameters) {// SVARBU: Tarefa não pode terminalas, deve ficar presa em um loop infinito while (true) {// Para cada client que temos no vector for (int i = 0; i
8 žingsnis: failai
Atsisiųskite failus
AŠ NE
Rekomenduojamas:
IR nuotolinis kompiuterio valdymas naudojant „Arduino“: 6 žingsniai
IR nuotolinis kompiuterio valdymas naudojant „Arduino“: Naudodami šį imtuvą, nuotoliniu būdu valdykite kompiuterį IR modulio ir „Arduino“dėka. Lazzy režimas suaktyvintas ^^
„Arduino“: laiko programos ir nuotolinis valdymas iš „Android“programos: 7 žingsniai (su paveikslėliais)
„Arduino“: laiko programos ir nuotolinis valdymas iš „Android“programos: aš visada galvojau, kas atsitiks su visomis tomis „Arduino“lentomis, kurių žmonėms nereikia, kai baigs šaunius projektus. Tiesa šiek tiek liūdina: nieko. Aš tai pastebėjau savo šeimos namuose, kur mano tėvas bandė pasistatyti savo namus
Belaidis nuotolinis valdymas naudojant 2,4 GHz NRF24L01 modulį su „Arduino“- Nrf24l01 4 kanalų / 6 kanalų siųstuvo imtuvas keturkopteriui - Rc sraigtasparnis - Rc lėktuvas naudojant „Arduino“: 5 žingsniai (su nuotraukomis)
Belaidis nuotolinis valdymas naudojant 2,4 GHz NRF24L01 modulį su „Arduino“| Nrf24l01 4 kanalų / 6 kanalų siųstuvo imtuvas keturkopteriui | Rc sraigtasparnis | Rc lėktuvas naudojant „Arduino“: valdyti Rc automobilį | Kvadopteris | Dronas | RC plokštuma | RC valtis, mums visada reikia imtuvo ir siųstuvo, tarkime, kad RC QUADCOPTER mums reikia 6 kanalų siųstuvo ir imtuvo, o tokio tipo TX ir RX yra per brangus, todėl mes jį pagaminsime savo
Nuotolinis valdymas ir nuotraukų stebėjimas per MQTT: 8 žingsniai
Nuotolinis valdymas ir nuotraukų stebėjimas per MQTT: Sveiki. Šiandien norėčiau pakalbėti apie tai, kaip sukurti nuotolinio valdymo ir stebėjimo sistemą, kuri gali būti naudojama, pavyzdžiui, garažo vartams, apšvietimui, šildymui, slėgio valdymui, temperatūrai ir daugeliui kitų parametrus. Tačiau pagrindinis jo bruožas
Nuotolinis „Arduino“roboto valdymas: 7 žingsniai
Nuotolinis „Arduino“roboto valdymas: Šioje instrukcijoje aš apimsiu „Adafruit Motor Shield“, skirtą „Arduino V2“, kartu su nRF24L01 antena, kad padarytumėte tolimo nuotolinio valdymo robotą. Aš naudoju seną „Adafruit Arduino 101 CurrieBot“su „Arduino Uno“, o ne