这一篇文章鸽了很久了,但是不写不行了,姜主任的动作太快了,我再不写更新不来了。 首先是姜主任对我的相机的慰问 以及最新的更新 Sony multi+FlowBox我以前就写过这个。 可能大家还不知道这个东西到底是什么?其实就是一个开关,只不过有点高级 我们看看近照 首先是你需要一个飞控,一个Sony相机(支持多功能接口),一个上面的触发器。 工作方式是:在相机录像瞬间,这个触发器把飞控的数据记录功能触发(主要是陀螺仪,测量角度数据),没了! 有什么用?有了陀螺仪的数据就可以使用软件把拍摄的视频进行一代程度的稳定。哈?还有这技术吗?有,而且还是开源的。 我很早以前就答应姜主任写他的源码解读,不过我一方面是事情多,二也是鸽的严重,三是怕对不起这套源码~ 但是这个工程已经比较完美了,而且姜主任对这个东西的功能添加也是冷静而克制的,当然了读者有更好的想法也可以联系我。 哈哈哈,这里也提前剧透一下主任的下一个项目,HDMI的控制器,说实话这个项目我是蛮期待的。相信不久的将来就会面世了,希望我到时候继续写源码的解读。 其实也招募人员将这个东西做成成品,有很多人在问这个。不过这个产品变现不是姜主任的风格,他只是单纯的为开源事业添砖加瓦,当然了,如果发展出一个让普通用户和开发者都收益的模式也未尝不可。 考虑到源码的文章会很长,这里先说关于硬件的部分,已经开源了:
装到无人机上面的样子 hhhh,相机2w6 看原理图吧~ 他这里可能是为了从无人机的电池取电,所以使用了一个MP9943: 特性 给个参考 左进电源,右出5V 1N5819WS用来整流。 接口 接下来看接口,先看右下,支持2S-6S的取电,和我们上面说的一样,接着是对主控芯片的资源利用,串口x2+GPIOx2+IIC,ok,就是这些了。 看这个ESP32 前级给的5V经过LDO稳定的给后级通电 两组串口(都是软串口)和第二个按钮在一起,右边是一路串口(硬件的,他也引出来了),和IIC在一起,下面没有什么好说的,串口下载程序。 输入这块使用的是Type-C 16线的卧口 Type-C是串口的下载线(不是USB),然后到CH430这块,CH430是额为给了一路电源。 ok硬件完事了 当然了,这个是片子的引脚 这块是ESP32的串口下载电路,注意下面的IO0 okok,还有一个器件不要忘了,Sony的接口 链接在下面,下单的时候推荐C款 接法,我就不扯犊子了 可以看我以前的: 开始源码: 简介 配合软件食用 v0.3.0 目前支持的相机等,我的小相机是ok的,gopro正好错了一代 数据也可以使用bf的日志工具读 推荐是使用这个flowbox,但是不卖了,而且是及其简化的FC F411+MBI270+华邦的flash 在相机上面的位置 以前的存图 当你看到这个,hhhh 后面有两组串口可以连接除SBUS以外的RC接收机,至于为什么不支持,我觉得是因为反相器的问题,至少是支持IBUS的。 真不是我骂百度,同样是搜索一个东西,你自己看这个结果。 只是看见上面的小FC说支持这个协议,所以研究一下。 目前支持这个Sony Mutil协议的相机,经过测试的是这些。 其实还有一些机器是接地触发,这个地方也有写,FS也做了支持 以及还有3v3施密特触发的RED相机。 看FS的支持触发方式。 首先推荐的FC,第一个就是我上面写的,但是没有卖的,第二个就是BMI270 陀螺仪的FC,以及支持CRSF的飞控。 当然姜总也推荐30x30 安装位的FC 江苏无锡。。。这 Sony multi+FlowBox,源码解读我上篇差不多已经够了,这篇就挑我觉得有必要注意的地方。 使用的裸机编程模型(使用了一些定时器+回调的方式,还用了uasyncio[异步],之前是想让我写这段来着,后面也指望不上) 回调注意这两个函数,发包是100hz,UI任务是200。 他把要用到的变量都用单独的py文件分离,为了解耦和后期的升级的方便。 变量名,见名见其意 主要是CRSF的协议处理,这里看注释处理通道值,约束一个值 一个数据包怎么发送就是这样 地址+长度+种类+负载+校验 后面是串口发送 可以看下串口的通信参数 UI的更新线程 读取电压的ADC的简单算法 初始化ADC 这是功能菜单 这个是目前的支持协议,上面都说过,下面是OTA的升级来源,忘了什么时候和我说的OTA这个事情了。 接下来看下携程部分: uasyncio 是用来编写 并发 代码的库,使用 async/await 语法。 uasyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 uasyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。 Sony的串口设置,用的串口2。 具体是什么编程思想? 把一些异步函数(就是任务,Task,一会就会说到)注册到这个事件循环上,事件循环会循环执行这些函数(但同时只能执行一个),当执行到某个函数时,如果它正在等待I/O返回,事件循环会暂停它的执行去执行其他的函数;当某个函数完成I/O后会恢复,下次循环到它的时候继续执行。因此,这些异步函数可以协同(Cooperative)运行:这就是事件循环的目标。简单点来说就是快速的访问,没有就绪就快速离开干别的,总之不让CPU闲着。 定义
数据流(Streams)是用于处理网络连接的高阶异步/等待就绪(async/await-ready)原语,可以在不使用回调和底层传输协议的情况下发送和接收数据。 建立一个发送和接收的对象.StreamReader 和 StreamWriter 表示同一 I/O 流的半双工部分,并且两者都必须在一个任务中使用。 这里插一句在这里使用携程的作用:专为在微控制器上使用而设计。因此,具有较小的 RAM 占用空间和快速的上下文切换以及零 RAM 分配。重点是连接硬件设备。目的是设计驱动程序,使应用程序在驱动程序等待硬件响应时继续运行。应用程序仍然响应诸如用户交互之类的事件。在等待机器回复的时间内,再做一些别的事情,比如更新一下UI。 就写一个,读完东西来比较,等10ms,开始写一个回复的标志,UI线程状态持续为真。差不多就是这样。 屏幕使用IIC 1306,后面是分辨率 这些都是出现的各种Logo dispaly就是显示了 3V3触发模式 自己看 状态的转换 OTA我就不写了,不过看这个pw,应该是对象的名字,祝99。 最后再说一下,关于自己换个板子开发的时候,注意改这个地方的引脚映射。 LOED的屏幕控制就是简单的寄存器存取。 Sony这块就是串口和回复的状态信息,以前的版本不是携程的,如果有看不懂的,可以看历史的代码。 接地触发,施密特3V3触发,在这个文件里面实现 支持比较遗憾的是设置这部分我没有写,使用的是json文件,很有新意的方式
|
|