本来昨天这个文章可以写的差不多,但是半路出去野了,现在电脑还有点电赶紧补一下。
hhhh,写到中午就润了
答应一个摄影工作室要给他们改装Gopro,拿了人家的机器一个多月了,再不动就不礼貌了。
先分析一些咋控制,一般是越简单越好,控制的粒度越细越好。
其实控制Gopro的方式有这么几种:
黑9在手,沉甸甸的,触摸屏幕有点反应迟钝,安霸的方案
老哥把遥控器也给我了,我就小拆一下吧,可爱捏~
直接就是EPS32,带完整的BLE,好活,元件就是一些外围,很简单
上面的按键都是按动的,都有一个肖特基二极管,芯片是充电
使用的是并口的屏幕,真富哥,估计IO多的没的用了
ESP32直接控制的屏幕接口就是这么几个
1. SPI接口:包括SCLK(时钟线)、MOSI(主数据线)、CS(片选线)和DC(数据/命令选择线)四根线。这是OLED屏幕最常见的接口,简单易用。
2. I2C接口:只需要2个线SCL(时钟线)和SDA(数据线)。I2C接口的OLED屏幕在电路设计上更简单一些,但控制起来略微复杂。
3. 8080并行接口:需要8根数据线D0-D7和几根控制线如CS(片选)、DC(数据/命令选择)、WR(写使能)和RD(读使能)。并行接口可以达到较高的传输速率和刷新率,但线路较复杂,所以现在较少使用。
4. 6800并行接口:与8080接口类似,也需要8根数据线和几根控制线,但控制线的功能略有不同。6800接口现在也较少使用。
对于绝大多数OLED屏幕来说,推荐选择SPI接口和I2C接口,这两种接口线路简单,也比较容易控制。如果需要高刷新率和速度,可以选择8080并行接口,但设计难度会大一点。
鄙人是看不懂的,可能是为了程序复杂一些,省物料吧?
大概就是这种的,物料便宜
接口就是8080
接口定义,要12个,8个是数据口
想起来了是,肖特基二极管,好看捏
1. 防止按键抖动。当用户按下按键时,由于手的微小颤抖,会导致按键快速接触和断开,产生多个按键信号。加上一个肖特基二极管可以消除这种抖动,过滤掉过快的按键信号,只让主要的按键信号通过。
2. 防止按键接触时产生的干扰脉冲。当用户按下按键,金属接触片快速接触和离开,会产生一个小的干扰脉冲,这可能会误导mcu产生一个错误的按键信号。加上肖特基二极管可以阻止这种误导性的干扰脉冲传到mcu。
所以,简而言之,在mcu的按键旁边加上肖特基二极管主要是为了滤波和去抖,确保mcu只接收到清晰和有效的按键信号,避免误判和误动作。
这个遥控器卖那么贵,多少是有点品牌溢价了,我也能做着卖~
我接下来贴一下要求,分析一下咋做?
只有相机提供的硬件功能才能实现,已经有相关的API来可以用。
1.破解程序怎么安装?可能需要一个单片机板子吧?
2.改动后是否影响机内原有的其他拍摄模式?希望功能是新增的,不是基于某种模式的修改,不影响其他模式。
3.开机后怎么进入包围曝光拍摄模式?
4.能否突破原有普通照片模式最慢快门0.5s的限制?夜景照片最慢可达10s
5.选择包围曝光模式之后,能否用无线快门遥控拍摄,一次3张?因为手按快门容易抖动。
理想的使用场景开机后手动从菜单调出包围曝光模式,也可以切换到原来其他拍照模式和视频模式。在包围曝光模式下,锁定RAW格式(不需要JPG格式),锁定ISO100,按下遥控器,自动拍摄一组3张,曝光补偿分别为0,-2,+2(或-2,0,+2的顺序也行),其中0这张的快门由测光自动设定。拍完一张不用等待即连拍下一张,直到三张全部拍摄结束。快门最慢可以达到10s,而非0.5s。
而且还是要RAW的文件,因为还能调整一下照片
可以看到最大的需求其实就是这个包围曝光,研究一下:
老哥也贴心的给了一个说明
简单来说:包围曝光是一次拍摄后,以中间曝光值和减少曝光值和增加曝光值的方式,形成3张或者5张不同曝光量的照片。其作用是,在这些不同曝光的照片中,能有比较接近摄影者所需要的曝光量照片。另外,也可以在后期合成制作HDR照片。
接着来看看相机的说明书,看看相机的曝光提供了什么?
这个就是最终的沙雕解决方案了,hhhhh,如果SDK控制不了的话
这个选项应该是可以把快门的时间拉长一些
这个好像又不行
还有一个定时器,可以使用延时来处理
有点糊涂了,我一会儿再看看去这个说明书里面的约束
这个没啥用
这个是另一个约束,快门时间和ISO之间的约束,还是看
这个在SDK里面可以控制
说明书里面有个这个图
这个是我按照上面的需求写的一段代码,具体还没有调试
下面这段本来是另外一篇的,这里就是对OpenGoPro库的一个简单的阅读。
蓝牙控制是全平台的
typing里面
里面有段demo,后面的列表推导缺了个]
所有的代码封装都在这里
不带横线都是内置的方法
这些都是可以设置的选项都是以类封装出现的
这个GoProEnum是一个自定义的Enum类,它具有以下特点: 1. 继承了IntEnum,意味着每个成员都关联一个整数值。 2. 定义了一个metaclass为GoProEnumMeta的元类。这个元类可能定义了一些自定义的行为。 3. 重写了__eq__方法,使得这个Enum类可以通过整数值、字符串名称或其他Enum成员来比较相等。比如:
4. 重写了__hash__方法,使得这个Enum类可以作为字典的key或者set的成员。 5. 定义了两个特殊的成员NOT_APPLICABLE和DESCRIPTOR,这两个成员不会被Enum的迭代器返回。 6.定义了一个_is_proto的属性,来判断这个Enum是否是一个proto enum。如果是,那么只允许与int或str类型比较相等。 所以,总体来说,这个GoProEnum是一个功能较为丰富的Enum类,它自定义了比较、散列和迭代等行为,并且区分了普通Enum和protoEnum两种情况。
在我们定义一个类的时候,常常想对一个类所实例化出来的两个对象进行判断这两个对象是否是完全相同的。一般情况下,我们认为如果同一个类实例化出来的两个对象的属性全都是一样的话,那么这两个对象是相同的。但是如果我们直接用"==”来判断这两个对象知否相等,那么结果一定是不相等的,因为这两个对象的地址一定不同,它们在内存当中的不同区域。
下次写,没电了
哎呀,感谢张同学帮忙拍照(纪念一下机场写作)
别问我为什么闹,就爱闹