完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大神,如何通过wifi模块 esp8266上传 OV7670的照片呢,已经试了多次,请大家给与指教,我把自己该的程序贴上
printf("while 马上运行"); while(1) { key=KEY_Scan(0); status = RFID_Init(SN); // camera_init(); //printf("ID:%02x %02x %02x %02xn",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测试%02drn",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); |
|
相关推荐
12个回答
|
|
板子是战舰
|
|
|
|
esp8266和tcp通信,你搞定了么?
|
|
|
|
原子哥,我就是直接将esp8266的案例,嫁接过来,将传输数据的p,改成了图片发送的数据,现在我把程序贴上来,您看看,对这些地方,我也是很不懂,恳求原子哥给个方向
|
|
|
|
我这个是将拍照实验改的,将数据在存入到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 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; } |
|
|
|
楼主,战舰的那个摄像头实验是可以在LCD上出图像的是吗
|
|
|
|
嗯嗯 是的
|
|
|
|
|
|
楼主,现在搞定了吗?
|
|
|
|
没有 ,现在换成了,ov2640传输,bmp格式不适合传输,太大了,上位机也不支持
|
|
|
|
噢噢,我想把每个像素的字节通过模块发出去,就不发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)提供单片机例程和技术支持 |
|
|
|
ESP8266WiFi模块
|
|
|
|
只有小组成员才能发言,加入小组>>
7360 浏览 9 评论
2444 浏览 2 评论
为什么我用esp8266做TCP服务器网络调试助手一直连接不上去?
9547 浏览 3 评论
为什么我的ESP8266 AT指令一直返回error无法正常使用?
7388 浏览 0 评论
4199 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 17:09 , Processed in 1.532444 second(s), Total 66, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号