友善提示
支持JAVA、Python、大数据专业、小程序、PHP、APP、ASP.NET、Node.js、Vue、STM32单片机及51单片机、数据分析、可视化、推荐系统等各类系统定做,您出题目,我们按需求定做。或者我们出相关的选题,并定做系统都支持…
博主简介
作者简介:Java领域优质创作者、优快云博客专家 、优快云内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及同行交流合作
主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等
业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。
收藏点赞不迷路 关注作者有好处
文末获取源码
系统演示录像
文章底部名片,联系我获取更详细的演示视频
系统实际运行效果图


项目介绍
项目介绍
基于单片机的移动加湿器设计顺应了社会进步和人们对生活质量追求提升的潮流。如今,家用电器的智能化、自动化成了技术研究的一个热门方向。空气质量在家庭生活中直接关系到健康和舒适,尤其在冬季取暖或夏季空调运行时,室内湿度容易偏低,影响居住体验。加湿器作为调节空气湿度的设备,在这些场景下用处不小。然而,传统的加湿器存在不少短板,比如得靠手动开关控制,湿度调得不准,自动加湿功能欠缺,还可能有安全问题。这些不足让用户用起来不方便,也没法满足现代生活对智能设备的需求。基于单片机的移动加湿器设计正是为了应对这些问题,通过智能控制和传感器技术,打造一个自动、精准、安全的加湿系统,提升性能和使用感受。基于单片机的移动加湿器设计结合了智能家居的发展方向,家里的电器得聪明点,能自己跑,不用人操太多心。空气质量跟健康挂钩,湿度太低嗓子干、皮肤紧,太高又容易滋生细菌,智能加湿器得把湿度控得准,环境才舒服。冬天屋里暖气一烧,空气干得快,夏天空调一开,水分也跑得急,加湿器得随时顶上,传统设备手动调太慢,智能系统反应快,能管住这些变化。可移动的设计还让设备灵活,水箱放客厅、卧室都行,用起来方便。这样的加湿器不仅能改善空气,还能省电省力,用户体验好得多。
功能介绍
设计一个以单片机为主控芯片的移动加湿器系统。该系统主要包括控制模块、湿度传感器、电机驱动模块、加湿模块和无线模块等。当湿度达到预先的设定值时,实现启动加湿和停止加湿功能。
功能与技术指标要求:
1) 基本功能
(1)实时监测当前区域湿度、超设定值启停加湿;
(2)手机客户端利用WiFi模块控制移动加湿器;
(3)显示相关采集信号;
(4)声光报警。
2) 技术指标要求
(1)湿度检测精度:±5%RH;
(2)工作电压:+3.3V。
所用模块
本系统以单片机为主控芯片,设计了一个智能移动加湿器,能够实时监测环境湿度,并根据设定的阈值自动启停加湿功能。系统主要包括控制模块、湿度传感器、电机驱动模块、加湿模块和无线模块。通过控制模块和湿度传感器的协同工作,当湿度值达到或超出预设阈值时,系统自动启动或停止加湿器。用户还可以通过Wi-Fi模块通过手机进行远程控制,系统还具备实时显示温湿度等采集数据。
数据库表设计(供参考)
1. 用户表(t_user)
- 描述: 存储用户的基本信息
- 字段:
字段名 数据类型 主键 是否为空 描述 user_id BIGINT 是 否 用户ID(唯一标识) username VARCHAR(50) 否 否 用户名 password VARCHAR(255) 否 否 密码 email VARCHAR(100) 否 否 邮箱 phone VARCHAR(20) 否 是 电话号码 status TINYINT 否 否 状态(0-禁用,1-启用) create_time DATETIME 否 否 创建时间 update_time DATETIME 否 否 更新时间
2. 角色表(t_role)
- 描述: 存储角色信息
- 字段:
字段名 数据类型 主键 是否为空 描述 role_id BIGINT 是 否 角色ID(唯一标识) role_name VARCHAR(50) 否 否 角色名称 description VARCHAR(255) 否 是 角色描述 create_time DATETIME 否 否 创建时间 update_time DATETIME 否 否 更新时间
核心代码展示
/**
* 商家
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/shangjia")
public class ShangjiaController {
private static final Logger logger = LoggerFactory.getLogger(ShangjiaController.class);
@Autowired
private ShangjiaService shangjiaService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private YonghuService yonghuService;
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.notIn("id",shangjia.getId())
.andNew()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if("".equals(shangjia.getShangjiaPhoto()) || "null".equals(shangjia.getShangjiaPhoto())){
shangjia.setShangjiaPhoto(null);
}
if(shangjiaEntity==null){
shangjiaService.updateById(shangjia);//根据id更新
return R.ok();
}else {
return R.error(511,"账户或者联系方式已经被使用");
}
}
/**
* 审核
*/
@RequestMapping("/shenhe")
public R shenhe(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
logger.debug("shenhe方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
// if(shangjia.getShangjiaYesnoTypes() == 2){//通过
// shangjia.setShangjiaTypes();
// }else if(shangjia.getShangjiaYesnoTypes() == 3){//拒绝
// shangjia.setShangjiaTypes();
// }
shangjia.setShangjiaShenheTime(new Date());//审核时间
shangjiaService.updateById(shangjia);//审核
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
ArrayList<ShangjiaEntity> list = new ArrayList<>();
for(Integer id:ids){
ShangjiaEntity shangjiaEntity = new ShangjiaEntity();
shangjiaEntity.setId(id);
shangjiaEntity.setShangjiaDelete(2);
list.add(shangjiaEntity);
}
if(list != null && list.size() >0){
shangjiaService.updateBatchById(list);
}
return R.ok();
}
/**
* 登录
*/
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
if(shangjia==null || !shangjia.getPassword().equals(password))
return R.error("账号或密码不正确");
else if(shangjia.getShangjiaDelete() != 1)
return R.error("账户已被删除");
else if(shangjia.getShangjiaYesnoTypes() == 1)
return R.error("请等待审核结果");
else if(shangjia.getShangjiaYesnoTypes() == 3)
return R.error("账户审核已被拒绝,有疑问请联系服务人员");
// // 获取监听器中的字典表
String token = tokenService.generateToken(shangjia.getId(),username, "shangjia", "商家");
R r = R.ok();
r.put("token", token);
r.put("role","商家");
r.put("username",shangjia.getShangjiaName());
r.put("tableName","shangjia");
r.put("userId",shangjia.getId());
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody ShangjiaEntity shangjia){
// ValidatorUtils.validateEntity(user);
Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
.eq("username", shangjia.getUsername())
.or()
.eq("shangjia_phone", shangjia.getShangjiaPhone())
.andNew()
.eq("shangjia_delete", 1)
;
ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
if(shangjiaEntity != null)
return R.error("账户或者联系方式已经被使用");
shangjia.setShangjiaXingjiTypes(1);
shangjia.setNewMoney(0.0);
shangjia.setShangjiaYesnoTypes(1);
shangjia.setShangjiaDelete(1);
shangjia.setCreateTime(new Date());
shangjiaService.insert(shangjia);
return R.ok();
}
/**
* 重置密码
*/
@GetMapping(value = "/resetPassword")
public R resetPassword(Integer id){
ShangjiaEntity shangjia = new ShangjiaEntity();
shangjia.setPassword("123456");
shangjia.setId(id);
shangjiaService.updateById(shangjia);
return R.ok();
}
/**
* 忘记密码
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request) {
ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
if(shangjia!=null){
shangjia.setPassword("123456");
boolean b = shangjiaService.updateById(shangjia);
if(!b){
return R.error();
}
}else{
return R.error("账号不存在");
}
return R.ok();
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrShangjia(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
ShangjiaEntity shangjia = shangjiaService.selectById(id);
if(shangjia !=null){
//entity转view
ShangjiaView view = new ShangjiaView();
BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
}
数据库脚本
CREATE TABLE `yonghu` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`yonghuming` varchar(200) NOT NULL COMMENT '用户名',
`mima` varchar(200) NOT NULL COMMENT '密码',
`xingming` varchar(200) DEFAULT NULL COMMENT '姓名',
`xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
`touxiang` varchar(200) DEFAULT NULL COMMENT '头像',
`shouji` varchar(200) DEFAULT NULL COMMENT '手机',
`shenfenzheng` varchar(200) DEFAULT NULL COMMENT '身份证',
PRIMARY KEY (`id`),
UNIQUE KEY `yonghuming` (`yonghuming`)
) ENGINE=InnoDB AUTO_INCREMENT=1616222324596 DEFAULT CHARSET=utf8mb3 COMMENT='用户';
CREATE TABLE `messages` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`userid` bigint NOT NULL COMMENT '留言人id',
`username` varchar(200) DEFAULT NULL COMMENT '用户名',
`content` longtext NOT NULL COMMENT '留言内容',
`reply` longtext COMMENT '回复内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1616222424131 DEFAULT CHARSET=utf8mb3 COMMENT='留言板';
CREATE TABLE `token` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`userid` bigint NOT NULL COMMENT '用户id',
`username` varchar(100) NOT NULL COMMENT '用户名',
`tablename` varchar(100) DEFAULT NULL COMMENT '表名',
`role` varchar(100) DEFAULT NULL COMMENT '角色',
`token` varchar(200) NOT NULL COMMENT '密码',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
`expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3 COMMENT='token表';
找我做程序,有什么保障?
我本人就是科技工作室负责人,程序大部分由博主亲自带领主导开发完成,页面设计、接口设计多由博主个人为广大需求者定制开发,如果需要其他功能,也可以联系我进行定制开发,找我们做的程序项目,都享有代码讲解服务,会议博主亲自讲解,可以全程录音录屏!这就是我们的保障,团队开发让您更省心省力,得到更大的保障!!!
联系我们
大家点赞、收藏、关注、评论 啦
查看👇🏻文章下方名片联系我即可~👇🏻
精彩专栏推荐订阅:在下方专栏
Python精品毕设案例《500套》
PHP精品毕设案例《500套》
Java精品实战案例《2600套》
微信小程序项目精品案例《500套》
基于大数据、数据分析大屏、爬虫精品毕设案例
2万+

被折叠的 条评论
为什么被折叠?



