สารบัญ:

Arduino IDE พร้อม Dual Core: รีโมทคอนโทรล: 8 ขั้นตอน
Arduino IDE พร้อม Dual Core: รีโมทคอนโทรล: 8 ขั้นตอน

วีดีโอ: Arduino IDE พร้อม Dual Core: รีโมทคอนโทรล: 8 ขั้นตอน

วีดีโอ: Arduino IDE พร้อม Dual Core: รีโมทคอนโทรล: 8 ขั้นตอน
วีดีโอ: BASIC #1 - การใช้งานโปรแกรม Arduino พื้นฐานร่วมกับบอร์ด Arduino Nano | JAKK DIY 2024, กรกฎาคม
Anonim
Image
Image
สาธิต
สาธิต

วิดีโอนี้เกี่ยวกับ "หลายรายการ" เรากำลังจัดการกับการทำงานหลายอย่างพร้อมกัน มัลติคอร์ และลูกค้าหลายราย เมื่อไม่นานมานี้ ฉันสร้างรีโมตคอนโทรลด้วย ESP สองตัว: ไคลเอนต์และจุดเข้าใช้งาน จากสิ่งนี้ วันนี้เราจะตั้งค่าเซิร์ฟเวอร์หลายไคลเอนต์ ซึ่งหมายความว่าเราจะมีลูกค้าหลายรายเชื่อมต่ออยู่ใน ESP เดียว

ดังนั้น บทเรียนในวันนี้เกี่ยวข้องกับการสร้างเซิร์ฟเวอร์ใน ESP32 การเพิ่มไคลเอนต์ใหม่ในลูป และการจัดการคำขอในแกนอื่น ลูกค้าจะส่งข้อมูลเกี่ยวกับการเปลี่ยนแปลงสถานะของหมุด และเซิร์ฟเวอร์จะทำซ้ำการเปลี่ยนแปลงสถานะเหล่านี้

ขั้นตอนที่ 1: การสาธิต

ขั้นตอนที่ 2: การติดตั้งเซิร์ฟเวอร์

การติดตั้งเซิร์ฟเวอร์
การติดตั้งเซิร์ฟเวอร์

ขั้นตอนที่ 3: การประกอบไคลเอ็นต์

การประกอบลูกค้า
การประกอบลูกค้า

ขั้นตอนที่ 4: โฟลว์ - เซิร์ฟเวอร์

กระแส - เซิร์ฟเวอร์
กระแส - เซิร์ฟเวอร์

ขั้นตอนที่ 5: โฟลว์ - ลูกค้า

กระแส - ลูกค้า
กระแส - ลูกค้า

ขั้นตอนที่ 6: Client.ino

การประกาศและตัวแปร

#include //Dados da rede //Deve ser giual no Server #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //Objeto que vai fazer a conexão com o เซิร์ฟเวอร์ WiFiClient ไคลเอ็นต์; // โครงสร้าง que กำหนด os dados que vamos enviar (deve ser igual ไม่มีเซิร์ฟเวอร์) typedef struct { หมายเลข int; สถานะ int; }เข็มหมุด; // จำนวนพินอส que iremos ler e enviar o สถานะ #define PIN_COUNT 2 //Array com os pinos definidos // ไม่มี caso vamos trabalhar com os 21 e 19 mas você pode alterar para os pinos que desejar Pin pins [PIN_COUNT] = { {.number = 21}, {.number = 19} };

ติดตั้ง

การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); //Tempo Paraพิจารณา a conexão como perdida client.setTimeout(5000); //Conectamos à rede WiFi และ conectamos ao เซิร์ฟเวอร์ setupWiFi (); connectClient(); สำหรับ(int i=0; i

ตั้งค่า WiFi

เป็นโมฆะ setupWiFi () { Serial.print ("กำลังเชื่อมต่อกับ" + สตริง (SSID)); //Conectamos à rede WiFi criado pelo outro ESP WiFi.begin(SSID, PASSWORD); // Esperamos conectar ในขณะที่ (WiFi.status () != WL_CONNECTED) { Serial.print ("."); ล่าช้า (500); } //Se chegou aqui está conectado à rede WiFi Serial.println(); Serial.println("เชื่อมต่อแล้ว!"); }

ConnectClient

เป็นโมฆะ connectClient () { Serial.println ("กำลังเชื่อมต่อไคลเอ็นต์"); // Esperamos conectar com o เซิร์ฟเวอร์ในขณะที่ (!client.connect (WiFi.gatewayIP (), SERVER_PORT)) { Serial.print ("."); ล่าช้า (500); } //Se chegou aqui está conectado com o เซิร์ฟเวอร์ Serial.println(); Serial.println("ลูกค้าเชื่อมต่อแล้ว!"); }

ห่วง

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

HandleConnection

โมฆะ handleConnection (เป็นโมฆะ * pvParameters) { // สำคัญ: ปลายทาง tarefa não pode, deve ficar presa em um loop infinito ในขณะที่ (จริง) {// Se não estiver conectado com o เซิร์ฟเวอร์, mandamos conectar ถ้า (!client.connected ()) { connectClient (); } //Para cada pino, ยืนยัน se mudou o estado. Se mudou enviamos สำหรับเซิร์ฟเวอร์ o novo estado for(int i=0; i

hasPinStatusเปลี่ยนแล้ว

//ยืนยัน se o estado do pino na posição 'i' do array mudou//Retorna 'จริง' se mudou ou 'เท็จ' caso contrário boolean hasPinStatusChanged (int i) { // Faz a leitura do pino int pinStatus = digitalRead (พิน .หมายเลข); // Se o estado do pino สำหรับที่แตกต่างกัน if (pins .status != pinStatus) { //Guardamos o novo estado e retornamos หมุดจริง .status = pinStatus; คืนค่าจริง; } //Só chegará aqui se o estado não foi alterado //Então retornamos f ยังคืนค่าเท็จ; }

sendPinStatus

//Envia para o เซิร์ฟเวอร์ os dados do pino na posição 'i' do arrayvoid sendPinStatus(int i) { client.write((uint8_t*)&pins, sizeof(Pin)); client.flush(); }

ขั้นตอนที่ 7: Server.ino

การประกาศและตัวแปร

#include #include //Dados da rede //Deve ser igual no Client #define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //เซิร์ฟเวอร์ Criamos กับ porta definida por 'SERVER_PORT' เซิร์ฟเวอร์ WiFiServer (SERVER_PORT); //Vector onde vamos adicionar os ไคลเอ็นต์สอดคล้อง eles forem conectando std::vector ไคลเอ็นต์; // โครงสร้าง que กำหนด os dados que vamos enviar (deve ser igual ไม่มีไคลเอนต์) typedef struct { หมายเลข int; สถานะ int; }เข็มหมุด;

ติดตั้ง

การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); //Criamos ทำซ้ำ WiFi และเริ่มต้นหรือเซิร์ฟเวอร์ setupWiFi (); เซิร์ฟเวอร์.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, //Priofaridade NU, // Caso queria manter uma referência para a tarefa que vai ser criada (ไม่มี caso não precisamos) 0); // หมายเลข do core que será executada a tarefa (usamos o core 0 para o loop ficar livre com o core 1) }

ตั้งค่า WiFi

เป็นโมฆะ setupWiFi () { //Coloca este ESP como Access Point WiFi.mode (WIFI_AP); //SSID และ Senha สำหรับการเชื่อมต่อ este ESP WiFi.softAP(SSID, PASSWORD); }

ห่วง

วงเป็นโมฆะ () { // Verifica se um novo client está tenando se conectar WiFiClient client = server.available (); // Se sim colocamos ไม่มีเวกเตอร์ if (ไคลเอนต์) { clients.push_back (ไคลเอนต์); } }

จัดการลูกค้า

โมฆะ handleClients (เป็นโมฆะ * pvParameters) { // สำคัญ: ปลายทาง tarefa não pode, deve ficar presa em um loop infinito ในขณะที่ (จริง) {// ลูกค้า Para cada que temos ไม่มีเวกเตอร์สำหรับ (int i = 0; i

ขั้นตอนที่ 8: ไฟล์

ดาวน์โหลดไฟล์

ไฟล์ PDF

ฉันไม่

แนะนำ: