esp32.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257
  1. #include "CONFIG.h"
  2. #if ESP32
  3. #include "stm32f10x.h"
  4. #include <stdio.h>
  5. #include <stdarg.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include "esp32.h"
  9. #include "Common_Util.h"
  10. #include "Log_Module.h"
  11. #include "At_Module.h"
  12. /******************************************* 基于ESP32_C3模组的相关方法声明 *******************************************/
  13. void esp32_reset(void); //1.重置状态。该文件中的方法共用状态,在使用下面的方法前需要重置一下状态。
  14. void esp32_exit_deepsleep(void); //2.退出深休眠
  15. void esp32_enter_deepsleep(void); //3.进入深休眠
  16. void esp32_exit_lightsleep(void); //4.退出浅休眠
  17. void esp32_enter_lightsleep(void); //5.进入浅休眠
  18. enum Result esp32_set_lightsleep_wakeup(uint8_t source, uint8_t gpio, uint8_t mode); //6.设置浅睡眠唤醒源
  19. enum Result esp32_set_lightsleep_wakeup_sync(uint8_t source, uint8_t gpio, uint8_t mode); //7.设置浅睡眠唤醒源-同步
  20. enum Result esp32_set_sleep(uint8_t mode); //8.设置睡眠模式
  21. enum Result esp32_set_sleep_sync(uint8_t mode); //9.设置睡眠模式-同步
  22. enum Result esp32_connect_ap(char * id, char * password); //10.连接AP
  23. enum Result esp32_connect_ap_sync(char * id, char * password); //11.连接AP-同步
  24. enum Result esp32_set_cipmode(uint8_t mode); //12.设置传输模式
  25. enum Result esp32_set_cipmode_sync(uint8_t mode); //13.设置传输模式-同步
  26. enum Result esp32_connect_network(char * service_type, char * IP_address, uint16_t remote_port); //14.连接TCP/UDP服务器
  27. enum Result esp32_connect_network_sync(char * service_type, char * IP_address, uint16_t remote_port); //15.连接TCP/UDP服务器-同步
  28. enum Result esp32_query_id_signal(char * ID, int * RSSI); //16.查询指定ID的WiFi信号强度
  29. enum Result esp32_query_id_signal_sync(char * ID, int * RSSI); //17.查询指定ID的WiFi信号强度-同步
  30. enum Result esp32_close_network(void); //18.关闭TCP/UDP连接
  31. enum Result esp32_close_network_sync(void); //19.关闭TCP/UDP连接-同步
  32. enum Result esp32_autoconnect_ap(uint8_t mode); //20.是否自动连接AP
  33. enum Result esp32_autoconnect_ap_sync(uint8_t mode); //21.是否自动连接AP-同步
  34. enum Result esp32_close_ap(void); //22.关闭AP连接
  35. enum Result esp32_close_ap_sync(void); //23.关闭AP连接-同步
  36. enum Result esp32_query_signal(int * RSSI); //24.查询已连接WiFi的信号强度
  37. enum Result esp32_query_signal_sync(int * RSSI); //25.查询已连接WiFi的信号强度-同步
  38. enum Result esp32_ready(void); //26.模块是否启动-初始化处理专用
  39. enum Result esp32_ready_sync(void); //27.模块是否启动-同步
  40. enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length); //28.处理数据(数据发送+等待发送结果)
  41. enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length); //29.处理数据(数据发送+等待发送结果)-同步
  42. enum Result esp32_recv_ready(void); //30.判断模块是否正常启动
  43. enum Result esp32_recv_ready_with_time(uint32_t time_out); //31.判断模块是否正常启动+等待时间
  44. /*************************************************** AT指令相关函数 ***************************************************/
  45. //AT指令数组
  46. static char AT_CMD[256];
  47. //发送AT指令 二进制
  48. static void send_data(uint8_t * data, uint16_t length)
  49. {
  50. AT_Send_Bytes(data, length);
  51. }
  52. // 发送AT指令 字符串
  53. static uint8_t send_at_string(char * cmd)
  54. {
  55. uint8_t state = 0;
  56. if(AT_Get_Status() == AT_Status_None)
  57. {
  58. // 发送AT指令
  59. AT_Send_String(cmd);
  60. state = 1;
  61. }
  62. return state;
  63. }
  64. /******************************************* 基于ESP32_C3模组的相关执行函数 *********************************************/
  65. // 获取状态
  66. static enum STATUS getStatus(void)
  67. {
  68. return esp32.status;
  69. }
  70. // 设置状态
  71. static void setStatus(enum STATUS status)
  72. {
  73. esp32.status = status;
  74. }
  75. // 获取定时
  76. static uint32_t getTimerMs(void)
  77. {
  78. return time_get_delay(&esp32.timer);
  79. }
  80. // 清除定时
  81. static void clearTimer(void)
  82. {
  83. time_clear(&esp32.timer);
  84. }
  85. // 设置定时
  86. //static void setTimerMs(uint32_t time)
  87. //{
  88. // esp32.timer_ms = time;
  89. //}
  90. // 获取ID
  91. static uint8_t getActiveID(void)
  92. {
  93. return esp32.activeID;
  94. }
  95. //设置ID
  96. static void setActiveID(uint8_t activeID)
  97. {
  98. esp32.activeID = activeID;
  99. }
  100. // 验证ID
  101. static uint8_t verifyActiveID(uint8_t activeID)
  102. {
  103. if(getActiveID() == 0 || getActiveID() == activeID){ return 1; }
  104. else
  105. {
  106. Log_Printf_Debug("activeID repetition!\r\n");
  107. return 0;
  108. }
  109. }
  110. // 返回超时结果
  111. static enum Result overtime(void)
  112. {
  113. setStatus(Status_Overtime); // 超时
  114. return Result_Failed; // 结果
  115. }
  116. // 返回成功结果
  117. static enum Result success(void)
  118. {
  119. setStatus(Status_Success); //成功
  120. return Result_Success; //结果
  121. }
  122. // 返回成功结果
  123. static enum Result success_no_log(void)
  124. {
  125. // 成功
  126. setStatus(Status_Success);
  127. // 结果
  128. return Result_Success;
  129. }
  130. //// 返回失败结果
  131. //static enum Result failed(void)
  132. //{
  133. // setStatus(Status_Failed); //失败
  134. // return Result_Failed; //结果
  135. //}
  136. // 返回失败结果
  137. static enum Result failed(int type)
  138. {
  139. // 失败
  140. setStatus(Status_Failed);
  141. if(type == 1)
  142. {
  143. Log_Printf_Debug("activeID: %d, error: 接收结果过期,请重置状态\r\n", esp32.activeID); // 打印日志
  144. }
  145. else if(type == 2)
  146. {
  147. // 发送日志
  148. Log_Printf_Debug("activeID: %d, AT接收失败: %d\r\n", esp32.activeID, AT_result_length());
  149. Log_SendArray_Debug(AT_result(), AT_result_length());
  150. }
  151. else if(type == 3)
  152. {
  153. Log_Printf_Debug("当前WiFi无信号\r\n");
  154. }
  155. else
  156. {
  157. Log_Printf_Debug("activeID: %d, error: 未知错误类型\r\n", esp32.activeID); // 打印日志
  158. }
  159. // 失败结果
  160. return Result_Failed;
  161. }
  162. // 发送指令并改变状态
  163. enum Result send_at(char * cmd, uint8_t activeID)
  164. {
  165. Log_Printf_Debug(cmd); // 打印AT指令
  166. if(send_at_string(cmd)) // 发送AT指令
  167. {
  168. setActiveID(activeID); // 活动ID
  169. setStatus(Status_Sending); // 设置已发送
  170. clearTimer(); // 重置计时
  171. return Result_None; // 未知结果
  172. }
  173. else
  174. {
  175. Log_Printf_Debug("AT指令发送失败\r\n"); // 打印日志
  176. return Result_Failed; // 失败结果
  177. }
  178. }
  179. // 1.重置状态
  180. void esp32_reset(void)
  181. {
  182. setStatus(Status_None); // 重置状态
  183. setActiveID(0); // 重置ID
  184. clearTimer(); // 重置计时
  185. AT_Clear(); // 清除AT指令
  186. }
  187. //2.退出深休眠
  188. void esp32_exit_deepsleep(void)
  189. {
  190. GPIO_SetBits(WAKE_GPIO, WAKE_GPIO_Pin); // 拉高IO口,使能ESP32_C3模组
  191. }
  192. //3.进入深休眠
  193. void esp32_enter_deepsleep(void)
  194. {
  195. GPIO_ResetBits(WAKE_GPIO, WAKE_GPIO_Pin); // 拉低IO口,使ESP32_C3模组失能
  196. }
  197. //4.退出浅休眠 (使用此功能需先配置浅休眠模式)
  198. void esp32_exit_lightsleep(void)
  199. {
  200. // GPIO_SetBits(WAKE_GPIO, LIGHT_SLEEP_GPIO_Pin); // 拉高IO口,使ESP32_C3模组退出浅休眠
  201. }
  202. //5.进入浅休眠 (使用此功能需先配置浅休眠模式)
  203. void esp32_enter_lightsleep(void)
  204. {
  205. // GPIO_ResetBits(WAKE_GPIO, LIGHT_SLEEP_GPIO_Pin);// 拉低IO口,使ESP32_C3模组进入浅休眠
  206. }
  207. /******************************************************************************
  208. * 6.设置浅睡眠唤醒源
  209. * param1: source 代表唤醒源 (0:保留配置 1:保留配置 2:GPIO唤醒)
  210. * param2: gpio (唤醒源为GPIO时,代表GPIO管脚)
  211. * param3: mode (唤醒源为GPIO时,该参数表示唤醒电平。 0:低电平唤醒 1:高电平唤醒)
  212. *
  213. *******************************************************************************/
  214. enum Result esp32_set_lightsleep_wakeup(uint8_t source, uint8_t gpio, uint8_t mode)
  215. {
  216. enum Result result = Result_None;
  217. int activeID = 11, time=500; // 活动ID, 超时时间
  218. //校验参数
  219. if(source != 2) //本模块浅休眠唤醒模式采用GPIO唤醒
  220. {
  221. Log_Printf_Debug("set lightsleep wakeup error!\r\n");
  222. return Result_Failed;
  223. }
  224. // 校验ID
  225. if(!verifyActiveID(activeID)){ return Result_Failed; }
  226. // 判断状态
  227. if(getStatus() == Status_None) // 空闲状态
  228. {
  229. sprintf(AT_CMD, "AT+SLEEPWKCFG=%d,%d,%d\r\n",source,gpio,mode); // 拼接AT指令
  230. result = send_at(AT_CMD, activeID);
  231. }
  232. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  233. {
  234. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  235. result = failed(1); // 失败
  236. }
  237. else if(getTimerMs() > time) // 正在发送状态。判断超时
  238. {
  239. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  240. result = overtime(); // 超时
  241. }
  242. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  243. {
  244. // 发送日志
  245. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  246. Log_SendArray_Debug(AT_result(), AT_result_length());
  247. result = success(); // 成功
  248. }
  249. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  250. {
  251. // 发送日志
  252. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  253. Log_SendArray_Debug(AT_result(), AT_result_length());
  254. result = failed(2); // 失败
  255. }
  256. return result;
  257. }
  258. //7.设置浅睡眠唤醒源-同步
  259. enum Result esp32_set_lightsleep_wakeup_sync(uint8_t source, uint8_t gpio, uint8_t mode)
  260. {
  261. enum Result result = Result_None;
  262. while(1)
  263. {
  264. result = esp32_set_lightsleep_wakeup(source, gpio, mode);
  265. if(result != Result_None)
  266. {
  267. // 重置
  268. esp32.reset();
  269. break;
  270. }
  271. }
  272. return result;
  273. }
  274. /******************************************************************************
  275. * 8.设置睡眠模式
  276. * param1: mode 代表睡眠模式 (0:禁用睡眠模式 1:Modem-sleep模式
  277. 2:Light-sleep模式 3:Modem-sleep listen interval模式)
  278. *
  279. *******************************************************************************/
  280. enum Result esp32_set_sleep(uint8_t mode)
  281. {
  282. enum Result result = Result_None;
  283. int activeID = 12, time=500; // 活动ID, 超时时间
  284. //校验参数
  285. if(mode != 2) //本模块采用浅休眠模式
  286. {
  287. Log_Printf_Debug("set sleep mode error!\r\n");
  288. return Result_Failed;
  289. }
  290. // 校验ID
  291. if(!verifyActiveID(activeID)){ return Result_Failed; }
  292. // 判断状态
  293. if(getStatus() == Status_None) // 空闲状态
  294. {
  295. sprintf(AT_CMD, "AT+SLEEP=%d\r\n",mode); // 拼接AT指令
  296. result = send_at(AT_CMD, activeID);
  297. }
  298. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  299. {
  300. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  301. result = failed(1); // 失败
  302. }
  303. else if(getTimerMs() > time) // 正在发送状态。判断超时
  304. {
  305. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  306. result = overtime(); // 超时
  307. }
  308. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  309. {
  310. // 发送日志
  311. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  312. Log_SendArray_Debug(AT_result(), AT_result_length());
  313. result = success(); // 成功
  314. }
  315. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  316. {
  317. // 发送日志
  318. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  319. Log_SendArray_Debug(AT_result(), AT_result_length());
  320. result = failed(2); // 失败
  321. }
  322. return result;
  323. }
  324. //9.设置睡眠模式-同步
  325. enum Result esp32_set_sleep_sync(uint8_t mode)
  326. {
  327. enum Result result = Result_None;
  328. while(1)
  329. {
  330. result = esp32_set_sleep(mode);
  331. if(result != Result_None)
  332. {
  333. // 重置
  334. esp32.reset();
  335. break;
  336. }
  337. }
  338. return result;
  339. }
  340. /******************************************************************************
  341. * 10.连接AP
  342. * param1: id 目标名称
  343. * param2: password 密码
  344. *
  345. *******************************************************************************/
  346. enum Result esp32_connect_ap(char * id, char * password)
  347. {
  348. enum Result result = Result_None;
  349. int activeID = 13, time=6000; // 活动ID, 超时时间
  350. // 校验ID
  351. if(!verifyActiveID(activeID)){ return Result_Failed; }
  352. // 判断状态
  353. if(getStatus() == Status_None) // 空闲状态
  354. {
  355. sprintf(AT_CMD, "AT+CWJAP=\"%s\",\"%s\"\r\n", id, password); // 拼接AT指令
  356. result = send_at(AT_CMD, activeID);
  357. }
  358. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  359. {
  360. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  361. result = failed(1); // 失败
  362. }
  363. else if(getTimerMs() > time) // 正在发送状态。判断超时
  364. {
  365. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  366. result = overtime(); // 超时
  367. }
  368. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  369. {
  370. // 发送日志
  371. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  372. Log_SendArray_Debug(AT_result(), AT_result_length());
  373. result = success(); // 成功
  374. }
  375. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  376. {
  377. // 发送日志
  378. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  379. Log_SendArray_Debug(AT_result(), AT_result_length());
  380. result = failed(2); // 失败
  381. }
  382. return result;
  383. }
  384. //11.连接AP-同步
  385. enum Result esp32_connect_ap_sync(char * id, char * password)
  386. {
  387. enum Result result = Result_None;
  388. while(1)
  389. {
  390. result = esp32_connect_ap(id, password);
  391. if(result != Result_None)
  392. {
  393. // 重置
  394. esp32.reset();
  395. break;
  396. }
  397. }
  398. return result;
  399. }
  400. /*************************************************************************************
  401. * 12.设置数据传输模式
  402. * param1: mode(0:普通传输模式 1:WiFi透传接收模式,支持TCP单连接、UDP固定通信对端的情况)
  403. *
  404. **************************************************************************************/
  405. enum Result esp32_set_cipmode(uint8_t mode)
  406. {
  407. enum Result result = Result_None;
  408. int activeID = 14, time=500; // 活动ID, 超时时间
  409. //校验参数
  410. if(mode != 0) //本模块采用普通模式
  411. {
  412. Log_Printf_Debug("set cipmode error!\r\n");
  413. return Result_Failed;
  414. }
  415. // 校验ID
  416. if(!verifyActiveID(activeID)){ return Result_Failed; }
  417. // 判断状态
  418. if(getStatus() == Status_None) // 空闲状态
  419. {
  420. sprintf(AT_CMD, "AT+CIPMODE=%d\r\n", mode); // 拼接AT指令
  421. result = send_at(AT_CMD, activeID);
  422. }
  423. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  424. {
  425. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  426. result = failed(1); // 失败
  427. }
  428. else if(getTimerMs() > time) // 正在发送状态。判断超时
  429. {
  430. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  431. result = overtime(); // 超时
  432. }
  433. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  434. {
  435. // 发送日志
  436. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  437. Log_SendArray_Debug(AT_result(), AT_result_length());
  438. result = success(); // 成功
  439. }
  440. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  441. {
  442. // 发送日志
  443. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  444. Log_SendArray_Debug(AT_result(), AT_result_length());
  445. result = failed(2); // 失败
  446. }
  447. return result;
  448. }
  449. //13.设置传输模式-同步
  450. enum Result esp32_set_cipmode_sync(uint8_t mode)
  451. {
  452. enum Result result = Result_None;
  453. while(1)
  454. {
  455. result = esp32_set_cipmode(mode);
  456. if(result != Result_None)
  457. {
  458. // 重置
  459. esp32.reset();
  460. break;
  461. }
  462. }
  463. return result;
  464. }
  465. /******************************************************************************
  466. * 14.连接TCP/UDP服务器
  467. * param1: host远程地址
  468. * param2: port远程端口
  469. *
  470. *******************************************************************************/
  471. enum Result esp32_connect_network(char * service_type, char * IP_address, uint16_t remote_port)
  472. {
  473. enum Result result = Result_None;
  474. int activeID = 15, time=5000; // 活动ID, 超时时间
  475. // 校验ID
  476. if(!verifyActiveID(activeID)){ return Result_Failed; }
  477. // 判断状态
  478. if(getStatus() == Status_None) // 空闲状态
  479. {
  480. sprintf(AT_CMD, "AT+CIPSTART=\"%s\",\"%s\",%d\r\n", service_type, IP_address, remote_port); // 拼接AT指令
  481. result = send_at(AT_CMD, activeID);
  482. }
  483. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  484. {
  485. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  486. result = failed(1); // 失败
  487. }
  488. else if(getTimerMs() > time) // 正在发送状态。判断超时
  489. {
  490. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  491. result = overtime(); // 超时
  492. }
  493. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  494. {
  495. // 发送日志
  496. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  497. Log_SendArray_Debug(AT_result(), AT_result_length());
  498. result = success(); // 成功
  499. }
  500. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  501. {
  502. // 发送日志
  503. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  504. Log_SendArray_Debug(AT_result(), AT_result_length());
  505. result = failed(2); // 失败
  506. }
  507. return result;
  508. }
  509. //15.连接TCP/UDP服务器服务器-同步
  510. enum Result esp32_connect_network_sync(char * service_type, char * IP_address, uint16_t remote_port)
  511. {
  512. enum Result result = Result_None;
  513. while(1)
  514. {
  515. result = esp32_connect_network(service_type, IP_address, remote_port);
  516. if(result != Result_None)
  517. {
  518. // 重置
  519. esp32.reset();
  520. break;
  521. }
  522. }
  523. return result;
  524. }
  525. /******************************************************************************
  526. * 16.查询指定ID的WiFi信号强度
  527. * param1: ID 指定的WIFI名称
  528. *
  529. *******************************************************************************/
  530. enum Result esp32_query_id_signal(char * ID, int * RSSI)
  531. {
  532. enum Result result = Result_None;
  533. int activeID = 66, time=5000; // 活动ID, 超时时间
  534. // 校验ID
  535. if(!verifyActiveID(activeID)){ return Result_Failed; }
  536. // 判断状态
  537. if(getStatus() == Status_None) // 空闲状态
  538. {
  539. sprintf(AT_CMD, "AT+CWLAP=\"%s\"\r\n",ID); // 拼接AT指令
  540. result = send_at(AT_CMD, activeID);
  541. }
  542. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  543. {
  544. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  545. result = failed(1); // 失败
  546. }
  547. else if(getTimerMs() > time) // 正在发送状态。判断超时
  548. {
  549. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  550. result = overtime(); // 超时
  551. }
  552. else if(strstr((char * )AT_result(), "OK") != NULL) // 查询是否返回
  553. {
  554. if(strstr((char * )AT_result(), "+CWLAP:") != NULL)
  555. {
  556. // 发送日志
  557. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  558. Log_SendArray_Debug(AT_result(), AT_result_length());
  559. // 处理返回结果
  560. char * saveptr = NULL;
  561. char * split = ",";
  562. strtok_r((char * )AT_result(), split, &saveptr);
  563. strtok_r(NULL, split, &saveptr);
  564. * RSSI = atoi(strtok_r(NULL, split, &saveptr));
  565. //打印信号强度值
  566. Log_Printf_Debug("指定ID的WiFi强度值:%d\r\n", * RSSI);
  567. result = success(); // 成功
  568. }
  569. else
  570. {
  571. // 发送日志
  572. Log_Printf_Debug("返回: %d\r\n", AT_result_length());
  573. Log_SendArray_Debug(AT_result(), AT_result_length());
  574. result = failed(3); // 失败
  575. }
  576. }
  577. return result;
  578. }
  579. //17.查询指定ID的WiFi信号强度-同步
  580. enum Result esp32_query_id_signal_sync(char * ID, int * RSSI)
  581. {
  582. enum Result result = Result_None;
  583. while(1)
  584. {
  585. result = esp32_query_id_signal(ID, RSSI);
  586. if(result != Result_None)
  587. {
  588. // 重置
  589. esp32.reset();
  590. break;
  591. }
  592. }
  593. return result;
  594. }
  595. /******************************************************************************
  596. * 18.关闭TCP/UDP链接
  597. *
  598. *******************************************************************************/
  599. enum Result esp32_close_network(void)
  600. {
  601. enum Result result = Result_None;
  602. int activeID = 17, time=1000; // 活动ID, 超时时间
  603. // 校验ID
  604. if(!verifyActiveID(activeID)){ return Result_Failed; }
  605. // 判断状态
  606. if(getStatus() == Status_None) // 空闲状态
  607. {
  608. sprintf(AT_CMD, "AT+CIPCLOSE\r\n"); // 拼接AT指令
  609. result = send_at(AT_CMD, activeID);
  610. }
  611. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  612. {
  613. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  614. result = failed(1); // 失败
  615. }
  616. else if(getTimerMs() > time) // 正在发送状态。判断超时
  617. {
  618. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  619. result = overtime(); // 超时
  620. }
  621. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  622. {
  623. // 发送日志
  624. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  625. Log_SendArray_Debug(AT_result(), AT_result_length());
  626. result = success(); // 成功
  627. }
  628. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  629. {
  630. // 发送日志
  631. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  632. Log_SendArray_Debug(AT_result(), AT_result_length());
  633. Log_Printf_Debug("当前无UDP网络连接\r\n");
  634. result = success(); // 同样返回成功
  635. }
  636. return result;
  637. }
  638. //19.关闭TCP/UDP连接-同步
  639. enum Result esp32_close_network_sync(void)
  640. {
  641. enum Result result = Result_None;
  642. while(1)
  643. {
  644. result = esp32_close_network();
  645. if(result != Result_None)
  646. {
  647. // 重置
  648. esp32.reset();
  649. break;
  650. }
  651. }
  652. return result;
  653. }
  654. /******************************************************************************
  655. * 20.是否自动连接AP
  656. * param1: mode(0:上电不自动连接AP 1:上电自动连接 AP) 本设置保存到NVS区域
  657. *
  658. *******************************************************************************/
  659. enum Result esp32_autoconnect_ap(uint8_t mode)
  660. {
  661. enum Result result = Result_None;
  662. int activeID = 18, time=500; // 活动ID, 超时时间
  663. //校验参数
  664. if(mode != 0) //本系统关闭自动连接AP模式
  665. {
  666. Log_Printf_Debug("set autoconnect mode error!\r\n");
  667. return Result_Failed;
  668. }
  669. // 校验ID
  670. if(!verifyActiveID(activeID)){ return Result_Failed; }
  671. // 判断状态
  672. if(getStatus() == Status_None) // 空闲状态
  673. {
  674. sprintf(AT_CMD, "AT+CWAUTOCONN=%d\r\n", mode); // 拼接AT指令
  675. result = send_at(AT_CMD, activeID);
  676. }
  677. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  678. {
  679. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  680. result = failed(1); // 失败
  681. }
  682. else if(getTimerMs() > time) // 正在发送状态。判断超时
  683. {
  684. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  685. result = overtime(); // 超时
  686. }
  687. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  688. {
  689. // 发送日志
  690. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  691. Log_SendArray_Debug(AT_result(), AT_result_length());
  692. result = success(); // 成功
  693. }
  694. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  695. {
  696. // 发送日志
  697. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  698. Log_SendArray_Debug(AT_result(), AT_result_length());
  699. result = failed(2); // 失败
  700. }
  701. return result;
  702. }
  703. //21.是否自动连接AP-同步
  704. enum Result esp32_autoconnect_ap_sync(uint8_t mode)
  705. {
  706. enum Result result = Result_None;
  707. while(1)
  708. {
  709. result = esp32_autoconnect_ap(mode);
  710. if(result != Result_None)
  711. {
  712. // 重置
  713. esp32.reset();
  714. break;
  715. }
  716. }
  717. return result;
  718. }
  719. /******************************************************************************
  720. * 22.关闭AP连接
  721. *
  722. *******************************************************************************/
  723. enum Result esp32_close_ap(void)
  724. {
  725. enum Result result = Result_None;
  726. int activeID = 17, time=500; // 活动ID, 超时时间
  727. // 校验ID
  728. if(!verifyActiveID(activeID)){ return Result_Failed; }
  729. // 判断状态
  730. if(getStatus() == Status_None) // 空闲状态
  731. {
  732. sprintf(AT_CMD, "AT+CWQAP\r\n"); // 拼接AT指令
  733. result = send_at(AT_CMD, activeID);
  734. }
  735. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  736. {
  737. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  738. result = failed(1); // 失败
  739. }
  740. else if(getTimerMs() > time) // 正在发送状态。判断超时
  741. {
  742. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  743. result = overtime(); // 超时
  744. }
  745. else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  746. {
  747. // 发送日志
  748. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  749. Log_SendArray_Debug(AT_result(), AT_result_length());
  750. result = success(); // 成功
  751. }
  752. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  753. {
  754. // 发送日志
  755. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  756. Log_SendArray_Debug(AT_result(), AT_result_length());
  757. result = failed(2); // 失败
  758. }
  759. return result;
  760. }
  761. //23.关闭AP连接-同步
  762. enum Result esp32_close_ap_sync(void)
  763. {
  764. enum Result result = Result_None;
  765. while(1)
  766. {
  767. result = esp32_close_ap();
  768. if(result != Result_None)
  769. {
  770. // 重置
  771. esp32.reset();
  772. break;
  773. }
  774. }
  775. return result;
  776. }
  777. /******************************************************************************
  778. * 24.查询WiFi信号强度
  779. * param1: RSSI信号强度值
  780. *
  781. *******************************************************************************/
  782. enum Result esp32_query_signal(int * RSSI)
  783. {
  784. enum Result result = Result_None;
  785. int activeID = 19, time=5000; // 活动ID, 超时时间
  786. // 校验ID
  787. if(!verifyActiveID(activeID)){ return Result_Failed; }
  788. // 判断状态
  789. if(getStatus() == Status_None) // 空闲状态
  790. {
  791. sprintf(AT_CMD, "AT+CWJAP?\r\n"); // 拼接AT指令
  792. result = send_at(AT_CMD, activeID);
  793. }
  794. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  795. {
  796. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  797. result = failed(1); // 失败
  798. }
  799. else if(getTimerMs() > time) // 正在发送状态。判断超时
  800. {
  801. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  802. result = overtime(); // 超时
  803. }
  804. else if(strstr((char * )AT_result(), "OK") != NULL) // 查询是否返回
  805. {
  806. if(strstr((char * )AT_result(), "CWJAP") != NULL)
  807. {
  808. // 发送日志
  809. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  810. Log_SendArray_Debug(AT_result(), AT_result_length());
  811. // 处理返回结果
  812. char * saveptr = NULL;
  813. char * split = ",";
  814. strtok_r((char * )AT_result(), split, &saveptr);
  815. strtok_r(NULL, split, &saveptr);
  816. strtok_r(NULL, split, &saveptr);
  817. * RSSI = atoi(strtok_r(NULL, split, &saveptr));
  818. //打印信号强度值
  819. Log_Printf_Debug("WiFi信号强度RSSI值: %d\r\n", *RSSI);
  820. result = success(); // 成功
  821. }
  822. else
  823. {
  824. // 发送日志
  825. Log_Printf_Debug("返回: %d\r\n", AT_result_length());
  826. Log_SendArray_Debug(AT_result(), AT_result_length());
  827. result = failed(2); // 失败
  828. }
  829. }
  830. else if(strstr((char * )AT_result(), "ERROR") != NULL)
  831. {
  832. // 发送日志
  833. Log_Printf_Debug("返回: %d\r\n", AT_result_length());
  834. Log_SendArray_Debug(AT_result(), AT_result_length());
  835. result = failed(2); // 失败
  836. }
  837. return result;
  838. }
  839. //25.查询WiFi信号强度-同步
  840. enum Result esp32_query_signal_sync(int * RSSI)
  841. {
  842. enum Result result = Result_None;
  843. while(1)
  844. {
  845. result = esp32_query_signal(RSSI);
  846. if(result != Result_None)
  847. {
  848. // 重置
  849. esp32.reset();
  850. break;
  851. }
  852. }
  853. return result;
  854. }
  855. /******************************************************************************
  856. * 26.模块是否重启
  857. *
  858. *******************************************************************************/
  859. enum Result esp32_ready(void)
  860. {
  861. if(AT_Get_Status() != AT_Status_None)
  862. {
  863. return Result_None;
  864. }
  865. enum Result result = Result_None;
  866. // 判断是否接收到
  867. if(strstr((char *)AT_result(),"ready") != 0)
  868. {
  869. // 发送日志
  870. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  871. Log_SendArray_Debug(AT_result(), AT_result_length());
  872. // 成功结果
  873. result = Result_Success;
  874. // 清理一下AT返回结果缓存
  875. AT_Clear_Result();
  876. }
  877. return result;
  878. }
  879. // 27.模块是否重启
  880. enum Result esp32_ready_sync(void)
  881. {
  882. enum Result result = Result_None;
  883. while(1)
  884. {
  885. result = esp32_ready();
  886. if(result != Result_None)
  887. {
  888. // 重置
  889. esp32.reset();
  890. break;
  891. }
  892. }
  893. return result;
  894. }
  895. /******************************************************************************
  896. * 28.数据处理
  897. *
  898. *******************************************************************************/
  899. enum Result esp32_handle_data(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length)
  900. {
  901. enum Result result = Result_None;
  902. int activeID = 30, time=5000; // 活动ID, 超时时间
  903. // 校验ID
  904. if(!verifyActiveID(activeID)){ return Result_Failed; }
  905. // 判断状态
  906. if(getStatus() == Status_None) // 空闲状态
  907. {
  908. sprintf(AT_CMD, "AT+CIPSEND=%d\r\n",send_data_length); // 拼接AT指令
  909. result = send_at(AT_CMD, activeID);
  910. }
  911. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  912. {
  913. Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  914. result = failed(1); // 失败
  915. }
  916. else if(getTimerMs() > time) // 正在发送状态。判断超时
  917. {
  918. Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  919. result = overtime(); // 超时
  920. }
  921. else if(strstr((char * )AT_result(), "OK\r\n\r\n>") != NULL) // 有响应
  922. {
  923. // 发送日志
  924. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  925. Log_SendArray_Debug(AT_result(), AT_result_length());
  926. //发送数据
  927. send_data(data, send_data_length);
  928. // 清理一下AT返回结果缓存
  929. AT_Clear_Result();
  930. // memset(data, 0, send_data_length);
  931. }
  932. else if(strstr((char * )AT_result(), "+IPD") != NULL)
  933. {
  934. // 防止接收不完整
  935. uint32_t last_time = AT_wait_time();
  936. if(last_time > 20) // 过10ms之后再取数据,避免数据截断。
  937. {
  938. // 发送日志
  939. Log_Printf_Debug("\r\nAT返回: %d, time_diff: %d\r\n", AT_result_length(), last_time);
  940. // Log_SendHex(AT_result(), AT_result_length());
  941. char * saveptr1 = NULL;
  942. char * saveptr2 = NULL;
  943. char * split1 = ",";
  944. char * split2 = ":";
  945. char * line1 = strtok_r((char * )AT_result(), split2, &saveptr1);
  946. uint8_t Line1_Len = strlen(line1);
  947. strtok_r(line1, split1, &saveptr2);
  948. char * length = strtok_r(NULL, split1, &saveptr2);
  949. * recv_data_length = strtoul(length, NULL, 10);
  950. //判断数据是否完整接收
  951. if(* recv_data_length > AT_result_length())
  952. {
  953. Log_Printf_Debug("数据接收出错!!!\r\n");
  954. // 失败
  955. result = Result_Failed;
  956. // 清理一下AT返回结果缓存
  957. AT_Clear_Result();
  958. return result;
  959. }
  960. uint16_t line_length = Line1_Len+1;
  961. // 内存拷贝
  962. memcpy(data, AT_result() + line_length, * recv_data_length);
  963. // 成功
  964. result = Result_Success;
  965. // 清理一下AT返回结果缓存
  966. AT_Clear_Result();
  967. }
  968. }
  969. else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  970. {
  971. // 发送日志
  972. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  973. Log_SendArray_Debug(AT_result(), AT_result_length());
  974. result = failed(2); // 失败
  975. }
  976. return result;
  977. }
  978. //29.数据处理-同步
  979. enum Result esp32_handle_data_sync(uint8_t * data, uint16_t send_data_length, uint16_t *recv_data_length)
  980. {
  981. enum Result result = Result_None;
  982. while(1)
  983. {
  984. result = esp32_handle_data( data, send_data_length, recv_data_length);
  985. if(result != Result_None)
  986. {
  987. // 重置
  988. esp32.reset();
  989. break;
  990. }
  991. }
  992. return result;
  993. }
  994. /******************************************************************************
  995. * 30.判断模块是否正常启动
  996. *
  997. *******************************************************************************/
  998. enum Result esp32_recv_ready(void)
  999. {
  1000. // 设置AT为使用中,防止被其他程序占用
  1001. AT_Set_Status(AT_Status_Using);
  1002. enum Result result = Result_None;
  1003. // 校验参数
  1004. char cmp[20];
  1005. sprintf(cmp, "ready"); // 拼接AT指令
  1006. // 判断是否接收到
  1007. if(strstr((char * )AT_result(), cmp) != NULL)
  1008. {
  1009. // 发送日志
  1010. Log_Printf_Debug("AT返回: %d\r\n", AT_result_length());
  1011. Log_SendArray_Debug(AT_result(), AT_result_length());
  1012. // 成功
  1013. result = Result_Success;
  1014. // 清理一下AT返回结果缓存
  1015. AT_Clear_Result();
  1016. }
  1017. return result;
  1018. }
  1019. //31.判断模块是否正常启动+等待时间
  1020. enum Result esp32_recv_ready_with_time(uint32_t time_out)
  1021. {
  1022. enum Result result = Result_None;
  1023. int activeID = 99, time = time_out; // 活动ID, 超时时间
  1024. // 校验ID
  1025. if(!verifyActiveID(activeID)){ return Result_Failed; }
  1026. // 判断状态
  1027. if(getStatus() == Status_None) // 空闲状态
  1028. {
  1029. setStatus(Status_Sending);
  1030. }
  1031. else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  1032. {
  1033. result = failed(1); // 失败
  1034. }
  1035. else if(getTimerMs() > time) // 正在发送状态。判断超时
  1036. {
  1037. result = overtime(); // 超时
  1038. }
  1039. else
  1040. {
  1041. // 接收数据
  1042. result = esp32.recv_ready();
  1043. if(result == Result_Success)
  1044. {
  1045. result = success_no_log(); // 成功
  1046. }
  1047. }
  1048. return result;
  1049. }
  1050. ///***************************************** 测试用*****************************************/
  1051. //enum Result esp32_at(void)
  1052. //{
  1053. // enum Result result = Result_None;
  1054. // int activeID = 88, time=500; // 活动ID, 超时时间
  1055. //
  1056. // // 校验ID
  1057. // if(!verifyActiveID(activeID)){ return Result_Failed; }
  1058. // // 判断状态
  1059. // if(getStatus() == Status_None) // 空闲状态
  1060. // {
  1061. // sprintf(AT_CMD, "AT\r\n"); // 拼接AT指令
  1062. // result = send_at(AT_CMD, activeID);
  1063. // }
  1064. // else if(getStatus() != Status_Sending) // 上一次的结果没有清除,返回错误,为了保证时效性,需要重置状态。重新调用
  1065. // {
  1066. // Log_Printf_Debug("返回结果过期,请重置状态\r\n");// 打印日志
  1067. // result = failed(); // 失败
  1068. // }
  1069. // else if(getTimerMs() > time) // 正在发送状态。判断超时
  1070. // {
  1071. // Log_Printf_Debug("AT指令返回超时\r\n"); // 打印日志
  1072. // result = overtime(); // 超时
  1073. // }
  1074. // else if(strstr((char * )AT_result(), "OK\r\n") != NULL) // 查询是否返回
  1075. // {
  1076. // // 发送日志
  1077. // Log_Printf_Debug("测试命令AT返回: %d\r\n", AT_result_length());
  1078. // Log_SendArray_Debug(AT_result(), AT_result_length());
  1079. // result = success(); // 成功
  1080. //
  1081. // }
  1082. // else if(strstr((char * )AT_result(), "ERROR\r\n") != NULL) // 查询是否返回
  1083. // {
  1084. // // 发送日志
  1085. // Log_Printf_Debug("测试命令AT返回: %d\r\n", AT_result_length());
  1086. // Log_SendArray_Debug(AT_result(), AT_result_length());
  1087. // result = failed(); // 失败
  1088. // }
  1089. // return result;
  1090. //}
  1091. //enum Result esp32_at_sync(void)
  1092. //{
  1093. // enum Result result = Result_None;
  1094. // while(1)
  1095. // {
  1096. // result = esp32_at();
  1097. // if(result != Result_None)
  1098. // {
  1099. // // 重置
  1100. // esp32.reset();
  1101. // break;
  1102. // }
  1103. // }
  1104. // return result;
  1105. //}
  1106. /***************************************** 基于ESP32_C3模组的相关结构体声明 *****************************************/
  1107. struct ESP32_Struct esp32=
  1108. {
  1109. .timer = {
  1110. .time = 0,
  1111. .flag = 0
  1112. },
  1113. .reset = esp32_reset,
  1114. .exit_deepsleep = esp32_exit_deepsleep,
  1115. .enter_deepsleep = esp32_enter_deepsleep,
  1116. .exit_lightsleep = esp32_exit_lightsleep,
  1117. .enter_lightsleep = esp32_enter_lightsleep,
  1118. .set_lightsleep_wakeup = esp32_set_lightsleep_wakeup,
  1119. .set_lightsleep_wakeup_sync = esp32_set_lightsleep_wakeup_sync,
  1120. .set_sleep = esp32_set_sleep,
  1121. .set_sleep_sync = esp32_set_sleep_sync,
  1122. .connect_ap = esp32_connect_ap,
  1123. .connect_ap_sync = esp32_connect_ap_sync,
  1124. .set_cipmode = esp32_set_cipmode,
  1125. .set_cipmode_sync = esp32_set_cipmode_sync,
  1126. .connect_network = esp32_connect_network,
  1127. .connect_network_sync = esp32_connect_network_sync,
  1128. .close_network = esp32_close_network,
  1129. .close_network_sync = esp32_close_network_sync,
  1130. .query_id_signal = esp32_query_id_signal,
  1131. .query_id_signal_sync = esp32_query_id_signal_sync,
  1132. .autoconnect_ap = esp32_autoconnect_ap,
  1133. .autoconnect_ap_sync = esp32_autoconnect_ap_sync,
  1134. .close_ap = esp32_close_ap,
  1135. .close_ap_sync = esp32_close_ap_sync,
  1136. .query_signal = esp32_query_signal,
  1137. .query_signal_sync = esp32_query_signal_sync,
  1138. .ready = esp32_ready,
  1139. .ready_sync = esp32_ready_sync,
  1140. .handle_data = esp32_handle_data,
  1141. .handle_data_sync = esp32_handle_data_sync,
  1142. .recv_ready = esp32_recv_ready,
  1143. .recv_ready_with_time = esp32_recv_ready_with_time,
  1144. };
  1145. #endif