[Arduino + ESP32 + Tencent Cloud + sg90] キャプティブポータル + Tencent クラウド制御スイッチライト

作者が言いたいことがある


  ブロガーにはArduino開発の基礎はありませんが、より便利な配信ネットワークを実現するために、最近はESP32-12F(手元に1台だけあり、他のものでも使えるため)を使ってリモートで切り替えを試みています。ライト!前回の記事で STM32 を使用してリモートで照明のオンとオフを切り替える場合、照明をオンまたはオフにするかどうかは、Tencent Cloud から送信される命令の数に完全に依存することに気づいたかどうかはわかりませんが、この方法は非常に愚かです。これを書いたのは、Tencent Lianlian APP を使用しているときに、ボタンを押しても固定の指示しか送信できず、ライトをオンにするかオフにするかを区別できないことがわかったからです。しかし最近、WeChat アプレットを使用しているときに、アプレットが照明をオン/オフできることと、アプレットが送信する指示が異なることに気づきました。なぜアプリが固定の指示しか送信できないのかについては、ブロガーはまだ理解していません。知っている人がいたら、コメント欄にメッセージを残してください。

他にご質問がある場合は、記事の最後にある公開アカウントのプライベート メッセージ ディスカッションに従ってください。

1. 配電網の問題

前回の記事では STM32 を使用してリモート スイッチの配光ネットワーク問題を実現するために良いアイデアがなかったという事実を考慮して、ここではキャプティブ ポータルと Web ネットワーク配給を使用してみます。 Web配信とキャプティブポータルについては、こちらの記事を参照してください。 ESP8266 の Web 構成とキャプティブ ポータル (Wi-Fi 接続時に Web ページが自動的に開く) の実装。このボスのプログラムも参照できます。ブロガーはArduino開発についてあまり詳しくなかったので、兄貴のプログラムも参考にしましたが、いくつか修正を加えました。変更されたキャプティブ ポータル ページは次のようになります。

ネットワーク設定ページ

1.1 Webページのソースコード

<!DOCTYPE html>
<html lang='en'>
<head>
  <meta charset='UTF-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  <title>Document</title>
</head>
<body style='background: #e5e9f2'>
  <div align='center' style='margin-top:80px;'>
    <div align='center' style='width:300px;height:240px;background:#FFFFFF;border-radius: 30px;'>
      <form name='input' action='/' method='POST'>
        <input type='text' value='ERTU Elec' disabled='disabled' style='color:#FFFFFF;background:#90EE90;border-radius:30px;width:170px;height:30px;border:none;margin-top:15px;text-align:center;'><br>
        <input type='text' name='ssid' placeholder='请输入 WiFi 名称' style='margin-top:20px;width:170px;height:30px;text-align:center;border-radius: 10px;'><br>
        <input type='text' name='password' style='width:170px;height:30px;text-align:center;margin-top:15px;border-radius: 10px;' placeholder='请输入 WiFi 密码'><br>
        <input type='submit' value='确定' style='border-radius:30px;width:170px;height:30px;margin-top:20px;border:none;background:#90EE90;color:#FFFFFF;'>
      </form>
     </div>
   </div>
</body>
</html>

1.2 キャプティブポータル + Web 構成

上で紹介したように、コードは上記の記事のリファレンスをベースにしていますが、少し変更しています。ここでは問題点の説明と修正箇所のみ紹介します。

まずは大手のコードの一部を投稿します

void connectNewWifi(void){
    
    
  WiFi.mode(WIFI_STA);//切换为STA模式
  WiFi.setAutoConnect(true);//设置自动连接
  WiFi.begin();//连接上一次连接成功的wifi
  Serial.println("");
  Serial.print("Connect to wifi");
  int count = 0;
   while (WiFi.status() != WL_CONNECTED) {
    
    
    delay(500);
    Serial.print(".");
  }
  if(WiFi.status() == WL_CONNECTED){
    
    //如果连接上 就输出IP信息 防止未连接上break后会误输出
    Serial.println("");
    Serial.println("WIFI Connected!");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
    server.stop();
  }
}
————————————————
版权声明:本文为CSDN博主「江麟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44220583/article/details/111562423

コードのこの部分の主な問題は、接続する新しい Wifi 名とパスワードを取得しても、接続が成功しないことです。新しく入力した Wifi 名と Wifi パスワードは機能では使用されないためWiFi.begin();です。実際、元の記事のコメント欄では、皆さんがWiFi.begin(sta_ssid,sta_password);にプログラムを変更しているのを見ました。しかし、これには問題があります。元のプログラムでは、ネットワークが設定される前の sta_ssidsta_password は両方とも空の文字列であるため、Wifi への最初の接続試行は失敗する必要があります。指定した Wifi に接続する前に情報が取得されます。このように、電源ON/OFFの度にネットワーク設定を行う必要があり、あまり不親切です。そこでブロガーは次のような改善を加えました。

  // 如果输入了新的Wifi,连接新的Wifi
  if(strlen(sta_ssid) != 0 && strlen(sta_password) != 0)
  {
    
    
    WiFi.begin(sta_ssid,sta_password);   // 连接新wifi
    Serial.println("");
    Serial.println("新Wifi连接中");
  }else{
    
    
    WiFi.begin();   // 连接上一次连接成功的wifi
    Serial.println("");
    Serial.println("上次连接的Wifi连接中");
  }

Wifi に接続する準備をするときは、まず sta_ssidsta_password が両方とも空の文字列かどうかを確認します。両方とも空の場合は、直接説明できます。以前に接続したことのある Wifi に接続してみます。 sta_ssidsta_password が空の文字列でない場合は、新しい Wifi に入り、新しい Wifi に直接接続できることを意味します。

2.Tencentクラウドに接続する

Tencent Cloud に接続します。ブロガーはこの人の記事を参照して、ここに投稿しました。Esp32_Arduino が Tencent Cloud Notes に接続します

3. ステアリングギア制御

Wifiへの接続とクラウドへのアップロードが完了したら、残るはサーボ制御プログラムだけです。ここでは参考のためにESP32でサーボを制御する例を示します。

#include <Servo.h>  //调用舵机库

   Servo myservoD2;  // 定义舵机对象
   
   void setup()
   {
    
    
      myservoD2.attach(D2);

      myservoD2.write(70);   // 原始位置

      delay(1000);

      myservoD2.write(0);   // 关灯

      delay(1000);

      myservoD2.write(140);   // 开灯
   }
   void loop()
  {
    
    
  }

4. 問題の概要

Tencent Cloud をデバッグするときに、デバイスがオンラインになった後、ボタンをクリックして制御コマンドを送信すると、デバイスがすぐにオフラインとして表示されることがあります。この場合、最初に ESP32 の電源を切り、2 分間待ってから、デバッグのために再度電源を入れることができます。

おすすめ

転載: blog.csdn.net/qq_45217381/article/details/133809135