int main(void) { uint16_t temp, humi; //温湿度 char HTTP_Buf[400]; //HTTP报文缓存区 char tempStr[5]; //字符串格式温度 char humiStr[5]; //字符串格式湿度 int len; USART1_Config(); //USART1作为调试串口 USART2_Config(); //USART2用于连接ESP8266模块 Hal_I2C_Init(); //I2C初始化,用于连接温湿度传感器 ESP8266_Init(); //ESP8266初始化 printf("ESP8266 init over\r\n"); //SHT20_loop(); // while(1) { /* 获取温湿度 */ SHT2x_MeasureHM(SHT20_Measurement_T_HM, &temp); mDelay(500); SHT2x_MeasureHM(SHT20_Measurement_RH_HM, &humi); /* 转化为字符串形式 */ sprintf(tempStr, "%d", temp); sprintf(humiStr, "%d", humi); //printf("%s %s\r\n", tempStr, humiStr); USART2_Clear(); len = HTTP_PostPkt(HTTP_Buf, API_KEY, DEV_ID, "temp", tempStr); //HTTP组包 USART2_Write(USART2, (unsigned char *)(HTTP_Buf), len); //报文发送 printf("send HTTP msg:\r\n%s\r\n", HTTP_Buf); mDelay(1000); printf("rcv response:\r\n%s\r\n", usart2_rcv_buf); USART2_Clear(); len = HTTP_PostPkt(HTTP_Buf, API_KEY, DEV_ID, "humi", humiStr); //HTTP组包 USART2_Write(USART2, (unsigned char *)(HTTP_Buf), len); //报文发送 printf("send HTTP msg:\r\n%s\r\n", HTTP_Buf); mDelay(1000); printf("rcv response:\r\n%s\r\n", usart2_rcv_buf); mDelay(5000); } }
/** * @brief 通过USART2连接ESP8266发送数据. * @param buf: 要发送的数据缓冲区地址 * @param len: 要发送的数据缓长度 * @retval 发送的数据长度 **/ uint32_t ESP8266_SendData(int8_t * buf, uint32_t len) { memset(usart2_rcv_buf, 0, strlen(usart2_rcv_buf)); usart2_rcv_len = 0; USART2_Write(USART2, buf, len); mDelay(100); }
/** * @brief 通过USART2连接MT6311发送数据. * @param buf: 要发送的数据缓冲区地址 * @param len: 要发送的数据缓长度 * @retval 发送的数据长度 **/ int32_t M6311_SendData(uint8_t * buf,uint32_t len) { memset(usart2_rcv_buf,0,strlen((const char *)usart2_rcv_buf)); usart2_rcv_len=0; USART2_Write(USART2,buf,len); mDelay(20); return len; }
/** * @brief 通过USART2连接MT6311发送数据. * @param buf: 要发送的数据缓冲区地址 * @param len: 要发送的数据缓长度 * @retval 发送的数据长度 **/ int32_t M6311_SendData(uint8_t * buf,uint32_t len) { int32_t ret=0,i=0; memset(usart2_rcv_buf,0,strlen(usart2_rcv_buf)); usart2_rcv_len=0; USART2_Write(USART2,buf,len); mDelay(20); }
void ESP8266_Init(int8_t * server, int8_t * ssid_pwd) { SendCmd(AT, "OK", 1000); /*进入AT命令模式*/ SendCmd(CWMODE, "OK", 1000); SendCmd(RST, "OK", 2000); /*重置模组式*/ SendCmd(CIFSR, "OK", 1000); /*查询设备IP,可放在需要的位置*/ SendCmd(ssid_pwd, "OK", 2000); /*配置要连接的路由器SSID和密码*/ SendCmd(server, "OK", 2000); /*与服务器建立TCP连接*/ SendCmd(CIPMODE, "OK", 1000); /*透传模式*/ memset(usart2_rcv_buf, 0, strlen(usart2_rcv_buf)); /*先清除接收缓冲区*/ usart2_rcv_len = 0; USART2_Write(USART2, CIPSEND, strlen(CIPSEND)); /*开始透传*/ mDelay(500); if((NULL != strstr(usart2_rcv_buf, "ERROR"))) { return; } }
/* * @brief USART2串口发送AT命令用 * @para cmd AT命令 * @para result 预期的正确返回信息 * @para timeOut延时时间,ms */ void SendCmd(char* cmd, char* result, int timeOut) { while(1) { USART2_Clear(); USART2_Write(USART2, (uint8_t *)cmd, strlen(cmd)); mDelay(timeOut); printf("%s %d cmd:%s,rsp:%s\n", __func__, __LINE__, cmd, usart2_rcv_buf); if((NULL != strstr((const char *)usart2_rcv_buf, (const char *)result))) //判断是否有预期的结果 { break; } else { mDelay(100); } } }
/* * @brief USART2串口发送AT命令用 */ void SendCmd(int8_t* cmd, int8_t* result, int32_t timeOut) { while(1) { memset(usart2_rcv_buf, 0, strlen((const char *)usart2_rcv_buf)); usart2_rcv_len = 0; USART2_Write(USART2, (uint8_t*)cmd, strlen((const char *)cmd)); mDelay(timeOut); printf("%s %d cmd:%s,rsp:%s\n", __func__, __LINE__, cmd, usart2_rcv_buf); if((NULL != strstr((const char *)usart2_rcv_buf, (const char *)result))) { break; } else { mDelay(100); } } }