目次:
- 用品:
- ステップ1:デモンストレーション
- ステップ2:マウントサーバ
- ステップ3:クライアントの組み立て
- ステップ4:フロー - サーバー
- ステップ5:フロー - クライアント
- ステップ6:Client.ino
- ステップ7:Server.ino
- ステップ8:ファイル
このビデオはすべて「マルチ」についてのものです。私たちはマルチタスク、マルチコア、そしてマルチクライアントを扱っています。少し前に、クライアントとアクセスポイントの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
宣言と変数
#含める
#含める
セットアップ 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のベクトルではありません) ファイルをダウンロードする PDF いのステップ8:ファイル