前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >12-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇

12-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇

作者头像
杨奉武
发布2019-05-19 16:53:27
8550
发布2019-05-19 16:53:27
举报
文章被收录于专栏:知识分享知识分享

,8266AT指令版本,实现远程升级单片机程序....主要问题是两个printf离得太近,wifi当成一个数据了

先说明一下,如果自己不是用的8266应该修改的地方,由于只是IAP程序里面实现的升级,所以只需要修改IAP程序就可以,大家可以在用户程序里面实现自己的具体功能,如果想升级,就复位一下单片机就可以

其实程序和上一版并没有太大改动...连解析协议都没动,只是修改链接TCP的函数而已

还有个地方需要注意:http数据解析的地方

我现在用的是8266透传实现的,也就是说,网络回给8266什么数据,8266就发给单片机什么数据,不掺杂任何其他东西

如果自己的模块回复的是这样也可以

XXXXXX ?http数据 http数据 ?http数据 ? ? ??

这样的不可以

XXXXXX http数据 XXXX http数据 ?XXXX http数据

需要在这里剔除,...算了,我再做一版.....下一节吧

这是我的数据解析部分

代码语言:javascript
复制
void USART1_IRQHandler(void)                    //????1????·??????ò
{
    u8 Res;
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        Res =USART_ReceiveData(USART1);    //????????????????
        
        if(Usart1ReadCnt < 399)
        {
            Usart1ReadBuff[Usart1ReadCnt] = Res;
        }
        else
        {
            Usart1ReadCnt=0;
        }
        Usart1ReadCnt ++;    //????????
        Usart1IdleCnt = 0;
        /*?????ü?????ò*/
        if(UpdateStartFlage == 1)
        {
            if(UpdateOverflow==0)
            {
              if(PutData(&Res,1) == -1)//没有溢出
                {
                    UpdateOverflow = 1;//溢出
                }    
            }
        }
        else//????????
        {
            //HTTP/1.1 200 OK
            //HTTP/1.1 400 Bad Request
            if(!Usart1ReadHttpHeadOK)
            {
                if(Res=='H' && Usart1ReadHttpHeadCnt==0)Usart1ReadHttpHeadCnt++;
                else if(Res=='T' && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;
                else if(Res=='T' && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;
                else if(Res=='P' && Usart1ReadHttpHeadCnt==3)Usart1ReadHttpHeadCnt++;
                else if(Res=='/' && Usart1ReadHttpHeadCnt==4)Usart1ReadHttpHeadCnt++;
                else if(Res=='1' && Usart1ReadHttpHeadCnt==5)Usart1ReadHttpHeadCnt++;
                else if(Res=='.' && Usart1ReadHttpHeadCnt==6)Usart1ReadHttpHeadCnt++;
                else if(Res=='1' && Usart1ReadHttpHeadCnt==7)Usart1ReadHttpHeadCnt++;
                else if(Res==' ' && Usart1ReadHttpHeadCnt==8)Usart1ReadHttpHeadCnt++;
                else if(Res=='2' && Usart1ReadHttpHeadCnt==9)Usart1ReadHttpHeadCnt++;
                else if(Res=='0' && Usart1ReadHttpHeadCnt==10)Usart1ReadHttpHeadCnt++;
                else if(Res=='0' && Usart1ReadHttpHeadCnt==11)Usart1ReadHttpHeadCnt++;
                else if(Res==' ' && Usart1ReadHttpHeadCnt==12)Usart1ReadHttpHeadCnt++;
                else if(Res=='O' && Usart1ReadHttpHeadCnt==13)Usart1ReadHttpHeadCnt++;
                else if(Res=='K' && Usart1ReadHttpHeadCnt==14){Usart1ReadHttpHeadOK = 1;Usart1ReadHttpHeadCnt=0;Usart1ReadHttpDataLength=0;}  
                else
                {
                    Usart1ReadHttpHeadCnt=0;
                }
            }

            //Content-Length: XXXXXXXX
            if(Usart1ReadHttpHeadOK && !Usart1ReadHttpDataLengthOK)
            {
                if(Res=='-' && Usart1ReadHttpHeadCnt==0)     Usart1ReadHttpHeadCnt++;
                else if(Res=='L' && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;
                else if(Res=='e' && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;
                else if(Res=='n' && Usart1ReadHttpHeadCnt==3)Usart1ReadHttpHeadCnt++;
                else if(Res=='g' && Usart1ReadHttpHeadCnt==4)Usart1ReadHttpHeadCnt++;
                else if(Res=='t' && Usart1ReadHttpHeadCnt==5)Usart1ReadHttpHeadCnt++;
                else if(Res=='h' && Usart1ReadHttpHeadCnt==6)Usart1ReadHttpHeadCnt++;
                else if(Res==':' && Usart1ReadHttpHeadCnt==7)Usart1ReadHttpHeadCnt++;
                else if(Res==' ' && Usart1ReadHttpHeadCnt==8)Usart1ReadHttpHeadCnt++;
                else if(Usart1ReadHttpHeadCnt>=9 && Usart1ReadHttpHeadCnt<=16 )//数据设置的最大是99999999个字节
                {
                    if(Res!=0x0D)
                    {
                        Usart1ReadHttpDataLength = Usart1ReadHttpDataLength*10 + Res - '0';
                        Usart1ReadHttpHeadCnt++;
                        
                    }
                    else
                    {
                        Usart1ReadHttpDataLengthOK = 1;
                        Usart1ReadHttpHeadCnt = 0;
                        
                    }
                }
                else
                {
                    Usart1ReadHttpHeadCnt = 0;
                }
            }

            //0D 0A 0D 0A
            if(Usart1ReadHttpHeadOK && Usart1ReadHttpDataLengthOK && Usart1ReadHttpDataLength && !Usart1ReadHttpHeadEndOK)
            {
                if(Res==0x0D && Usart1ReadHttpHeadCnt==0)Usart1ReadHttpHeadCnt++;
                else if(Res==0x0A && Usart1ReadHttpHeadCnt==1)Usart1ReadHttpHeadCnt++;
                else if(Res==0x0D && Usart1ReadHttpHeadCnt==2)Usart1ReadHttpHeadCnt++;
                else if(Res==0x0A && Usart1ReadHttpHeadCnt==3){Usart1ReadHttpHeadEndOK = 1;PCout(13) =1;}
                else Usart1ReadHttpHeadCnt = 0;
            }
        }
        
        if(Usart1ReadHttpHeadEndOK == 1)//http 头解析完成
        {
            Usart1ReadHttpHeadEndOK=0;
            Usart1ReadHttpHeadCnt = 0;
            Usart1ReadHttpDataLengthOK=0;
            if(Status==2)//询问的是程序
            {
                UpdateStartFlage = 1;//把程序写入链表
                SysTickIdleTime = 5000;//超时时间大一点
            }
        }
    } 
} 

现在看使用

1,给Wi-Fi刷AT指令的固件.依照自己的模块选择

2,下载单片机程序(先看一下后面的说明再下载)

因为WIFI需要联网,程序默认加入了SmartConfig配网

可以先运行APP的配网,然后按下这个按钮

配网APP直接用,就可以,也支持微信配网

?当然如果不想配网可以

根据自己的修改

3,服务器

其实服务器上和上一节一样,用户程序没有任何的改动,直接用上一节的就可以(记得修改为自己的IP地址哈)

我没有再弄个单片机型号,因为没有必要.......尽量不做重复的工作

?4,测试,非SmartConfig

下载

去云端修改下版本

现在说一下SmartConfig的

SmartConfig的我只写在了IAP程序里面

复位单片机,(10S之前)按下这个PB5按键哈,,如果执行了用户程序就不可以了,大家自己可以把这个按钮在用户程序里面再实现一下这个功能也可以..

?大家可以复位单片机以后一直按着这个按钮,

看到这个灯亮了再松开

打开APP

只要配上网其实就代替了

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com