İçindekiler:
- 1. Adım: Gösteri
- Adım 2: Sunucuyu Kurma
- 3. Adım: İstemci Derlemesi
- 4. Adım: Akış - Sunucu
- Adım 5: Akış - İstemci
- Adım 6: Client.ino
- Adım 7: Server.ino
- 8. Adım: Dosyalar
Video: Çift Çekirdekli Arduino IDE: Uzaktan Kumanda: 8 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu video tamamen "çoklu" ile ilgilidir. Çoklu görev, çoklu çekirdek ve çoklu istemcilerle uğraşıyoruz. Bir süre önce iki ESP ile bir uzaktan kumanda yaptım: bir istemci ve bir erişim noktası. Buna dayanarak, bugün çok istemcili bir sunucu kuracağız. Bu, tek bir ESP'ye bağlı birden fazla istemciye sahip olacağımız anlamına gelir.
Bu nedenle, bugünkü ders, ESP32'de bir sunucunun oluşturulmasını, döngüye yeni istemcilerin eklenmesini ve isteklerin başka bir çekirdekte ele alınmasını içerir. İstemciler, pinlerinin durum değişikliği hakkında bilgi gönderecek ve sunucu bu durum değişikliklerini yeniden üretecektir.
1. Adım: Gösteri
Adım 2: Sunucuyu Kurma
3. Adım: İstemci Derlemesi
4. Adım: Akış - Sunucu
Adım 5: Akış - İstemci
Adım 6: Client.ino
Bildirimler ve değişkenler
#include //Dados da rede //Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Konex com o server WiFiClient client; //Yapısal kuyruk tanımlı işletim sistemi enviar enviar (geliştirme seri sunucu yok) typedef struct{ int sayı; int durumu; }Toplu iğne; //durum #define PIN_COUNT 2 //Array com os pinos definidos //Caso vamos trabalhar com os 21 ve 19 mas você pode alterar para os pinos que desejar Pin pinleri[PIN_COUNT] = { {.number = 21}, {.number = 19} };
Kurmak
geçersiz kurulum(){ Serial.begin(115200); //Tempo, her zaman için geçerli istemci.setTimeout(5000); //Conectamos à yeniden WiFi ve conectamos ao sunucu kurulumuWiFi(); connectClient(); for(int i=0; ben
WiFi Kurulumu
void setupWiFi(){ Serial.print("Bağlanıyor " + String(SSID)); //ESP WiFi.begin(SSID, PASSWORD); //Esperamos conectar while (WiFi.status() != WL_CONNECTED) { Serial.print("."); gecikme(500); } //WiFi Serial.println(); Serial.println("Bağlandı!"); }
ConnectClient
void connectClient(){ Serial.println("İstemci bağlanıyor"); //Esperamos conectar com o server while (!client.connect(WiFi.gatewayIP(), SERVER_PORT)) { Serial.print("."); gecikme(500); } //Sunucu için bir bağlantı oluştur Serial.println(); Serial.println("İstemci bağlandı!"); }
Döngü
void loop(){ //WiFi, mandamos conectar if(WiFi.status() != WL_CONNECTED) { setupWiFi(); } }
TutamaçBağlantısı
void handleConnection(void* pvParameters){ //ÖNEMLİ: Bir tarefa não pode terminar, deve ficar presa em um loop sonsuz while(true) { //Sunucu için sunucu, mandamos conectar if(!client.connected())) { connectClient(); } //Para cada pino, verifikamos se mudou o estado. Se mudou enviamos para o server o novo estado for(int i=0; i
hasPinStatusChanged
//Doğrulama ve doğrulama 'i' dizi mudou yapmak//Retorna 'true' se mudou u 'yanlış' caso contrário boolean hasPinStatusChanged(int i) { //Faz bir leitura do pino int pinStatus = digitalRead(pins) .sayı); // Farklı if(pins.status != pinStatus) { //Guardamos o novo estado e retornamos true pins.status = pinStatus; true döndür; } //Söz konusu chegará aqui se o estado não foi alterado //Então retornamos falso return false; }
sendPinStatus
//Envia para o server os dados pino ve posição 'i' yapmak arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pins, sizeof(Pin)); client.flush(); }
Adım 7: Server.ino
Bildirimler ve değişkenler
#include #include //Dados da rede //Müşteri seri yok #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // 'SERVER_PORT' porta tanımlı Criamos sunucusu WiFiSunucu sunucusu(SERVER_PORT); //Vector onde vamos adicionar os client'ları conecte eles forem conectando std::vector client; //Yapı que tanım os dados que vamos enviar (seri seri istemci yok) typedef struct{ int sayı; int durumu; }Toplu iğne;
Kurmak
geçersiz kurulum(){ Serial.begin(115200); //Criamos, WiFi ve sunucu kurulumuWiFi(); server.begin(); xTaskCreatePinnedToCore(handleClients, //Função que executada "handleClients", //Tarefa Nome 10000, //Tamanho da pilha NULL, //Parâmetro datarefa (caso não usamos yok) 2, //Öncelikli dara NULL, // Caso queria manter uma referência para a tarefa que vai ser criada (caso não precisamos yok) 0); //Número do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) }
KurulumWiFi
void setupWiFi(){ //Coloca este ESP como Erişim Noktası WiFi.mode(WIFI_AP); //SSID ve ESP için geçerli bir bağlantı WiFi.softAP(SSID, PASSWORD); }
Döngü
void loop(){ //Verifica se um novo client está tenando se conectar WiFiClient client = server.available(); //Se sim colocamos ele vektör yok if(client) { client.push_back(client); } }
HandleClients
void handleClients(void* pvParameters){ //ÖNEMLİ: Bir tarefa não pode terminar, deve ficar presa em um loop sonsuz while(true) { //Para cada client que temos no vector for(int i=0; i)
8. Adım: Dosyalar
Dosyaları indirin
BEN HAYIR
Önerilen:
Dragonboard 410c Usando IDE Eclipse Para Bir Dragonboard ile Desenvolvendo Uygulamaları Uzaktan Kumanda: 17 Adım
Desenvolvendo Uygulamaları Remotamente Para a Dragonboard 410c Usando IDE Eclipse: O objetivo deste documento é HostPC (Bilgisayar / Dizüstü Bilgisayar) için ortam yapılandırması için gerekli olan en uygun koşullar, HostPC (Bilgisayar / Defter), Alvo (Sürükle
IRduino: Arduino Uzaktan Kumanda - Kayıp Bir Uzaktan Kumandayı Taklit Etme: 6 Adım
IRduino: Arduino Uzaktan Kumanda - Kayıp Bir Uzaktan Kumandayı Taklit Edin: TV veya DVD oynatıcınızın uzaktan kumandasını kaybettiyseniz, cihazın üzerindeki düğmeleri yürümek, bulmak ve kullanmak zorunda olmanın ne kadar sinir bozucu olduğunu bilirsiniz. Bazen bu düğmeler, uzaktan kumandayla aynı işlevi bile sunmaz.
Arduino İle 2.4Ghz NRF24L01 Modülünü Kullanan Kablosuz Uzaktan Kumanda - Nrf24l01 Quadcopter için 4 Kanal / 6 Kanal Verici Alıcı - Rc Helikopter - Arduino Kullanan Rc Uçak: 5 Adım (Resimlerle)
Arduino İle 2.4Ghz NRF24L01 Modülünü Kullanan Kablosuz Uzaktan Kumanda | Nrf24l01 Quadcopter için 4 Kanal / 6 Kanal Verici Alıcı | Rc Helikopter | Arduino Kullanan Rc Uçak: Bir Rc araba çalıştırmak için | Quadcopter | dron | RC uçak | RC tekne, her zaman bir alıcı ve vericiye ihtiyacımız var, RC QUADCOPTER için 6 kanallı bir verici ve alıcıya ihtiyacımız olduğunu ve bu tür TX ve RX'in çok maliyetli olduğunu varsayalım, bu yüzden bir tane yapacağız
Dört Kanallı RC Oyuncak Uzaktan Kumandaya Dönüştürülen Sıradan Uzaktan Kumanda Kiti: 4 Adım
Dört Kanallı RC Oyuncak Uzaktan Kumandaya Dönüştürülen Sıradan Uzaktan Kumanda Kiti: 如何将通用遥控器套件转换为玩具模型中使用的四通道遥控器。遥控器套件非常便宜。它采用2262和2272芯片和433个模块构建。改造方法非常简单。只需准备一些瓦楞纸板,然后按照视频教程完成这个电子项目并为您服务。玩具车船提供远程无线控制。
Basit Bir Hava Çekirdekli İndüktör (İndüksiyon Bobini) Yapımı: 5 Adım
Basit Bir Hava Çekirdekli İndüktör (İndüksiyon Bobini) Yapmak: Bu talimat, özellikle Niftymitter için basit bir küçük hava çekirdekli indüktörün nasıl yapıldığını size söyleyecektir. Niftymitter, Tetsuo Kogawa'nın En Basit FM Vericisine dayalı açık kaynaklı bir FM vericisidir, serbest çalışan bir osilatör devresi, dolayısıyla