色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32+JAVA寵物管理系統的設計與實現

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-09-09 11:40 ? 次閱讀

【摘要】 本系統主要是由RFID自動識別技術,通過無線射頻方式對寵物的電子標簽進行讀取,獲取寵物的基本信息和在店內的所有消費,然后將數據通過網絡傳輸至服務器。在應用層開發一個管理系統,對寵物信息、店內消費等各種行為進行管理。同時系統需有登錄注冊功能,寵物信息管理,店內消費管理等功能。

一、設計需求

本系統主要是由RFID自動識別技術,通過無線射頻方式對寵物的電子標簽進行讀取,獲取寵物的基本信息和在店內的所有消費,然后將數據通過網絡傳輸至服務器。在應用層開發一個管理系統,對寵物信息、店內消費等各種行為進行管理。同時系統需有登錄注冊功能,寵物信息管理,店內消費管理等功能。

寵物店管理系統主要分為以下模塊:

1.RFID模塊:由天線射頻電路組成,通過自動識別電子標簽,采集數據,采用RFID封裝技術將其封裝,并傳輸給服務器。

2.電子標簽模塊:接收外部信號和發送信號

3.店鋪管理模塊:管理員可以對店鋪商品進行增刪改操作,修改、刪除顧客寵物信息以及店內消費行為。

4.登錄注冊模塊:新用戶可以進行注冊和登錄5.用戶管理模塊:對注冊用戶進行管理

二、設計需求總結

整個系統的設計:

(1). 寵物店每來一個新的寵物,就在軟件端進行注冊、注冊時填入寵物的名稱,寵物的類型,主人的電話號碼、選擇一張寵物的圖片方便后面展示(圖片可以預存幾張貓、狗即可)、如果寵物后面在店里有消費也會記錄包含時間,這些數據都保存在軟件端的數據庫里。

(2). 開卡: 新寵物注冊之后,需要為這個寵物辦理一張電子標簽卡,這個卡里存放著這個寵物主人的電話號碼,后面要查詢這個寵物的信息,就讀取整個電子標簽里的電話號碼,到數據庫里查詢。

(3). 開卡和查詢的數據傳輸: 設備端與軟件端采用 TCP網絡方式進行通信;設備端當做TCP客戶端,軟件端當做TCP服務器;當設備端查詢寵物的電子標簽時,設備端讀取電話號碼之后,會通過約定的數據格式通過網絡傳遞給軟件端。 當軟件端開卡注冊時,也會用約定好的數據格式傳遞給設備端,如果設備端收到數據,開發板上的LED會點亮;這時把IC拿到RC522射頻模塊上刷一下即可;如果成功寫入LED燈就會關閉。

(4). 軟件端的設計(這個軟件是給店家用的,功能都是針對店家這邊方向開發):

有注冊界面、登錄界面;

主界面上顯示店內有所有注冊過的寵物信息,每個寵物有圖片進行顯示、寵物圖片下面就顯示寵物的名稱;

商品界面: 展示一些狗糧、貓糧、藥劑、一些寵物周邊物品。 用于演示消費功能。 可以預定幾個商品即可。 用戶可以自己動態添加修改。

管理員界面: 可以對店內的商品進行添加、設計價格、修改寵物的信息等。

查詢頁面: 輸入寵物信息可以查詢這個寵物在店里的所有詳細信息。

設備硬件部分:

這里的硬件刷卡部分采用的使用STM32開發的,更加靈活方便,完成對IC卡讀寫通過網絡與JAVA服務器通信,也可以換成掃碼槍之類的其他設備。

\1. RC522刷卡模塊負責對卡進行讀寫。

\2. ESP8266WIFI初始化工作在STA模式,連接到指定WIFI,與軟件所在的電腦處于同一個局域網,方便連接軟件端的服務器進行數據通信,每次設備開機將會自動連接到程序里設置好WIFI熱點和服務器。

\3. 設備端上有一個LED燈,用來顯示刷卡的狀態—成功與否。

三、硬件設備效果圖與部分核心代碼

imgimgimg
#include "esp8266.h"
u8 ESP8266_IP_ADDR[16]; //255.255.255.255
u8 ESP8266_MAC_ADDR[18]; //硬件地址
/*
函數功能: ESP8266命令發送函數
函數返回值:0表示成功  1表示失敗
*/
u8 ESP8266_SendCmd(char *cmd)
{
    u8 i,j;
    for(i=0;i<10;i++) //檢測的次數--發送指令的次數
    {
        USARTx_StringSend(USART3,cmd);
        for(j=0;j<100;j++) //等待的時間
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]='\0';
                USART3_RX_FLAG=0;
                USART3_RX_CNT=0;
                if(strstr((char*)USART3_RX_BUFFER,"OK"))
                {
                    return 0;
                }
            }
        }
    }
    return 1;
}

/*
函數功能: ESP8266硬件初始化檢測函數
函數返回值:0表示成功  1表示失敗
*/
u8 ESP8266_Init(void)
{
    //退出透傳模式
    USARTx_StringSend(USART3,"+++");
    delay_ms(50);
    return ESP8266_SendCmd("AT\r\n");
}

/*
函數功能: 一鍵配置WIFI為AP+TCP服務器模式
函數參數:
char *ssid  創建的熱點名稱
char *pass  創建的熱點密碼 (最少8位)
u16 port    創建的服務器端口號
函數返回值: 0表示成功 其他值表示對應錯誤值
*/
u8 ESP8266_AP_TCP_Server_Mode(char *ssid,char *pass,u16 port)
{
    char *p;
    u8 i;
    char ESP8266_SendCMD[100]; //組合發送過程中的命令
    /*1. 測試硬件*/
    if(ESP8266_SendCmd("AT\r\n"))return 1;
    /*2. 關閉回顯*/
    if(ESP8266_SendCmd("ATE0\r\n"))return 2;
    /*3. 設置WIFI模式*/
    if(ESP8266_SendCmd("AT+CWMODE=2\r\n"))return 3;
    /*4. 復位*/
    ESP8266_SendCmd("AT+RST\r\n");
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
    /*5. 關閉回顯*/
    if(ESP8266_SendCmd("ATE0\r\n"))return 5;
    /*6. 設置WIFI的AP模式參數*/
    sprintf(ESP8266_SendCMD,"AT+CWSAP=\"%s\",\"%s\",1,4\r\n",ssid,pass);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
    /*7. 開啟多連接*/
    if(ESP8266_SendCmd("AT+CIPMUX=1\r\n"))return 7;
    /*8. 設置服務器端口號*/
    sprintf(ESP8266_SendCMD,"AT+CIPSERVER=1,%d\r\n",port);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;
    /*9. 查詢本地IP地址*/
    if(ESP8266_SendCmd("AT+CIFSR\r\n"))return 9;
    //提取IP地址
    p=strstr((char*)USART3_RX_BUFFER,"APIP");
    if(p)
    {
        p+=6;
        for(i=0;*p!='"';i++)
        {
            ESP8266_IP_ADDR[i]=*p++;
        }
        ESP8266_IP_ADDR[i]='\0';
    }
    //提取MAC地址
    p=strstr((char*)USART3_RX_BUFFER,"APMAC");
    if(p)
    {
        p+=7;
        for(i=0;*p!='"';i++)
        {
            ESP8266_MAC_ADDR[i]=*p++;
        }
        ESP8266_MAC_ADDR[i]='\0';
    }
    
    //打印總體信息
    USART1_Printf("當前WIFI模式:AP+TCP服務器\n");
    USART1_Printf("當前WIFI熱點名稱:%s\n",ssid);
    USART1_Printf("當前WIFI熱點密碼:%s\n",pass);
    USART1_Printf("當前TCP服務器端口號:%d\n",port);
    USART1_Printf("當前TCP服務器IP地址:%s\n",ESP8266_IP_ADDR);
    USART1_Printf("當前TCP服務器MAC地址:%s\n",ESP8266_MAC_ADDR);
    return 0;
}

/*
函數功能: TCP服務器模式下的發送函數
發送指令: 
*/
u8 ESP8266_ServerSendData(u8 id,u8 *data,u16 len)
{
    u8 i,j,n;
    char ESP8266_SendCMD[100]; //組合發送過程中的命令
    for(i=0;i<10;i++)
    {
        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d,%d\r\n",id,len);
        USARTx_StringSend(USART3,ESP8266_SendCMD);
        for(j=0;j<10;j++)
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]='\0';
                USART3_RX_FLAG=0;
                USART3_RX_CNT=0;
                if(strstr((char*)USART3_RX_BUFFER,">"))
                {
                    //繼續發送數據
                    USARTx_DataSend(USART3,data,len);
                    //等待數據發送成功
                    for(n=0;n<200;n++)
                    {
                        delay_ms(50);
                        if(USART3_RX_FLAG)
                        {
                            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
                            USART3_RX_FLAG=0;
                            USART3_RX_CNT=0;
                            if(strstr((char*)USART3_RX_BUFFER,"SEND OK"))
                            {
                                return 0;
                            }
                         }            
                    }   
                }
            }
        }
    }
    return 1;
}

/*
函數功能: 配置WIFI為STA模式+TCP客戶端模式
函數參數:
char *ssid  創建的熱點名稱
char *pass  創建的熱點密碼 (最少8位)
char *p     將要連接的服務器IP地址
u16 port    將要連接的服務器端口號
u8 flag     1表示開啟透傳模式 0表示關閉透傳模式
函數返回值:0表示成功  其他值表示對應的錯誤
*/
u8 ESP8266_STA_TCP_Client_Mode(char *ssid,char *pass,char *ip,u16 port,u8 flag)
{
    char ESP8266_SendCMD[100]; //組合發送過程中的命令
    //退出透傳模式
    //USARTx_StringSend(USART3,"+++");
    //delay_ms(50);
    /*1. 測試硬件*/
    if(ESP8266_SendCmd("AT\r\n"))return 1;
    /*2. 關閉回顯*/
    if(ESP8266_SendCmd("ATE0\r\n"))return 2;
    /*3. 設置WIFI模式*/
    if(ESP8266_SendCmd("AT+CWMODE=1\r\n"))return 3;
    /*4. 復位*/
    ESP8266_SendCmd("AT+RST\r\n");
    delay_ms(1000);
    delay_ms(1000);
    delay_ms(1000);
    /*5. 關閉回顯*/
    if(ESP8266_SendCmd("ATE0\r\n"))return 5;
    /*6. 配置將要連接的WIFI熱點信息*/
    sprintf(ESP8266_SendCMD,"AT+CWJAP=\"%s\",\"%s\"\r\n",ssid,pass);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;
    /*7. 設置單連接*/
    if(ESP8266_SendCmd("AT+CIPMUX=0\r\n"))return 7;
    /*8. 配置要連接的TCP服務器信息*/
    sprintf(ESP8266_SendCMD,"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",ip,port);
    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;
    /*9. 開啟透傳模式*/
    if(flag)
    {
       if(ESP8266_SendCmd("AT+CIPMODE=1\r\n"))return 9; //開啟
       if(ESP8266_SendCmd("AT+CIPSEND\r\n"))return 10;  //開始透傳
       if(!(strstr((char*)USART3_RX_BUFFER,">")))
       {
            return 11;
       }
        //如果想要退出發送:  "+++"
    }
    
     //打印總體信息
    USART1_Printf("當前WIFI模式:STA+TCP客戶端\n");
    USART1_Printf("當前連接的WIFI熱點名稱:%s\n",ssid);
    USART1_Printf("當前連接的WIFI熱點密碼:%s\n",pass);
    USART1_Printf("當前連接的TCP服務器端口號:%d\n",port);
    USART1_Printf("當前連接的TCP服務器IP地址:%s\n",ip);
    return 0;
}
/*
函數功能: TCP客戶端模式下的發送函數
發送指令: 
*/
u8 ESP8266_ClientSendData(u8 *data,u16 len)
{
    u8 i,j,n;
    char ESP8266_SendCMD[100]; //組合發送過程中的命令
    for(i=0;i<10;i++)
    {
        sprintf(ESP8266_SendCMD,"AT+CIPSEND=%d\r\n",len);
        USARTx_StringSend(USART3,ESP8266_SendCMD);
        for(j=0;j<10;j++)
        {
            delay_ms(50);
            if(USART3_RX_FLAG)
            {
                USART3_RX_BUFFER[USART3_RX_CNT]='\0';
                USART3_RX_FLAG=0;
                USART3_RX_CNT=0;
                if(strstr((char*)USART3_RX_BUFFER,">"))
                {
                    //繼續發送數據
                    USARTx_DataSend(USART3,data,len);
                    //等待數據發送成功
                    for(n=0;n<200;n++)
                    {
                        delay_ms(50);
                        if(USART3_RX_FLAG)
                        {
                            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
                            USART3_RX_FLAG=0;
                            USART3_RX_CNT=0;
                            if(strstr((char*)USART3_RX_BUFFER,"SEND OK"))
                            {
                                return 0;
                            }
                         }            
                    }   
                }
            }
        }
    }
    return 1;
}

四、JAVA端效果圖與部分代碼示例

如果需要資料包可以去這里下載: https://download.csdn.net/download/xiaolong1126626497/20687600

imgimgimgimgimgimgimgimgimgimgimgimgimgimgimgimgimg
package com.controller;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.common.bean.MySessionContext;
import com.common.bean.ResultData;
import com.entity.User;
import com.mapper.UserMapper;

@RestController()
@RequestMapping("/user")
public class UserController {
	@Autowired
	private UserMapper um;
	
	@PostMapping("changepswd.action")
	ResultData changePswd(String token,@RequestBody Map map) {
		 HttpSession ss = MySessionContext.getSession(  token );
		 if( ss == null ) {
			 return ResultData.fail("請先登錄!");
		 }
		 User uu = (User) ss.getAttribute("login_user");
		 if( uu == null )  return ResultData.fail("請先登錄!");
		 String password = map.get("password");
		 String newpassword = map.get("password2");
		 int num = um.updatePassword(uu.getId(), password, newpassword);
		 if( num > 0) return ResultData.success();
		  return ResultData.fail("原始密碼錯誤");
	}
	@PostMapping("adduser.action")
	ResultData addUser(String token,@RequestBody User user) {
		 HttpSession ss = MySessionContext.getSession(  token );
		 if( ss == null ) {
			 return ResultData.fail("請先登錄!");
		 }
		 
		 User uu = (User) ss.getAttribute("login_user");
		 System.out.println( uu );
		 if( uu == null )  return ResultData.fail("請先登錄!");
		 
		 if( !("admin".equalsIgnoreCase(uu.getRole()) ||
				    "root".equals( uu.getRole() )    )  )   {
			 return ResultData.fail("請用管理員賬號登錄再添加");
		 }
		 um.addUser(user);
		 return ResultData.success();
	}
	
	@PostMapping("delete.action")
	ResultData deleteUser(String token,@RequestBody User user) {
		 System.out.println( user);
		 HttpSession ss = MySessionContext.getSession(  token );
		 if( ss == null ) {
			 return ResultData.fail("請先登錄!");
		 }
		 
		 User uu = (User) ss.getAttribute("login_user");
		 if( uu == null )  return ResultData.fail("請先登錄!");
		 if("admin".equalsIgnoreCase(user.getRole()) || "root".equals( user.getRole() ))  return ResultData.fail("無法刪除管理員用戶!");
		 
		 if( !("admin".equalsIgnoreCase(uu.getRole()) ||
				    "root".equals( uu.getRole() )    )  )   {
			 return ResultData.fail("請用管理員賬號登錄再刪除");
		 }
		 um.deleteUser(user);
		return ResultData.success();
	}
	@PostMapping("getall.action")
	ResultData getAll(String token) {
		 HttpSession ss = MySessionContext.getSession(  token );
		 if( ss == null ) {
			 return ResultData.fail("請先登錄!");
		 }
		List list = um.getAll();
		for(User u:list) {
			u.setPassword(null);
		}
		return ResultData.success().setData( list );
	}
	@PostMapping("logout.action")
	ResultData getAllUser(String token) {
		 HttpSession ss = MySessionContext.getSession(  token );
		 if( ss != null ) {
			 ss.invalidate();
		 }
		return  ResultData.success();
	}
	
	@PostMapping("login.action")
	ResultData login(@RequestBody User user,HttpSession ss) {
		User rs = um.Login( user );
		if(rs != null ) {
			rs.setPassword( null );
			ss.setAttribute("login_user", rs );
			MySessionContext.AddSession( ss );
			return  ResultData.success().setData( rs ).setToken(ss.getId() );
		}else {
			return ResultData.fail("用戶名或密碼錯誤!");
		}
	}
}
,string>
package com.common.wx;

import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import com.common.bean.WebSocketProductHolder;

public class WebSocketServerService extends TextWebSocketHandler{
	 
	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		WebSocketProductHolder.setSession( session );
	}

} 
package com.common.bean;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;

import com.alibaba.fastjson.JSONObject;
import com.entity.Product;
import com.mapper.ProductMapper;

@Component
public class WebSocketProductHolder implements ApplicationContextAware{
	private volatile static WebSocketSession oneSession;
	private volatile static Socket client;
	
	public WebSocketProductHolder() {
		initServer();
	}
	public static void setSession(WebSocketSession ss) {
		oneSession = ss;
	}
	 
	private static void initServer()   {
		new Thread() {
			public void run() {
				ServerSocket ss = null;
				try {
					ss = new ServerSocket(9988);
					System.out.println("初始化");
					while(true) {
						client = ss.accept();
						byte [] b = new byte[128];
						try {
							while(true) {
								int num = client.getInputStream().read(b);//數據少,一次讀完就阻塞。
								if(num != -1 ) {
									String cmd = new String(b,0,num);
									parseCMD( cmd);
								}
							}
						}catch (Exception e) {
							 System.out.println("連接斷開...");
						}
					}
				}catch (Exception e) {
				}
			}
		}.start();
	}
	public static void register(String cardid)throws IOException {
		if(cardid!=null && cardid.length() >0 && 
				client!=null && client.isConnected()) {
			client.getOutputStream().write(("register:"+cardid+"\r\n").getBytes());
		}
	}
 
	private static void parseCMD(String cmd) {
		 if(cmd.startsWith("query")) {
			try {
				 String cardid = cmd.split(":")[1].trim();
				 if(  oneSession != null ) {
					 oneSession.sendMessage( new TextMessage( cardid ) );
				 } 
			}catch (Exception e) {
				 System.out.println("數據錯誤:"+cmd);
			}
			  
		 }
	}
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		initServer();
	}
}
商品名稱商品價格商品數量商品分類商品描述商品圖片提交
查詢 當前共 {{datalist.length}} 件商品 商品編號商品名稱商品分類商品價格商品數量商品圖片操作 {{item.name}} {{item.sortname}} {{item.price|priceText}} {{item.num}} 詳情刪除修改返回商品編號 {{detail.id}} 商品名稱 {{detail.name}} 商品價格 {{detail.price|priceText}} 商品數量 {{detail.num}} 商品分類 {{detail.sortname}} 商品描述 {{detail.detail}} 商品圖片
商品名稱商品價格商品數量商品分類商品描述商品圖片提交
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19109

    瀏覽量

    304837
  • STM32
    +關注

    關注

    2270

    文章

    10896

    瀏覽量

    355766
  • JAVA
    +關注

    關注

    19

    文章

    2966

    瀏覽量

    104704
收藏 人收藏

    評論

    相關推薦

    RIFD技術在寵物管理上的應用方案

    ; 系統管理模塊同時也提供數據同步和數據備份、還原功能。系統備份、還原是用戶通過Web操作輕松實現數據的備份和還原,除去了復雜的數據庫操作。數據同步用來保證寵物移動
    的頭像 發表于 12-13 09:33 ?7543次閱讀
    RIFD技術在<b class='flag-5'>寵物</b><b class='flag-5'>管理</b>上的應用方案

    java學生信息管理系統

    java學生信息管理系統
    發表于 10-03 14:47

    機智云技術在寵物管理系統中的應用

    ,整合市場上單一產品的優點,設計實現基于機智云技術的智能寵物管理系統。本系統以Cortex-M4為內核的
    發表于 04-22 19:01

    機智云技術在寵物管理系統中的應用

    摘要: 為了方便人們更好地管理寵物,設計基于STM32和機智云SDK進行二次開發的安卓APP寵物管理系統
    發表于 03-03 21:33

    怎么實現基于java的土地檔案管理系統設計?

    怎么實現基于java的土地檔案管理系統設計?
    發表于 09-18 06:41

    如何利用Java swing mysql去實現一種電影票訂票管理系統

    Java swing mysql實現的電影票訂票管理系統,主要實現的功能有:用戶端:登錄注冊、查看電影信息、選擇影院場次、選座購票、查看自己
    發表于 01-03 06:23

    基于Web遠程文件管理系統java實現

    為了實現遠程文件管理系統的跨操作系統運行,設計了一套基于 Java Socket 的遠程文件類應用程序接口(API),并在此基礎上
    發表于 05-31 14:38 ?40次下載

    RFID寵物狗防疫管理系統如何制作

    寵物狗疫苗管理系統,從根本上解決寵物丟失、遺棄和監管問題,帶著全球唯一識別碼(UID)的寵物電子芯片,將作為
    發表于 11-15 14:15 ?1062次閱讀

    使用Java實現的學生管理系統詳細資料說明

    本文檔的主要內容詳細介紹的是使用Java實現的學生管理系統詳細資料說明。
    發表于 12-04 08:00 ?3次下載
    使用<b class='flag-5'>Java</b><b class='flag-5'>實現</b>的學生<b class='flag-5'>管理</b><b class='flag-5'>系統</b>詳細資料說明

    RFID寵物狗防疫管理如何來實現

    rfid寵物狗疫苗管理系統,從根本上解決寵物丟失、遺棄和監管問題,帶著全球唯一識別碼(UID)的寵物電子芯片,將作為
    發表于 04-01 09:58 ?789次閱讀

    使用Java實現超市貨物管理系統的資料合集免費下載

    本文檔的主要內容詳細介紹的是使用Java實現超市貨物管理系統的資料合集免費下載。
    發表于 05-29 08:00 ?2次下載
    使用<b class='flag-5'>Java</b><b class='flag-5'>實現</b>超市貨物<b class='flag-5'>管理</b><b class='flag-5'>系統</b>的資料合集免費下載

    基于機智云技術的智能寵物管理系統

    摘要:為了方便人們更好地管理寵物,設計基于STM32和機智云SDK進行二次開發的安卓APP寵物管理系統
    的頭像 發表于 03-03 15:40 ?4153次閱讀
    基于機智云技術的智能<b class='flag-5'>寵物</b><b class='flag-5'>管理</b><b class='flag-5'>系統</b>

    基于機智云寵物管理系統總體設計

    針對目前市場的需求,整合市場上單一產品的優點,本文基于機智云平臺技術設計了一款智能寵物管理系統
    的頭像 發表于 03-31 14:56 ?2396次閱讀

    【IoT畢設】機智云物聯網平臺+STM32單片機+智能寵物實現

    、溫濕度傳感器和電機驅動等模塊,實現了智能喂養、空氣凈化和寵物排泄物清理等功能。系統利用ESP-01SWiFi模塊接入機智云平臺,將傳感器收集的信息實時傳輸到手機App
    的頭像 發表于 08-30 09:25 ?2167次閱讀
    【IoT畢設】機智云物聯網平臺+<b class='flag-5'>STM32</b>單片機+智能<b class='flag-5'>寵物</b>屋<b class='flag-5'>實現</b>

    物聯網智能寵物管理系統

    隨著物聯網技術發展,智能寵物管理系統備受關注。本文提出基于物聯網技術的系統,智能管理寵物飲食和環
    的頭像 發表于 06-01 08:10 ?2172次閱讀
    物聯網智能<b class='flag-5'>寵物</b><b class='flag-5'>管理</b><b class='flag-5'>系統</b>
    主站蜘蛛池模板: 涩涩视频在线看| 青青久在线| 免费毛片播放| 嫩草国产精品99国产精品| 欧美成人猛片aaaaaaa| 日本学生VIDEOVIDEOS更新| 天美传媒麻豆精品| 亚洲精品久久国产高清| 中文在线日韩亚洲制服| SORA是什么意思| 国产欧美精品一区二区三区-老狼| 国内外成人免费在线视频| 老头狠狠挺进小莹体内视频| 秋霞网韩国理伦片免费看| 羞羞漫画视频| 最新国产精品福利2020| 大乳牛奶女magnet| 精品国产国产精2020久久日| 麻豆AV久久无码精品九九| 日韩亚洲国产欧美免费观看| 亚洲国产中文字幕在线视频| 2022国产精品不卡a| 国产成人免费网站在线观看| 九色PORNY真实丨首页| 欧美亚洲韩日午夜| 亚洲免费视频日本一区二区| 99精品视频在线观看re| 国产人妻麻豆蜜桃色| 女人一级毛片免费视频观看| 向日葵视频app下载18岁以下勿看| 诱人的女邻居9中文观看| 成人在线视频在线观看| 九九免费精品视频| 日韩一区精品视频一区二区| 亚洲午夜久久久久久久久电影网 | 亚洲AV永久无码精品澳门| 4399日本电影完整版在线观看免费| 俄罗斯6一12呦女精品| 久久是热频国产在线| 涩涩在线观看免费视频| 最近2018年手机中文字幕|