智能衣柜门锁、储物柜远程控制源码-SAAS本地化及未来之窗行业应用跨平台架构

一、智能衣柜扫码存放


1. 便捷高效:用户只需扫描二维码即可快速完成存放操作,节省时间。
2. 无需钥匙:避免了传统钥匙保管和可能丢失的问题。
3. 安全可靠:扫码方式增加了存取的安全性,只有授权用户能够操作。
4. 记录可查:每次存取操作都有详细的电子记录,便于追踪和管理。
5. 节省空间:智能分配衣柜空间,提高空间利用率。
6. 个性化设置:用户可以根据自己的需求设置存放时间和提醒功能。
7. 卫生保障:减少了人工接触,降低了交叉污染的风险。
8. 提升用户体验:方便快捷的操作方式,能提升用户对场所的满意度。
9. 易于管理:对于管理者来说,能够实时监控衣柜的使用情况,便于进行维护和调整。
10. 节能环保:智能化的控制可以优化能源使用,降低能耗。

二、物联网代码

#include <ETH.h> //引用以使用ETH
#include <WiFiUdp.h> 
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
//#include <ESPmDNS.h>

#include <Preferences.h> //系统存储

#define ETH_ADDR        0//PHY地址和板子上对应,默认是0
#define ETH_POWER_PIN  -1
#define ETH_MDC_PIN    23
#define ETH_MDIO_PIN   18
#define LED             2
#define ETH_TYPE       ETH_PHY_LAN8720
#define ETH_CLK_MODE   ETH_CLOCK_GPIO17_OUT
#define ETH_RESET      5//ESP32的io5可控制以太网模块复位,低电平有效,不用时可不用配置



//未来之窗
const char* ssid = "ynwlzc";
const char* password = "12345678";
WebServer server(80);

String ip = "服务器地址";
String sn = "子网";
String gw = "网关";

const char *host = "tcp服务器地址";//tcp服务器地址

WiFiClient client;
const int tcpPort = 8080;//服务器端口

static bool eth_connected = false;

bool cyberwin_tcp_server_open = true;//TCP服务

void WiFiEvent(WiFiEvent_t event)
{
 
  switch (event) {
   case SYSTEM_EVENT_ETH_START://ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Started");
      //set eth hostname here
      ETH.setHostname("esp32-ethernet");
      break;
    case SYSTEM_EVENT_ETH_CONNECTED: //接入网络 ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      
      
      if (!eth_connected) //设置固定ip,删掉可以自动获取ip
    {

        IPAddress static_ip;
        IPAddress static_sn;
        IPAddress static_gw;
        static_ip.fromString(ip);
        static_sn.fromString(sn);
        static_gw.fromString(gw);
       // ETH.config(static_ip, static_gw, static_sn);
       //取消IP
      }
      break;
    case SYSTEM_EVENT_ETH_GOT_IP: //接入网络 ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("ETH MAC: ");
      Serial.print(ETH.macAddress());
      Serial.print(", IPv4: ");
      Serial.print(ETH.localIP());


      if (ETH.fullDuplex()) {
        Serial.print(", FULL_DUPLEX");
      }
      Serial.print(", ");
      Serial.print(ETH.linkSpeed());
      Serial.println("Mbps");
      //eth_connected = true;
      digitalWrite(LED, LOW);
if (ETH.localIP().toString() == "0.0.0.0") {
        Serial.println("NO NO NO");//获取不到ip来一次以太网重启
        digitalWrite(ETH_RESET, LOW);
        delay(200);
        digitalWrite(ETH_RESET, HIGH);
        eth_connected = false;
      } else {
        eth_connected = true;
      }
      break;
    case SYSTEM_EVENT_ETH_DISCONNECTED: //失去连接 ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      digitalWrite(LED, HIGH);

      eth_connected = false;
      break;
    case SYSTEM_EVENT_ETH_STOP: //关闭 ARDUINO_EVENT_ETH_STOP:
      Serial.println("ETH Stopped");
      digitalWrite(LED, HIGH);
      eth_connected = false;
      break;
    default:
      break;
  }
}

void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(ETH_RESET, OUTPUT);
  digitalWrite(ETH_RESET, HIGH);
  Serial.println();

     Preferences prefs;
     prefs.begin("wlzcsmartvos");
     if(prefs.isKey("tcpserveropen")) { // 如果当前命名空
        String tcp_server_open = prefs.getString("tcpserveropen");
        if(tcp_server_open == "open"){
          
        }else{
          cyberwin_tcp_server_open = false;
        }
          
    } 

     if(prefs.isKey("wifi_ssid")) { // 
        String c_wifi_ssid = prefs.getString("wifi_ssid");
        //启动ap
        const char* c_wifi_ssid_char =c_wifi_ssid.c_str();
           WiFi.softAP(c_wifi_ssid_char,"yn202305");
     }else{
      //启动ap
        WiFi.softAP("wlzc_smart_vos","yn202305");
      
     }

      if(prefs.isKey("eth_ip")) { // 
           

              String c_eth_ip = prefs.getString("eth_ip");
              String c_eth_mask = prefs.getString("eth_mask");
              String c_eth_gw = prefs.getString("eth_gw");

               IPAddress static_ip_a;
               IPAddress static_mask_a;
               IPAddress static_gw_a;
              static_ip_a.fromString(c_eth_ip);
              static_mask_a.fromString(c_eth_mask);
              static_gw_a.fromString(c_eth_gw);
          
           
              ETH.config(static_ip_a, static_gw_a, static_mask_a);
      }

     
    
  
  //链接
 // WiFi.mode(WIFI_STA);
    WiFi.begin ( ssid, password );


  WiFi.onEvent(WiFiEvent);
  ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); //启用ETH

  digitalWrite(LED, LOW);

 // Wait for connection
 /*
  * wifi 不再是必须,不请求互联网
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 */
  if (MDNS.begin("esp32")) {
    Serial.println("MDNS responder started");
  }



//启动服务器
  server.on ( "/", handleRoot );
  server.on ( "/test.svg", drawGraph );
  server.on ( "/inline", []() {
    server.send ( 200, "text/plain", "this works as well" );
  } );
  server.onNotFound ( handleNotFound );
  server.begin();
  Serial.println ( "HTTP server started" );
  
}

void loop()
{

   server.handleClient();
    delay(2);//allow the cpu to switch to other tas

    if (cyberwin_tcp_server_open == false){
      //关闭它产品服务
        return;
    }
  
  if (!eth_connected) {
    return;
  }

  if (!client.connected())//连接tcp服务器
  {
    if (!client.connect(host, tcpPort))
    {
      Serial.println("connection....");
      delay(500);

    }
   
    
    
  }

  while (client.available())
  {
    char val = client.read();
    Serial.println(val);
    if (val == 'a')
    {
      digitalWrite(LED, HIGH);
      delay(1000);
      digitalWrite(LED, LOW);
      client.print("bb");
      client.flush();
    }
     if (val == 'c')
    {
    //  digitalWrite(LED, HIGH);
    //  delay(1000);
     // digitalWrite(LED, LOW);
     String data = "8A0100119A";
     //这里长度记得除下2    使用前校验一下String的长度是否正确
      byte byteArray[data.length() / 2] = {0};
      hexCharacterStringToBytes(byteArray, data.c_str());
    //  Serial.begin(9600);
      Serial.write(byteArray,5);

 

      client.print("wlzc lock");
      client.flush();
    }
  }

}


void handleRoot() {
//  digitalWrite ( led, 1 );
  char temp[400];
  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;

  snprintf ( temp, 400,

"<html>\
  <head>\
    <meta http-equiv='refresh' content='5'/>\
    <title>未来之窗智能终端</title>\
    <style>\
      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
    </style>\
  </head>\
  <body>\
    <h1>未来之窗智能终端-智能家居!</h1>\
    <p>Uptime: %02d:%02d:%02d</p>\
    <img src=\"/test.svg\" />\
  </body>\
</html>",

    hr, min % 60, sec % 60
  );
  server.send ( 200, "text/html", temp );
//  digitalWrite ( led, 0 );
}

void handleNotFound() {
//  digitalWrite ( led, 1 );
  String message = "{\"meessage\":\"File Not Found ";
  message += "URI: ";
  message += server.uri();
  message += "Method: ";
  message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
  message += "Arguments: ";
  message += server.args();
  message += "";

  

  for ( uint8_t i = 0; i < server.args(); i++ ) {
    message += " " + server.argName ( i ) + "= " + server.arg ( i ) + ";";
  }
 String action=server.arg("action");
   message += ";";
   message += ";action="+action;
    message += "\"";
   Serial.println("action="+action);
   if(action=="lock"){
       Serial.println("openlock");
       
        Serial.print(138, HEX);// "4E"
         Serial.print(1, HEX);// "4E"
          Serial.print(1, HEX);// "4E"
          Serial.print(17, HEX);// "4E"
           Serial.print(155, HEX);// "4E"
        
      //  message += "<hr>门锁已经打开";
       message += ",\"message\":\"门锁已经打开\"";
          digitalWrite(3, HIGH);
          delay(2000);
   }

    if(action=="lock2"){
      
       
        Serial.write(138);// "4E"
         Serial.write(1);// "4E"
          Serial.write(1);// "4E"
          Serial.write(17);// "4E"
           Serial.write(155);// "4E"
        
       // message += "<hr>门锁已经打开2";
        message += ",\"message\":\"门锁已经打开2\"";
         // digitalWrite(3, HIGH);
         // delay(2000);
   }

    if(action=="openalllock"){

     String data = "8A0100119A";
     //这里长度记得除下2    使用前校验一下String的长度是否正确
      byte byteArray[data.length() / 2] = {0};
      hexCharacterStringToBytes(byteArray, data.c_str());
       //  Serial.begin(9600);
      Serial.write(byteArray,5);

      //   message += "<hr>门锁已经打开";
          message += ",\"message\":\"门锁全部已经打开\"";

      
    }

     if(action=="remoteopenlock"){

       String data = "8A0100119A";
        String param1=server.arg("param1");
        data = param1;//赋值
        
     //这里长度记得除下2    使用前校验一下String的长度是否正确
      byte byteArray[data.length() / 2] = {0};
      hexCharacterStringToBytes(byteArray, data.c_str());
       //  Serial.begin(9600);
     

       //  message += "<hr>门锁已经打开";
        message += ",\"message\":\"门锁指令操作成功\"";
       message += ",\"param1\":\""+param1+"\"";

      
    }

      if(action=="restart"){
          message += ",\"message\":\"重启\"";
          ESP.restart();
        
      }


       if(action=="sysstem_getconfig"){
          message += ",\"message\":\"读取系统配置\"";
           String param1=server.arg("param1");

            message =message+ ",\"param1\":\""+param1+"\"";
           
            Preferences prefs;
           prefs.begin("wlzcsmartvos");
           const char* paramkey =param1.c_str();
           if(prefs.isKey(paramkey)) { // 如果当前命名空间中有键名为"naisu"的元素
               // Serial.printf("naisu: %s\n\n", prefs.getString("naisu"));
               String data =  prefs.getString(paramkey);
               message =message+ ",\"data\":\""+data+"\"";
       
           } else {
             message =message+ ",\"data\":\""+"cyber_empty"+"\"";
            
           }
          
        
      }

        if(action=="sysstem_setconfig"){
          message += ",\"message\":\"配置系统配置\"";
           String param1=server.arg("param1");
           String param2=server.arg("param2");

            message =message+ ",\"param1\":\""+param1+"\"";
            message =message+ ",\"param2\":\""+param2+"\"";
           
            Preferences prefs;
           prefs.begin("wlzcsmartvos");
           const char* paramkey =param1.c_str();
           if(prefs.isKey(paramkey)) { // 如果当前命名空间中有键名为"naisu"的元素
               // Serial.printf("naisu: %s\n\n", prefs.getString("naisu"));
             //  String data =  prefs.getString(param1);
               message =message+ ",\"data\":\""+param2+"\"";

              
       
           } else {
             message =message+ ",\"data\":\""+param2+"\"";
              
            
           }
          
        
      }


  if(action=="sysstem_setip"){
     String param1=server.arg("param1");
     String param2=server.arg("param2");
     String param3=server.arg("param3");
          IPAddress static_ip_s;
          IPAddress static_mask_s;
          IPAddress static_gw_s;
          static_ip_s.fromString(param1);
          static_mask_s.fromString(param2);
          static_gw_s.fromString(param3);
            Preferences prefs;
            prefs.begin("wlzcsmartvos");
            prefs.putString("eth_ip", param1);
            prefs.putString("eth_mask", param2);
            prefs.putString("eth_gw", param3);
            prefs.end();
           
          ETH.config(static_ip_s, static_gw_s, static_mask_s);
  }

 

    
    
     message += "}";
 

  server.send ( 404, "text/html", message );
  //digitalWrite ( led, 0 );
}

//未来之窗控制门锁
void cyber_openlock(int bord ,int lock){
         Serial.write(138);//
         Serial.write(bord);// 
          Serial.write(lock);// 
          Serial.write(17);//
          Serial.write(155);//
        
     
}

void drawGraph() {
  String out = "";
  char temp[100];
  out += "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"400\" height=\"150\">\n";
  out += "<rect width=\"400\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n";
  out += "<g stroke=\"black\">\n";
  int y = rand() % 130;
  for (int x = 10; x < 390; x+= 10) {
    int y2 = rand() % 130;
    sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\" />\n", x, 140 - y, x + 10, 140 - y2);
    out += temp;
    y = y2;
  }
  out += "</g>\n</svg>\n";

  server.send ( 200, "image/svg+xml", out);
}

 
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值