基于STM32+JAVA宠物管理系统的设计与实现

发布者:幸福如愿最新更新时间:2024-03-22 来源: elecfans关键字:STM32  JAVA 手机看文章 扫描二维码
随时随地手机看文章

【摘要】 本系统主要是由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]='';

                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('ATrn');

}


/*

函数功能: 一键配置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('ATrn'))return 1;

    /*2. 关闭回显*/

    if(ESP8266_SendCmd('ATE0rn'))return 2;

    /*3. 设置WIFI模式*/

    if(ESP8266_SendCmd('AT+CWMODE=2rn'))return 3;

    /*4. 复位*/

    ESP8266_SendCmd('AT+RSTrn');

    delay_ms(1000);

    delay_ms(1000);

    delay_ms(1000);

    /*5. 关闭回显*/

    if(ESP8266_SendCmd('ATE0rn'))return 5;

    /*6. 设置WIFI的AP模式参数*/

    sprintf(ESP8266_SendCMD,'AT+CWSAP='%s','%s',1,4rn',ssid,pass);

    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;

    /*7. 开启多连接*/

    if(ESP8266_SendCmd('AT+CIPMUX=1rn'))return 7;

    /*8. 设置服务器端口号*/

    sprintf(ESP8266_SendCMD,'AT+CIPSERVER=1,%drn',port);

    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;

    /*9. 查询本地IP地址*/

    if(ESP8266_SendCmd('AT+CIFSRrn'))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]='';

    }

    //提取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]='';

    }

    

    //打印总体信息

    USART1_Printf('当前WIFI模式:AP+TCP服务器n');

    USART1_Printf('当前WIFI热点名称:%sn',ssid);

    USART1_Printf('当前WIFI热点密码:%sn',pass);

    USART1_Printf('当前TCP服务器端口号:%dn',port);

    USART1_Printf('当前TCP服务器IP地址:%sn',ESP8266_IP_ADDR);

    USART1_Printf('当前TCP服务器MAC地址:%sn',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,%drn',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]='';

                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]='';

                            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('ATrn'))return 1;

    /*2. 关闭回显*/

    if(ESP8266_SendCmd('ATE0rn'))return 2;

    /*3. 设置WIFI模式*/

    if(ESP8266_SendCmd('AT+CWMODE=1rn'))return 3;

    /*4. 复位*/

    ESP8266_SendCmd('AT+RSTrn');

    delay_ms(1000);

    delay_ms(1000);

    delay_ms(1000);

    /*5. 关闭回显*/

    if(ESP8266_SendCmd('ATE0rn'))return 5;

    /*6. 配置将要连接的WIFI热点信息*/

    sprintf(ESP8266_SendCMD,'AT+CWJAP='%s','%s'rn',ssid,pass);

    if(ESP8266_SendCmd(ESP8266_SendCMD))return 6;

    /*7. 设置单连接*/

    if(ESP8266_SendCmd('AT+CIPMUX=0rn'))return 7;

    /*8. 配置要连接的TCP服务器信息*/

    sprintf(ESP8266_SendCMD,'AT+CIPSTART='TCP','%s',%drn',ip,port);

    if(ESP8266_SendCmd(ESP8266_SendCMD))return 8;

    /*9. 开启透传模式*/

    if(flag)

    {

       if(ESP8266_SendCmd('AT+CIPMODE=1rn'))return 9; //开启

       if(ESP8266_SendCmd('AT+CIPSENDrn'))return 10;  //开始透传

       if(!(strstr((char*)USART3_RX_BUFFER,'>')))

       {

            return 11;

       }

        //如果想要退出发送:  '+++'

    }

    

[1] [2]
关键字:STM32  JAVA 引用地址:基于STM32+JAVA宠物管理系统的设计与实现

上一篇:基于STM32单片机的四旋翼无人机飞控设计
下一篇:使用PlatformIO对Arduino UNO和STM32板进行编程

推荐阅读最新更新时间:2026-03-20 18:11

STM32 ESP8266和Java服务器透传模式下的双向通信
标注:注意大家一般的得到的STM32程序中的延迟函数delay_ms()中的入口参数值是有限制的,他最大值只能是1864,我之前不知道,程序中一直错误地使用它,所以导致延时不准确。 //延时nms //注意nms的范围 //SysTick- LOAD为24位寄存器,所以,最大延时为: //nms =0xffffff*8*1000/SYSCLK //SYSCLK单位为Hz,nms单位为ms //对72M条件下,nms =1864 void delay_ms(u16 nms) { u32 temp; SysTick- LOAD=(u32)nms*fac_ms; //时间加载(SysTick- LOAD为24bi
[单片机]
<font color='red'>STM32</font> ESP8266和<font color='red'>Java</font>服务器透传模式下的双向通信
意法半导体携手IS2T打造最佳的STM32 Java开发平台
    内置微电脑的数字化电器,例如家电、办公设备和工业控制装置,不久将会给用户带来丰富多彩的图形用户界面,例如我们在智能手机上看到的动画和微件(widget),这一切归功于横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST)的先进技术。 智能手机和媒体播放器等电子产品的外观越来越时尚,性能也越来越强大,在厨房或工作场所使用起来比其它电子产品更加方便,其中一个原因是先进的面向对象程序设计(Object-Oriented Programming, OOP)软件设计环境,例如Java; 移动通信业目前都在使用 Java编程,而微控制器系统以传统的结构化编程语言为主,例如C语言
[嵌入式]
Eclipse下的Java反编译插件 查看源代码不再困难
Eclipse下的Java反编译插件 查看源代码不再困难 Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class Viewer无缝集成,能够很方便的使用本插件查看类库源码,以及采用本插件进行Debug调试。 Eclipse Class Decompiler插件: http://download.csdn.net/detail/ibm_hoojo/5250263 下载后,解压可以看到如下目录,复制所有文件粘贴到你的eclipse或MyEclipse的目录:D:MyEclipse 6.5myeclipse
[单片机]
Eclipse下的<font color='red'>Java</font>反编译插件 查看源代码不再困难
恩智浦推出基于Java卡的全新操作系统,扩展面向安全市场
恩智浦半导体NXP Semiconductors N.V.(纳斯达克代码:NXPI)今日推出一套最新的Java卡操作系统(JCOP3),主要面向安全识别应用。这套多方案平台可为客户带来更高的安全性与灵活性,客户不仅可以集成自己的小应用程序和个性化解决方案,与此同时还能够缩短产品上市时间。恰逢Java卡论坛二十周年纪念日,恩智浦全面推出各类产品,其中这套JCOP3平台不但标志着身份识别市场的便利性上升到一个新的水平,同时也凸显出Java卡技术一直在不断创新。 恩智浦资深副总裁兼安全交易与识别业务总经理Rafael Sotomayor表示:“恩智浦推出JCOP3平台,为促进Java卡技术的发展贡献良多。目前电子政务、银行、公共交通
[安防电子]
基于数字电视机顶盒的Java虚拟机的移植
  数字电视是当前IT产业的热点,作为一项即将在全国范围内开播的信息服务,它融合了计算机、多媒体、通信网络等众多技术。随着数字电视近几年的发展,交互式电视越来越受重视。交互式电视可以为用户提供丰富的互动功能,包括电子节目指南、视频点播、股票信息、互动游戏等。目前,数字电视机顶盒是基于有线电视网络传输的模拟电视机接收数字电视节目和数字信息的主要接入平台。要实现交互式电视的功能,数字电视中间件技术是必不可少的条件,它已成为交互式电视的核心技术。我国已制定了数字电视中间件标准,利用该标准开发具有自主知识产权的中间件系统是非常必要的。    本文以目前较为成熟的数字电视机顶盒技术为参考背景,提出了一种将中间件JavaVM移植到数字电视机顶
[嵌入式]
MicroEJ®和Micrium Software携手提供集成的C和Java环境
法国南特和美国德克萨斯州奥斯汀市,2016年10月21日 -MicroEJ 与Silicon Labs(亦名 芯科科技 ,NASDAQ:SLAB)投资的Micrium Software日前宣布,双方携手实现MicroEJ OS应用平台和 C/ OS实时操作系统(RTOS)的集成,旨在为嵌入式微控制器和微处理器软件开发人员提供混合C和Java语言最好的编程环境。 Micrium的 C/ OS RTOS执行组件和MicroEJ OS的组合性解决方案能让设备制造商快速开发具有丰富用户体验的嵌入式软件产品。MicroEJ和Micrium支持多种架构的微控制器和评估套件,使该解决方案能移植到所有的硬件上。如此,制造商才可以充分利用他们在软件上
[嵌入式]
避免侵权? Android N不沿用现有JAVA API
    或许跟先前甲骨文 (Orcale)专利诉讼,以及近年来JAVA持续传出漏洞问题有关,Google稍早证实将在下一版Android作业系统导入开放架构设计的OpenJDK开放工具,而不再沿用现有JAVA API内容。 根据VentureBeat网站报导指出,Google发言人证实下一版Android作业系统确定将改用以开放架构设计的OpenJDK开放工具,而不再沿用现有JAVA API内容,除将使Android作业系统更趋于开放,同时也能藉由开放原始码社群力量使作业系统功能更趋完整,并且避免更多系统漏洞问题产生。 此外,采用开放架构的JAVA开放工具也将使Android作业系统运作更具流畅度,并且确保其功能串
[手机便携]
Imagination 和 Oracle 携手增强Java 在嵌入式和物联网中的应用
合作内容包括增加 Java 对 32 位和 64 位 MIPS 架构的支持,拓展其从嵌入式到网络等更多市场。 2014年6月6日—— Imagination Technologies 宣布,已与甲骨文公司(Oracle Corp)展开广泛的合作关系,旨在增强 Java 对嵌入式与物联网(IoT)应用的支持,并将 Java 对 MIPS CPU 架构进行最优化设计。 Oracle 和 Imagination 正开展共同合作,将对 Oracle JDK(Java 开发套件)、Oracle Java SE Embedded 和其他产品的支持带到 MIPS32 和 MIPS64 系统中。 Java 是多种网络应用的基础,
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved