stm32调用OV7670获取图像并通过蓝牙传输至PC
问题分析
首先明确需求。用stm32调用OV7670获取图像,并且通过蓝牙传递至PC端。由此我们可以整理到以下几个模块。
- 调用OV7670得到图像数据
- 将数据通过串口传输到蓝牙
- PC端调用蓝牙接收数据并储存
开始调试
1.stm32调用OV7670
这里我主要目的是实现功能,因此程序主要用的是开发板附带的例程,在其基础上做了一些小修改而已。修改部分会在下面提到。
1.1在开发板例程上修改有如下好处:
- 开发板的例程可以将图像显示在液晶屏上,便于调试。否则在看不到结果的情况下,调试也无从谈起。
- 不需要自己去了解液晶屏的使用,这个和需要的功能并不相关。
- 方便。毕竟例程已经是可以直接使用的程序,避免了自己调试移植程序时可能出现的更多bug。
1.2遇到的问题
买到的ov7670引脚与开发板不匹配,不能直接接入开发板带有的camera模块使用。因此得自己连线。此处没有太大问题,对照原理图用杜邦线接好就行了。这是我的连线。
然后用例程之后可以正常从液晶屏看到图像,如图
至于代码的话,毕竟是例程的代码,有stm32的话去对应的论坛上或者找淘宝都能找到。
2.PC端蓝牙接收
问题是需要一步步地去解决的。
首先,先实验电脑端的蓝牙接收功能,这里我们先不采用stm32调用的蓝牙和电脑端的通信。而采用手机蓝牙与电脑蓝牙进行通信测试。我这里采用的python语言。
2.1添加蓝牙虚拟串口
步骤我是参考另外一位博主的设置,这里附上原文链接:
https://blog.youkuaiyun.com/px_528/article/details/70782059
2.2使用python的serial库
python关于serial有两个库,一个是serial另一个是pyserial,两者的使用都是import serial。两个都有的话可能会出现错误AttributeError: module ‘serial’ has no attribute ‘Serial’。我的解决办法是卸载了serial库,只安装pyserial库。但是在程序中的使用还是import serial。
2.3运行程序
我的测试程序如下:
import serial
ser = serial.Serial("com3", 9600, timeout=0.5)
f = open("F:/python/test.txt", "w+b")
while True:
data = ser.read()
if data == b'':
continue
elif data == b'i':
break
else:
f.write(data)
f.close()
ser.close()
从蓝牙获取输入,然后保存为一个txt文件。输入终止符号是"i"。
2.4手机输入
使用一款蓝牙调试APP,不知道怎么放下载包,名字是MiniBalance。等程序运行之后,再打开APP,与电脑蓝牙连接。