基于Linux系统的物联网智能终端

背景

产品研发和项目研发有什么区别?一个令人发指的问题,刚开始工作时项目开发居多,认为项目开发和产品开发区别不大,待后来随着自身能力的提升,逐步感到要开发一个好产品还是比较难的,我认为项目开发的目的是满足项目需求,只要满足了需求就达到了目的。产品开发就不太一样,产品开发更像是终身制的项目,要解决随时在不同项目中使用时出现的问题,也要能满足不同应用场景下的使用。

嵌入式软件基本分为了两个流派,从技术层面来讲,一个是基于MCU来开发的,一个是基于MPU来开发的,当年我有很多同事都不理解你一个搞MCU的开发个产品有什么难的,还一个团队十来个人搞这么长时间,有这种想法的人一般都是搞项目开发的高手,不管是基于MCU还是基于MPU,只要是开发产品,都不是个很简单的事情。

早些年都是基于MCU来开发产品,资源有限,处理能力有限,经常会有很多需求无法实现,或者实现起来太麻烦,没法站在开源的巨人肩膀上走的更远。正好在搞项目开发时,公司提出来一个看似不太明确的产品需求,却有明确的项目交期,在这种情况下,只能用最保险的方式,最大的扩展方式来实现产品的开发。

需求

  • 宽电压供电,DC9~35V;
  • 支持两路百兆以太网;
  • 支持4G/5G/Wifi通讯;
  • 可外接北斗2/3进行卫星通讯;
  • 支持LoRa本地组网;
  • 支持继电器控制/数字量采集/CAN总线/RS232总线/RS485总线;
  • 支持MQTT标准协议;
  • 支持Onenet,阿里云等物联网平台;
  • 支持外接TF卡;
  • 支持网络摄像头;

技术难点

  • 最大的难点是需求不明确,不清楚使用场景;
  • 宽电压范围这个还好说,国产电源芯片可以满足;
  • 基于新唐的NUC980来实现,内置DDR,减少了硬件工程师的一个风险,官方提供Linux 4.4的内核;
  • 基于Linux系统这些外设的驱动实现也是个问题,好在疫情期间跟原厂的工程师建立了微信群,全部协调解决了;
  • 软件的扩展性,在这里很重要,用它来应对多变的需求。

设计时没有急于开工,首先通过分析,来将功能进行了划分,拆分架构时参考了冯·诺依曼架构是现代计算机的基础的理论,对设备采集数据,处理数据,存储数据,上传数据等进行类拆分。再加上一些现在开发软件时微服务的概念,将设备内部分成了多个小程序,然后利用TCP协议,在设备内部进行交互。

大体功能模块的划分如下:

  • Linux系统,为各个小程序的执行提供运行基础;
  • 采集程序,负责前端传感器数据采集,支持周期性采集,触发采集;
  • 数据处理程序,负责将采集到数据转化为标准数据;
  • 协议处理程序,负责将上下行的数据解析处理,并周期性打包数据上传,接收服务的下行指令的解析处理;
  • 中心调度程序,负责将各个子任务的数据进行转发,监控各个子任务的执行情况,并负责维护各个子任务的执行状态;
  • 数据管理程序,负责启用数据库,将历史数据存入数据库,并对其它程序提供数据查询服务;
  • 通讯程序,负责建立对应的通讯链路,并维护链路的链接;
  • 配置程序,负责对外提供web页面,用户可通过web页面对系统的参数,应用程序的参数等进行配置,并对运行过程的数据进行查看;

内部的小程序之间通讯都是基于TCP进行的,设备可以实现集群部署,可以单台设备实现其中的部分功能,来增加整个系统的性能。

产品对外接口有各种灵活性,具体配置如下:

产品内置web服务器,配置界面如下所示:

配置界面如下所示:

内部应用程序如下图所示:

关于架构层面的设计,以后慢慢逐步展开。

相关推荐
阿乐艾官几秒前
【linux文件系统重要目录及命令解释】
linux·运维·服务器
blueSatchel2 分钟前
U-Boot启动后做的事情
linux·u-boot
senijusene6 分钟前
Linux软件编程: Linux 操作系统基础与shell脚本
linux·运维·chrome
科技块儿8 分钟前
物联网设备分布分析需要精准地理信息?支持IPv4IPv6双栈批量解析的IP离线库
物联网·网络协议·tcp/ip
予枫的编程笔记25 分钟前
【Linux进阶篇】Linux后台运行避坑指南:nohup、& 用法及Systemd守护进程实操
linux·进程管理·linux运维·nohup·systemctl·ps命令·kill命令
code monkey.29 分钟前
【Linux之旅】Linux 进程间通信(IPC)全解析:从管道到共享内存,吃透进程协作核心
linux·c++·ipc
匆匆那年96735 分钟前
llamafactory推理消除模型的随机性
linux·服务器·学习·ubuntu
好好学习天天向上~~39 分钟前
5_Linux学习总结_vim
linux·学习·vim
Coder个人博客6 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
Doro再努力9 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim