野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12619|回复: 1

esp8266文件传输

[复制链接]
发表于 2017-4-8 21:56:22 | 显示全部楼层 |阅读模式
本帖最后由 as3322 于 2017-4-8 21:59 编辑

有精通esp8266的大神吗?我现在想要实现通过esp8266的把sd卡的文件发送到上位机,现在fatfs和esp8266都已经调通,可以读一个文本放到BUFF里,通过
ESP8266_SendString()
发到上位机然后在网络助手上显示出文本里的内容,但我现在发送一张图片(.bmp),把图片数据放进BUFF里发过去之后,它就会把图片数据当成字符串打印出来,而且只显示头几位,如图,请问这种情况应该调什么函数,还是这是应该在上位机的软件上下功夫,求大神指导,非常感谢!test.c的代码如下
#include "test.h"
#include "bsp_esp8266.h"
#include "bsp_SysTick.h"
#include<stdio.h>                                                                                                                                                                                                                                                                                                        #include <string.h>  
#include <stdbool.h>
#include "bsp_dht11.h"
#include "./led/bsp_led.h"
#include "ff.h"



volatile uint8_t ucTcpClosedFlag = 0;

FATFS fs;                                                    /* FatFs文件系统对象 */
FIL fnew;                                                    /* 文件对象 */
FRESULT res_sd;                /* 文件操作结果 */
UINT fnum;                                  /* 文件成功读写数量 */
BYTE ReadBuffer[1024]={0};        /* 读缓冲区 */

/**
  * @brief  ESP8266 (Sta Tcp Client)透传
  * @param  无
  * @retval 无
  */
void ESP8266_StaTcpClient_UnvarnishTest ( void )
{
    uint8_t ucStatus;
   
    LED_GPIO_Config();   
    LED_BLUE;

   
    /* 初始化调试串口,一般为串口1 */
  printf("\r\n****** 这是一个SD卡 文件系统实验 ******\r\n");
  
    //在外部SPI Flash挂载文件系统,文件系统挂载时会对SPI设备初始化
    res_sd = f_mount(&fs,"0:",1);
   
/*----------------------- 格式化测试 ---------------------------*/  
    /* 如果没有文件系统就格式化创建创建文件系统 */
    if(res_sd == FR_NO_FILESYSTEM)
    {
        printf("》SD卡还没有文件系统,即将进行格式化...\r\n");
    /* 格式化 */
        res_sd=f_mkfs("0:",0,0);                           
        
        if(res_sd == FR_OK)
        {
            printf("》SD卡已成功格式化文件系统。\r\n");
      /* 格式化后,先取消挂载 */
            res_sd = f_mount(NULL,"0:",1);            
      /* 重新挂载    */            
            res_sd = f_mount(&fs,"0:",1);
        }
        else
        {
            LED_RED;
            printf("《《格式化失败。》》\r\n");
            while(1);
        }
    }
  else if(res_sd!=FR_OK)
  {
    printf("!!SD卡挂载文件系统失败。(%d)\r\n",res_sd);
    printf("!!可能原因:SD卡初始化不成功。\r\n");
        while(1);
  }
  else
  {
    printf("》文件系统挂载成功,可以进行读写测试\r\n");
  }

   
    /**********************************************************************/
  printf ( "\r\n正在配置 ESP8266 ......\r\n" );
   
    macESP8266_CH_ENABLE();
   
    ESP8266_AT_Test ();   
   
    ESP8266_Net_Mode_Choose ( STA );

  while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );   
   
    ESP8266_Enable_MultipleId ( DISABLE );
   
    while ( !    ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
   
    while ( ! ESP8266_UnvarnishSend () );
   
    printf ( "\r\n配置 ESP8266 完毕\r\n" );
   
    /*******************************************************/   
   
    res_sd = f_open(&fnew, "0:pic1.bmp",FA_OPEN_EXISTING | FA_READ );   
    if(res_sd == FR_OK)
    {
        LED_GREEN;

          res_sd = f_read(&fnew,ReadBuffer, sizeof(ReadBuffer), &fnum);
  }        
        ESP8266_SendString ( ENABLE, ReadBuffer, 0, Single_ID_0 );               //发送数据
        
        Delay_ms ( 100 );
        
        if ( ucTcpClosedFlag )                                             //检测是否失去连接
        {
            ESP8266_ExitUnvarnishSend ();                                    //退出透传模式
            
            do ucStatus = ESP8266_Get_LinkStatus ();                         //获取连接状态
            while ( ! ucStatus );
            
            if ( ucStatus == 4 )                                             //确认失去连接后重连
            {
                printf ( "\r\n正在重连热点和服务器 ......\r\n" );
               
                while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
               
                while ( !    ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
               
                printf ( "\r\n重连热点和服务器成功\r\n" );

            }
            
            
        }
        f_close(&fnew);   
      f_mount(NULL,"0:",1);
}



图片3.jpg
回复

使用道具 举报

发表于 2017-4-10 08:57:54 | 显示全部楼层
把调试助手设置成不要hex格式,接收到后把数据保存成文件
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 13:14 , Processed in 0.057850 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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