diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..73f69e09 --- /dev/null +++ b/.idea/.gitignore @@ -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/ diff --git a/README.md b/README.md index 55989dbf..2aa320cd 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ 2. 服务端使用spring boot、数据库mysql和redis、前端vue、移动端android、硬件端ESP-IDF和Arduino等。软硬件交互基于Mqtt协议,使用EMQ代理服务器。系统架构图如下:

![图片](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)

@@ -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)
-### 七、加入讨论群:1073236354 +### 七、加入互助交流群:1073236354(一群) 252664672(二群) 物美智能wumeismart

diff --git a/android/README.md b/android/README.md index e69de29b..4592c915 100644 --- a/android/README.md +++ b/android/README.md @@ -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进行多渠道打包。 \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 32580bb9..96048946 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -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' diff --git a/document/sys2.png b/document/sys2.png new file mode 100644 index 00000000..be5b734c Binary files /dev/null and b/document/sys2.png differ diff --git a/firmware/esp-idf/wumei-smart-firmware/main/button.c b/firmware/esp-idf/wumei-smart-firmware/main/button.c index 93aef6c6..aa74d1fd 100644 --- a/firmware/esp-idf/wumei-smart-firmware/main/button.c +++ b/firmware/esp-idf/wumei-smart-firmware/main/button.c @@ -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)); } diff --git a/firmware/esp-idf/wumei-smart-firmware/main/common.c b/firmware/esp-idf/wumei-smart-firmware/main/common.c index 99095ea2..9089e4bf 100644 --- a/firmware/esp-idf/wumei-smart-firmware/main/common.c +++ b/firmware/esp-idf/wumei-smart-firmware/main/common.c @@ -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-打开 diff --git a/firmware/stm32/smart_dormitory/Core/Src/main.c b/firmware/stm32/smart_dormitory/Core/Src/main.c index 03b4c559..512b0913 100644 --- a/firmware/stm32/smart_dormitory/Core/Src/main.c +++ b/firmware/stm32/smart_dormitory/Core/Src/main.c @@ -74,6 +74,24 @@ void delay_ms(int ms) { HAL_Delay(ms); } + +// ESP8266·MCU +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; // ϵͳص· ESP8266_STA_MQTTClient_Init(); printf("ready go into while1\r\n"); diff --git a/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvguix.Administrator b/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvguix.Administrator index d90456ce..eb80ebcf 100644 --- a/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvguix.Administrator +++ b/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvguix.Administrator @@ -80,8 +80,8 @@ 44 - 2 - 3 + 0 + 1 -1 -1 @@ -92,16 +92,16 @@ 0 - 245 - 1540 - 824 + -8 + 1002 + 843 0 - 1484 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000C00000002000000010000004B443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF52443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C7463702E6300000000057463702E6300000000BECEA100FFFFFFFF4C443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C75736172742E63000000000775736172742E6300000000F0A0A100FFFFFFFF53443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C6D7174742E6300000000066D7174742E6300000000BCA8E100FFFFFFFF56443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C657370383236362E630000000009657370383236362E63000000009CC1B600FFFFFFFF52443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C50726F636573735C70726F636573732E63000000000970726F636573732E6300000000F7B88600FFFFFFFF53443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C6D7174742E6800000000066D7174742E6800000000D9ADC200FFFFFFFF53443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C73746D3332663178785F69742E63000000000E73746D3332663178785F69742E6300000000A5C2D700FFFFFFFF56443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C657370383236362E680000000009657370383236362E6800000000B3A6BE00FFFFFFFF70443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D2E63000000001373746D3332663178785F68616C5F74696D2E6300000000EAD6A300FFFFFFFF4A443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C74696D2E63000000000574696D2E6300000000F6FA7D00FFFFFFFF4A443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C646D612E630000000005646D612E63000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000034010000660000000006000043020000 + 1593 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000D00000004000000010000004B443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF52443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C7463702E6300000000057463702E6300000000BECEA100FFFFFFFF4C443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C75736172742E63000000000775736172742E6300000000F0A0A100FFFFFFFF53443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C6D7174742E6300000000066D7174742E6300000000BCA8E100FFFFFFFF56443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C657370383236362E630000000009657370383236362E63000000009CC1B600FFFFFFFF52443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C50726F636573735C70726F636573732E63000000000970726F636573732E6300000000F7B88600FFFFFFFF53443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C6D7174742E6800000000066D7174742E6800000000D9ADC200FFFFFFFF53443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C73746D3332663178785F69742E63000000000E73746D3332663178785F69742E6300000000A5C2D700FFFFFFFF56443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C7869616F79695F776966695C657370383236362E680000000009657370383236362E6800000000B3A6BE00FFFFFFFF70443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D2E63000000001373746D3332663178785F68616C5F74696D2E6300000000EAD6A300FFFFFFFF4A443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C74696D2E63000000000574696D2E6300000000F6FA7D00FFFFFFFF4A443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C436F72655C5372635C646D612E630000000005646D612E6300000000B5E99D00FFFFFFFF52443A5C776F726B5C706C6174666F726D5C77756D65692D736D6172745C6669726D776172655C73746D33325C736D6172745F646F726D69746F72795C557365725C50726F636573735C70726F636573732E68000000000970726F636573732E6800000000B5E99D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000340100006E000000E2030000B8020000 @@ -124,7 +124,7 @@ 16 - F40000006600000090050000F6000000 + F40000006E00000090050000FE000000 @@ -140,7 +140,7 @@ 0 16 - 03000000660000002D01000013020000 + 03000000660000002D01000080020000 16 @@ -160,7 +160,7 @@ 0 16 - 03000000660000002D01000013020000 + 03000000660000002D01000080020000 16 @@ -440,7 +440,7 @@ 0 16 - 03000000660000002D01000013020000 + 03000000660000002D01000080020000 16 @@ -460,7 +460,7 @@ 0 16 - 03000000660000002D01000013020000 + 03000000660000002D01000080020000 16 @@ -480,7 +480,7 @@ 0 16 - 0300000047020000FD050000F5020000 + 03000000B4020000DF030000F8020000 16 @@ -520,7 +520,7 @@ 0 16 - 0300000047020000FD050000F5020000 + 03000000B4020000DF030000F8020000 16 @@ -1140,7 +1140,7 @@ 0 16 - 03000000660000002D01000013020000 + 03000000660000002D0100007D020000 16 @@ -1160,7 +1160,7 @@ 0 16 - 0300000047020000FD050000F5020000 + 03000000B4020000DF030000F8020000 16 @@ -1180,7 +1180,7 @@ 0 16 - 0300000047020000FD050000F5020000 + 03000000B4020000FD050000F8020000 16 @@ -1240,7 +1240,7 @@ 0 16 - 0300000047020000FD050000F5020000 + 03000000B4020000FD050000F8020000 16 @@ -1260,7 +1260,7 @@ 0 16 - 0300000047020000FD050000F5020000 + 03000000B4020000FD050000F8020000 16 @@ -1720,7 +1720,7 @@ 0 16 - 000000000E0300000006000021030000 + 0000000011030000E203000024030000 16 @@ -1789,14 +1789,14 @@ 3317 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF300100004F000000340100002C02000001000000020000100400000001000000EAFEFFFFDF040000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000003001000043020000000000004F000000300100002C0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002C0200000006000030020000010000000100001004000000010000009BFEFFFF4F010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000004702000000060000250300000000000030020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006E00000090050000FE000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A00400006E0000009005000048020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF300100004F000000340100009902000001000000020000100400000001000000EAFEFFFFDF040000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000006E00000030010000B5020000000000004F00000030010000990200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003802000090050000DC020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000099020000E20300009D0200000100000001000010040000000100000001FEFFFFB5000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000B9020000000600002D030000000000009D020000E2030000110300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2628 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000115553415254335F49525148616E646C657296000000000000001400115553415254335F49525148616E646C65721C20455350383236365F4672616D5F5265636F72645F5374727563742022455350383236365F4672616D5F5265636F72645F5374727563742E496E66426974201B455350383236365F4672616D5F5265636F72645F537472756374201555415254315F48616E646C6553747275637475726516455350383236365F43485F50445F50696E5F5365744C16455350383236365F43485F50445F50696E5F536574480844656C61795F6D730E44485431315F52656164427974650A44485431315F496E69741A44485431315F526561645F54656D70416E6448756D69646974790B64687431315F44656C6179084750494F5F50696E02753803753136037533320F44485431315F446174615F494E28291244485431315F446174615F5479706544656603726572062F2F42555A5A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + 2632 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000005737461746596000000000000001400057374617465084B65795F5363616E07666C616754786410636F756E745F696E746572727570743110636F756E745F696E746572727570743008494E54315F636E7408494E54305F636E740B4D5154545F484541445F5417557365725F455350383236365F4D51545453657276657213455350383236365F4C696E6B5F5365727665720F455350383236365F41545F5465737416455350383236365F4765745F4C696E6B53746174757315455350383236365F556E7661726E69736853656E6412455350383236365F53656E64537472696E6719455350383236365F456E61626C655F4D756C7469706C6549640E455350383236365F4A6F696E415017455350383236365F4E65745F4D6F64655F43686F6F73650B455350383236365F52737419455350383236365F45786974556E7661726E69736853656E6413455350383236365F53656E645F41545F436D640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 1423 @@ -1812,7 +1812,7 @@ Build 974 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000750726F6A656374960000000000000001000750726F6A656374000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000750726F6A656374960000000000000001000750726F6A656374000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1828,7 +1828,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1852,18 +1852,18 @@ 0 100 - 2 + 4 ../Core/Src/main.c - 7 - 100 - 108 + 3 + 175 + 198 1 0 - ..\User\xiaoyi_wifi\tcp.c + D:\work\platform\wumei-smart\firmware\stm32\smart_dormitory\User\xiaoyi_wifi\tcp.c 0 1 3 @@ -1874,35 +1874,35 @@ ../Core/Src/usart.c 1 - 238 - 248 + 227 + 258 1 0 ..\User\xiaoyi_wifi\mqtt.c - 16 - 16 - 34 + 30 + 1 + 17 1 0 ..\User\xiaoyi_wifi\esp8266.c - 0 - 49 - 54 + 27 + 357 + 373 1 0 ..\User\Process\process.c - 10 - 28 - 39 + 0 + 18 + 27 1 0 @@ -1910,8 +1910,8 @@ ..\User\xiaoyi_wifi\mqtt.h 0 - 3 - 28 + 21 + 22 1 0 @@ -1927,9 +1927,9 @@ ..\User\xiaoyi_wifi\esp8266.h - 0 - 51 - 57 + 14 + 95 + 102 1 0 @@ -1955,12 +1955,21 @@ ../Core/Src/dma.c 0 - 37 + 32 38 1 0 + + ..\User\Process\process.h + 8 + 2 + 24 + 1 + + 0 + diff --git a/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvoptx b/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvoptx index e3b803df..38d06495 100644 --- a/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvoptx +++ b/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvoptx @@ -330,18 +330,6 @@ 0 0 0 - ..\User\xiaoyi_wifi\tcp.c - tcp.c - 0 - 0 - - - 3 - 13 - 1 - 0 - 0 - 0 ..\User\xiaoyi_wifi\mqtt.c mqtt.c 0 @@ -349,7 +337,7 @@ 3 - 14 + 13 1 0 0 @@ -369,7 +357,7 @@ 0 4 - 15 + 14 1 0 0 @@ -381,7 +369,7 @@ 4 - 16 + 15 1 0 0 @@ -393,7 +381,7 @@ 4 - 17 + 16 1 0 0 @@ -405,7 +393,7 @@ 4 - 18 + 17 1 0 0 @@ -417,7 +405,7 @@ 4 - 19 + 18 1 0 0 @@ -429,7 +417,7 @@ 4 - 20 + 19 1 0 0 @@ -449,7 +437,7 @@ 0 5 - 21 + 20 1 0 0 @@ -461,7 +449,7 @@ 5 - 22 + 21 1 0 0 @@ -473,7 +461,7 @@ 5 - 23 + 22 1 0 0 @@ -485,7 +473,7 @@ 5 - 24 + 23 1 0 0 @@ -497,7 +485,7 @@ 5 - 25 + 24 1 0 0 @@ -509,7 +497,7 @@ 5 - 26 + 25 1 0 0 @@ -521,7 +509,7 @@ 5 - 27 + 26 1 0 0 @@ -533,7 +521,7 @@ 5 - 28 + 27 1 0 0 @@ -545,7 +533,7 @@ 5 - 29 + 28 1 0 0 @@ -557,7 +545,7 @@ 5 - 30 + 29 1 0 0 @@ -569,7 +557,7 @@ 5 - 31 + 30 1 0 0 @@ -581,7 +569,7 @@ 5 - 32 + 31 1 0 0 @@ -593,7 +581,7 @@ 5 - 33 + 32 1 0 0 @@ -605,7 +593,7 @@ 5 - 34 + 33 1 0 0 @@ -617,7 +605,7 @@ 5 - 35 + 34 1 0 0 @@ -629,7 +617,7 @@ 5 - 36 + 35 1 0 0 @@ -641,7 +629,7 @@ 5 - 37 + 36 1 0 0 @@ -653,7 +641,7 @@ 5 - 38 + 37 1 0 0 @@ -673,7 +661,7 @@ 0 6 - 39 + 38 1 0 0 diff --git a/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvprojx b/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvprojx index 864619de..4a66eaa4 100644 --- a/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvprojx +++ b/firmware/stm32/smart_dormitory/MDK-ARM/Project.uvprojx @@ -446,11 +446,6 @@ Application/User/Process - - tcp.c - 1 - ..\User\xiaoyi_wifi\tcp.c - mqtt.c 1 diff --git a/firmware/stm32/smart_dormitory/User/Process/process.h b/firmware/stm32/smart_dormitory/User/Process/process.h index ab85db81..5a7f1028 100644 --- a/firmware/stm32/smart_dormitory/User/Process/process.h +++ b/firmware/stm32/smart_dormitory/User/Process/process.h @@ -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); diff --git a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.c b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.c index 12aca5b7..6469edf5 100644 --- a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.c +++ b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.c @@ -78,6 +78,22 @@ void ESP8266_AT_Test(void) } } +//ȡ +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; + } +} + //ѡESP8266Ĺģʽ // enumMode ģʽ @@ -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, ... ) } } -//ΪESP8266MQTTָ - -/* -*MQTTû -*LinkID ID,Ŀǰֻ֧0 -*scheme ӷʽѡMQTT over TCP,Ϊ1 -*client_id MQTTclientID ڱ־client -*username ڵ¼ MQTT username -*password ڵ¼ MQTT password -*cert_key_ID ֤ ID, Ŀǰ֧һ cert ֤, Ϊ 0 -*CA_ID Ŀǰ֧һ CA ֤, Ϊ 0 -*path Դ·Ϊ"" -*óɹtrue ֮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 ); -} - - -/* -*ָMQTT -*LinkID ID,Ŀǰֻ֧0 -*IPMQTT϶ӦIPַ -*ComNum MQTT϶ӦĶ˿ںţһΪ1883 -*óɹtrue ֮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 ); -} - -/* -*ָӵ MQTT , ظζIJͬ topic -*LinkID ID,Ŀǰֻ֧0 -*Topic ĵ֣ΪTopic -*QosֵһΪ0Ϊ1 -*óɹtrue ֮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 ); -} - - -/* -*LinkIDͨ topic data, data ΪַϢ -*LinkID ID,Ŀǰֻ֧0 -*Topic ĵ֣ΪTopic -*dataַϢ -*óɹtrue ֮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 ); -} - -/* -*ر MQTT Client Ϊ LinkID , ͷڲռõԴ -*LinkID ID,Ŀǰֻ֧0 -*Topic ĵ֣ΪTopic -*dataַϢ -*óɹtrue ֮false -*/ -bool ESP8266_MQTTCLEAN(void) -{ - char cCmd [120]; - sprintf ( cCmd, "AT+MQTTCLEAN=0"); - return ESP8266_Send_AT_Cmd( cCmd, "OK", NULL, 500 ); -} - -//ESP8266ַ -//enumEnUnvarnishTxǷʹ͸ģʽ -//pStrַ -//ulStrLengthַ -//ucId Ӻ -//óɹtrue ֮false -bool MQTT_SendString(char * pTopic,char *temp2) -{ - - bool bRet = false; - ESP8266_MQTTPUB(pTopic,temp2); - delay_ms(1000); - bRet = true; - return bRet; -} - + \ No newline at end of file diff --git a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.h b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.h index bfe5ab4e..935029bd 100644 --- a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.h +++ b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/esp8266.h @@ -24,6 +24,7 @@ typedef enum{ enumTCP, enumUDP, } ENUM_NetPro_TypeDef; + //ӺţָΪӺſԷֹͬһ˿ڶ typedef enum{ Multiple_ID_0 = 0, @@ -34,6 +35,26 @@ typedef enum{ Single_ID_0 = 5, } ENUM_ID_NO_TypeDef; + +//ESP8266״̬ +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״̬ +typedef enum{ + TYPE_RECV_CONNECT = 0, + TYPE_RECV_DISCONNECT, + TYPE_RECV_GOT_IP, + TYPE_RECV_SUBSCRIBE, // MQTT·Ϣ + TYPE_RECV_NONE, +}type_recv_e; + #define ESP8266_RST_Pin GPIO_PIN_4 //λܽ #define ESP8266_RST_Pin_Port GPIOA //λ @@ -55,6 +76,10 @@ typedef enum{ #define RX_BUF_MAX_LEN 1024 //ֽ + +typedef int (*wifi_data_arrvied)(type_recv_e type, uint8_t *data, int len); // ָ룬WIFI + + extern struct STRUCT_USART_Fram //֡ṹ { 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; + //ʼTCPܺ 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); diff --git a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.c b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.c index 8f621499..be984675 100644 --- a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.c +++ b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.c @@ -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("ESP8266\r\n"); - // ESP8266_AT_Test();//ָĬģʽ - 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"); - -// sprintf(str,"{}");//ʽַMQTT - MQTT_SendString (User_ESP8266_MQTTServer_Topic_PUB,str);//ݵMQTT - -// 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; } diff --git a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.h b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.h index c34d1324..6d6e38e2 100644 --- a/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.h +++ b/firmware/stm32/smart_dormitory/User/xiaoyi_wifi/mqtt.h @@ -1,27 +1,70 @@ #ifndef __MQTT_H #define __MQTT_H +#ifdef __cplusplus +extern "C" { +#endif + #include "main.h" #include "esp8266.h" -/* -*²Ҫû޸IJܲù -*/ - #define User_ESP8266_SSID "brown" //wifi #define User_ESP8266_PWD "123456789a" //wifi #define User_ESP8266_client_id "50fccfefb50a48b98a93ce27bb04591f" //MQTTclientID ڱ־client 256ֽ #define User_ESP8266_username "admin" //ڵ¼ MQTT username,  64 ֽ -#define User_ESP8266_password "admin13" //ڵ¼ MQTT password,  64 ֽ +#define User_ESP8266_password "admin123" //ڵ¼ MQTT password,  64 ֽ #define User_ESP8266_MQTTServer_IP "106.12.9.213" //MQTTطIP #define User_ESP8266_MQTTServer_PORT 1883 //˿ں #define User_ESP8266_MQTTServer_Topic_PUB "status" //MQTT #define User_ESP8266_MQTTServer_Topic_SUB "status/set/E8DB84933089" //MQTT +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 */ + diff --git a/spring-boot/ruoyi-admin/pom.xml b/spring-boot/ruoyi-admin/pom.xml index fe370b40..ed8d8da6 100644 --- a/spring-boot/ruoyi-admin/pom.xml +++ b/spring-boot/ruoyi-admin/pom.xml @@ -8,6 +8,7 @@ 3.4.0 4.0.0 + jar ruoyi-admin diff --git a/spring-boot/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/spring-boot/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 9d2daa6c..51f9d2a0 100644 --- a/spring-boot/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/spring-boot/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -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)); + } + /** * 修改用户 */ diff --git a/spring-boot/ruoyi-admin/src/main/resources/application-druid.yml b/spring-boot/ruoyi-admin/src/main/resources/application-druid.yml index 4b8de442..41297b37 100644 --- a/spring-boot/ruoyi-admin/src/main/resources/application-druid.yml +++ b/spring-boot/ruoyi-admin/src/main/resources/application-druid.yml @@ -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: # 从数据源开关/默认关闭 diff --git a/spring-boot/ruoyi-admin/src/main/resources/application.yml b/spring-boot/ruoyi-admin/src/main/resources/application.yml index 7643ef3f..8a05437d 100644 --- a/spring-boot/ruoyi-admin/src/main/resources/application.yml +++ b/spring-boot/ruoyi-admin/src/main/resources/application.yml @@ -65,7 +65,7 @@ spring: # 数据库索引 database: 0 # 密码 - password: admin123 + password: # 连接超时时间 timeout: 10s lettuce: diff --git a/spring-boot/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/spring-boot/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index a8a61d42..e71fccb2 100644 --- a/spring-boot/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/spring-boot/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -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()