JectXie 发表于 2024-11-1 03:07

【2024 DigiKey 创意大赛】-基于树莓派5的工业智能网关的设计

本帖最后由 JectXie 于 2024-11-1 11:34 编辑

<div><strong>基于</strong><strong>Raspberry 5</strong><strong>工业传感网关系统的设计</strong></div>

<div>作者:JectXie</div>

<p><strong>一、作品简介</strong></p>

<p></p>

<p>本作品主要实现了网关的功能对各下层终端设备的数据进行收集、保存、转发至云平台。解决了终端设备直接与平台数据互通时在复杂的网络环境中数据发送失败的问题,以及数据发送失败导致的数据无法追查的问题,通过本网关系统进行中转,可以让数据更好更稳定的保留至本地,方便未来追溯及分析。作品使用树莓派作为主控,树莓派linux系统作为主要系统,Python作为后端语言搭配Flask后台管理框架,前端使用谷歌MUI结合React,采集端使用ESP32-S作为主控采集SHT30、SHT40、FST Sensor 、BME680、SGP30、LTR-329数据,使用HTTP协议作为主要数据传输协议。</p>

<div>&nbsp;</div>

<div><strong>二、系统框图</strong></div>

<div>设计思路、软硬件介绍如下,以图文方式展示如下。</div>

<div>本作品主要由Raspberry5作为网关主控(&ldquo;以下将&lsquo;Raspberry Gateway网关&rsquo;简称为&lsquo;网关&rsquo;&rdquo;),ESP32 作为终端设备主控控制所有传感器,BME680、SGP30、FST Sensor、SHT30、SHT40、LTR-329作环境数据采集传感器,采集的参数主要为温度、湿度、压强、气体指令、二氧化碳含量、光照强度、红外光强度、挥发性有机物含量,C++作为嵌入式部分编程语言。另外一部分工业打印机与Raspberry 5 处于一个局域网内,按照设计的架构,客户端PC通过MQTT间接与工业打印机建立联系,从而达到控制打印机打印的目的。</div>

<div><strong></strong></div>

<div>1、ESP32读取各传感器数据、使用HTTP POST将数据传输给网关,网关对数据进行存储且将数据转发至云平台,本地网关可以查询到历史数据。</div>

<div>2、网关收集各传感器数据存储至数据库中</div>

<div>3、客户端程序发布打印指令通过MQTT 服务器,将数据给到网关,网关再将打印指令转发给打印机。示例为斑马打印指令(条码行业龙头,90%的打印机厂商都会支持斑马指令)。</div>

<div>&nbsp;</div>

<p><strong>三、各部分功能说明</strong></p>

<div><strong>第一部分:</strong>ESP32 采集各传感器数据,采用Arduino IDE开发,结合Adafruit SDK作为基础进行增加HTTP功能。用官方库,SHT30 和FST Sensor官方没有SDK,需要重新调整。FST Sensor用到了软串口的库。</div>

<div>&nbsp;</div>

<div> &nbsp;</div>

<div>定义好网关接口地址,和定义好wifi,再Setup函数内连接wifi</div>

<div></div>

<div>Setup连接wifi</div>

<div></div>

<div>循环函数内发送HTTP数据</div>

<div><strong>第二部分:</strong>网关的主要代码。为了让项目代码更好维护,以及为了未来可以有人一起维护这个项目,这是一个前后端分离的项目。</div>

<div>前端:需要给网关安装好web服务器(任何web服务器不限nginx、apache、iis)来运行前端html及js代码。前端项目采用MIT开源协议,在谷歌MUI的基础上整合。</div>

<div></div>

<div>打包完成后,根据web服务器的配置打开网页即可查看前端页面,</div>

<div></div>

<div>打包命令使用到了yarn,需要提前安装yarn 运行yarn build 即可打包完成。</div>

<div>在打开代码以后需要运行npm install 安装相关以来,由于nodejs依赖非常大,需要耐心等待以及需要网络较好的情况下完成(这是nodejs的通病)。Node环境推荐越新越好。</div>

<div>下面的各个传感器数据成功展示的截图</div>

<div></div>

<div></div>

<div></div>

<div></div>

<div>后端:采用Python作为后端语言,使用Flask框架做技术支撑,用到了Flask内部的很多方法,例如内部的Session机制</div>

<div>这种后端项目应该按照标准MVVM文件结构来做,但是由于功能并不复杂,写的随意了一些,</div>

<div>具体的接口全部写在router文件夹内</div>

<div>另外,同步云端单独起了一个文件,cloud_sync.py<br />
用到了Flask-SQLAlchemy技术,来更好更快的操作Mysql。Mysql或Mariadb版本不限。</div>

<div></div>

<div></div>

<div>设备开机时,会自动连接wifi,将数据发送到网关。网关给出返回201状态码及成功数据。并且将数据转发给云端。下面是后台接收到数据,网关数据库和云端数据库的代码。</div>

<div></div>

<div></div>

<div></div>

<div>第三部分:客户端跨网络控制工业打印机的部分,这里主要是使用到了MQTT协议,通过网关做一个数据的转发。让外网的机器可以控制内网的打印机进行打印。</div>

<div>这里做了一个简单的上位机软件。来配合后台程序测试。结合了斑马的打印指令。</div>

<div></div>

<div>输入,或者条码枪扫描二维码,点击打印,即可控制网关局域网内的条码打印机进行打印标签。</div>

<div></div>

<div>看到这里说明打印指令发送成功,这是一条标准斑马打印指令,BQ代表二维码,打印出来的内容会是一个二维码(条码打印机的知识不多做赘述)</div>

<div><strong>四、作品源码</strong></div>

<div>源码地址<a href="https://download.eeworld.com.cn/detail/JectXie/634870?u_atoken=689184ea01cf712f811f4489704aa7fc&amp;u_asig=1a0c66dc17304282160008808e00a0" target="_blank">https://download.eeworld.com.cn/detail/JectXie/634870?u_atoken=689184ea01cf712f811f4489704aa7fc&amp;u_asig=1a0c66dc17304282160008808e00a0</a></div>

<div>源码说明:</div>

<ol>
        <li>Python版本3.8.8及以上</li>
        <li>nodejs 版本20.12.2(前端需要npm install下载依赖)</li>
        <li>上位机软件基于.net 6.0,与.net fremework 4.x 不兼容</li>
</ol>

<div><strong>五、作品功能演示视频</strong></div>

<div>作品视频</div>

<div><iframe allowfullscreen="true" frameborder="0" height="450" src="https://training.eeworld.com.cn/shareOpenCourseAPI?isauto=true&amp;lessonid=41504" style="background:#eee;margin-bottom:10px;" width="700"></iframe><br />
&nbsp;</div>

<div><strong>六、项目总结</strong></div>

<div>
<p>首先感谢得捷和EEworld能给我这次机会参加这次活动,其实这次的项目的内容,我在内心构思了很久,一直没有做完,正好这次的机会让我可以完成到当前这个进度对于我个人来讲已经很满意了。</p>

<p >本次作品是一个工业网关,前端UI是我工作这么多年认为比较好看的UI之一。后端采用的Python加速了开发进度,抛开语言本身的限制,对于整个项目所有开发语言的选型,我个人认为是比较不错的。目前完成的项目感觉还是有不尽人意的地方,希望在后续可以慢慢完善。对于我个人本身。代码规范还是需要加强。</p>

<p >&nbsp;</p>
</div>

<div></div>

<p><!--importdoc--></p>

秦天qintian0303 发表于 2024-11-1 11:12

<p>非常详细,值得学习,感谢&nbsp;&nbsp;</p>
页: [1]
查看完整版本: 【2024 DigiKey 创意大赛】-基于树莓派5的工业智能网关的设计