基于树莓派继电器实现软硬件结合自动化场景

 本文仅代表个人观点

 

引言

目前软件测试团队,正在逐步建立软件测试的CICD自动化测试框架。期望通过无缝连接开发的版本发布,进行快速高效的验证工作。 将自动化测试做到规范化、快速化,提高团队的整体效率。为将来更多的测试用例自动化打好基础。整体的方案的思路如下:

1. 团队的版本发布包触发自动化测试框架。

2. CICD中的Pipeline自动获取和安装相应的安装包。

3. 执行团队中现有的自动化测试脚本,如Firmware, Libs等等。 (将来会扩展更多的模块)。

4. 监控脚本的执行,记录测试日志。

5. 测试结束后,收集整理测试报告。

6. 将测试报告通过邮件发送相关人员,进行问题分析和定位。

经过团队的一段时间的努力,整体框架基本完成了。 但是我们的在设计的过程中,发现遇到以下问题:

1. 安装包完成后,需要对控制柜进行物理上下点的重启。

2. 用例中一些紧急制动的后,需要手工激活控制柜,才能连接机器人本体。

这些问题会阻碍我们自动化的实际执行,必须要人工干预才能顺利执行。 为了真正实现CICD的无人值守,这两个问题必须要解决。进过讨论,我们的初步方案是使用树莓派来模拟,电源的上下电和模拟激活按钮。并将这些操作和http服务相关联,自动化框架通过API来模拟这些人为干预的操作。

 

一.整体方案

整体的放设计思路如下:

 

 

1. 使用继电器来控制外部电源的输入输出。

2. 使用继电器来实现模拟外部IO激活的功能。

3. 使用树莓派微型电脑,在GPIO的基础上控制继电器的行为。

4. 在树莓派上建立web服务,覆盖以上的功能。

5. 自动化框架根据需要调用web请求,实现用例的自动化执行。

接下来我们根据我们的方案设想,逐步来实现各项功能和验证工作。

 

1.1  什么是树莓派

 树莓派由注册于英国的慈善组织“Raspberry Pi 基金会”开发,Eben·Upton/埃·厄普顿为项目带头人。2012年3月,英国剑桥大学埃本·阿普顿(Eben Epton)正式发售世界上最小的台式机,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能,这就是Raspberry Pi电脑板,中文译名"树莓派"。这一基金会以提升学校计算机科学及相关学科的教育,让计算机变得有趣为宗旨。基金会期望这 一款电脑无论是在发展中国家还是在发达国家,会有更多的其它应用不断被开发出来,并应用到更多领域。在2006年树莓派早期概念是基于Atmel的 ATmega644单片机,首批上市的10000“台”树莓派的“板子”,由中国台湾和大陆厂家制造。

它是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。 Raspberry Pi B款只提供电脑板,无内存、电源、键盘、机箱或连线。

树莓派的生产是通过有生产许可的三家公司Element 14/Premier Farnell、RS Components及Egoman。这三家公司都在网上出售树莓派。你可以在诸如京东、淘宝等国内网站购买到你所想要的树莓派。

树莓派基金会提供了基于ARM的Debian和Arch Linux的发行版供大众下载。还计划提供支持Python作为主要编程语言,支持Java、BBC BASIC (通过 RISC OS 映像或者Linux的"Brandy Basic"克隆)、C 和Perl等编程语言.

 

以上介绍来自百度百科:树莓派

1.2  为什么选择树莓派

在选择使用树莓派最为方案之前,我们尝试使用其他的一些解决方案如:智能插座、单片机、IO外部设备等等。但是这些方案都无法满足我的需求。如智能插座的API是封闭的,自动化框架无法通过http request来实现自由调度,单片机无法提供稳定的Web服务或者说开发代价太大,而IO需要第三方软件支持,成本较高。综合来看树莓派的整体方较为成熟:

1. 可以使用Python作为开发语言,难度低。

2. 天然支持GPIO机制,能够很好的控制硬件。

3. 自带Flask web服务框架,能够快速开发所需要的的API接口。

4. 成本低廉,整体方案不超过1200元人民币。

5. 体积小功耗低,便于和电箱等设备集成。

6. 使用Linux + Python + Flask方案开发周期短,维护简单。

二.树莓派系统安装配置

2.1  系统安装

树莓派设备是一个硬件,本身不自带系统。官方提供了一些的镜像文件,提供给使用者使用。第三方也有一些定制化的操作系统可以使用。 我们在这里使用了其官方的操作系统:Raspberry Pi OS。

1.1.1   OS 下载

访问树莓派的官方网站中的下载页面:OS下载链接

你会看到许多版本的操作系统可供选择,我们这里选择了“Raspberry Pi OS with desktop and recommended software”版本,里面不光有操作系统,一些必备的软件。

建议使用BT软件通过种子文件来下载,速度比较快。

1.1.2   OS 烧录

OS镜像下载完成后,我们需要将镜像文件烧录到SD中,提供给树莓派用。

常用的烧录工具有:

Win32 Disk Imager: 下载地址

Rufus: 下载地址

下图使我们使用Rufus工具来烧录操作系统:

 

1.1.3   OS 登录和配置

将SD卡插入树莓派中,连接好电源、显示器、键盘鼠标等外设。开启电源,如果OS启动成功,就会显示以下界面:

 

按照提示一路默认下去,语言建议大家使用默认英语,键盘布局选择US键盘。要注意的是不要选择立即更新软件,因为各种原因,更新的时间较长,而且本身已安装的软件足够大家常规使用。

1.1.4   开启root用户

树莓派的默认用户密码为: PI/raspberry,如果想要建立建立root用户,使用以下命令:

 

 

根据系统提示,输入和确认密码即可。

1.1.5   开启VNC和SSH服务

打开客户端输入下命令,开启VNC和SSH服务这样我们就可以远程登录树莓派,进行代码编写和相关得工作:

 

在打开的界面中,选择“interface options” 选项:

 

根据提示开启VNC和SSH服务:

 

 

VNC可以是我们能够使用专门的软件和remote程序,通过界面登录我们的树莓派。

SSH服务可以使我们能够使用一些SSH client工具通过命令控制树莓派。

设置完毕后,重启树莓派。尝试是否可以远程登录树莓派。

我们可以下载一个SSH客户端工具,比如 Putty,输入用户名密码查看是否可以远程控制树莓派。

 

1.1.6   开启ftp服务

我们需要再树莓派中建立一个ftp的服务,这样我们就可以远程上传我们的测试代码 ,进行调试验证。在Linux系统中最常用的就是“vsftpd”服务了。

打开客户端输入以下命令就可以自动安装了:

  

使用默认的安装和配置文件,ftp服务是可以正常使用的。我们可以下载一些开源的FTP客户端软件来使用,比如: FileZilla

使用IP地址,用户名密码,22端口,如果能够看到用户的默认文件夹则服务安装成功:

 

SSH服务可以使我们能够使用一些SSH client工具通过命令控制树莓派。

设置完毕后,重启树莓派。尝试是否可以远程登录树莓派

1.1.7   配置Python环境

默认在树莓派中同时存在Python2.*和Python3.*。为了避免后续编程遇到环境上的问题,我们建议卸载Python2.*,并将默认Python环境设置为Python3.7。通过以下命令来进行配置和确认:

 

 

我们可以看到系统默认的Python环境变成了Python3.7:

 

1.1.8   确认Flask环境

我们在方案中提及需要使用Flask Web框架,来对外提供一个web服务。树莓派中已经默认集成了相关的环境,使用以下代码来确认:

 

 

 

Flask的官方网站如下,我们可以通过文档快速对的开发代码:

https://flask.palletsprojects.com/en/1.1.x/

三.电源自动上下电方案

配置玩树莓派和一些准备工作后。 我们接下来要对自动上下电方案进行实现。整体的思路如下:


1. 使用树莓派GPIO操作继电器

2. 继电器来控制点触空气开关,控制电源的上下电

3. 使用Flask提供web服务,供自动化脚本调用。

在开始设计相关代码前,我们先来了解下几种通过树莓派控制继电器的方法和一些基本概念:

 

GPIO(General Purpose I/O Ports)

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。

GPIO是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO口的使用非常广泛。掌握了GPIO,差不多相当于掌握了操作硬件的能力。

树莓派中GPIO的布局和结构如下:

 

编码实现(GPIO)

通过上文对于GPIO的介绍,我们知道我们需要通过代码,对pin脚输出高低电平,来操作外部的电子元器件。对于硬件引脚的操作,有以下几种的编码格式: Wiring Pi,BCM,物理引脚Board编码。可以使用不同的开发语言和方式实现操作硬件:

 

【 python GPIO】

【开发语言】——python

【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

 

【 wiringPi】

【开发语言】——C语言

【简单介绍】——wiringPi适合那些具有C语言基础,在接触树莓派之前已经接触过单片机或者嵌入式开发的人群。wiringPi的API函数和arduino非常相似,这也使得它广受欢迎。作者给出了大量的说明和示例代码,这些示例代码也包括UART设备,I2C设备和SPI设备等,毫无疑问地说wiringPi功能非常强大。

 

【 BCM2835 C Library】

【开发语言】——C语言

【简单介绍】BCM2835 C Library可以理解为使用C语言实现的相关底层驱动,它给我的感觉更像STM32的库函数,BCM2835 C Library的驱动库包括GPIO、SPI和UART等,可以通过学习BCM2835 C Library熟悉BCM2835相关的寄存器操作。如果有机会开发树莓派上的linux驱动,或自主开发python或PHP扩展驱动,可以从BCM2835 C Library找到不少的“灵感”。

 

我们可以灵活的使用这三种库或者方案来实现我们的方案。既然我们使用的是Linux + Python + Flask的开发环境,我们首选使用GPIO库 +BCM编码的形式进行开发实现:

首先使用Python脚本实现对继电器的控制,代码如下:

 

 

运行代码,能够听到继电器打开闭合的声音,并且控制柜能够上下电。证明我们的方案是有效果的。记下来将其结合Flask框架,做成web服务:

 

 

 


我们开启Flask服务:

 

就可以通过调用以下http请求,来控制上下电和当前状态的查询:

API接口

功能

http://IP地址:端口/PowerOn

电源上电

http://IP地址:端口/PowerOff

电源断电

http://IP地址:端口/GetStatus

获取当前电源状态

 

三.自动激活方案

在我们当前的控制柜系统机制中,在紧急制动和断电后,需要使用一个激活按钮来物理激活控制柜,才能够使能机器人本体,这是一个安全机制。

在我们目前的实验室环境中,我们有一个激活设备来实现以上功能:

 

我们咨询组内的开发人员和硬件的组同事,获取这个激活按钮的内部工作原理。得到的信息是,根据硬件需要完成激活设备,并且输出的四个引脚分成两组,同时得到一个高电平,就可以激活安全驱动。我们的想法是,是不是可以使用继电器来实现双路开关的功能, 模拟激活操作。

紧急接口设备的最小接法示意图:

 

我们使用DUSB25的接口,按照原理图做好内部线路连接,将3,16,4,17引线接入到分成两组接入到继电器中,希望通过继电器的上下电来时实现开关的作用。

 实际实现,如图:

 

 

 

接下来我们使用python来实现双路继电器的开关和闭合:

 

经过代码的验证,发现我们的方案是切实可行的。通过代码我们可以模拟人工激活控制柜的功能。接下来我们将这些代码和Flask框架相结合,实现http协议的访问和控制:

 

 

 

这样我们就可以访问如下的IP地址,来激活系统:

API接口

功能

http://IP地址:端口/ActiveRobot

激活系统

 

四.方案整合

在实现了自动化上电和激活方案后,我们将其软硬件进行整合。提供给自动化测试组进行使用,经过初步的验证,完全能够满足我们的日常使用。

最终代码如下:

  

 

在启动Flask服务后,我们可以通过以下的Http请求,来实现电源上下电和激活操作:

API接口

功能

http:// IP地址:端口/PowerOn

电源上电

http:// IP地址:端口/PowerOff

电源断电

http:// IP地址:端口/GetStatus

获取当前电源状态

http:// IP地址:端口/ActiveRobot

激活安全系统

后言

后续工作中可能根据这个思路讲系统IO、外部IO、PLC相关相关设备进行集成,达到软硬件结合的自动化测试框架 。 后期我们集成了modbus接口的工业继电器,并实现了自动化代码、pipeline、CICD和硬件设备的集成,真正做到无人值守的自动化测试架构

 

附录:工具链列表

Raspberry Pi OS            OS下载链接

Win32 Disk Imager:      下载地址

Rufus:                           下载地址

SSH Client:                     Putty

Ftp Client:                     FileZilla

 

参考文献

[1]   树莓派实验室: https://shumeipai.nxez.com/

[2]   Blog: https://blog.csdn.net/xdw1985829/article/details/39580401

[3]   Flask: https://palletsprojects.com/p/flask/

 

posted @ 2024-01-23 10:11  追风狂想  阅读(27)  评论(0编辑  收藏  举报