跳到內容
  • 版面
  • 最新
  • 標籤
  • 熱門
  • World
  • 使用者
  • 群組
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 預設 (Yeti)
  • 未使用主題設計
Collapse
品牌標誌
  1. 首頁
  2. ESP32教學與討論
  3. 水位感測器
  4. 水位感測器-MQTT

水位感測器-MQTT

已排程 已置頂 已鎖定 已移動 水位感測器
esp32mqtt水位感測器
1 貼文 1 Posters 16 瀏覽
  • 從舊到新
  • 從新到舊
  • 最多點贊
回覆
  • 在新貼文中回覆
登入後回覆
此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
  • adminA 離線
    adminA 離線
    admin
    寫於 最後由 編輯
    #1

    2.水位感測器-MQTT.pdf

    #include <WiFi.h>
    #include <PubSubClient.h> //請先安裝PubSubClient程式庫
    
    // ------ 以下修改成你自己的WiFi帳號密碼 ------
    char* ssid = "YourSSID";
    char* password = "YourPASSWORD";
    //------ 以下修改成你的水位感測器腳位 ------
    int water_sensor=36; // 水位感測器S信號腳 連接到ESP32的 GPIO36 
    int a;
    // ------ 以下修改成你MQTT設定 ------
    char* MQTTServer = "broker.mqttgo.io";//免註冊MQTT伺服器
    int MQTTPort = 1883;//MQTT Port
    char* MQTTUser = "";//不須帳密
    char* MQTTPassword = "";//不須帳密
    //推播主題1:推播水位(記得改Topic)
    char* MQTTPubTopic1 = "YourTopic/class402/WaterLevel";
    long MQTTLastPublishTime;//此變數用來記錄推播時間
    long MQTTPublishInterval = 3000;//每3秒推撥一次
    WiFiClient WifiClient;
    PubSubClient MQTTClient(WifiClient);
    
    void setup() {
      Serial.begin(115200); //Set console baud rate
      pinMode(water_sensor,INPUT); //設置water_sensor對應的腳GPIO36為輸入
    
    
      //開始WiFi連線
      WifiConnecte();
    
      //開始MQTT連線
      MQTTConnecte();
    }
    
    void loop() {
      //如果WiFi連線中斷,則重啟WiFi連線
      if (WiFi.status() != WL_CONNECTED) { WifiConnecte(); }
    
      //如果MQTT連線中斷,則重啟MQTT連線
      if (!MQTTClient.connected()) {  MQTTConnecte(); }
    
      //如果距離上次傳輸已經超過1秒,則Publish距離
      if ((millis() - MQTTLastPublishTime) >= MQTTPublishInterval ) {
       
      int val=analogRead(water_sensor); //從水位感測器讀出類比數值
      a=map(val,0,4095,0,100);          //將val轉換成百分比顯示
      Serial.print("水位狀態:");
      Serial.print(val);
      Serial.println(" val");
      Serial.print("水位百分比:");
      Serial.print(a);
      Serial.println(" %");
        // ------ 將水位送到MQTT主題 ------
        MQTTClient.publish(MQTTPubTopic1, String((int)a).c_str());
        Serial.println("水位已推播到MQTT Broker");
        MQTTLastPublishTime = millis(); //更新最後傳輸時間
      }
      MQTTClient.loop();//更新訂閱狀態
      delay(50);
    
      }
    
    
    
    //開始WiFi連線
    void WifiConnecte() {
      //開始WiFi連線
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("WiFi連線成功");
      Serial.print("IP Address:");
      Serial.println(WiFi.localIP());
    }
    
    //開始MQTT連線
    void MQTTConnecte() {
      MQTTClient.setServer(MQTTServer, MQTTPort);
      while (!MQTTClient.connected()) {
        //以亂數為ClietID
        String  MQTTClientid = "esp32-" + String(random(1000000, 9999999));
        if (MQTTClient.connect(MQTTClientid.c_str(), MQTTUser, MQTTPassword)) {
          //連結成功,顯示「已連線」。
          Serial.println("MQTT已連線");
    
        } else {
          //若連線不成功,則顯示錯誤訊息,並重新連線
          Serial.print("MQTT連線失敗,狀態碼=");
          Serial.println(MQTTClient.state());
          Serial.println("五秒後重新連線");
          delay(5000);
        }
      }
    }
    
    

    平台使用上有任何問題歡迎寄信至[email protected]詢問

    1 條回覆 最後回覆
    0
    回覆
    • 在新貼文中回覆
    登入後回覆
    • 從舊到新
    • 從新到舊
    • 最多點贊


    風狂logo 藏碳logo 南台logo SDGS2 SDGS7 SDGS12
    • 登入

    • 沒有帳戶? 註冊

    Powered by NodeBB Contributors
    • 第一個貼文
      最後的貼文
    0
    • 版面
    • 最新
    • 標籤
    • 熱門
    • World
    • 使用者
    • 群組