大学生
最后登录1970-1-1
在线时间 小时
注册时间2017-2-7
|
本帖最后由 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);
}
|
-
|