找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4948|回复: 4
打印 上一主题 下一主题
收起左侧

WiFi模块ESP8266数据上传至OneNET源程序

  [复制链接]
跳转到指定楼层
楼主
#include "bsp_esp8266.h"
#include "common.h"
#include <stdio.h>  
#include <string.h>  
#include <stdbool.h>
#include "usart.h"
//#include "bsp_SysTick.h"
#include "sys.h"
#include "delay.h"

unsigned char  usart2_rcv_buf[1024];

//static void                   ESP8266_GPIO_Config                 ( void );
//static void                   ESP8266_USART_Config                ( void );
//static void                   ESP8266_USART_NVIC_Configuration    ( void );


#define LED PBout(9)
struct  STRUCT_USARTx_Fram strEsp8266_Fram_Record = { 0 };




/** ESP8266连接电脑wifi发数据
  *
  *
  *
   */
void ESP8266Mode_inti(void)
{
    SendCmd(AT, "OK", 10000);                //模块有效性检查
    SendCmd(CWMODE, "OK", 10000);        //模块工作模式
    SendCmd(wifi_RST, "OK", 10000);                //模块重置
    SendCmd(CIFSR, "OK", 10000);                //查询网络信息
    SendCmd(CWJAP, "OK", 10000);                //配置需要连接的WIFI热点SSID和密码
    SendCmd(CIPSTART, "OK", 10000);        //TCP连接
    SendCmd(CIPMODE1, "OK", 10000);        //配置透传模式
          SendCmd(CIPSEND, ">", 10000);        //进入透传模式



}
/** 发送Cmd命令的函数
  *
  *
  *
  */
void SendCmd(char* cmd, char* result, int timeOut)
{
    while(1)
    {
//        memset(usart2_rcv_buf, 0, sizeof(usart2_rcv_buf));   //将数组所有数据清0
        USART_Write((unsigned char *)cmd,strlen((const char *)cmd));   //用串口把cmd命令写给ESP8266
        delay_ms(timeOut);                                          //延迟等待
                          LED=~LED;
        if(ok_flag==1)        //比较两个指针里面的数据是否一样,判断是否有预期的结果  和预期结果相同,表示指令设置成功,跳出
        {  
                                          ok_flag=0;   //清空标志
            break;
        }
        else
        {
            delay_ms(100);
        }
    }
}
/** 串口发送函数
  *
  *
  *
  */
void USART_Write(unsigned char *cmd, int len)
{  
          int i;
           USART_ClearFlag(USART1,USART_FLAG_TC);
           for(i=0;i<len;i++)
           {
                   USART_SendData(USART1,*cmd);
                         while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);
                         cmd++;
                  
                 }

}


/**
  * @brief   组HTTP POST报文
  * @param   pkt   报文缓存指针
  * @param   key   API_KEY定义在Main.c文件中,需要根据自己的设备修改
  *        @param          devid 设备ID,定义在main.c文件中,需要根据自己的设备修改
  *        @param          dsid  数据流ID
  *        @param          val   字符串形式的数据点的值
  * @retval  整个包的长度
  *///组成HTTP协议数据的格式
uint32_t HTTP_PostPkt(char *pkt, char *key, char *devid, char *dsid, char *val)
{
    char dataBuf[100] = {0};
    char lenBuf[10] = {0};
    *pkt = 0;

    sprintf(dataBuf, ",;%s,%s", dsid, val);     //采用分割字符串格式:type = 5
    sprintf(lenBuf, "%d", strlen(dataBuf));

    strcat(pkt, "POST /devices/");
    strcat(pkt, devid);
    strcat(pkt, "/datapoints?type=5 HTTP/1.1\r\n");

    strcat(pkt, "api-key:");
    strcat(pkt, key);
    strcat(pkt, "\r\n");

    strcat(pkt, "Host:api.heclouds.com\r\n");

    strcat(pkt, "Content-Length:");
    strcat(pkt, lenBuf);
    strcat(pkt, "\r\n\r\n");

    strcat(pkt, dataBuf);

    return strlen(pkt);
}



/**
  * @brief  初始化ESP8266用到的GPIO引脚
  * @param  无
  * @retval 无
  */
void ESP8266_GPIO_Init(void)
{
        /*定义一个GPIO_InitTypeDef类型的结构体*/
        GPIO_InitTypeDef GPIO_InitStructure;


        /* 配置 CH_PD 引脚*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;               //设置推挽输出模式
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;                      //初始化CH-DP引脚 拉高
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;              //设置时钟
        GPIO_Init(GPIOA,&GPIO_InitStructure);   
        GPIO_SetBits(GPIOA,GPIO_Pin_14);

}
/**
  * @brief  ESP8266初始化函数
  * @param  无
  * @retval 无
  */

void ESP8266_Init ( void )
{
        ESP8266_GPIO_Init();
        
        //SP8266_USART_Config();
        
        
        macESP8266_RST_HIGH_LEVEL();

        macESP8266_CH_ENABLE();
        
        
}

/**
  * @brief  初始化ESP8266用到的 USART
  * @param  无
  * @retval 无
  */
void ESP8266_USART_Config( void )
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        
        
        /* config USART clock */
        macESP8266_USART_APBxClock_FUN ( macESP8266_USART_CLK, ENABLE );
        macESP8266_USART_GPIO_APBxClock_FUN ( macESP8266_USART_GPIO_CLK, ENABLE );
        
        /* USART GPIO config */
        /* Configure USART Tx as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin =  macESP8266_USART_TX_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(macESP8266_USART_TX_PORT, &GPIO_InitStructure);  

        /* Configure USART Rx as input floating */
        GPIO_InitStructure.GPIO_Pin = macESP8266_USART_RX_PIN;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(macESP8266_USART_RX_PORT, &GPIO_InitStructure);
        
        /* USART1 mode config */
        USART_InitStructure.USART_BaudRate = macESP8266_USART_BAUD_RATE;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(macESP8266_USARTx, &USART_InitStructure);
        
        
        /* 中断配置 */
        USART_ITConfig ( macESP8266_USARTx, USART_IT_RXNE, ENABLE ); //使能串口接收中断
        USART_ITConfig ( macESP8266_USARTx, USART_IT_IDLE, ENABLE ); //使能串口总线空闲中断         

        ESP8266_USART_NVIC_Configuration ();
        
        
        USART_Cmd(macESP8266_USARTx, ENABLE);
        
        
}


/**
  * @brief  配置 ESP8266 USART 的 NVIC 中断
  * @param  无
  * @retval 无
  */
void ESP8266_USART_NVIC_Configuration ( void )
{
        NVIC_InitTypeDef NVIC_InitStructure;
        
        
        /* Configure the NVIC Preemption Priority Bits */  
        NVIC_PriorityGroupConfig ( macNVIC_PriorityGroup_x );

        /* Enable the USART2 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = macESP8266_USART_IRQ;         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

}


/*
* 函数名:ESP8266_Rst
* 描述  :重启WF-ESP8266模块
* 输入  :无
* 返回  : 无
* 调用  :被 ESP8266_AT_Test 调用
*/
void ESP8266_Rst ( void )
{
        #if 0
         ESP8266_Cmd ( "AT+RST", "OK", "ready", 2500 );           
        
        #else
         macESP8266_RST_LOW_LEVEL();
         delay_ms ( 500 );
         macESP8266_RST_HIGH_LEVEL();
         
        #endif

}


/*
* 函数名:ESP8266_Cmd
* 描述  :对WF-ESP8266模块发送AT指令
* 输入  :cmd,待发送的指令
*         reply1,reply2,期待的响应,为NULL表不需响应,两者为或逻辑关系
*         waittime,等待响应的时间
* 返回  : 1,指令发送成功
*         0,指令发送失败
* 调用  :被外部调用
*/
bool ESP8266_Cmd ( char * cmd, char * reply1, char * reply2, u32 waittime )
{   
        strEsp8266_Fram_Record .InfBit .FramLength = 0;               //从新开始接收新的数据包

        macESP8266_Usart ( "%s\r\n", cmd );

        if ( ( reply1 == 0 ) && ( reply2 == 0 ) )                      //不需要接收数据
                return true;
        
        delay_ms ( waittime );                 //延时
        
        strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ]  = '\0';

        macPC_Usart ( "%s", strEsp8266_Fram_Record .Data_RX_BUF );

        if ( ( reply1 != 0 ) && ( reply2 != 0 ) )
                return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) ||
                                                 ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) );
         
        else if ( reply1 != 0 )
                return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply1 ) );
        
        else
                return ( ( bool ) strstr ( strEsp8266_Fram_Record .Data_RX_BUF, reply2 ) );
        
}


/*
* 函数名:ESP8266_AT_Test
* 描述  :对WF-ESP8266模块进行AT测试启动
* 输入  :无
* 返回  : 无
* 调用  :被外部调用
*/
//void ESP8266_AT_Test ( void )
//{
//        macESP8266_RST_HIGH_LEVEL();
//        
//        Delay_ms ( 1000 );
//        
//        while ( ! ESP8266_Cmd ( "AT", "OK", NULL, 200 ) ) ESP8266_Rst ();         

//}
void ESP8266_AT_Test ( void )
{
        char count=0;
        
        macESP8266_RST_HIGH_LEVEL();        
        delay_ms ( 1000 );
        while ( count < 10 )
        {
                if( ESP8266_Cmd ( "AT", "OK", NULL, 500 ) ) return;
                ESP8266_Rst();
                ++ count;
        }
}


/*
* 函数名:ESP8266_Net_Mode_Choose
* 描述  :选择WF-ESP8266模块的工作模式
* 输入  :enumMode,工作模式
* 返回  : 1,选择成功
*         0,选择失败
* 调用  :被外部调用
*/
bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode )
{
        switch ( enumMode )
        {
                case STA:
                        return ESP8266_Cmd ( "AT+CWMODE=1", "OK", "no change", 2500 );
               
          case AP:
                  return ESP8266_Cmd ( "AT+CWMODE=2", "OK", "no change", 2500 );
               
                case STA_AP:
                  return ESP8266_Cmd ( "AT+CWMODE=3", "OK", "no change", 2500 );
               
          default:
                  return false;
  }
        
}


/*
* 函数名:ESP8266_JoinAP
* 描述  :WF-ESP8266模块连接外部WiFi
* 输入  :pSSID,WiFi名称字符串
*       :pPassWord,WiFi密码字符串
* 返回  : 1,连接成功
*         0,连接失败
* 调用  :被外部调用
*/
bool ESP8266_JoinAP ( char * pSSID, char * pPassWord )
{
        char cCmd [120];

        sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );
        
        return ESP8266_Cmd ( cCmd, "OK", NULL, 5000 );
        
}


/*
* 函数名:ESP8266_BuildAP
* 描述  :WF-ESP8266模块创建WiFi热点
* 输入  :pSSID,WiFi名称字符串
*       :pPassWord,WiFi密码字符串
*       :enunPsdMode,WiFi加密方式代号字符串
* 返回  : 1,创建成功
*         0,创建失败
* 调用  :被外部调用
*/
bool ESP8266_BuildAP ( char * pSSID, char * pPassWord, ENUM_AP_PsdMode_TypeDef enunPsdMode )
{
        char cCmd [120];

        sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pSSID, pPassWord, enunPsdMode );
        
        return ESP8266_Cmd ( cCmd, "OK", 0, 1000 );
        
}


/*
* 函数名:ESP8266_Enable_MultipleId
* 描述  :WF-ESP8266模块启动多连接
* 输入  :enumEnUnvarnishTx,配置是否多连接
* 返回  : 1,配置成功
*         0,配置失败
* 调用  :被外部调用
*/
bool ESP8266_Enable_MultipleId ( FunctionalState enumEnUnvarnishTx )
{
        char cStr [20];
        
        sprintf ( cStr, "AT+CIPMUX=%d", ( enumEnUnvarnishTx ? 1 : 0 ) );
        
        return ESP8266_Cmd ( cStr, "OK", 0, 500 );
        
}


/*
* 函数名:ESP8266_Link_Server
* 描述  :WF-ESP8266模块连接外部服务器
* 输入  :enumE,网络协议
*       :ip,服务器IP字符串
*       :ComNum,服务器端口字符串
*       :id,模块连接服务器的ID
* 返回  : 1,连接成功
*         0,连接失败
* 调用  :被外部调用
*/
bool ESP8266_Link_Server ( ENUM_NetPro_TypeDef enumE, char * ip, char * ComNum, ENUM_ID_NO_TypeDef id)
{
        char cStr [100] = { 0 }, cCmd [120];

  switch (  enumE )
  {
                case enumTCP:
                  sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", ip, ComNum );
                  break;
               
                case enumUDP:
                  sprintf ( cStr, "\"%s\",\"%s\",%s", "UDP", ip, ComNum );
                  break;
               
                default:
                        break;
  }

  if ( id < 5 )
    sprintf ( cCmd, "AT+CIPSTART=%d,%s", id, cStr);

  else
          sprintf ( cCmd, "AT+CIPSTART=%s", cStr );

        return ESP8266_Cmd ( cCmd, "OK", "ALREAY CONNECT", 4000 );
        
}


/*
* 函数名:ESP8266_StartOrShutServer
* 描述  :WF-ESP8266模块开启或关闭服务器模式
* 输入  :enumMode,开启/关闭
*       :pPortNum,服务器端口号字符串
*       :pTimeOver,服务器超时时间字符串,单位:秒
* 返回  : 1,操作成功
*         0,操作失败
* 调用  :被外部调用
*/
bool ESP8266_StartOrShutServer ( FunctionalState enumMode, char * pPortNum, char * pTimeOver )
{
        char cCmd1 [120], cCmd2 [120];

        if ( enumMode )
        {
                sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pPortNum );
               
                sprintf ( cCmd2, "AT+CIPSTO=%s", pTimeOver );

                return ( ESP8266_Cmd ( cCmd1, "OK", 0, 500 ) &&
                                                 ESP8266_Cmd ( cCmd2, "OK", 0, 500 ) );
        }
        
        else
        {
                sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 0, pPortNum );

                return ESP8266_Cmd ( cCmd1, "OK", 0, 500 );
        }
        
}


/*
* 函数名:ESP8266_Get_LinkStatus
* 描述  :获取 WF-ESP8266 的连接状态,较适合单端口时使用
* 输入  :无
* 返回  : 2,获得ip
*         3,建立连接
*         3,失去连接
*         0,获取状态失败
* 调用  :被外部调用
*/
uint8_t ESP8266_Get_LinkStatus ( void )
{
        if ( ESP8266_Cmd ( "AT+CIPSTATUS", "OK", 0, 500 ) )
        {
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:2\r\n" ) )
                        return 2;
               
                else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:3\r\n" ) )
                        return 3;
               
                else if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "STATUS:4\r\n" ) )
                        return 4;               

        }
        
        return 0;
        
}


/*
* 函数名:ESP8266_Get_IdLinkStatus
* 描述  :获取 WF-ESP8266 的端口(Id)连接状态,较适合多端口时使用
* 输入  :无
* 返回  : 端口(Id)的连接状态,低5位为有效位,分别对应Id5~0,某位若置1表该Id建立了连接,若被清0表该Id未建立连接
* 调用  :被外部调用
*/
uint8_t ESP8266_Get_IdLinkStatus ( void )
{
        uint8_t ucIdLinkStatus = 0x00;
        
        
        if ( ESP8266_Cmd ( "AT+CIPSTATUS", "OK", 0, 500 ) )
        {
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:0," ) )
                        ucIdLinkStatus |= 0x01;
                else
                        ucIdLinkStatus &= ~ 0x01;
               
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:1," ) )
                        ucIdLinkStatus |= 0x02;
                else
                        ucIdLinkStatus &= ~ 0x02;
               
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:2," ) )
                        ucIdLinkStatus |= 0x04;
                else
                        ucIdLinkStatus &= ~ 0x04;
               
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:3," ) )
                        ucIdLinkStatus |= 0x08;
                else
                        ucIdLinkStatus &= ~ 0x08;
               
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+CIPSTATUS:4," ) )
                        ucIdLinkStatus |= 0x10;
                else
                        ucIdLinkStatus &= ~ 0x10;        

        }
        
        return ucIdLinkStatus;
        
}


/*
* 函数名:ESP8266_Inquire_ApIp
* 描述  :获取 F-ESP8266 的 AP IP
* 输入  :pApIp,存放 AP IP 的数组的首地址
*         ucArrayLength,存放 AP IP 的数组的长度
* 返回  : 0,获取失败
*         1,获取成功
* 调用  :被外部调用
*/
uint8_t ESP8266_Inquire_ApIp ( char * pApIp, uint8_t ucArrayLength )
{
        char uc;
        
        char * pCh;
        
        
  ESP8266_Cmd ( "AT+CIFSR", "OK", 0, 500 );
        
        pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "APIP,\"" );
        
        if ( pCh )
                pCh += 6;
        
        else
                return 0;
        
        for ( uc = 0; uc < ucArrayLength; uc ++ )
        {
                pApIp [ uc ] = * ( pCh + uc);
               
                if ( pApIp [ uc ] == '\"' )
                {
                        pApIp [ uc ] = '\0';
                        break;
                }
               
        }
        
        return 1;
        
}


/*
* 函数名:ESP8266_UnvarnishSend
* 描述  :配置WF-ESP8266模块进入透传发送
* 输入  :无
* 返回  : 1,配置成功
*         0,配置失败
* 调用  :被外部调用
*/
bool ESP8266_UnvarnishSend ( void )
{
        if ( ! ESP8266_Cmd ( "AT+CIPMODE=1", "OK", 0, 500 ) )
                return false;
        
        return
          ESP8266_Cmd ( "AT+CIPSEND", "OK", ">", 500 );
        
}


/*
* 函数名:ESP8266_ExitUnvarnishSend
* 描述  :配置WF-ESP8266模块退出透传模式
* 输入  :无
* 返回  : 无
* 调用  :被外部调用
*/
void ESP8266_ExitUnvarnishSend ( void )
{
        delay_ms ( 1000 );
        
        macESP8266_Usart ( "+++" );
        
        delay_ms ( 500 );
        
}


/*
* 函数名:ESP8266_SendString
* 描述  :WF-ESP8266模块发送字符串
* 输入  :enumEnUnvarnishTx,声明是否已使能了透传模式
*       :pStr,要发送的字符串
*       :ulStrLength,要发送的字符串的字节数
*       :ucId,哪个ID发送的字符串
* 返回  : 1,发送成功
*         0,发送失败
* 调用  :被外部调用
*/
bool ESP8266_SendString ( FunctionalState enumEnUnvarnishTx, char * pStr, u32 ulStrLength, ENUM_ID_NO_TypeDef ucId )
{
        char cStr [20];
        bool bRet = false;
        
               
        if ( enumEnUnvarnishTx )
        {
                macESP8266_Usart ( "%s", pStr );
               
                bRet = true;
               
        }

        else
        {
                if ( ucId < 5 )
                        sprintf ( cStr, "AT+CIPSEND=%d,%d", ucId, ulStrLength + 2 );

                else
                        sprintf ( cStr, "AT+CIPSEND=%d", ulStrLength + 2 );
               
                ESP8266_Cmd ( cStr, "> ", 0, 100 );

                bRet = ESP8266_Cmd ( pStr, "SEND OK", 0, 500 );
  }
        
        return bRet;

}


/*
* 函数名:ESP8266_ReceiveString
* 描述  :WF-ESP8266模块接收字符串
* 输入  :enumEnUnvarnishTx,声明是否已使能了透传模式
* 返回  : 接收到的字符串首地址
* 调用  :被外部调用
*/
char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
        char * pRecStr = 0;
        
        
        strEsp8266_Fram_Record .InfBit .FramLength = 0;
        strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;
        
        while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
        strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';
        
        if ( enumEnUnvarnishTx )
                pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
        
        else
        {
                if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
                        pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;

        }

        return pRecStr;
        
}


/*
* 函数名:ESP8266_CWLIF
* 描述  :查询已接入设备的IP
* 输入  :pStaIp,存放已接入设备的IP
* 返回  : 1,有接入设备
*         0,无接入设备
* 调用  :被外部调用
*/
uint8_t ESP8266_CWLIF ( char * pStaIp )
{
        uint8_t uc, ucLen;
        
        char * pCh, * pCh1;
        
        
  ESP8266_Cmd ( "AT+CWLIF", "OK", 0, 100 );
        
        pCh = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "," );
        
        if ( pCh )
        {
                pCh1 = strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "AT+CWLIF\r\r\n" ) + 11;
          ucLen = pCh - pCh1;
        }

        else
                return 0;
        
        for ( uc = 0; uc < ucLen; uc ++ )
                pStaIp [ uc ] = * ( pCh1 + uc);
        
        pStaIp [ ucLen ] = '\0';
        
        return 1;
        
}


/*
* 函数名:ESP8266_CIPAP
* 描述  :设置模块的 AP IP
* 输入  :pApIp,模块的 AP IP
* 返回  : 1,设置成功
*         0,设置失败
* 调用  :被外部调用
*/
uint8_t ESP8266_CIPAP ( char * pApIp )
{
        char cCmd [ 30 ];
               
        
        sprintf ( cCmd, "AT+CIPAP=\"%s\"", pApIp );
        
  if ( ESP8266_Cmd ( cCmd, "OK", 0, 5000 ) )
                return 1;

        else
                return 0;
        
}



全部资料51hei下载地址:
STM32Wifi模块与OneNetHTTP上传数据.7z (219.23 KB, 下载次数: 89)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:478832 发表于 2019-10-27 22:45 | 只看该作者
给手机发送数据在那段?
回复

使用道具 举报

板凳
ID:425297 发表于 2019-10-29 08:22 | 只看该作者
llff 发表于 2019-10-27 22:45
给手机发送数据在那段?

手机接数据是  自己从onenet 上面调 下来
回复

使用道具 举报

地板
ID:239620 发表于 2020-1-10 14:38 | 只看该作者
下载下来学习学习,谢谢楼主分享!
回复

使用道具 举报

5#
ID:895638 发表于 2021-3-23 18:55 | 只看该作者
有连线说明吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表