Merge branch 'master' of gitee.com:kerwincui/wumei-smart

This commit is contained in:
xiaoyi
2021-08-17 11:44:05 +08:00
9 changed files with 87 additions and 47 deletions

View File

@@ -7,6 +7,7 @@
2. 服务端使用spring boot、数据库mysql和redis、前端vue、移动端android、硬件端ESP-IDF和Arduino等。软硬件交互基于Mqtt协议使用EMQ代理服务器。系统架构图如下 2. 服务端使用spring boot、数据库mysql和redis、前端vue、移动端android、硬件端ESP-IDF和Arduino等。软硬件交互基于Mqtt协议使用EMQ代理服务器。系统架构图如下
<br /><br /> <br /><br />
![图片](https://gitee.com/kerwincui/wumei-smart/raw/master/document/sys.png) ![图片](https://gitee.com/kerwincui/wumei-smart/raw/master/document/sys.png)
![图片](https://gitee.com/kerwincui/wumei-smart/raw/master/document/sys2.png)
![图片](https://gitee.com/kerwincui/wumei-smart/raw/master/document/directory.png) ![图片](https://gitee.com/kerwincui/wumei-smart/raw/master/document/directory.png)
3. 硬件端提供接入文档需要设备支持网络功能项目里面包含ESP-IDF和Arduino的硬件代码和接入示例。同时制作了智能开关wifi通断器板子可用于学习和生活中控制2500W以下的用电设备。硬件完整示例代码采用ESP-IDF框架4.2版本基于乐鑫ESP32S2芯片安信可ESP-12K模组。[详情和购买方式 >> ](https://gitee.com/kerwincui/wumei-smart/wikis/pages?sort_id=4233922&doc_id=1506495)<br /><br /> 3. 硬件端提供接入文档需要设备支持网络功能项目里面包含ESP-IDF和Arduino的硬件代码和接入示例。同时制作了智能开关wifi通断器板子可用于学习和生活中控制2500W以下的用电设备。硬件完整示例代码采用ESP-IDF框架4.2版本基于乐鑫ESP32S2芯片安信可ESP-12K模组。[详情和购买方式 >> ](https://gitee.com/kerwincui/wumei-smart/wikis/pages?sort_id=4233922&doc_id=1506495)<br /><br />
@@ -63,7 +64,7 @@ docker run \
--publish 6379:6379 \ --publish 6379:6379 \
--restart always \ --restart always \
--detach \ --detach \
kerwincui/wumei-smart:1.0 registry.cn-chengdu.aliyuncs.com/kerwincui/wumei-smart:1.0
``` ```
#### 3. 扫码下载APP安装,打开APP跳过登录配置服务端地址 #### 3. 扫码下载APP安装,打开APP跳过登录配置服务端地址
@@ -96,10 +97,11 @@ kerwincui/wumei-smart:1.0
* [若依文档](http://doc.ruoyi.vip/ruoyi-vue/)前端和后端基于Ruoyi-Vue前后端分离权限管理系统 * [若依文档](http://doc.ruoyi.vip/ruoyi-vue/)前端和后端基于Ruoyi-Vue前后端分离权限管理系统
* [XUI](https://gitee.com/xuexiangjys/XUI)Android基于XUI开发是一个简洁而优雅的原生UI框架 * [XUI](https://gitee.com/xuexiangjys/XUI)Android基于XUI开发是一个简洁而优雅的原生UI框架
* [ESP-IDF编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/index.html) * [ESP-IDF编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/index.html)
* [EMQ文档](https://docs.emqx.cn)
<br /> <br />
### 七、加入讨论群:1073236354 ### 七、加入互助交流群:1073236354(一群) 252664672(二群)
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=P_oc91N6KC39zp2PEV_-BY3xMnAokeZ8&jump_from=webapi"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="物美智能wumeismart" title="物美智能wumeismart"></a> <a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=P_oc91N6KC39zp2PEV_-BY3xMnAokeZ8&jump_from=webapi"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="物美智能wumeismart" title="物美智能wumeismart"></a>
<br /><br /> <br /><br />

View File

@@ -0,0 +1,5 @@
Android项目打包
1. 修改工程根目录的gradle.properties中的isNeedPackage=true。
2. 添加并配置keystore在versions.gradle中修改app_release相关参数。
3. 如果考虑使用友盟统计的话在local.properties中设置应用的友盟ID:APP_ID_UMENG。
4. 使用./gradlew clean assembleReleaseChannels进行多渠道打包。

View File

@@ -108,8 +108,9 @@ dependencies {
//屏幕适配AutoSize //屏幕适配AutoSize
implementation 'me.jessyan:autosize:1.1.2' implementation 'me.jessyan:autosize:1.1.2'
//umeng统计 //umeng统计
implementation 'com.umeng.umsdk:analytics:8.0.2' // implementation 'com.umeng.umsdk:analytics:8.0.2'
implementation 'com.umeng.umsdk:common:2.0.2' // implementation 'com.umeng.umsdk:common:2.0.2'
implementation group: 'com.umeng.umsdk', name: 'common', version: '9.3.8'
//预加载占位控件 //预加载占位控件
implementation 'me.samlss:broccoli:1.0.0' implementation 'me.samlss:broccoli:1.0.0'

BIN
document/sys2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -271,42 +271,47 @@ static void radar_sense(void *arg) {
ESP_LOGI(TAG, "begin radar sense"); ESP_LOGI(TAG, "begin radar sense");
uint16_t num=0; uint16_t num=0;
while(true){ while(true){
// if(is_radar==1 && is_alarm==1){ if(is_radar==1 && is_alarm==1){
// if(gpio_get_level(IO_RADAR_OUT)==1){ if(gpio_get_level(IO_RADAR_OUT)==1){
// if(relay_status==0) { if(relay_status==0) {
// open_relay(); relay_status=1;
// led_rgb_blink(255,0,0,100,0,0,3,1000); //红灯闪烁 open_relay();
// } light_status=1;
// } led_rgb_blink(255,0,0,100,0,0,3,500); //红灯闪烁
// else{ }
// //超过指定时间后关闭 }
// if(relay_status==1 && num >5*radar_interval){ else{
// close_relay(); //超过指定时间后关闭
// light_status=0; if(relay_status==1 && num >5*radar_interval){
// led_status(); relay_status=0;
// num=0; close_relay();
// } light_status=0;
// num++; led_status();
// } num=0;
// } else if(is_radar==1) { }
// if(gpio_get_level(IO_RADAR_OUT)==1){ num++;
// if(relay_status==0) { }
// open_relay(); } else if(is_radar==1) {
// light_status=1; if(gpio_get_level(IO_RADAR_OUT)==1){
// led_status(); if(relay_status==0) {
// } relay_status=1;
// } open_relay();
// else{ light_status=1;
// //超过指定时间后关闭 led_status();
// if(relay_status==1 && num >5*radar_interval){ }
// close_relay(); }
// light_status=0; else{
// led_status(); //超过指定时间后关闭
// num=0; if(relay_status==1 && num >5*radar_interval){
// } relay_status=0;
// num++; close_relay();
// } light_status=0;
// } led_status();
num=0;
}
num++;
}
}
vTaskDelay(pdMS_TO_TICKS(200)); vTaskDelay(pdMS_TO_TICKS(200));
} }

View File

@@ -21,9 +21,9 @@ char ssid[33]="wifi-ssid"; // wifi的SSID
char pwd[65]="wifi-password"; // wifi的密码 char pwd[65]="wifi-password"; // wifi的密码
char owner_id[64]="1"; // 用户ID char owner_id[64]="1"; // 用户ID
char open_broken_url[128]=""; // 二次开发mqtt服务器地址 // char open_broken_url[128]="wumei.live:1883"; // 二次开发mqtt服务器地址
char open_account[64]=""; // 二次开发mqtt账号 // char open_account[64]="admin"; // 二次开发mqtt账号
char open_pwd[64]=""; // 二次开发mqtt密码 // char open_pwd[64]="admin123"; // 二次开发mqtt密码
uint8_t relay_status=0; // 继电器状态 0-关闭1-打开 uint8_t relay_status=0; // 继电器状态 0-关闭1-打开
uint8_t light_status=0; // 灯的状态 0-关闭 1-打开 uint8_t light_status=0; // 灯的状态 0-关闭 1-打开

View File

@@ -8,6 +8,7 @@
<version>3.4.0</version> <version>3.4.0</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<!-- jar部署pom war部署war-->
<packaging>jar</packaging> <packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId> <artifactId>ruoyi-admin</artifactId>

View File

@@ -124,7 +124,7 @@ public class SysUserController extends BaseController
/** /**
* 新增用户 * 新增用户
*/ */
// @PreAuthorize("@ss.hasPermi('system:user:add')") @PreAuthorize("@ss.hasPermi('system:user:add')")
@Log(title = "用户管理", businessType = BusinessType.INSERT) @Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
@ApiOperation(value = "新增用户", notes = "新增用户") @ApiOperation(value = "新增用户", notes = "新增用户")
@@ -149,6 +149,33 @@ public class SysUserController extends BaseController
return toAjax(userService.insertUser(user)); return toAjax(userService.insertUser(user));
} }
/**
* 用户注册
*/
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping("/register")
@ApiOperation(value = "用户注册", notes = "用户注册")
public AjaxResult register(@Validated @RequestBody SysUser user)
{
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName())))
{
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
}
else if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
}
else if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setDelFlag("0");
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
return toAjax(userService.insertUser(user));
}
/** /**
* 修改用户 * 修改用户
*/ */

View File

@@ -97,7 +97,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 过滤请求 // 过滤请求
.authorizeRequests() .authorizeRequests()
// 对于登录login 验证码captchaImage 允许匿名访问 // 对于登录login 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/captchaImage").anonymous() .antMatchers("/login", "/captchaImage","/system/user/register").anonymous()
.antMatchers( .antMatchers(
HttpMethod.GET, HttpMethod.GET,
"/*.html", "/*.html",
@@ -113,7 +113,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/webjars/**").anonymous() .antMatchers("/webjars/**").anonymous()
.antMatchers("/*/api-docs").anonymous() .antMatchers("/*/api-docs").anonymous()
.antMatchers("/druid/**").anonymous() .antMatchers("/druid/**").anonymous()
.antMatchers("/system/user/**").anonymous()
// 除上面外的所有请求全部需要鉴权认证 // 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated() .anyRequest().authenticated()
.and() .and()