作者:wintercoming | 更新时间:2018-10-04 | 浏览量:41275
已经设置ESP8266为STA模式,之后先连接路由器,并设置为单链接模式;
然后连接到贝壳物联服务器:
#define User_ESP8266_TCPServer_IP "www.bigiot.net" //要连接的服务器的IP
#define User_ESP8266_TCPServer_PORT "8181" //要连接的服务器的端口
ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0);
//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_Send_AT_Cmd ( cCmd, "OK", "ALREAY CONNECT", 4000 );
}
然后设置一下透传模式;
接下来就是进行POST请求了:打开sd卡中已有的jpg文件,读取文件数据并通过POST请求上传
/*上传数据到图片接口*/
void update_img(char *did, char *inputid, char *APIKEY)
{
char name[40];
unsigned long int file_byte;
u8 buffer[1024];
UINT br;
//打开jpg图片
sprintf(name,"0:photo_%d.jpg",name_count);
jpgres = f_open( &jpgfsrc , (char*)name, FA_OPEN_EXISTING | FA_READ);
//图片打开成功
if(jpgres==FR_OK)
{
//获取图片大小
file_byte=jpgfsrc.fsize;
printf("\r\nsize:%lu\r\n",file_byte);
//POST请求发送
ESP8266_USART("POST https://www.bigiot.net/pubapi/uploadImg/did/%s/inputid/%s HTTP/1.1\r\n", did, inputid);
ESP8266_USART("Host: www.bigiot.net\r\n");
ESP8266_USART("Connection: keep-alive\r\n");
ESP8266_USART("API-KEY: %s\r\n", APIKEY);
ESP8266_USART("Content-Length: %lu\r\n",file_byte);
ESP8266_USART("Content-Type: multipart/form-data; boundary=3bf1dc3ce677345d7151048c92ca3cac\r\n");
ESP8266_USART("\r\n");
ESP8266_USART("--3bf1dc3ce677345d7151048c92ca3cac\r\n");
ESP8266_USART("Content-Disposition: form-data; name=\"file\"; filename=\"ex1.jpg\"\r\n");
ESP8266_USART("\r\n");
while(1)
{
//读取jpg文件信息
jpgres = f_read(&jpgfsrc, buffer, sizeof(buffer), &br);
USART_puts(USART2, buffer);
//判断手否读取完结,若完结跳出循环
if (jpgres || br < sizeof(buffer))
{
break;
}
}
ESP8266_USART("\r\n");
ESP8266_USART("--3bf1dc3ce677345d7151048c92ca3cac--\r\n");
}
f_close(&jpgfsrc); //关闭文件
}
连接服务器已经成功了,这里的POST请求也是按格式写的,请求的URL(https://www.bigiot.net/pubapi/uploadImg/did//inputid/)也没有问题。可是图片接口并不能接收到数据 ,这是为什么?是因为一开始连接服务器的IP或端口不对,还是其他的原因?
求解答