晨起管家----蓝牙传图V2.5
蓝牙传图V2.5
- 实现的功能
- SD卡
- Keil主函数
- Pycharm
- 总结经验
实现的功能
操作步骤:
预操作:单片机接上电源,蓝牙模块连接到电脑上,两个蓝牙模块慢速闪烁后,运行pyhton程序
应用操作:按下KEY0按键
内部运行大概:
数据存储阶段:按下KEY0按键之后,摄像头拍摄到一张图片,512字节512字节地把数据存储到SD卡里,延时1秒后再次拍摄,就这样拍摄10张图片
数据传输阶段:从SD卡中读取数据,之后通过蓝牙串口配合电脑运行的python程序传输到电脑的Bluetooth文件夹里
SD卡
增加了SD卡的功能
主要用SD的读写的功能
sdio_test
void SD_SingleBlockWrite(uint64_t addr)
{if (Status == SD_OK){/* Write block of 512 bytes on address 0 */Status = SD_WriteBlock(Buffer_Block_Tx, addr, BLOCK_SIZE);/* Check if the Transfer is finished */Status = SD_WaitWriteOperation();while(SD_GetStatus() != SD_TRANSFER_OK);}
}
void SD_SingleBlockRead(uint64_t addr)
{ if (Status == SD_OK){/* Read block of 512 bytes from address 0 */Status = SD_ReadBlock(Buffer_Block_Rx, addr, BLOCK_SIZE);/* Check if the Transfer is finished */Status = SD_WaitReadOperation();while(SD_GetStatus() != SD_TRANSFER_OK);}
}
Keil主函数
main
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "bsp_usart.h"
#include "string.h"
#include "ov7725.h"
#include "exti.h"
#include "sdio_test.h"
#include "bsp_sdio_sdcard.h"#define OV7725_WINDOW_WIDTH 320 // <=320
#define OV7725_WINDOW_HEIGHT 240 // <=240extern u8 ov_sta; //在exit.c里 面定义
extern u8 ov_frame; //在timer.c里面定义 u8 chuaning=0;//正在传输 xxxx xxxxu8 pic_sd_num=0;//图片传输到SD卡的数量编号
u8 pic_bl_num=0;//图片传输到蓝牙的数量编号
void OV7725_camera_refresh(void)
{u8 r, g, b;u16 send;u32 i,j;u16 color;u16 nbn=0;//now_block_num=0;用来指示传输到SD卡的数组里的一个字节u16 pic_block_all=0;//用来知道写入哪一个块if(ov_sta)//有帧中断更新{OV7725_RRST=0; //开始复位读指针 OV7725_RCK_L;OV7725_RCK_H;OV7725_RCK_L;OV7725_RRST=1; //复位读指针结束 OV7725_RCK_H; chuaning=1;//正在传输中,在exti中关闭帧中断//读取数据,写入SD卡for(i=0;i<OV7725_WINDOW_HEIGHT;i++){for(j=0;j<OV7725_WINDOW_WIDTH;j++){OV7725_RCK_L;color=GPIOC->IDR&0XFF; //读数据OV7725_RCK_H; color<<=8; OV7725_RCK_L;color|=GPIOC->IDR&0XFF; //读数据OV7725_RCK_H; //RGB565转RGB555r = (u8)(0x1f&(color>>11));g = (u8)((color&0x07c0)>>6);b = (u8)(0x1f&color);send = (r<<10)|(g<<5)|b;//写入SD的数组的数据Buffer_Block_Tx[nbn++]=(u8)(send&0x00ff);Buffer_Block_Tx[nbn++]=(u8)((send&0xff00)>>8);//如果写到了第512个数据,nbn回到0用来继续写,写SD卡,下一个图片块if(nbn==BLOCK_SIZE){nbn=0;//一张图片大小为320*240*2,由于是10张图片,所以理所当然的是顺序存储,之后是该图片的第几个块SD_SingleBlockWrite(pic_sd_num*320*240*2+pic_block_all*BLOCK_SIZE);pic_block_all++;}}}chuaning=0;//传输完成,可以接收到帧中断了ov_sta=0; //清零帧中断标记pic_sd_num++;//图片更新为下一张图片}
} int main(void)
{ u16 i;u8 key; u8 lightmode=0,effect=0;//用来调功能类型和特效s8 saturation=0,brightness=0,contrast=0;//用来调色度,亮度,对比度u16 pic_block=0;//用来指示读取到哪一块了delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级USART1_Config();USART3_Config();LED_Init(); //初始化与LED连接的硬件接口KEY_Init(); //初始化按键SD_Test(); //初始化SD卡while(OV7725_Init());OV7725_Window_Set(OV7725_WINDOW_WIDTH,OV7725_WINDOW_HEIGHT,0);//QVGA模式输出OV7725_Light_Mode(lightmode);//用来调功能类型OV7725_Color_Saturation(saturation);//用来调色度OV7725_Brightness(brightness);//用来调亮度OV7725_Contrast(contrast);//用来调对比度OV7725_Special_Effects(effect);//用来调特效OV7725_CS=0;//片选信号,选中OV7725这片EXTI8_Init(); //使能外部中断8,捕获帧中断 while(1){pic_sd_num=0;//图片传输到SD卡的数量编号归零pic_bl_num=0;//图片传输到蓝牙的数量编号归零//按下KEY0才继续下面的程序while(1){key=KEY_Scan(0);if(key==KEY0_PRES)break;}//当拍摄到的的图片数小于十张时继续拍摄while(pic_sd_num<10){OV7725_camera_refresh();//开启并拍摄一张图片放到它的内存里并且读取这些数据,传输到SD卡里delay_ms(1000);//延时1s}//当读取到的的图片数小于十张时继续读取while(pic_bl_num<10){Usart_SendString(USART3,"b");//传输开始标志,和python程序有紧密关系while(1){//一张图片大小为320*240*2,由于是10张图片,所以理所当然的是顺序存储,之后是该图片的第几个块SD_SingleBlockRead(pic_bl_num*320*240*2+pic_block*BLOCK_SIZE);//读取SD卡里的数据//把SD卡的数据通过蓝牙传输到电脑for(i=0;i<BLOCK_SIZE;i++){Usart_SendByte(USART3,Buffer_Block_Rx[i]);while(USART_GetFlagStatus(USART3,USART_FLAG_TC) != SET);} //传输完成pic_block++;//传输完了一块//当传输完了这张图片,相关参数归零,开始传输下一张图片//320*240*2÷512=300,这里其实是pic_block从零增到299停止了,再到这里就是300if(pic_block==300){pic_block=0;break;}}pic_bl_num++;//当读取到的的图片编号增加}}
}
Pycharm
import serial
#配置串口号和传输速率
ser = serial.Serial("com5", 115200)
#bmp320*240大小的格式文件的头
head = b'\x42\x4d\x38\x58\x02\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x40\x01\x00\x00\xf0\x00\x00\x00\x01\x00\x10\x00\x00\x00\x00\x00\x02\x58\x02\x00\x23\x2e\x00\x00\x23\x2e\x00\x00\x00\x00\x00\x00\x00\x00'
#一张图片的大小
pic_size = (320 * 240 * 2)
#图片的编号j=0while j<10:if j==0:f = open("D:/BlueTooth/0.bmp", "w+b")if j==1:f = open("D:/BlueTooth/1.bmp", "w+b")if j==2:f = open("D:/BlueTooth/2.bmp", "w+b")if j==3:f = open("D:/BlueTooth/3.bmp", "w+b")if j==4:f = open("D:/BlueTooth/4.bmp", "w+b")if j==5:f = open("D:/BlueTooth/5.bmp", "w+b")if j==6:f = open("D:/BlueTooth/6.bmp", "w+b")if j==7:f = open("D:/BlueTooth/7.bmp", "w+b")if j==8:f = open("D:/BlueTooth/8.bmp", "w+b")if j==9:f = open("D:/BlueTooth/9.bmp", "w+b")f.write(head)# 下一张图片j+=1# 接收到初始信号while True:a = ser.read()print(a)if (a) != b'b':print("Wait")# ser.write("w")else:print("OK")breakpic_size = (320 * 240 * 2)# 接收数据while pic_size > 0:data = ser.read()print(data)if data == b'':continueelse:f.write(data)pic_size -= 1# bmp格式文件的尾部加上俩这个f.write(b'\x00\x00')# 关闭文件f.close()#关闭串口
ser.close()
总结经验
问题一:蓝牙的传输速率问题
蓝牙模块的波特率不建议设置为1382400,这个速度太大,用电脑设置过后,由于电脑不能产生1382400的波特率,所以只能用单片机对它进行处理了。
问题二:符号错误问题
不能正常接收,一个相同的数据会被接收好次
再次确认16位数据是否有问题
原来是&&和&的问题
还有用printf被我设置为用USARTx来发送了,所以在中断的时候它也会去发送到蓝牙里面
问题三:抄写函数问题
读写数据错误,和期望的读写的数据不一样->直接用给的函数试试->可以,但是为什么从给的函数改一点变成自己的函数就不对了?->抄错了一个函数
问题四:SD读写问题
还是有一个错误,就是第510、511位都是0?为什么->发现Code或者什么东西超过9000之后就会出现这个问题,因为我给led白白的写了很多代码,用来占内存,定义并且使用了很多u16的数据,可能是Keil没破解?Keil确实没有破解,破解了之后发现只要是用了LCD就会出现这个问题,不太懂。幸好项目不需要使用屏幕
问题五:漏写数据类型问题
多一个pic_sd_num++就会出错???
原来是extern chuaning的时候没有说他的类型 extern u8 chuaning
这个时候它有可能不提醒你出错,要重新编译工程才提醒
…\HARDWARE\EXTI\exti.c(130): warning: #260-D: explicit type is missing (“int” assumed)
要保存好每一个版本,一点一点加功能,如果有新模块要单独拎出来试验一下,做好版本的功能说明·
晨起管家----蓝牙传图V2.5相关推荐
- 晨起管家----蓝牙传图
蓝牙传图 蓝牙 蓝牙模块 蓝牙模块的AT指令使用 蓝牙模块配置 蓝牙模块发送数据 蓝牙模块接受数据 演示 参考的博文: stm32调用OV7670获取图像并通过蓝牙传输至PC. 在回家的前一天,项目负 ...
- esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2
ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32- ...
- 如何用计算机蓝牙发送文件,怎么用蓝牙传文件
怎么用蓝牙传文件 两部手机之间,在没有联网,没有数据线的情况下能互相传送文件吗? 答案是肯定的.那就是使用蓝牙进行互传.那么怎么用蓝牙传文件呢?下面给大家分享一下如何用蓝牙传送文件. 第一步:首先将两 ...
- 晨枫U盘维护工具V2.0版
晨枫U盘维护工具V2.0版 -- 珠海晨枫工作室 制作教程:HDD模式 | ZIP模式 | U+写入模式 | 本地硬盘安装 | 重装封装光盘[光盘版/量产] 更新说明: 2009.1.10: 1.增加 ...
- ESP32 之 esp32-cam wifi拍照传图系统2
ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32-CAM总结 一. ESP32初识 ESP32-CAM模组的核心芯片:ESP32-S 模块是一款超小体积的多功能通用型 8 ...
- BlackBerry 10 BlackBerry OS 7 1 手机通过蓝牙串口读取Arduino 蓝牙传过来的温度
目标:BlackBerry手机通过蓝牙串口读取Arduino 蓝牙传过来的温度 湿度信息 硬件:Arduino主板 + DHT11温湿度传感器 + 蓝牙模块,开发工具C语言 手机:BlackBerry ...
- 如何上传图片到fileupload空间_如何用原生js写图片上传组件v2.0(还有新版本)?...
js图片上传组件: 基本要求: 1.上传的图片可预览,可删除,可被覆盖更新 2.要求图片格式为jpg和png,大小不能超过2M 新加需求: 1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的u ...
- 飞鸽传书 v2.51 Build 320 多国语言版
飞鸽传书 v2.51 Build 320 多国语言版 飞鸽传书是来自俄罗斯的一款高级即时通讯软件,除了聊天基本的音频播放之外它还包含了语音视频.录制.IM标签编辑等功能. 日前,本报报道了南昌市民飞鸽 ...
- MarkDown图床助手: 截图-传图-生成url 一步到位
简介 现在markdown越用越频繁了, md好用是好用, 但就是贴图片的时候有些麻烦: 要截图->上传图片->复制图片url, 于是做了个简单的工具: 截图->传图->生成图 ...
最新文章
- python json解析列表显示_求教一下 python 读取 json 以后,输出的问题(unicode 和中文显示)...
- poj 3257(哈希+二维dp)
- 博客属性10个非常不错的CSS技巧
- 模板:快速莫比乌斯变换(FMT)+快速沃尔什变换(FWT)(多项式)
- Spring思维导图,让spring不再难懂(一)
- linux脚本编写规则,shell脚本编写守则
- jquery 立体走马灯_jQuery简单的文字跑马灯特效
- Apache 日志配置,包含过滤配置
- 信号完整性与电源完整性分析_电源完整性,信号完整性,你说哪个更重要一点?...
- oracle中日期格式的注意事项
- Windows7系统环境变量path的配置方法
- 阿里云服务器(Centos7)安装谷歌浏览器
- 图片怎么无损放大?不影响清晰度这么做
- 父级fixed_子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案...
- 最新!中国大陆人口首超14亿!但我们为什么不再生孩子了?
- bootstrap3 文件上传插件fileinput中文说明文档
- 生动的SDN基础内容介绍(六)--SDN应用平面和网络测量
- 什么是mysql的安装版本的_一:MySQL基本介绍及安装
- (2019春)软件构造:雨课堂试卷(第3章)
- 计算机打印机端口配置,如何设置打印机端口,打印机端口设置的方法步骤
热门文章
- 微信小程序下拉框组件
- 使用阈值调优改进分类模型性能
- 财务管理中计算机能解决什么问题,事业单位财务管理中计算机技术的作用探究...
- TCN(Temporal Convolutional Network,时间卷积网络)
- ubuntu安装python3(源码安装方法)
- 阿里笔试题(2015)持续更新中
- The 15th Heilongjiang Provincial Collegiate Programming Contest (A、G、H、L)
- 3月学雷锋 雷锋精神永不褪色
- 计算机在生物医学中应用的发展现状,计算机在医学领域中应用的现状.doc
- pywinauto java_pywinauto简单介绍