Smartconfig 简称一键配网技术,运用该技术,可以将WIFI设备便捷快速的连接路由器。 Smartconfig原理:
3 M4 g, h1 U- b% }1 L( I3 |6 y1. 设备进入初始化状态,开始收听附近的 WiFi 数据包9 V$ [. O) U0 ~+ l
2. 手机/平板设置 WiFi 名字和密码后,发送 UDP 广播包。
+ Q8 o; ]; I) Y2 D7 [) P; N! k3. 设备通过 UDP 包(长度)获取配置信息,切换网络模式,连接上家里 WiFi,配置完成。
' y8 M+ |. }: v8 I; j
9 A. P( k5 i+ @0 H7 P2 A
8 E! R, a( ]* j+ w" f6 z: b* [
: D, C- o0 f6 l1 ]4 r# s 前面讲到了移植rtthread AT组件和at device 软件包移植https://www.stmcu.org.cn/module/forum/thread-621343-1-1.html,下载我们来讲讲如何用AT 组件和AT device软件包。 AT组件是什么,AT 组件是基于 RT-Thread 系统的 AT Server 和 AT Client 的实现,组件完成 AT 命令的发送、命令格式及参数判断、命令的响应、响应数据的接收、响应数据的解析、URC 数据处理等整个 AT 命令数据交互流程。
/ M8 `* l. [8 M3 L 主要的AT组件函数:5 C" h: R b q
//创建响应结构体
; @" F/ T5 T; Yat_response_t at_create_resp(rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout);
7 b1 ^, b+ J8 r# q( X# h" O//删除响应结构体4 x0 t% Q) h/ Z# |7 p! i
void at_delete_resp(at_response_t resp);1 z' n3 Y& n% G$ K! S6 q) B8 F4 }5 t% r
//设置响应集体. [( i; o4 I& b
at_response_t at_resp_set_info(at_response_t resp, rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout);
5 X5 I0 W1 B' w1 o) s* I: B/ s8 E//发送响应数据并接受响应4 b9 j" n% j& d& O; w
rt_err_t at_exec_cmd(at_response_t resp, const char*cmd_expr, ...);7 ^9 K; @" t- B: k5 `1 H2 @& z
//设置期待接收at 设备主动下发信息的响应函数- m1 ]! v, p5 S. N! k7 Z8 n
void at_set_urc_table(const struct at_urc *table, rt_size_t size);% x) j/ y( \, @1 F) n
- void samrt_config(void){
: G) K' w- U7 q5 A3 S. t6 o -
& c0 N2 O- ^( }' P0 B: f+ w! w -
; @2 O! ^! c4 F0 }+ b - at_response_t resp = RT_NULL;) u% m( E, N. J, z8 H" P
- rt_err_t result = RT_EOK;+ ~. D) G% U0 ^8 u M5 k
- rt_uint8_t count=0;+ V- } f( L& \& s! c. Q- ]
- smart_config=1;//清除标志位; q" n0 x+ @4 F1 A4 J8 t8 y; b
- //创建响应数据
2 U2 s5 e2 M1 M0 g. N - resp = at_create_resp(50, 0, rt_tick_from_millisecond(5000));0 V3 o: O3 t; n$ ~
- if (!resp)/ ~/ c0 h5 Z B6 F# u
- {3 h: {$ t9 E r( S x8 K
- LOG_E("No memory for response structure!");$ k& K: ^/ n" s# c6 ]$ a+ u
- result = -RT_ENOMEM;
; d" K. i1 I0 P. v7 _, Q - goto __exit;
8 o7 e% P) S) n7 U- X# s0 B - }
- A3 ^! ?$ ?. [0 d7 ^; Z -
- \& Y5 A% ^, t) i, T6 m1 | - //发送智能配网指令
N, K2 B- M5 V3 Z: m& x# ~* m - if (at_exec_cmd(at_resp_set_info(resp, 128, 0, 20 * RT_TICK_PER_SECOND),"AT+CWSTARTSMART=3") != RT_EOK)
& }3 j( L4 s0 C4 l. m6 W! i, l - {
& j. Y H3 K; P5 D" G9 h" Q M6 R6 i -
! D H( t: J0 w7 m - result = -RT_ERROR;/ p" f' @' Z6 f3 g" { O
- goto __exit;; p) R: X$ @) F' C1 E8 Q1 m8 p
- }
) ~& z6 H! W. l5 A! U: p- U - rt_kprintf("智能配网配置中 .......");3 _: {9 \5 Q4 X% T
- do{5 q8 V2 u. f: x C+ w% h+ L
- count++;7 C5 Y* R9 l5 C/ f9 w6 P
- rt_thread_delay(100); //1S
" P' ]( j# g4 O4 d$ ? - if(count==30)//30秒超时退出
( M: o. u1 G+ a7 Y7 \6 q" j A$ W - {
6 Y1 P5 e7 [! T - rt_kprintf("智能配网超时 .......");3 m: K: ]" e- W' P
- result = -RT_ERROR; H- F3 }5 n/ e8 i6 E
- break;& C. g0 i' u3 T1 \4 e
-
+ z* Q$ z( x: F3 H6 G8 F - }+ O8 b# F* ~1 o0 G' w; Y
- }7 h' c% I( g* d* ~# m M+ t
- while(smart_config==1);//判断配置是否成功7 r5 B8 W& J" u. S
-
/ D0 G* \6 X4 ~& W- f" C0 k - //停止智能配网指令4 l6 X) Y5 k* }) K
- if (at_exec_cmd(at_resp_set_info(resp, 25, 0, 20 * RT_TICK_PER_SECOND),"AT+CWSTOPSMART") != RT_EOK)
5 Q9 q" H: R M/ _ - {
6 O- t' ]7 O0 Y( G& G - 1 y1 \) u# v. x. N q: r
- result = -RT_ERROR;
5 Y; w: O+ E p6 r) J - goto __exit;
/ n2 b* J# ]6 E u2 \. [ - }! k, s/ U$ o6 |: J, F! [
- 1 h" N2 Z7 Q- R$ i+ F' z9 L# E
- __exit:
- \: A% g% v, } - if (resp)
$ r' b8 _& {; d5 w. u8 x( T - {" [) N- y, @8 P9 o$ q, K% g! `
- at_delete_resp(resp);//删除结构体/ r b" d& [* j, d2 `& A
- }! k( H+ {* G, Z1 h' S. G7 y
- 8 l( r! _ n7 o
- if (!result). ~3 k1 k7 }; s2 v1 U
- {8 z; R3 o" E: ^8 O& o8 R9 C8 I# V8 a
- rt_kprintf("智能配网成功");
9 y' k9 v1 D, q) @: h3 O - }/ Q- N+ b2 |( G5 q% e
- else
) I. y4 F0 V' R2 H } - {3 V; b* B n3 s2 I N! d# s
- , W/ t; B; |% Z$ Y; R( ]. D
- / D- J2 o( ]! J+ k9 P1 M, p& |3 z
- rt_kprintf("智能配网失败 .......");
5 M! E- B, c6 i9 b - }& | b+ \+ e9 N+ ~9 M
-
9 T* d9 a( I$ {' v# b - }
复制代码
. k; `: t/ q# j: I! k
4 n! G1 K% |. y) D+ d
源码参考:https://www.stmcu.org.cn/module/forum/thread-621278-1-1.html里面的资料
8 a, [4 n8 t% S" S3 l7 Q7 W/ m
+ T% Z8 ?+ p6 K/ ]! W* g) _1 Z# v4 e, i
|
老客户啊,