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

This commit is contained in:
qianlile
2021-08-17 13:36:57 +08:00
21 changed files with 619 additions and 281 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@@ -7,6 +7,7 @@
2. 服务端使用spring boot、数据库mysql和redis、前端vue、移动端android、硬件端ESP-IDF和Arduino等。软硬件交互基于Mqtt协议使用EMQ代理服务器。系统架构图如下
<br /><br />
![图片](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)
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 />
@@ -25,7 +26,7 @@
![案例](https://gitee.com/kerwincui/wumei-smart/raw/master/document/case1.gif)
2. Wifi控制器和LED灯板制作七彩智能灯
![案例](https://gitee.com/kerwincui/wumei-smart/raw/master/document/case3.gif)
3.物联网开发板 [详情和购买方式 >>](https://gitee.com/kerwincui/wumei-smart/wikis/pages?sort_id=4233922&doc_id=1506495)
3. 物联网开发板 [详情和购买方式 >>](https://gitee.com/kerwincui/wumei-smart/wikis/pages?sort_id=4233922&doc_id=1506495)
![案例](https://gitee.com/kerwincui/wumei-smart/raw/master/document/case5.gif)
4. 物联网入门学习套件 [详情和购买方式 >>](https://gitee.com/kerwincui/wumei-smart/wikis/pages?sort_id=4233922&doc_id=1506495)
![案例](https://gitee.com/kerwincui/wumei-smart/raw/master/document/case4.gif)
@@ -63,7 +64,7 @@ docker run \
--publish 6379:6379 \
--restart always \
--detach \
kerwincui/wumei-smart:1.0
registry.cn-chengdu.aliyuncs.com/kerwincui/wumei-smart:1.0
```
#### 3. 扫码下载APP安装,打开APP跳过登录配置服务端地址
@@ -96,10 +97,11 @@ kerwincui/wumei-smart:1.0
* [若依文档](http://doc.ruoyi.vip/ruoyi-vue/)前端和后端基于Ruoyi-Vue前后端分离权限管理系统
* [XUI](https://gitee.com/xuexiangjys/XUI)Android基于XUI开发是一个简洁而优雅的原生UI框架
* [ESP-IDF编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/index.html)
* [EMQ文档](https://docs.emqx.cn)
<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>
<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
implementation 'me.jessyan:autosize:1.1.2'
//umeng统计
implementation 'com.umeng.umsdk:analytics:8.0.2'
implementation 'com.umeng.umsdk:common:2.0.2'
// implementation 'com.umeng.umsdk:analytics:8.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'

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");
uint16_t num=0;
while(true){
// if(is_radar==1 && is_alarm==1){
// if(gpio_get_level(IO_RADAR_OUT)==1){
// if(relay_status==0) {
// open_relay();
// led_rgb_blink(255,0,0,100,0,0,3,1000); //红灯闪烁
// }
// }
// else{
// //超过指定时间后关闭
// if(relay_status==1 && num >5*radar_interval){
// close_relay();
// light_status=0;
// led_status();
// num=0;
// }
// num++;
// }
// } else if(is_radar==1) {
// if(gpio_get_level(IO_RADAR_OUT)==1){
// if(relay_status==0) {
// open_relay();
// light_status=1;
// led_status();
// }
// }
// else{
// //超过指定时间后关闭
// if(relay_status==1 && num >5*radar_interval){
// close_relay();
// light_status=0;
// led_status();
// num=0;
// }
// num++;
// }
// }
if(is_radar==1 && is_alarm==1){
if(gpio_get_level(IO_RADAR_OUT)==1){
if(relay_status==0) {
relay_status=1;
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){
relay_status=0;
close_relay();
light_status=0;
led_status();
num=0;
}
num++;
}
} else if(is_radar==1) {
if(gpio_get_level(IO_RADAR_OUT)==1){
if(relay_status==0) {
relay_status=1;
open_relay();
light_status=1;
led_status();
}
}
else{
//超过指定时间后关闭
if(relay_status==1 && num >5*radar_interval){
relay_status=0;
close_relay();
light_status=0;
led_status();
num=0;
}
num++;
}
}
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 owner_id[64]="1"; // 用户ID
char open_broken_url[128]=""; // 二次开发mqtt服务器地址
char open_account[64]=""; // 二次开发mqtt账号
char open_pwd[64]=""; // 二次开发mqtt密码
// char open_broken_url[128]="wumei.live:1883"; // 二次开发mqtt服务器地址
// char open_account[64]="admin"; // 二次开发mqtt账号
// char open_pwd[64]="admin123"; // 二次开发mqtt密码
uint8_t relay_status=0; // 继电器状态 0-关闭1-打开
uint8_t light_status=0; // 灯的状态 0-关闭 1-打开

View File

@@ -74,6 +74,24 @@ void delay_ms(int ms)
{
HAL_Delay(ms);
}
// ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>MCU<43><55><EFBFBD><EFBFBD>
int wifi_data_recv_fun(type_recv_e type, uint8_t *data, int len)
{
switch((int)type)
{
case TYPE_RECV_DISCONNECT:
printf("WIFI DISCONNECT!\r\n");
break;
case TYPE_RECV_GOT_IP:
printf("WIFI GOT IP!\r\n");
break;
case TYPE_RECV_SUBSCRIBE:
printf("recv_fun sucribe data : %s\r\n", data);
break;
}
}
/* USER CODE END 0 */
/**
@@ -144,11 +162,14 @@ int main(void)
{
printf("enable time4 pwm output\r\n");
}
set_sg90(50);
if (HAL_TIM_Base_Start_IT(&htim3))
{
printf("enable time3 base isr\r\n");
}
ESP8266_Fram_Record_Struct.wifi_data_recv_cb = wifi_data_recv_fun; // <20><><EFBFBD><EFBFBD>ϵͳ<CFB5>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ESP8266_STA_MQTTClient_Init();
printf("ready go into while1\r\n");

File diff suppressed because one or more lines are too long

View File

@@ -330,18 +330,6 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\xiaoyi_wifi\tcp.c</PathWithFileName>
<FilenameWithoutPath>tcp.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\xiaoyi_wifi\mqtt.c</PathWithFileName>
<FilenameWithoutPath>mqtt.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
@@ -349,7 +337,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -369,7 +357,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -381,7 +369,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>15</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -393,7 +381,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -405,7 +393,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -417,7 +405,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -429,7 +417,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -449,7 +437,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -461,7 +449,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -473,7 +461,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -485,7 +473,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -497,7 +485,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -509,7 +497,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -521,7 +509,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -533,7 +521,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -545,7 +533,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -557,7 +545,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -569,7 +557,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -581,7 +569,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -593,7 +581,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -605,7 +593,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -617,7 +605,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -629,7 +617,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -641,7 +629,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -653,7 +641,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -673,7 +661,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -446,11 +446,6 @@
<Group>
<GroupName>Application/User/Process</GroupName>
<Files>
<File>
<FileName>tcp.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\xiaoyi_wifi\tcp.c</FilePath>
</File>
<File>
<FileName>mqtt.c</FileName>
<FileType>1</FileType>

View File

@@ -21,6 +21,8 @@ void start_buzz(void);
void stop_buzz(void);
void set_sg90(int value);
void process_local_handle(uint16_t value_humi);
void process_report_data(void);

View File

@@ -78,6 +78,22 @@ void ESP8266_AT_Test(void)
}
}
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ESP8266_ATE0(void)
{
char count=0;
delay_ms(1000);
while(count < 10)
{
if(ESP8266_Send_AT_Cmd("ATE0","OK",NULL,500))
{
printf("OK\r\n");
return;
}
++ count;
}
}
//ѡ<><D1A1>ESP8266<36>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ
// enumMode ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
@@ -231,13 +247,13 @@ uint8_t ESP8266_Get_LinkStatus ( void )
{
if (ESP8266_Send_AT_Cmd( "AT+CIPSTATUS", "OK", 0, 500 ) )
{
if ( strstr ( ESP8266_Fram_Record_Struct.Data_RX_BUF, "STATUS:2\r\n" ) )
if ( strstr ( (char *)ESP8266_Fram_Record_Struct.Data_RX_BUF, "STATUS:2\r\n" ) )
return 2;
else if ( strstr ( ESP8266_Fram_Record_Struct.Data_RX_BUF, "STATUS:3\r\n" ) )
else if ( strstr ( (char *)ESP8266_Fram_Record_Struct.Data_RX_BUF, "STATUS:3\r\n" ) )
return 3;
else if ( strstr ( ESP8266_Fram_Record_Struct.Data_RX_BUF, "STATUS:4\r\n" ) )
else if ( strstr ( (char *)ESP8266_Fram_Record_Struct.Data_RX_BUF, "STATUS:4\r\n" ) )
return 4;
}
@@ -359,7 +375,7 @@ void USART_printf ( char * Data, ... )
Data++;
break;
}
}
}
else
{
HAL_UART_Transmit(&huart3, (uint8_t *)Data, 1, 0xFFFF);
@@ -370,98 +386,4 @@ void USART_printf ( char * Data, ... )
}
}
//<2F><><EFBFBD><EFBFBD>ΪESP8266MQTT<54><54><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*
*MQTT<54><54><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
*LinkID <20><><EFBFBD><EFBFBD>ID,Ŀǰֻ֧<D6BB><D6A7>0
*scheme <20><><EFBFBD>ӷ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>MQTT over TCP,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
*client_id MQTTclientID <20><><EFBFBD>ڱ<EFBFBD>־client<6E><74><EFBFBD><EFBFBD>
*username <20><><EFBFBD>ڵ<EFBFBD>¼ MQTT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> username
*password <20><><EFBFBD>ڵ<EFBFBD>¼ MQTT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> password
*cert_key_ID ֤<><D6A4> ID, Ŀǰ֧<C7B0><D6A7>һ<EFBFBD><D2BB> cert ֤<><D6A4>, <20><><EFBFBD><EFBFBD>Ϊ 0
*CA_ID Ŀǰ֧<C7B0><D6A7>һ<EFBFBD><D2BB> CA ֤<><D6A4>, <20><><EFBFBD><EFBFBD>Ϊ 0
*path <20><>Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ""
*<2A><><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true <20><>֮false
*/
bool ESP8266_MQTTUSERCFG( char * pClient_Id, char * pUserName,char * PassWord)
{
char cCmd [120];
sprintf ( cCmd, "AT+MQTTUSERCFG=0,1,\"%s\",\"%s\",\"%s\",0,0,\"\"", pClient_Id,pUserName,PassWord );
return ESP8266_Send_AT_Cmd( cCmd, "OK", NULL, 500 );
}
/*
*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*LinkID <20><><EFBFBD><EFBFBD>ID,Ŀǰֻ֧<D6BB><D6A7>0
*IP<49><50>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>Ӧ<EFBFBD><D3A6>IP<49><50>ַ
*ComNum MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD>Ӧ<EFBFBD>Ķ˿ںţ<DABA>һ<EFBFBD><D2BB>Ϊ1883
*<2A><><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true <20><>֮false
*/
bool ESP8266_MQTTCONN( char * Ip, int Num)
{
char cCmd [120];
sprintf ( cCmd,"AT+MQTTCONN=0,\"%s\",%d,0", Ip,Num);
return ESP8266_Send_AT_Cmd( cCmd, "OK", NULL, 500 );
}
/*
*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> MQTT <20><><EFBFBD><EFBFBD>, <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ζ<EFBFBD><CEB6>IJ<EFBFBD>ͬ topic
*LinkID <20><><EFBFBD><EFBFBD>ID,Ŀǰֻ֧<D6BB><D6A7>0
*Topic <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪTopic
*Qosֵ<73><D6B5>һ<EFBFBD><D2BB>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1
*<2A><><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true <20><>֮false
*/
bool ESP8266_MQTTSUB(char * Topic)
{
char cCmd [120];
sprintf ( cCmd, "AT+MQTTSUB=0,\"%s\",1",Topic );
return ESP8266_Send_AT_Cmd( cCmd, "OK", NULL, 500 );
}
/*
*<2A><>LinkID<49><44>ͨ<EFBFBD><CDA8> topic <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> data, <20><><EFBFBD><EFBFBD> data Ϊ<>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
*LinkID <20><><EFBFBD><EFBFBD>ID,Ŀǰֻ֧<D6BB><D6A7>0
*Topic <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪTopic
*data<74><61><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
*<2A><><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true <20><>֮false
*/
bool ESP8266_MQTTPUB( char * Topic,char *temp)
{
char cCmd [512];
sprintf (cCmd, "AT+MQTTPUB=0,\"%s\",\"%s\",0,0", Topic ,temp);
return ESP8266_Send_AT_Cmd( cCmd, "OK", NULL, 1000 );
}
/*
*<2A>ر<EFBFBD> MQTT Client Ϊ LinkID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ͷ<EFBFBD><CDB7>ڲ<EFBFBD>ռ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Դ
*LinkID <20><><EFBFBD><EFBFBD>ID,Ŀǰֻ֧<D6BB><D6A7>0
*Topic <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪTopic
*data<74><61><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ϣ
*<2A><><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true <20><>֮false
*/
bool ESP8266_MQTTCLEAN(void)
{
char cCmd [120];
sprintf ( cCmd, "AT+MQTTCLEAN=0");
return ESP8266_Send_AT_Cmd( cCmd, "OK", NULL, 500 );
}
//ESP8266<36><36><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//enumEnUnvarnishTx<54>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>͸<EFBFBD><CDB8>ģʽ
//pStr<74>ַ<EFBFBD><D6B7><EFBFBD>
//ulStrLength<74>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ucId <20><><EFBFBD>Ӻ<EFBFBD>
//<2F><><EFBFBD>óɹ<C3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>true<75><65> <20><>֮false
bool MQTT_SendString(char * pTopic,char *temp2)
{
bool bRet = false;
ESP8266_MQTTPUB(pTopic,temp2);
delay_ms(1000);
bRet = true;
return bRet;
}

View File

@@ -24,6 +24,7 @@ typedef enum{
enumTCP,
enumUDP,
} ENUM_NetPro_TypeDef;
//<2F><><EFBFBD>Ӻţ<D3BA>ָ<EFBFBD><D6B8>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>Ӻſ<D3BA><C5BF>Է<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>˿ڶ<CBBF><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
Multiple_ID_0 = 0,
@@ -34,6 +35,26 @@ typedef enum{
Single_ID_0 = 5,
} ENUM_ID_NO_TypeDef;
//ESP8266<36><36><EFBFBD><EFBFBD>״̬
typedef enum{
NET_STATUS_INIT = 0,
NET_STATUS_WIFI_CONNECTING,
NET_STATUS_WIFI_CONNECTED,
NET_STATUS_WIFI_FAILED,
NET_STATUS_CLOUD_SUCCESS,
NET_STATUS_CLOUD_FAIL,
}connect_status_e;
//ESP8266<36><36><EFBFBD><EFBFBD>״̬
typedef enum{
TYPE_RECV_CONNECT = 0,
TYPE_RECV_DISCONNECT,
TYPE_RECV_GOT_IP,
TYPE_RECV_SUBSCRIBE, // <20><><EFBFBD><EFBFBD>MQTT<54>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
TYPE_RECV_NONE,
}type_recv_e;
#define ESP8266_RST_Pin GPIO_PIN_4 //<2F><>λ<EFBFBD>ܽ<EFBFBD>
#define ESP8266_RST_Pin_Port GPIOA //<2F><>λ
@@ -55,6 +76,10 @@ typedef enum{
#define RX_BUF_MAX_LEN 1024 //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
typedef int (*wifi_data_arrvied)(type_recv_e type, uint8_t *data, int len); // <20><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>WIFI<46><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern struct STRUCT_USART_Fram //<2F><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><E1B9B9>
{
uint8_t Data_RX_BUF[RX_BUF_MAX_LEN];
@@ -67,13 +92,16 @@ extern struct STRUCT_USART_Fram //
__IO uint16_t FramFinishFlag :1; // 15
}InfBit;
};
wifi_data_arrvied wifi_data_recv_cb;
}ESP8266_Fram_Record_Struct;
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>TCP<43><50><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
void ESP8266_Init(uint32_t bound);
void ESP8266_AT_Test(void);
void ESP8266_ATE0(void);
bool ESP8266_Send_AT_Cmd(char *cmd,char *ack1,char *ack2,uint32_t time);
void ESP8266_Rst(void);
bool ESP8266_Net_Mode_Choose(ENUM_Net_ModeTypeDef enumMode);

View File

@@ -1,42 +1,324 @@
#include "mqtt.h"
void ESP8266_STA_MQTTClient_Init(void)
{
char str[] = "{\
\"deviceNum\": \"E8DB84933089\",\
\"relayStatus\": 0,\
\"lightStatus\": 0,\
\"isOnline\": 1,\
\"rssi\": -54,\
\"deviceTemperature\": 40,\
\"airTemperature\": 0,\
\"airHumidity\": 0,\
\"triggerSource\": 0,\
\"brightness\": 11,\
\"lightInterval\": 432,\
\"lightMode\": 0,\
\"fadeTime\": 259,\
\"red\": 255,\
\"green\": 0,\
\"blue\": 0,\
\"remark\":{\"door_status\":1, \"light\":60}\
}";
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ESP8266<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
// ESP8266_AT_Test();//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ģʽ
ESP8266_Net_Mode_Choose(STA);
while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD));
ESP8266_MQTTUSERCFG(User_ESP8266_client_id,User_ESP8266_username,User_ESP8266_password);
ESP8266_MQTTCONN( User_ESP8266_MQTTServer_IP, User_ESP8266_MQTTServer_PORT);
ESP8266_MQTTSUB( User_ESP8266_MQTTServer_Topic_SUB);
printf("\r\nMQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
// sprintf(str,"{}");//<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MQTT_SendString (User_ESP8266_MQTTServer_Topic_PUB,str);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// while(1)
// {
#define MQTT_NAME "n87ieud/my_board2"
#define MQTT_PW "k4e9trh5qjwjhc2q"
#define MQTT_CLIENT_ID "my_board2"
// delay_ms(20);
// }
#define MQTT_TOPIC_UPDATE "$baidu/iot/shadow/my_board2/update"
#define MQTT_TOPIC_DELTA "$baidu/iot/shadow/my_board2/delta"
#define MQTT_TOPIC_SNAPSHOT "$baidu/iot/shadow/my_board2/update/snapshot"
char str[] = "{\"deviceNum\": \"E8DB84933089\",\"relayStatus\": 0,\"lightStatus\": 0,\"isOnline\": 1,\"rssi\": -54,\"deviceTemperature\": 38}";
static int mqtt_send(uint8_t head, uint32_t vlen, uint8_t *vhead,
uint32_t pay_len, uint8_t *payload)
{
int32_t tmp_encode, tmp_x;
uint32_t i = 0;
uint8_t msg[RX_BUFF_LEN];
msg[i++] = head;
tmp_x = vlen + pay_len;
do {
tmp_encode = tmp_x % 128;
tmp_x = tmp_x / 128;
if (tmp_x > 0) {
tmp_encode = tmp_encode | 128;
}
msg[i++] = tmp_encode;
} while (tmp_x > 0);
if (vlen != 0) {
memcpy(&msg[i], vhead, vlen);
i = i + vlen;
}
if (pay_len != 0) {
memcpy(&msg[i], payload, pay_len);
i = i + pay_len;
}
esp8266_send(msg, i);
return 0;
}
static int mqtt_str_fill(uint8_t *outbuff, char *instr)
{
uint8_t *p_tmp;
p_tmp = &outbuff[2];
outbuff[0] = strlen(instr) / 256;
outbuff[1] = strlen(instr) % 256;
strcpy((char*) p_tmp, (char*) instr);
return 0;
}
static int mqtt_recv(uint8_t *ackbuff, uint16_t *ack_len, int timeout)
{
do {
if (esp8266_recv(ackbuff, &ack_len) == 0) {
return 0;
}
if (timeout > 0) {
HAL_Delay(100);
} else {
return -1;
}
} while (timeout--);
return -1;
}
static int mqtt_ack_check(uint8_t head, int timeout, uint16_t msg_id)
{
uint8_t recv_head;
uint8_t recv_buff[RX_BUFF_LEN];
uint16_t recv_len;
if (mqtt_recv(recv_buff, &recv_len, timeout) != 0) {
return -1;
}
recv_head = recv_buff[0];
if ((head & recv_head) != head) {
return -1;
}
switch (recv_head & 0xF0) {
case MQTT_CONNACK:
return 0;
case MQTT_PUBACK:
return 0;
case MQTT_SUBACK:
return 0;
case MQTT_PINGRESP:
return 0;
default:
return -1;
}
return -1;
}
static int mqtt_connect(char *name, char *pwd, char *client_id)
{
uint32_t i, j;
uint8_t vhead[512];
uint8_t payload[512];
uint8_t connec_flag = 0;
uint8_t head;
uint16_t keep_alive = 60;
i = 0;
vhead[i++] = 0;
vhead[i++] = 4;
vhead[i++] = 'M';
vhead[i++] = 'Q';
vhead[i++] = 'T';
vhead[i++] = 'T';
vhead[i++] = 4;
if (name != NULL) {
connec_flag = connec_flag | CONNECT_FLAG_NAME;
}
if (pwd != NULL) {
connec_flag = connec_flag | CONNECT_FLAG_PWD;
}
vhead[i++] = connec_flag;
vhead[i++] = keep_alive / 256;
vhead[i++] = keep_alive % 256;
j = 0;
mqtt_str_fill(&payload[j], client_id);
j = j + strlen(client_id) + 2;
mqtt_str_fill(&payload[j], name);
j = j + strlen(name) + 2;
mqtt_str_fill(&payload[j], pwd);
j = j + strlen(pwd) + 2;
head = MQTT_CONNECT;
mqtt_send(head, i, vhead, j, payload);
if (mqtt_ack_check(MQTT_CONNACK, 100, 0) != 0) {
return -1;
}
return 0;
}
static int mqtt_disconnect(void)
{
uint8_t head;
head = MQTT_DISCONNECT;
mqtt_send(head, 0, NULL, 0, NULL);
}
static int mqtt_publish(char *topic, uint8_t *msg, uint16_t msg_len,
uint16_t msg_id)
{
uint32_t i, j;
uint8_t vhead[512];
uint8_t head;
uint8_t payload[512];
head = 0;
head = head | MQTT_PUBLISH;
head = head | PUBLISH_FLAG_RETN;
head = head | PUBLISH_FLAG_QOS1;
i = 0;
mqtt_str_fill(&vhead[i], topic);
i = i + strlen(topic) + 2;
vhead[i++] = msg_id >> 8;
vhead[i++] = msg_id;
j = 0;
memcpy(payload, msg, msg_len);
j = j + msg_len;
mqtt_send(head, i, vhead, j, payload);
if (mqtt_ack_check(MQTT_PUBACK, 100, msg_id) != 0) {
return -1;
}
return 0;
}
static int mqtt_publish_ack(uint16_t msg_id)
{
uint32_t i, j;
uint8_t vhead[512];
uint8_t head;
uint8_t payload[512];
head = MQTT_PUBACK;
i = 0;
vhead[i++] = msg_id >> 8;
vhead[i++] = msg_id;
j = 0;
mqtt_send(head, i, vhead, j, payload);
return 0;
}
static int mqtt_subscriber(char *topic, uint16_t msg_id)
{
uint32_t i, j;
uint8_t vhead[512];
uint8_t payload[512];
uint8_t head;
head = MQTT_SUBSCRIBE;
head = head | 0x02;
i = 0;
vhead[i++] = msg_id >> 8;
vhead[i++] = msg_id;
j = 0;
mqtt_str_fill(&payload[j], topic);
j = j + strlen(topic) + 2;
payload[j++] = 1;
mqtt_send(head, i, vhead, j, payload);
if (mqtt_ack_check(MQTT_SUBACK, 100, msg_id) != 0) {
return -1;
}
return 0;
}
static int mqtt_publish_from_cloud(uint8_t *ackbuff, uint16_t ack_len)
{
uint32_t i = 0;
uint16_t multiplier = 1;
uint32_t remain_len = 0;
uint32_t vhead_len;
uint32_t payload_len;
uint8_t byte;
uint8_t payload[512];
uint16_t msg_id;
uint8_t topic[256];
i = 1;
memset(topic, 0, 256);
memset(payload, 0, 256);
do {
byte = ackbuff[i++];
remain_len += (byte & 0x7F) * multiplier;
multiplier *= 128;
if (multiplier > 128 * 128 * 128) {
return -1;
}
} while ((byte & 0x80) != 0);
vhead_len = ackbuff[i++];
vhead_len = (vhead_len * 256) + ackbuff[i++];
memcpy(topic, &ackbuff[i], vhead_len);
i = i + vhead_len;
msg_id = ackbuff[i++];
msg_id = (msg_id * 256) + ackbuff[i++];
payload_len = remain_len - vhead_len - 4;
memcpy(payload, &ackbuff[i], payload_len);
if (strcmp((char*) topic, MQTT_TOPIC_DELTA) == 0) {
sensor_data_set(payload);
}
mqtt_publish_ack(msg_id);
return 0;
}
uint16_t msg_id = 1;
int mqtt_beat(void)
{
uint8_t head = MQTT_PINGREQ;
uint8_t vhead[5];
uint8_t payload[5];
uint32_t i = 0, j = 0;
mqtt_send(head, i, vhead, j, payload);
if (mqtt_ack_check(MQTT_PINGRESP, 100, 0) != 0) {
if (mqtt_connect(MQTT_NAME, MQTT_PW, MQTT_CLIENT_ID) != 0) {
return -1;
}else{
return 0;
}
}
return 0;
}
int mqtt_handle(void)
{
uint8_t recv_head;
uint8_t recv_buff[RX_BUFF_LEN];
uint16_t recv_len;
if (mqtt_recv(recv_buff, &recv_len, 0) != 0) {
return -1;
}
recv_head = recv_buff[0];
switch (recv_head & 0xF0) {
case MQTT_PUBLISH:
return mqtt_publish_from_cloud(recv_buff, recv_len);
default:
return -1;
}
return -1;
}
int mqtt_publish_update(uint8_t *msg, uint16_t msg_len)
{
if (mqtt_publish(MQTT_TOPIC_UPDATE, msg, msg_len, msg_id++) != 0) {
return -1;
}
return 0;
}
int mqtt_init(void)
{
if (mqtt_connect(MQTT_NAME, MQTT_PW, MQTT_CLIENT_ID) != 0) {
mqtt_disconnect();
esp8266_init();
HAL_Delay(100);
if (mqtt_connect(MQTT_NAME, MQTT_PW, MQTT_CLIENT_ID) != 0) {
return -1;
}
}
if (mqtt_subscriber(MQTT_TOPIC_DELTA, msg_id++) != 0) {
return -1;
}
return 0;
}

View File

@@ -1,27 +1,70 @@
#ifndef __MQTT_H
#define __MQTT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "main.h"
#include "esp8266.h"
/*
*<2A><><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸IJ<DEB8><C4B2>ܲ<EFBFBD><DCB2><EFBFBD><EFBFBD>ù<EFBFBD>
*/
#define User_ESP8266_SSID "brown" //wifi<66><69>
#define User_ESP8266_PWD "123456789a" //wifi<66><69><EFBFBD><EFBFBD>
#define User_ESP8266_client_id "50fccfefb50a48b98a93ce27bb04591f" //MQTTclientID <20><><EFBFBD>ڱ<EFBFBD>־client<6E><74><EFBFBD><EFBFBD> <20>256<35>ֽ<EFBFBD>
#define User_ESP8266_username "admin" //<2F><><EFBFBD>ڵ<EFBFBD>¼ MQTT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> username, <20> 64 <20>ֽ<EFBFBD>
#define User_ESP8266_password "admin13" //<2F><><EFBFBD>ڵ<EFBFBD>¼ MQTT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> password, <20> 64 <20>ֽ<EFBFBD>
#define User_ESP8266_password "admin123" //<2F><><EFBFBD>ڵ<EFBFBD>¼ MQTT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> password, <20> 64 <20>ֽ<EFBFBD>
#define User_ESP8266_MQTTServer_IP "106.12.9.213" //MQTT<54><54><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>IP
#define User_ESP8266_MQTTServer_PORT 1883 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
#define User_ESP8266_MQTTServer_Topic_PUB "status" //<2F><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>
#define User_ESP8266_MQTTServer_Topic_SUB "status/set/E8DB84933089" //<2F><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>
enum{
MQTT_NULL = 0,
MQTT_CONNECT = 1 << 4,
MQTT_CONNACK = 2 << 4,
MQTT_PUBLISH = 3 << 4,
MQTT_PUBACK = 4 << 4,
MQTT_PUBREC = 5 << 4,
MQTT_PUBREL = 6 << 4,
MQTT_PUBCOMP = 7 << 4,
MQTT_SUBSCRIBE = 8 << 4,
MQTT_SUBACK = 9 << 4,
MQTT_UNSUBSCRIBE= 10 << 4,
MQTT_UNSUBACK = 11 << 4,
MQTT_PINGREQ = 12 << 4,
MQTT_PINGRESP = 13 << 4,
MQTT_DISCONNECT = 14 << 4,
}MQTT_HEAD_T;
void ESP8266_STA_MQTTClient_Init(void);
enum{
CONNECT_FLAG = 0,
CONNECT_FLAG_NAME = 1 << 7,
CONNECT_FLAG_PWD = 1 << 6,
CONNECT_FLAG_RETAIN = 1 << 5,
CONNECT_FLAG_QOS = 1 << 4,
CONNECT_FLAG_FLAG = 1 << 2,
CONNECT_FLAG_CLS = 1 << 1,
}CONNECT_T;
enum{
PUBLISH_FLAG_RETN = 1,
PUBLISH_FLAG_QOS0 = 0,
PUBLISH_FLAG_QOS1 = 1 << 1,
PUBLISH_FLAG_QOS2 = 1 << 2,
PUBLISH_FLAG_DUP = 1 << 3,
}PUBLISH_FLAG_T;
int mqtt_init(void);
int mqtt_handle(void);
int mqtt_beat(void);
int mqtt_publish_update(uint8_t *msg, uint16_t msg_len);
#ifdef __cplusplus
}
#endif
#endif /* __MQTT_H */

View File

@@ -8,6 +8,7 @@
<version>3.4.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!-- jar部署pom war部署war-->
<packaging>jar</packaging>
<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)
@PostMapping
@ApiOperation(value = "新增用户", notes = "新增用户")
@@ -149,6 +149,33 @@ public class SysUserController extends BaseController
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

@@ -8,7 +8,7 @@ spring:
master:
url: jdbc:mysql://localhost:3306/wumei-smart?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: admin123
password: root
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@@ -65,7 +65,7 @@ spring:
# 数据库索引
database: 0
# 密码
password: admin123
password:
# 连接超时时间
timeout: 10s
lettuce:

View File

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