作者:wintercoming | 更新時間:2018-10-04 | 瀏覽量:38175
已經設置ESP8266為STA模式,之后先連接路由器,并設置為單鏈接模式;
然后連接到貝殼物聯服務器:
#define User_ESP8266_TCPServer_IP "www.embanju.org" //要連接的服務器的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 http://www.embanju.org/pubapi/uploadImg/did/%s/inputid/%s HTTP/1.1\r\n", did, inputid);
ESP8266_USART("Host: www.embanju.org\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(http://www.embanju.org/pubapi/uploadImg/did//inputid/)也沒有問題。可是圖片接口并不能接收到數據 ,這是為什么?是因為一開始連接服務器的IP或端口不對,還是其他的原因?
求解答