描述
<p>注:*为必填项。</p>
<p>【请在报名阶段填写 ↓】
<em> 1、本人电子工程师一枚,从事嵌入式开发12年,主要为stm系列及ESP系列开发和C#上位机开发
</em> 2、本项目主要功能有:4G通信和500万像素拍摄,TF卡存图,RS485串口总线,MQTT通信,P2P通信。借助阿里云物联网MQTT平台,连接内网主机和4G拍摄模块,并借助公网云实现UDP-NAT端口映射,从而实现P2P打洞内网透传,然后两者就能绕过MQTT平台进行图像大文件或DTU数据流的直接透传。
核心硬件主要由GD32F103CB、CPLD、SDRAM、OV5640图像sensor以及SIM7600CE全网通4G模块搭建。
软件主要为:单片机嵌入式C,CPLD的VerilogHDL,上位机用C#写,分为主控面板和打洞程序,打洞程序部署在租用的腾讯云上。</p>
<p>【请在竞赛阶段填写 ↓】
* 1、描述项目详情
(1)、MQTT协议以及其平台作为目前物联网应用领域的主流,在很多物联网产品上都用到了。但它通常只用在小包短报的通信应用上,并不适合于大文件或者数据流的场合。另一方面,目前关于图像视频的应用多数都采用linux或安卓的平台方案,比如海思或树莓派等,成本高功耗大,且有一定的入门门槛。同时对于视频图像的传输场合,最好的是可以使数据交流的双方能直接连通,无需中介服务器。而我这个项目就是想要用低成本低功耗低门槛的方式来实现MQTT+图像流直通的功能。
(2)本项目可以按照通信类型分为MQTT通信和P2P通信。
首先是MQTT的通信。目前MQTT-Broker服务商现在很多互联网公司都可以提供接入服务,并且费用很低。我选择了阿里云的物联网平台作为服务提供方。而在单片机上跑MQTT协议的资料和例子都可在网上找到。鉴于我开发的单片机C程序用FreeRTOS作为骨架,于是我也从FreeRTOS官网上找到了MQTT的很好的代码,很方便就移植到我的单片机上。 而MQTT是基于TCP协议的,我采用的4G模块SIM7600CE,本身就带有TCP/IP栈,通过几句串口的AT指令可以很方便快捷建立TCP连接,连接到阿里云上面。而PC主机上用C#写的控制界面程序,网上也有成熟的MQTT.NET.DLL的库方便调用。于是我用了一周左右时间就搭建起两者的MQTT通信通道。这里注意的是,由于我要采用自定义的命令格式,因此需要设置阿里云控制台的转发规则。当我要转发时,在单片机或PC程序上把转发的二进制数据经过base64转为字符串,再用json格式封装后发给MQTT服务器,服务器才会解析正确并帮我转发。
其次是P2P通信。P2P是工作在UDP上的,它的打洞原理是基于路由的锥形NAT映射。因此我需要有个公网的服务器作为映射中介。具体做法是:用C#写个回音程序,部署在公网IP的云上。回音程序会一直监听UDP端口,若有谁查询自己所属的对外NAT的IP端口号,回音程序就会返回给它。 打洞的过程为:当内网主机得知4G模块已经连上MQTT后,先向回音程序查询自己对外的NATip端口,然后通过MQTT发给4G模块,4G模块用这个IP端口尝试发UDP包给主机,若主机所在网关是锥形NAT类型,则会收到4G模块的包;若对称的NAT类型,则不能收到,此时需要互换角色,让4G先获得自己的NATIP端口,然后通过MQTT发给主机,让主机尝试打洞。这样只要双方有任一个为锥形NAT,都能打洞成功。我自己PC是两层TPLink内网,经测试联通4G卡和移动家庭宽带是锥形NAT,移动4G卡是对称NAT,其他未测试过。一旦打洞成功后要每隔一段时间要发心跳,保持路由器的NAT列表有效才能保持P2P通道的畅通。而SIm7600CE上也自带UDP协议栈,可以方便使用。
(3)综上,我的终端模块和主机程序上都分别跑了两种通信协议,其中MQTT用于控制报文,P2P用于大文件数据传输。
(4)在图像拍摄方面,由于OV5640是带JPG引擎的芯片,因此我只要设置好它的输出格式并及时接收缓存下来就可以了。由于OV5640的输出总线带宽较高,因此我这里另外采用了CPLD+SDRAM的方式来专门缓存JPG数据,然后当单片机需要图像数据的时候就又通过CPLD分包读取SDRAM缓存的数据。所以CPLD是作为中转站的角色,它的代码用到VerilogHDL来编写。
(5)从我提供的视频可见,P2P通道下图片传输的速率大概是40~50KB,对于500万像素的JPG通常可以10s传完,并且这里还加入了丢包重传的逻辑。如果以后搭建MJPG视频流,不用考虑丢包重传的话,估计可以达到70KB,那这个速度对于传输320<em>240分辨率的MJPG来说应该也有7帧/s。并且SIM7600自带GPS功能,以后可以做台无人驾驶遥控小车,通过地图+实时视频远程遥控,只要有4G的地方都能去哈哈。
</em> 2、描述项目所面临的挑战及所解决的问题
由于本项目涉及到比较多方面的技术,所以即使有些技术是有资源参考的,也要花不少时间整合和调试。并且是跨平台跨网络的项目,因此开发起来也有一定难度,也有不少乐趣的。比如其中的P2P传输,因为其工作在UDP之上,所以传输图像所需的保证数据完整性的逻辑就要我自己定义来写。这里我是参考了TCP的窗口技术和丢包重传技术,稍微简化后用在P2P传输上。
<em> 3、描述项目硬件、软件部分涉及到的关键点
(1) 在这个项目上我共自定义了两套协议,一套是封装在MQTT包里的控制报文协议,比如打洞,IO外设控制,串口小包转发,拍摄参数设置等;另一套是专门在P2P上的大文件或流传输协议。
(2)硬件上我自己开发的CPLD+SDRAM图像采集方案比较原创性,同时也可以引申到其他项目上解决低端单片机不能采集图像的痛点。
(3)这个项目的主要精力时间都是花在单片机代码设计和编程上,而我采用的FreeRTOS操作系统是很强大的一个工具,并且是开源免费的。
</em> 4、项目材料清单展示
拍摄模块</p>
<table>
<tr>
<th>0.1u</th>
<th>C1, C2, C3, C4, C7, C8, C9, C10, C12, C15, C16, C20, C23, C24, C25, C27, C28, C29, C30, C35</th>
<th>0603-C</th>
<th>风华</th>
</tr>
<tr>
<td>10u/6.3V</td>
<td>C5, C11, C13, C14, C17, C22, C26, C31, C32, C34</td>
<td>0603-C</td>
<td>风华</td>
</tr>
<tr>
<td>22u/6.3V</td>
<td>C18, C33</td>
<td>0805-C</td>
<td>风华</td>
</tr>
<tr>
<td>10u/25v</td>
<td>C6, C19, C21</td>
<td>0805-C</td>
<td>风华</td>
</tr>
<tr>
<td>SMAJ5.0CA</td>
<td>D1</td>
<td>SMA-TVS</td>
<td>长电</td>
</tr>
<tr>
<td>磁珠</td>
<td>L1, L2, L3, L4</td>
<td>0603-R</td>
<td></td>
</tr>
<tr>
<td>红色贴片LED</td>
<td>LD1</td>
<td>0603-LED</td>
<td></td>
</tr>
<tr>
<td>蓝色贴片LED</td>
<td>LD2</td>
<td>0603-LED</td>
<td></td>
</tr>
<tr>
<td>SI2301</td>
<td>Q1, Q2</td>
<td>SOT-23</td>
<td>长电</td>
</tr>
<tr>
<td>10k</td>
<td>R1, R2, R3, R5, R9, R10, R11, R12, R14, R17, R23</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>1K</td>
<td>R4</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>51k</td>
<td>R6, R13, R18, R19, R20, R21</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>5k1</td>
<td>R7, R8, R22</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>330</td>
<td>R15, R16</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>W9864G6KH</td>
<td>U1</td>
<td>TSOP54</td>
<td>华邦</td>
</tr>
<tr>
<td>EPM240T100</td>
<td>U2</td>
<td>TQFP100</td>
<td>altera</td>
</tr>
<tr>
<td>ME6206P1V5</td>
<td>U4</td>
<td>SOT-23</td>
<td>长电</td>
</tr>
<tr>
<td>ME6206P2V8</td>
<td>U5</td>
<td>SOT-23</td>
<td>长电</td>
</tr>
<tr>
<td>GD32F103CB</td>
<td>U6</td>
<td>LQFP48</td>
<td>兆易</td>
</tr>
<tr>
<td>ME6206A33P</td>
<td>U7, U8</td>
<td>SOT-89</td>
<td>长电</td>
</tr>
<tr>
<td>SP485EE</td>
<td>U9</td>
<td>SOP8</td>
<td>SP</td>
</tr>
<tr>
<td>48M晶振</td>
<td>XT1</td>
<td>XTAL-5032</td>
<td></td>
</tr>
</table>
<p>4G模块</p>
<table>
<tr>
<th>Value</th>
<th>Designator</th>
<th>Footprint</th>
<th>厂家</th>
</tr>
<tr>
<td>ME6306</td>
<td>U1, U2</td>
<td>SOT-23-6P</td>
<td>长电</td>
</tr>
<tr>
<td>4G</td>
<td>U5</td>
<td>SIM7600</td>
<td>SIMCOM</td>
</tr>
<tr>
<td>0.1u</td>
<td>C1, C2, C7, C9, C10, C14, C17, C18, C20, C24, C25, C27, C28, C31</td>
<td>0603-C</td>
<td>风华</td>
</tr>
<tr>
<td>100u6V</td>
<td>C6, C21, C22, C26, C30, C33</td>
<td>1206-C</td>
<td>三星</td>
</tr>
<tr>
<td>10R</td>
<td>R8, R15, R17, R18</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>10u</td>
<td>C13, C15, C23, C29, C32</td>
<td>0603-C</td>
<td>风华</td>
</tr>
<tr>
<td>22u16V</td>
<td>C3, C4, C5, C11</td>
<td>0805-C</td>
<td>风华</td>
</tr>
<tr>
<td>28K 1%</td>
<td>R1, R4, R10</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>330</td>
<td>R9</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>33p</td>
<td>C8, C12, C16, C19, C34, C35</td>
<td>0603-C</td>
<td>风华</td>
</tr>
<tr>
<td>5K1</td>
<td>R2, R5, R7, R11, R12, R13, R14, R16, R19, R20</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>6.8uH2A</td>
<td>L3</td>
<td>Pwr-Indu-0402</td>
<td></td>
</tr>
<tr>
<td>6.8uH6A</td>
<td>L2</td>
<td>Pwr-Indu-0603</td>
<td></td>
</tr>
<tr>
<td>68R</td>
<td>L4</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>6K8 1%</td>
<td>R3, R6</td>
<td>0603-R</td>
<td>风华</td>
</tr>
<tr>
<td>DSK34</td>
<td>D1</td>
<td>SOD-123</td>
<td>长电</td>
</tr>
<tr>
<td>GD25Q32</td>
<td>U6</td>
<td>SOIC8-WIDE</td>
<td>兆易</td>
</tr>
<tr>
<td>GRE</td>
<td>LD2</td>
<td>0603-LED</td>
<td></td>
</tr>
<tr>
<td>ME6206P-3V3</td>
<td>U3</td>
<td>SOT-23</td>
<td>长电</td>
</tr>
<tr>
<td>SI2302</td>
<td>Q1</td>
<td>SOT-23</td>
<td>长电</td>
</tr>
<tr>
<td>SIM Card</td>
<td>SIM</td>
<td>SIM_NANO_FLIP</td>
<td></td>
</tr>
<tr>
<td>SP3485</td>
<td>U8</td>
<td>SOP8</td>
<td></td>
</tr>
<tr>
<td>SRV05-4</td>
<td>U7</td>
<td>SOT-23-6P</td>
<td></td>
</tr>
<tr>
<td>TXB0102DCU</td>
<td>U4</td>
<td>sot-70-dcu</td>
<td></td>
</tr>
<tr>
<td>LEDv</td>
<td>LD1</td>
<td>0603-LED</td>
<td></td>
</tr>
</table>
<p>* 5、项目图片上传
5.1、PCB上印制大赛logo图片,若无视为放弃参赛
<img src="//image.lceda.cn/pullimage/rzRjL13f7hvjswxZ4xrhP2OCUIZh7LaHMAHekVs5.jpeg" alt="IMG_20200920_202059.jpg">
<img src="//image.lceda.cn/pullimage/eeczPg0kds24ZWprI3dbymThI0pRqEHT7Xrj80vV.jpeg" alt="fomr.jpg">
<img src="//image.lceda.cn/pullimage/wQkAhCWypgfjCmGHPWjQ41GcekDrV6GhHcop083N.jpeg" alt="IMG_20200920_194204.jpg">
<img src="//image.lceda.cn/pullimage/epSxRq47jBVleKbHcgzEosqMVu8CJUvC9Tz3ab7q.jpeg" alt="IMG_20200920_202050.jpg">
5.2、项目其它图片
PC控制台界面
<img src="//image.lceda.cn/pullimage/1kFCXWxvhT3Iti2bLq6s78zK9nCG4IowxgMVm1hZ.png" alt="console.png">
4G模块原理图
<img src="//image.lceda.cn/pullimage/oKeofmuJBMj7OUGAs3IUeWFIa5eP1siRt1dicHAM.png" alt="image.png"></p>
<p>拍摄模块原理图
<img src="//image.lceda.cn/pullimage/bNLIodr5KK3a7kGSHrtRQ7Mvu6ZeGfvGIYoF04Hr.png" alt="image.png">
* 6、演示您的项目并录制成视频上传
6.1、视频上传大赛官网
6.2、B站视频标题和链接
<a href="https://www.bilibili.com/video/BV1Jz4y1Z7BU/" target="_blank">https://www.bilibili.com/video/BV1Jz4y1Z7BU/</a>
第五届立创电子设计大赛-《借助MQTT实现P2P穿透的4G拍摄及DTU透传功能模块》-之功能演示</p>
<p>< span class="colour" style="color:rgb(170, 170, 170)">< span class="size" style="font-size:12px">注意事项:①:视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;②:视频上传:请同步上传至大赛官网和B站(<a href="www.bilibili.com" target="_blank">www.bilibili.com</a>),B站人气TOP10项目将获得1000-5000元现金奖励,其它上传项目获得100元立创商城无门槛券;③:视频标题:第五届立创电子设计大赛:{项目名称}-{视频模块名称};如第五届立创电子设计大赛:《自动驾驶》项目-团队介绍。< /span>< /span>< br>
< br>
<em> 7、属于首次公开发布
首次公开发布
</em> 8、开源文档
原理图,BOM
* 9、参考文献
FreeRTOS官网
CSDN官网
.NET 官网
github官网
兆易创新官网
《TCP/IP原理》
《单片机原理》
《精通C#》</p>
<p>点击链接了解更多详情:<a href="https://www.szlcsc.com/go/dsxq" target="_blank">https://www.szlcsc.com/go/dsxq</a></p>
评论(8)