• <table id="0ws66"></table>
  • <noscript id="0ws66"><source id="0ws66"></source></noscript>

    關于用stm32和ESP8266通過POST請求上傳圖片到貝殼物聯的接口

    作者: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或端口不對,還是其他的原因?

    求解答


    評論:共3條

    貝殼物聯 評論于:2018-10-07 09:30:12
    貝殼上傳圖片的接口是https端口443,8181是tcp連接端口,另外https是加密的,操作起來比較麻煩。如果不加密的http端口8080或許可行,但是貝殼物聯沒有提供這個。
    fengguihao 回復于:2019-03-06 21:05:44
    回復 @貝殼物聯:請問如何在計算機使用Python測試圖片接口,是否有相關代碼例程,我想在計算機測試成功后一直到樹莓派上。
    蝸牛快跑 評論于:2021-03-01 19:00:59
    你好 你弄好了嗎?我也在學用圖片接口 能加個qq聊聊嗎? 745897277
    返回頂部
    国产综合在线