デュアルコアのArduino IDE:リモートコントロール:8ステップ

デュアルコアのArduino IDE:リモートコントロール:8ステップ

目次:

Anonim

このビデオはすべて「マルチ」についてのものです。私たちはマルチタスク、マルチコア、そしてマルチクライアントを扱っています。少し前に、クライアントとアクセスポイントの2つのESPを使用してリモートコントロールを作成しました。これに基づいて、今日はマルチクライアントサーバーをセットアップします。これは、1つのESPで複数のクライアントが接続されることを意味します。

したがって、今日のレッスンでは、ESP32でサーバーを作成し、ループ内に新しいクライアントを追加し、別のコアで要求を処理します。クライアントは自分のピンの状態変化に関する情報を送信し、サーバーはこれらの状態変化を再現します。

用品:

ステップ1:デモンストレーション

ステップ2:マウントサーバ

ステップ3:クライアントの組み立て

ステップ4:フロー - サーバー

ステップ5:フロー - クライアント

ステップ6:Client.ino

宣言と変数

#含める

//サーバーの設定//サーバーの設定を無効にする#define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 //オブジェクトの比較にはWi-Fiクライアントを使用します。 // struct que define os dados que vamos enviar(サーバの開発なし)typedef struct {int number;} intステータス。 }ピン; //ピン配列の詳細な確認ステータス#define PIN_COUNT 2 //配列の詳細を定義していません//トラック番号を変更する必要はありません。 {。番号= 21}、{。番号= 19}}。

セットアップ

void setup(){

Serial.begin(115200); //テンポラリと並び替えたクライアントをclient.setTimeout(5000); // ConectamosはWiFiに接続し、server setupWiFi()を接続します。 connectClient(); (int i = 0; iの場合

WiFiの設定

void setupWiFi()

{Serial.print( "Connecting to" +文字列(SSID)); // Conectamosは、インターネット上のその他のサイトにアクセスしますESP WiFi.begin(SSID、PASSWORD); // Esperamos conectar while(WiFi.status()!= WL_CONNECTED){Serial.print( "。");遅延(500)。 // // WiFi Serial.println()を更新してください。 Serial.println( "Connected!"); }

ConnectClient

void connectClient()

{Serial.println( "接続クライアント"); // Esperamos conectar com o server while(!client.connect(WiFi.gatewayIP()、SERVER_PORT)){Serial.print( "。");遅延(500)。 //サーバーのシリアル接続を管理するSerial.println(); Serial.println( "Client connected!"); }

ループ

void loop()

{// WiFiを再定義し、(WiFi.status()!= WL_CONNECTED){setupWiFi(); }}

ハンドル接続

void handleConnection(void * pvParameters)

{//重要:テアファードターミナルの終端で、無限ループの無限大を実現する(true){//重要なコンテキスト管理サーバー、必須の場合if(!client.connected()){connectClient();} // Para cada pino、verificamos se mudou o estadoサーバー環境でのサーバーの新規開発(int i = 0; i

hasPinStatusChanged

//検証していませんpino naposição 'i' do array mudou

hasPinStatusChanged(int i){//概要を確認してくださいint pinStatus = digitalRead(pins i.number); //真偽値または虚偽値を返します。 // if(pins i.status!= pinStatus){// Guardamos o novo estado e retornamos true pins i.status = pinStatus; trueを返します。 // //デフォルトでは// falseを返します。 }

sendPinStatus

//サーバー経由でサーバーの操作を行いますpino naposição 'i'を行います

void sendPinStatus(int i){client.write((uint8_t *)&pins i、sizeof(Pin)); client.flush(); }

ステップ7:Server.ino

宣言と変数

#含める

#含める // Dados da rede //サービスを開発しません#define SSID "ESP32Server" #define PASSWORD "87654321" #define SERVER_PORT 5000 // Criamos umサーバーn portaの定義 'SERVER_PORT' WiFiサーバーサーバー(SERVER_PORT); //ベクトル・オンデマンド・バディ・コマーシャルosクライアントは、forem conectando std:: vectorクライアントを順守します。 //構造体を定義します(実際にはクライアントがありません)typedef struct {int number;} intステータス。 }ピン;

セットアップ

void setup()

{Serial.begin(115200); //サーバのセットアップWi-Fiおよびインターネット接続のセットアップWiFi(); server.begin(); xTaskCreatePinnedToCore(handleClients、//関数 "handleClients"、//名前:10000、// Tamanho da pilha NULL、//パラメータ:(casonãousamosなし)2、//優先順位:NULL、// Caso queria manterを参照してください。(0 casonãoprecisamos)0); //Némeroは、コアの処理を実行します(usamos o core 0 para o loop fic livre com o core 1)}

SetupWiFi

void setupWiFi()

{// Coloca este ESP comoアクセスポイントWiFi.mode(WIFI_AP); ESID WiFi.softAP(SSID、PASSWORD); }

ループ

void loop()

{//最新のクライアントであることを確認してください最新のWiFiClientクライアント= server.available(); //(client){clients.push_back(client); //ベクトルを使わないでください。 }}

HandleClients

void handleClients(void * pvParameters)

{// IMPORTANTE:風袋引き端末で、無限ループを無限に展開する一方で(true){//パラメータは(int i = 0; iのベクトルではありません)

ステップ8:ファイル

ファイルをダウンロードする

PDF

いの