OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9690|回复: 17

OV7670拍出的bmp,如何通过wifiesp8266,上传呀

[复制链接]

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-9
在线时间
30 小时
发表于 2017-9-28 10:03:02 | 显示全部楼层 |阅读模式
40金钱
各位大神,如何通过wifi模块  esp8266上传  OV7670的照片呢,已经试了多次,请大家给与指教,我把自己该的程序贴上
                printf("while 马上运行");
                        while(1)
                        {
                                key=KEY_Scan(0);
                         status = RFID_Init(SN);
                                        // camera_init();
                                 //printf("ID:%02x %02x %02x %02x\n",SN[0],SN[1],SN[2],SN[3]);
                                        printf("rfid运行");
                                if(key==WKUP_PRES)                        //WK_UP 退出测试                 
                                {
                                        res=0;                                       
                                        atk_8266_quit_trans();        //退出透传
                                        atk_8266_send_cmd("AT+CIPMODE=0","OK",20);   //关闭透传模式
                                        break;                                                                                                 
                                }
                               
                                else if(status==MI_OK)        //KEY0 发送数据 key==KEY1_PRES
                                {
                                               
           sprintf((char*)p,"ID: %0x%0x%0x%0x" ,SN[0],SN[1],SN[2],SN[3]);//测试数据 sprintf((char*)p,"ATK-8266%s测试%02d\r\n",ATK_ESP8266_WORKMODE_TBL[netpro],t/10); //
                                       
                                                ShowID(0,200,p,BLUE  ,WHITE);
                                                Show_Str(30+54,100,200,12,p,12,0);
                               
                                                atk_8266_send_cmd("AT+CIPSEND=0,11","OK",200);  //发送指定长度的数据
                                        printf("正常send");
                               
                                                delay_ms(200);
                                                atk_8266_send_data(p,"OK",100);  //发送指定长度的数据
                                                timex=100;
                                                Reset_RC522();
                                       
                                        if(sd_ok)
                        {
                                LED1=0;        //点亮DS1,提示正在拍照
                                camera_new_pathname(pname);//得到文件名               

                //                bmp_encode(pname,(lcddev.width-240)/2,(lcddev.height-320)/2,240,320,0);
                               
                               
                                if(bmp_encode(pname,lcddev.width-260,(lcddev.height-320)/16,240,320,0))//拍照有误
                                {
                                        Show_Str(140,560,240,12,"写入文件错误!",12,0);                 
                                }else
                                {
                                        atk_8266_send_cmd("AT+CIPSEND=0,11","OK",200);  //发送指定长度的数据
                                        printf("正常send图片");
                                        delay_ms(200);
                                        atk_8266_send_data(pname,"OK",1000);  //发送指定长度的数据
                                       
                       
                                        Show_Str(140,560,240,12,"拍照成功!",12,0);
                                        Show_Str(140,580,240,12,"保存为:",12,0);
                                        Show_Str(140+42,580,240,12,pname,12,0);               
           filename=pname;
           res=f_open(f_bmp,(const TCHAR*)filename,FA_READ);//打开文件                        
                                        if(res==0)//打开成功.
                   {
                              f_read(f_bmp,databuf,readlen,(UINT*)&br);        //读出readlen个字节  
               
                              pbmp=(BITMAPINFO*)databuf;//获取文件信息
                                                         atk_8266_send_cmd("AT+CIPSEND=0,11","OK",200);  //发送指定长度的数据
                                                         atk_8266_send_data(databuf,"OK",1000);  //发送指定长度的数据

                    }                       
                                        BEEP=1;        //蜂鸣器短叫,提示拍照完成
                                        delay_ms(100);
                                 }
                        }else //提示SD卡错误
                        {                                            
                                Show_Str(140,600,240,12,"SD卡错误!",12,0);
                                Show_Str(140,620,240,12,"拍照功能不可用!",12,0);                            
                        }
                         BEEP=0;//关闭蜂鸣器
                        LED1=1;//关闭DS1
                        delay_ms(1000);//等待1.8秒钟   改为  1s
        //                LCD_Clear(WHITE);
                                       
                                       

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-9
在线时间
30 小时
 楼主| 发表于 2017-9-28 10:05:01 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-9-29 01:16:51 | 显示全部楼层

esp8266和tcp通信,你搞定了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-9
在线时间
30 小时
 楼主| 发表于 2017-9-29 09:37:04 | 显示全部楼层
正点原子 发表于 2017-9-29 01:16
esp8266和tcp通信,你搞定了么?

原子哥,我就是直接将esp8266的案例,嫁接过来,将传输数据的p,改成了图片发送的数据,现在我把程序贴上来,您看看,对这些地方,我也是很不懂,恳求原子哥给个方向
回复

使用道具 举报

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-9
在线时间
30 小时
 楼主| 发表于 2017-9-29 09:38:34 | 显示全部楼层
我这个是将拍照实验改的,将数据在存入到sd卡的时候,同时向esp8266发送数据
u8 bmp_encode(u8 *filename,u16 x,u16 y,u16 width,u16 height,u8 mode)
{                               
        FIL* f_bmp;
        u16 bmpheadsize;                        //bmp头大小                  
        BITMAPINFO hbmp;                        //bmp头         
        u8 res=0;
        u16 tx,ty;                                           //图像尺寸
        u16 *databuf;                                //数据缓存区地址                  
        u16 pixcnt;                                           //像素计数器
        u16 bi4width;                               //水平像素字节数          
        if(width==0||height==0)return PIC_WINDOW_ERR;        //区域错误
        if((x+width-1)>lcddev.width)return PIC_WINDOW_ERR;                //区域错误
        if((y+height-1)>lcddev.height)return PIC_WINDOW_ERR;        //区域错误
       
        //  申请内存
         
#if BMP_USE_MALLOC == 1        //使用malloc       
        databuf=(u16*)pic_memalloc(1024);                //开辟至少bi4width大小的字节的内存区域 ,对240宽的屏,480个字节就够了.
        if(databuf==NULL)return PIC_MEM_ERR;                //内存申请失败.
        f_bmp=(FIL *)pic_memalloc(sizeof(FIL));        //开辟FIL字节的内存区域
        if(f_bmp==NULL)                                                                //内存申请失败.
        {                 
                pic_memfree(databuf);
                return PIC_MEM_ERR;                               
        }          
#else
        databuf=(u16*)bmpreadbuf;
        f_bmp=&f_bfile;
#endif             
       
        //申请内存结束
        printf("申请内存结束");
        //初始化、bmp信息
        bmpheadsize=sizeof(hbmp);//得到bmp文件头的大小   
        mymemset((u8*)&hbmp,0,sizeof(hbmp));//置零空申请到的内存.          
  
        hbmp.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);//信息头大小
        hbmp.bmiHeader.biWidth=width;                 //bmp的宽度
        hbmp.bmiHeader.biHeight=height;         //bmp的高度
        hbmp.bmiHeader.biPlanes=1;                         //恒为1
        hbmp.bmiHeader.biBitCount=16;                 //bmp为16位色bmp
        hbmp.bmiHeader.biCompression=BI_BITFIELDS;//每个象素的比特由指定的掩码决定。
        hbmp.bmiHeader.biSizeImage=hbmp.bmiHeader.biHeight*hbmp.bmiHeader.biWidth*hbmp.bmiHeader.biBitCount/8;//bmp数据区大小
                                  
        hbmp.bmfHeader.bfType=((u16)'M'<<8)+'B';//BM格式标志
        hbmp.bmfHeader.bfSize=bmpheadsize+hbmp.bmiHeader.biSizeImage;//整个bmp的大小
           hbmp.bmfHeader.bfOffBits=bmpheadsize;//到数据区的偏移

        hbmp.RGB_MASK[0]=0X00F800;                         //红色掩码
        hbmp.RGB_MASK[1]=0X0007E0;                         //绿色掩码
        hbmp.RGB_MASK[2]=0X00001F;                         //蓝色掩码

//  创建图片保存的文件
printf("创建图片保存文件");

        if(mode==1)res=f_open(f_bmp,(const TCHAR*)filename,FA_READ|FA_WRITE);//尝试打开之前的文件
        if(mode==0||res==0x04)res=f_open(f_bmp,(const TCHAR*)filename,FA_WRITE|FA_CREATE_NEW);//模式0,或者尝试打开失败,则创建新文件               
       
        //  像素  要为4的倍数,没弄明白是为什么
        if((hbmp.bmiHeader.biWidth*2)%4)//水平像素(字节)不为4的倍数
        {
                bi4width=((hbmp.bmiHeader.biWidth*2)/4+1)*4;//实际要写入的宽度像素,必须为4的倍数.       
        }else bi4width=hbmp.bmiHeader.biWidth*2;                //刚好为4的倍数         


//读取照片信息
        printf("读取图片");
        if(res==FR_OK)//创建成功
        {
                atk_8266_send_cmd("AT+CIPSEND=0,12","OK",200);  //发送指定长度的数据
                                       
                //                        delay_ms(100);
                               
                res=f_write(f_bmp,(u8*)&hbmp,bmpheadsize,&bw);//写入BMP首部  
               
                        atk_8266_send_data((u8*)&hbmp,"OK",bmpheadsize);  //发送指定长度的数据
                printf("发送完首部");
                for(ty=y+height-1;hbmp.bmiHeader.biHeight;ty--)
                {
                        pixcnt=0;
                        for(tx=x;pixcnt!=(bi4width/2);)
                        {
                                if(pixcnt<hbmp.bmiHeader.biWidth)databuf[pixcnt]=LCD_ReadPoint(tx,ty);//读取坐标点的值
                                else databuf[pixcnt]=0Xffff;//补充白色的像素.  
                                pixcnt++;
                                tx++;
                        }
                        hbmp.bmiHeader.biHeight--;
                        res=f_write(f_bmp,(u8*)databuf,bi4width,&bw);//写入数据
                        printf("发送指定长度数据");
                        atk_8266_send_data((u8*)databuf,"OK",bi4width);  //发送指定长度的数据
                //        delay_ms(100);
                }
                f_close(f_bmp);
        }            
#if BMP_USE_MALLOC == 1        //使用malloc       
//        pic_memfree(databuf);         
        pic_memfree(f_bmp);                 
        printf("释放内存");
#endif       
        return res;
}
回复

使用道具 举报

15

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2016-10-21
在线时间
57 小时
发表于 2017-10-1 11:31:39 | 显示全部楼层
楼主,战舰的那个摄像头实验是可以在LCD上出图像的是吗
回复

使用道具 举报

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-9
在线时间
30 小时
 楼主| 发表于 2017-10-3 09:59:23 | 显示全部楼层
嗯嗯     是的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-10-8 20:25:44 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-10-21
在线时间
1 小时
发表于 2017-10-22 15:06:46 | 显示全部楼层
楼主,现在搞定了吗?
回复

使用道具 举报

4

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-11-9
在线时间
30 小时
 楼主| 发表于 2017-10-23 11:10:06 | 显示全部楼层
没有 ,现在换成了,ov2640传输,bmp格式不适合传输,太大了,上位机也不支持
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-10-21
在线时间
1 小时
发表于 2017-10-23 23:31:55 | 显示全部楼层
噢噢,我想把每个像素的字节通过模块发出去,就不发bmp的文件了
回复

使用道具 举报

18

主题

453

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2014
金钱
2014
注册时间
2016-12-27
在线时间
136 小时
发表于 2017-10-24 08:15:45 | 显示全部楼层
本帖最后由 anylinkin 于 2017-10-24 08:19 编辑
华中飞雪 发表于 2017-10-23 11:10
没有 ,现在换成了,ov2640传输,bmp格式不适合传输,太大了,上位机也不支持

使用UART串口型(UART-WIFI),串口速度太慢,一般只有十几K或者几十K,传BMP会有相当大的压力。
建议换成SPI接口的ESP8266WIIFI高速模块试一试吧。


STM32F1+这款WIFI模块,STM32主频72MHz, SPI频率=18MHz,普通环境实测(杜邦飞线连接测试),TCP实测速度可以到700K字节每秒,还提供单片机例程和技术支持! 如果是STM32F4做主机,TCP速度约为1M字节每秒,如果是STM32F7,TCP速度能到1.3M字节每秒以上。而UDP的速度则可以更快。  


这款模块经过了数百个用户的视频、音频、高速采集数据传输应用的实战开发和验证(许多用户都是直接使用原子的系列开发板直接飞线连接),数十个用户的批量部署验证(最早一批批量用户有一年多的持续可靠运行验证)。使用这款SPI接口的模块进行通信,速度超快、通信稳定、功能全面、集成方便简单,提供测试验证过的单片例程包和集成说明文档,还有直接和用心技术支持,所以在淘宝上的口碑评价很好!

详情请看: https://item.taobao.com/item.htm?id=550946928238
腾讯视频上,还有高速实测的视频,可以看到测试速度超过1M字节每秒

ESP8266高速WIFI模块 SPI/串口 带WEB网页 音视频传输产品化验证
  1)高速SPI转WIFI,速度过M字节每秒;可作UDP、TCP客户端或服务器使用;支持多链接
  2)支持AP/STA/两者混合模式
  3)串口AT指令:乐鑫标准AT和扩展AT
  4)配网方式灵活多样:智能配网、微信AIRKISS、网页配网、串口AT、SPI API等
  5)稳定可靠,不掉线
  6)低功耗
  7)小尺寸,兼容邮票孔和标准插针,可贴可插
  8)提供单片机例程和技术支持



                                                                                                        
回复

使用道具 举报

9

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2017-4-1
在线时间
4 小时
发表于 2017-11-22 17:15:19 | 显示全部楼层
WiFi模块购买地址 https://shop67012462.taobao.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-2-10
在线时间
3 小时
发表于 2020-3-13 00:32:49 来自手机 | 显示全部楼层
大佬源码可以借我学习学习吗
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-3-4
在线时间
3 小时
发表于 2020-3-16 14:27:36 | 显示全部楼层
毕设做过esp传图片   上位机用labview写的,上位机还做了图像识别的算法,有需要可以讨论讨论
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2020-1-18
在线时间
28 小时
发表于 2020-3-21 09:53:07 | 显示全部楼层
wkwkwkw 发表于 2020-3-16 14:27
毕设做过esp传图片   上位机用labview写的,上位机还做了图像识别的算法,有需要可以讨论讨论

怎么联系你啊,我邮箱:latermvp@163.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2018-7-22
在线时间
0 小时
发表于 2020-3-30 18:08:52 | 显示全部楼层
wkwkwkw 发表于 2020-3-16 14:27
毕设做过esp传图片   上位机用labview写的,上位机还做了图像识别的算法,有需要可以讨论讨论

大神 我毕设就做这个 想请教
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-6-1
在线时间
0 小时
发表于 2020-6-1 10:18:44 | 显示全部楼层
wkwkwkw 发表于 2020-3-16 14:27
毕设做过esp传图片   上位机用labview写的,上位机还做了图像识别的算法,有需要可以讨论讨论

您好,我毕设相对于就比较简单,就是把摄像头拍下来的图片上传到电脑,现在有点问题,可以请教您吗?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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