你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

简单的状态机框架,让所有人快玩转WIFI以及GPRS模块  

[复制链接]
技术范儿 发布时间:2016-11-21 13:40
     前段时间,在NXP帮别人简单的封装了一套ESP8266的WIFI的库,直接用的AT指令挂到单片机上面跑的,临时做的用的是STA模式,TCPClient,由于买的模块各种问题(市面上很多ESP8266的模块,买回来请注意把指令都测试一下),连不上路由,在社区共享给后也没有人提出反馈。。。。。。所以临时就这么搁置了,指令通过串口测试了各个状态之间切换正常。不保**完没有BUG,但是提供了一个简洁的状态机框架,轻松改下即可用到GPRS、蓝牙等加他AT指令集的模块,希望对大家有帮助
& d( C+ Y- k8 O: B% J

ESP8266.zip

下载

12.23 KB, 下载次数: 583

源代码

赞 收藏 3 评论23 发布时间:2016-11-21 13:40

举报

23个回答
会飞的雪花 回答时间:2017-9-22 22:35:11
void ESP8266HalRevData(uint8_t inPut)
" z- `( b, r  k9 y{
2 g# m) w+ A5 y0 C2 J" G      
0 h3 E/ n2 F2 R3 `* f        if(ESP8266Step.Step < IDLE)( X! u' r  h# y  b& K) A
        {9 Y2 y: y7 D) L* ]) u
                ESP8266Step.ReveBuff[ESP8266Step.HalRevSize++] = inPut;
" M3 r2 J) g6 f2 `1 j        if(ESP8266Step.HalRevSize == MAXREVESIZE)
2 n7 w6 q( I: f1 e' ~8 T, S        {0 R! H3 W1 r6 K( \; w3 {
            memset(ESP8266Step.ReveBuff,0,MAXREVESIZE);
! f( C% l0 {, u* G$ m" Y            ESP8266Step.HalRevSize = 0;
; v0 Z* e: ~+ `, x. j# \: k8 ~5 w        }
0 C% s. Z9 A" u9 L: Y        }
7 y% B1 N. V: T, s        else if(ESP8266Step.Step >= IDLE)
- g& `; u3 e! r0 |( v        {
3 F# k: y  D9 N8 b" ~        TCPTransmission.TcpRxBuff[TCPTransmission.TcpRxSize++] = inPut;. K/ e+ z# a# a& n( a. |: d! g; [9 F

/ p. k8 o3 ^8 e7 J/ |* e4 b, e. I' W6 B/ W+ z
            TCPTransmission.TcpRevTime = GetTime();
" R. d: M6 z( f8 I7 l5 p        TCPTransmission.RevFlag = 0xff;- N  W2 ~. Q$ I9 R" R
        }+ B& ~7 z, Z" X
                " `, B: Z3 T9 s% J& j: Q
}
1 k( `8 k# }0 i: B! \" }4 Y  T//接收数量没做限制,有数组越界风险。0 U+ F/ Z( s( A- L
//增加限制及处理: t/ Q0 d" Q: Y! d
新代码如下( j: ^/ z- T: w  V( ?  t+ v
void ESP8266HalRevData(uint8_t inPut)
" h/ v* S+ G- m; Y4 }{
( Y1 U. u4 n$ @- Z6 z      / n" [8 P1 ^2 ?. N- \( [. T
        if(ESP8266Step.Step < IDLE)
, a+ F- F+ {9 _8 {2 N0 k& M8 t        {
, R9 ^& Z  s( _+ S7 z0 g                ESP8266Step.ReveBuff[ESP8266Step.HalRevSize++] = inPut;6 C0 d% y! c2 P, b* }, }
        if(ESP8266Step.HalRevSize == MAXREVESIZE)& B$ b, Z7 R* b. U4 q' c
        {
$ ^6 U% E! y! z            memset(ESP8266Step.ReveBuff,0,MAXREVESIZE);3 x, G' e8 X$ P" [0 @
            ESP8266Step.HalRevSize = 0;! Q1 ?% K) X2 z; N9 @+ X
        }; W1 J! Z# N( o0 {
        }
  J+ _8 ?8 o2 r2 u/ M" r. j# l        else if(ESP8266Step.Step >= IDLE)
7 \3 N. e  S: s2 n1 _        {( I. F; R$ z) q4 m' F# w5 `
        TCPTransmission.TcpRxBuff[TCPTransmission.TcpRxSize++] = inPut;; l3 w- T/ q0 N
                    if(TCPTransmission.TcpRxSize >= MAXREVESIZE)
! R, ~+ q$ d2 X( w( m/ M        {
/ C) X5 _# j* h            memset(ESP8266Step.ReveBuff,0,MAXREVESIZE);
4 u7 G* c( @& w5 Q1 ~' |# l            TCPTransmission.TcpRxSize = 0;
3 J8 A5 P0 q/ O  R$ q7 Y$ R2 n+ [                                          TCPTransmission.RevFlag = 0;
" N$ X# d3 R- ?  O7 |        }" D1 z# Z$ z! u' _: F( w
                                else$ x' K5 x; R; |. L; A
                                {" ?2 x( C2 o* q- {+ U( O2 {: i
                                        TCPTransmission.TcpRevTime = GetTime();
6 |5 {5 a' d6 N: p4 c+ e          TCPTransmission.RevFlag = 0xff;+ X- k) P3 z# ]' c* j
                                }              + \' t2 O. P$ {6 s7 z% N5 w7 B3 W
        }                % E* k# h' J, G' L$ {$ p$ ]
}
1 J+ [4 Y6 [5 F0 s* ^9 Q+ L& _" R  Z9 D5 U/ O
欢迎批评指正/ D' F( l! i* a

2 V; l. O7 ?5 w2 @. C+ a; D8 E
技术范儿 回答时间:2016-11-21 13:58:39
zhangxu56726 发表于 2016-11-21 13:539 W% D- \$ m; V% [3 R
请问,你的这个能连上路由吗?
9 T# z* }9 u: ?3 B/ Y
这套是我根据买的模块测试的一个流程。我的模块偶尔可以连上,连不上的时候咋都连不上,不知道是不是模块问题,你可以试试,有BUG就自己改吧,年底了项目紧没时间折腾了
liuxy236@tom.co 回答时间:2016-11-21 22:37:27
好东西,顶                       
zhangxu56726 回答时间:2016-11-21 13:53:20
请问,你的这个能连上路由吗?
mhl920 回答时间:2016-11-21 16:16:22
谢谢分享
peter001 回答时间:2016-11-22 00:49:11
谢谢分享
zengyi703-16313 回答时间:2016-11-22 07:12:28
谢楼主分享
sun2005 回答时间:2016-11-22 08:21:24
谢谢!分享
4 [! c0 l, o6 m
andypanfan 回答时间:2016-12-15 19:37:21
谢谢分享
huaiqiao 回答时间:2016-12-15 20:51:23
改天用esp8266的小黄板看看呢
scx111 回答时间:2017-3-2 16:44:54
谢谢分享
zbber 回答时间:2017-3-2 20:46:10
谢谢分享,谢谢楼主,支持分享
* B3 f3 M1 e1 G4 X% t
yoghen 回答时间:2017-7-27 11:19:14
AT 指令不使用状态机,则同时处理的功能就比较单一。使用状态机,我又头大。谢谢分享
me浩 回答时间:2017-7-27 11:47:56
8 d8 H) ?+ r: I: @' D3 v
谢谢分享
会飞的雪花 回答时间:2017-9-22 20:32:45
感谢,这个状态机我看懂了,非常的全面。
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版