| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- #include "CONFIG.h"
- #if ESP32
- /**
- ******************************************************************************
- * 版 本 :V1.0.0
- * 作 者 :huyi
- * 版权所有,盗版必究。
- * Copyright(C) All rights reserved
- ******************************************************************************
- * 历史记录
- * 序号 版本 变更内容 作者 日期
- * 1 V0.0.1 实现WIFI注册 胡一 2024/10/15
- *
- ******************************************************************************
- */
- #include "stm32f10x.h"
- #include "Regist.h"
- #include "esp32.h"
- #include "FlashSetup.h"
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
- #include <stdlib.h>
- #include "cJSON.h"
- #include "mbedtls_util.h"
- #include "Log_Module.h"
- #include "At_Module.h"
- #include "Common_Util.h"
- #include "Tuoreniot.h"
- /**************************************** 相关变量定义 ******************************************/
- //系统初始的WiFi连接参数
- char INITIAL_WIFI_ID[10]="tuoren";
- char INITIAL_WIFI_PASSWORD[10]="123456789";
- // 注册参数
- static struct TUORENIOT_RegistRequestStruct regist_request = {
- .version = 1,
- .networkType = 3,
- .networkProtocol = 1,
- .deviceId = "3431228A1936013C",
- .userId = "1000"
- };
- /******************************************* 函数声明 *******************************************/
- static void REGIST_Process(void); // 注册流程
- static void REGIST_SetStatus(enum REGIST_StatusEnum status); // 设置注册状态
- static void REGIST_SetResult(enum REGIST_ResultEnum result); // 设置注册结果
- static void goto_start(void); // 开始
- static void goto_success(void); // 成功
- static void goto_failure(char * _info); // 失败
- static void goto_finish(void); // 结束
- /******************************************* 注册流程 *******************************************/
- enum Step{
- STEP_NONE,
- STEP_START, // 开始
- STEP_READY, // 模块是否唤醒
- STEP_EXIT_DEEP_SLEEP, // 退出深睡眠
- STEP_ENTER_DEEP_SLEEP, // 进入深睡眠
- STEP_WAIT, // 等待
-
- STEP_SET_MODE, // 设置WIFI工作模式
- STEP_CLOSE_AUTOCONNECT, // 关闭自动连接AP
- STEP_CONNECT_AP, // 连接AP
- STEP_QUERY_SIGNAL, // 查询WiFi信号强度
- STEP_SET_CIPMODE, // 设置传输模式
- STEP_CONNECT_NETWORK, // 连接TCP/UDP网络
- STEP_JOIN_REGIST_MESSAGE, //拼接注册数据
- STEP_HANDLE, // 处理数据(数据发送+等待发送结果)
-
- STEP_SUCCESS, // 成功
- STEP_FAILURE, // 失败
- STEP_FINISH, // 流程结束
-
- };
- /******************************************* 注册相关函数 *******************************************/
- // 步骤跳转时的监听
- static uint16_t goto_step_event(uint16_t ns)
- {
- // 重置esp32状态
- esp32.reset();
-
- // 流程控制
- uint16_t step = ns;
-
- // if(ns == STEP_SET_CFUN_1 && STEP_SET_CFUN_1_times++ >= 1)
- // {
- // goto_failure("重新联网次数过多");
- // step = STEP_FAILURE;
- // }
- return step;
- }
- // 流程控制
- static struct PCTRL_Struct pctrl = {
- .current_step = STEP_FINISH,
- .next_step = STEP_FINISH,
- .step_wait = STEP_WAIT,
- .goto_step_listener = goto_step_event,
- };
- // 备注
- static char info[40];
- // 开始
- static void goto_start(void)
- {
- PCTRL_GotoStep(&pctrl, STEP_START, "开始");
- }
- // 成功
- static void goto_success(void)
- {
- REGIST_SetResult(REGIST_Result_Success);
- PCTRL_GotoStep(&pctrl, STEP_SUCCESS, "成功");
- }
- // 失败
- static void goto_failure(char * _info)
- {
- REGIST_SetResult(REGIST_Result_Failure);
- memset(info, 0, sizeof(info));
- strcpy(info, _info);
- PCTRL_GotoStep(&pctrl, STEP_FAILURE, "失败");
- Log_Printf_Debug("info:%s!\r\n", info);
- }
- // 结束
- static void goto_finish(void)
- {
- REGIST_SetStatus(REGIST_Status_Done);
- PCTRL_GotoStep(&pctrl, STEP_FINISH, "结束");
- }
- // 注册状态
- static enum REGIST_StatusEnum regist_status = REGIST_Status_None;
- // 注册结果
- static enum REGIST_ResultEnum regist_result = REGIST_Result_None;
- // 设置注册状态
- static void REGIST_SetStatus(enum REGIST_StatusEnum status)
- {
- regist_status = status;
- }
- // 获取注册状态
- enum REGIST_StatusEnum REGIST_GetStatus(void)
- {
- return regist_status;
- }
- // 设置注册结果
- static void REGIST_SetResult(enum REGIST_ResultEnum result)
- {
- regist_result = result;
- }
- // 获取注册结果
- enum REGIST_ResultEnum REGIST_GetResult(void)
- {
- if(TUORENIOT_GetCodeOfRegistResponse() == 200){
- regist_result = REGIST_Result_Success;
- }
- else
- {
- regist_result = REGIST_Result_None;
- }
- return regist_result;
- }
- // 重置注册
- enum EXECUTE_ResultEnum REGIST_Reset(void)
- {
- if(REGIST_GetStatus() == REGIST_Status_Being)
- {
- Log_Printf_Debug("注册流程重置错误!\r\n");
- return EXECUTE_Result_Failure;
- }
- REGIST_SetStatus(REGIST_Status_None);
- REGIST_SetResult(REGIST_Result_None);
- return EXECUTE_Result_Success;
- }
- // 开始注册
- enum EXECUTE_ResultEnum REGIST_Start(void)
- {
- REGIST_Reset();
- if(REGIST_GetStatus() != REGIST_Status_None)
- {
- Log_Printf_Debug("注册流程启动错误!\r\n");
- return EXECUTE_Result_Failure;
- }
- goto_start();
- REGIST_SetStatus(REGIST_Status_Being);
- return EXECUTE_Result_Success;
- }
- // 注册流程处理,放到大循环里
- void REGIST_ProcessHandle(void)
- {
- if(REGIST_GetStatus() == REGIST_Status_Being)
- {
- REGIST_Process();
- }
- }
- // 注册流程
- static enum Result result = Result_None;
- static void REGIST_Process()
- {
- switch(pctrl.current_step)
- {
- case STEP_NONE: break; // 空闲
- case STEP_START: // 开始
- PCTRL_GotoStep(&pctrl, STEP_EXIT_DEEP_SLEEP, "退出休眠");
- break;
- case STEP_EXIT_DEEP_SLEEP: // 退出深休眠
- esp32.exit_deepsleep();
- PCTRL_GotoStepWait(&pctrl, STEP_READY,5, "判断模块是否启动");
-
- break;
- case STEP_READY: // 判断模块是否启动
- result = esp32.recv_ready_with_time(5000);
- if(result == Result_Success)
- {
- PCTRL_GotoStep(&pctrl, STEP_CLOSE_AUTOCONNECT, "关闭自动连接AP模式");
- }
- else if(result == Result_Failed)
- {
- goto_failure("WiFi模块启动失败");
- }
- break;
- case STEP_CLOSE_AUTOCONNECT: // 关闭自动连接AP模式
-
- result = esp32.autoconnect_ap(0);
- if(result == Result_Success)
- {
- PCTRL_GotoStep(&pctrl, STEP_SET_MODE, "设置WiFi为Station工作模式");
- }
- else if(result == Result_Failed)
- {
- goto_failure("关闭自动连接AP模式失败");
- }
- break;
- case STEP_SET_MODE: // 设置WiFi为Station模式
- result = esp32.set_mode(1);
- if(result == Result_Success)
- {
- PCTRL_GotoStep(&pctrl, STEP_CONNECT_AP, "连接AP");
- }
- else if(result == Result_Failed)
- {
- goto_failure("设置工作模式失败");
- }
- break;
- case STEP_CONNECT_AP: // 连接AP
- result = esp32.connect_ap(INITIAL_WIFI_ID,INITIAL_WIFI_PASSWORD);
- if(result == Result_Success)
- {
- PCTRL_GotoStep(&pctrl, STEP_SET_CIPMODE, "设置普通传输模式");
- }
- else if(result == Result_Failed)
- {
- goto_failure("连接AP失败");
- }
- break;
- case STEP_SET_CIPMODE: //设置普通传输模式
- result = esp32.set_cipmode(0);
- if(result == Result_Success)
- {
- PCTRL_GotoStep(&pctrl, STEP_CONNECT_NETWORK, "连接TCP网络");
- }
- else if(result == Result_Failed)
- {
- goto_failure("设置传输模式失败");
- }
- break;
- case STEP_CONNECT_NETWORK: //连接TCP网络
-
- result = esp32.connect_network("TCP", REGIST_SERVER, REGIST_PORT);
- if(result == Result_Success)
- {
- PCTRL_GotoStep(&pctrl, STEP_JOIN_REGIST_MESSAGE, "拼接注册信息");
- }
- else if(result == Result_Failed)
- {
- goto_failure("连接TCP网络失败");
- }
- break;
- case STEP_JOIN_REGIST_MESSAGE: //拼接注册信息
- memset(regist_request.deviceId, 0, sizeof(regist_request.deviceId));
- memset(regist_data, 0, sizeof(regist_data));
- TUORENIOT_PackRegistRequest(regist_data, ®ist_data_length, ®ist_request);
- TUORENIOT_PrintfRegistRequestStruct(®ist_request);
- PCTRL_GotoStep(&pctrl, STEP_HANDLE, "处理数据");
-
- break;
- case STEP_HANDLE: //处理数据
- result = esp32.handle_data(regist_data, regist_data_length, ®ist_data_length);
- if(result == Result_Success)
- {
-
- uint8_t res = TUORENIOT_AnalysisRegistData(regist_data, regist_data_length);
- if(res == 1) // 成功
- {
- goto_success();
- }
- else // 失败
- {
- goto_failure("解析失败");
- }
- }
- else if(result == Result_Failed)
- {
- goto_failure("注册数据处理失败");
- }
- break;
- case STEP_WAIT: // 等待
- PCTRL_Wait(&pctrl);
- break;
- case STEP_SUCCESS: // 成功
- PCTRL_GotoStep(&pctrl, STEP_ENTER_DEEP_SLEEP, "注册成功,模块进入深休眠");
- break;
- case STEP_FAILURE: // 失败
- PCTRL_GotoStep(&pctrl, STEP_ENTER_DEEP_SLEEP, "注册失败,模块进入深休眠");
- break;
- case STEP_ENTER_DEEP_SLEEP: // 模块进入深休眠
- esp32.enter_deepsleep();
- Log_Printf_Debug("模块进入深休眠模式\r\n");
- goto_finish();
- break;
- case STEP_FINISH: // 流程结束
- break;
-
- default: break;
- }
- }
- #endif
|