<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • WIFI門禁

    WIFI門禁的詳細介紹

    創作者:damahua | 更新日期:2023-06-05 | 在線時長:1333天

    功能介紹

    改裝電控鎖 增加手機解鎖 wifi接近解鎖

    硬件組成

    esp8266 12f  3.3降壓模塊

    代碼說明

    庫:ArduinoBIGIOT


    #if defined ESP32
    #include <WiFi.h>
    #elif defined ESP8266
    #include <ESP8266WiFi.h>
    #include <ESP8266WiFiMulti.h>
    #include <DNSServer.h>
    #include <ESP8266WebServer.h>
    #else
    #error "Only support espressif esp32/8266 chip"
    #endif
    #include "bigiot.h"
    #define banben "210320" //版本
    #define lock 5 //控制鎖
    #define led 2
    #define data_ID "7436"
    #include <ESP8266httpUpdate.h>
    int a = 0;
    int b = 0;
    int c = 0;
    const char *id = "8502";
    const char *apikey = "b46a922d3";
    const char *usrkey = "456819f2a7";
    const char *apssid = "x-x";
    const char *appassword = "19890123";
    unsigned long previousMillis = 0;
    const long interval = 60000; //延時
    bool blinkFlag;
    ADC_MODE(ADC_VCC);
    WiFiClient client;
    BIGIOT bigiot(client);
    ESP8266WiFiMulti wifiMulti;
    //portal認證監聽53端口
    const byte DNS_PORT = 53;
    IPAddress apIP(192, 168, 4, 1);
    DNSServer dnsServer;
    ESP8266WebServer webServer(80);
    //portal認證頁面
    String htmlPage = ""
                      "<html>\n"
                      "<meta content=\"width=device-width,user-scalable=no\" name=\"viewport\">\n"
                      "<style>\n"
                      ".b{background-color:#008CBA;border:none;color:white;padding:15px 32px;text-align:center;text-decoration:none;display:inline-block;font-size:16px;margin:4px 2px;}\n"
                      "</style>\n"
                      "</head>\n"
                      "<body>"
                      "<a href=\"up\" class=\"b\" target=\"h\">updata</a>\n"
                      "<a href=\"open\" class=\"b\" target=\"h\">open</a><br>\n"
                      "<iframe name=\"h\"  width=\"300\" height=\"100\" ></iframe>\n"
                      "</body>\n"
                      "</html>"
                      "\r\n";
    WiFiEventHandler probeRequestPrintHandler;//實例化WIFI事件對象
    void eventCallback(const int devid, const int comid, const char *comstr, const char *slave)
    { Serial.println(comstr);
      if (comstr ==  "play") {
        digitalWrite(lock, HIGH);
        bigiot.upload(data_ID, "已開鎖");
        delay(900);
        digitalWrite(lock, LOW);
      } else if (comstr == "up") {
        Toupdate(1);
      } else if (comstr ==  "v") {
        bigiot.upload(data_ID, banben);
      } else if (comstr ==  "offOn") {
        digitalWrite(led, !digitalRead(led));
      } else if (comstr ==  "test") {

      }
    }
    //
    void disconnectCallback(BIGIOT & obj)
    { digitalWrite(2, LOW);
      Serial.println("offline");
    }

    void connectCallback(BIGIOT & obj)
    { digitalWrite(2, HIGH);
      Serial.println("online");
      delay(500);
      bigiot.upload(data_ID, banben);//發送版本
    }
    //===============================================
    void setup() {
      Serial.begin(115200);
      delay(100);
      Serial.println("-");
      Serial.println("set>pin");
      pinMode(led, OUTPUT);
      pinMode(lock, OUTPUT);
      pinMode(hwpin, INPUT);
      digitalWrite(led, LOW);
      digitalWrite(lock, LOW);
      ESP.wdtEnable(WDTO_8S); //打開看門狗 8秒重啟
      Serial.println("set>wifi");
      WiFi.mode(WIFI_AP_STA);//設置模式為AP+STA
      WiFi.softAP(apssid, appassword); //信道1 隱藏ssid0 1
      WiFi.setOutputPower(1);//降低ap發射功率
      wifiMulti.addAP("####", "a7261039");
      wifiMulti.addAP("chen", "15059393360");
      wifiMulti.addAP("ChinaNet-jluI", "ibpli7tp");
      wifi_set_sleep_type(MODEM_SLEEP_T);//休眠模式
      while (wifiMulti.run() != WL_CONNECTED) {
        Serial.print(">");
        delay(500);
      }

      //==================================
      bigiot.eventAttach(eventCallback);
      bigiot.disconnectAttack(disconnectCallback);
      bigiot.connectAttack(connectCallback);
      bigiot.login(id, apikey, usrkey);
      probeRequestPrintHandler = WiFi.onSoftAPModeProbeRequestReceived(&onProbeRequestPrint);  //AP模式下收到探針請求時
      // 吧所有的dns請求都轉到apip
      dnsServer.start(DNS_PORT, "*", apIP);
      // 給所有請求都回復認證頁面
      webServer.onNotFound([]() {
        webServer.send(200, "text/html", htmlPage);
      });
      webServer.on("/open", []() {
        c = 1;//開鎖標記
        digitalWrite(led, LOW);
        previousMillis = millis();
        webServer.send(200, "text/plain", ">>>OK!");
      });
      webServer.on("/up", []() {
        Toupdate(0);
      });
      webServer.begin();
      Serial.println("set>end");
      digitalWrite(led, HIGH);

    }
    void onProbeRequestPrint(const WiFiEventSoftAPModeProbeRequestReceived & evt) { //wifi探針

      if (a == 0 && evt.mac[0] == 0x4c && evt.mac[1] == 0x49 && evt.mac[2] == 0xe3 && evt.mac[3] == 0xc8 && evt.rssi > -55)  {
        a = 1;//延時標記
        c = 1;//開鎖標記
        previousMillis = millis();
        digitalWrite(led, LOW);

      }

    }


    void Toupdate(int u) { //更新
      ESP.wdtDisable();//關閉看門狗
      digitalWrite(led, LOW);
      String url;
      if (u == 1) {
        url = "http://6.666250.xyz/lock.ino.bin";
      } else {
        url = "http://192.168.4.2/lock.ino.bin";
      }
      Serial.println("正在更新...");
      bigiot.upload(data_ID, "正在更新...");
      t_httpUpdate_return ret = ESPhttpUpdate.update(url);
      switch (ret) {
        case HTTP_UPDATE_FAILED:
          Serial.println("升級失敗");
          bigiot.upload(data_ID, "升級失敗");
          Toupdate(0);
          break;
        case HTTP_UPDATE_NO_UPDATES:
          Serial.println("固件無更新,無需升級");
          bigiot.upload(data_ID, "固件無更新,無需升級");
          break;
        case HTTP_UPDATE_OK:
          Serial.println("升級成功");
          bigiot.upload(data_ID, "升級成功");
          break;
        default:
          Serial.println("未知錯誤");
          bigiot.upload(data_ID, "未知錯誤");
          break;
      }

    }


    void loop()
    {
      ESP.wdtFeed();//喂狗
      //監聽客戶端請求
      dnsServer.processNextRequest();
      webServer.handleClient();  
     
      if (wifiMulti.run() == WL_CONNECTED) {
        bigiot.handle();
      } else {
        digitalWrite(led, HIGH);
      }
      //延時
      if (a == 1) {
        unsigned long currentMillis = millis();
        if (currentMillis - previousMillis >= interval) {
          a = 0;
          digitalWrite(led, HIGH);
        }
      }
      //
      if (c == 1) {
        c = 0;
        digitalWrite(lock, HIGH);
        delay(700);
        digitalWrite(lock, LOW);
        Serial.println("---開鎖---");
      }
      delay(50);
    }

    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看