锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于python arduino 自动测试框架

时间:2023-03-07 02:30:00 046继电器

硬件架构

pc camera

pc 通过usb串口与arduino通信 控制继电器 实现开关

pc串口控制arduino 屏幕和电源

pc通过camera获取屏幕图像ocr判断结果

https://blog.csdn.net/kamille1024/article/details/119951948

https://blog.csdn.net/qq_38017966/article/details/118724459


上位机 Pyhon 配置环境

1. 串口:

安装

  • pip install pyserial

解决办法 使用ptcharm terminal 安装 pyserial

2. 问题 import cv2

ptcharm terminal 安装 opencv-python

pip3 install opencv-python

from PIL import Image安装PIL: pip install pillow

3. OCR 配置

ubuntu 参考:ubuntu中pytesseract 安装和使用示例

  • 安装OCR
pip install pytesseract -i https://pypi.douban.com/simple

安装Index of /tesseract到windows系统,写下安装路径

可以打开pycharm 输入代码import pytesseract.pytesseract
然后按住ctrl键鼠标对着pytesseract点击右键

将tesseract_cmd = 'tesseract’修改为:

tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

增加两个环境变量

识别中文,单独安装识别引擎不能识别中文,需要下载其他东西

https://github.com/tesseract-ocr/tessdata

将里面的 chi_sim.traineddata、chi_sim_vert.traineddata、chi_tra.traineddata和chi_tra_vert.traineddata文件放入tesseract-ocr的tessdata目录下(C:\Program Files\Tesseract-OCR\tessdata)

可以使用windows命令直接检查环境是否成功,empty page说明未识别,识别结果将存储在同一目录中result.txt


Ubuntu environment setup

check serial port

iffy@iffy-EP43-DS3L:~$ dmesg | grep tty
[ 0.143425] printk: console [tty0] enabled
[ 0.412498] 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 1444.721675] cdc_acm 4-1:1.0: ttyACM0: USB ACM device

Com port is ACM0

Serial port tool

  1. # 安装

  2. sudo apt install cutecom

  3. # 启动

  4. sudo cutecom

Permission issue

Traceback (most recent call last):   File "/home/iffy/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/serial/serialposix.py", line 322, in open     self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK) PermissionError: [Errno 13] Permission denied: '/dev/ttyACM0'

temp solution: sudo chmod 666 /dev/ttyACM0

Formal solution

Permission denied on /dev/ttyACM0 - #27 by system - Installation & Troubleshooting - Arduino Forum

You can solve it by adding yourself to the dialout group in Debian-based Linux, or uucp group in Arch Linux.

sudo usermod -a -G dialout $USER

OR

sudo usermod -a -G uucp $USER

open CV can't open camera

cv2.imwrite((outputPath currenttime test_name '_aoriginal.jpg'), gray)
cv2.error: OpenCV(4.5.5) /io/opencv/modules/imgcodecs/src/loadsave.cpp:801: error: (-215:Assertion failed) !_img.empty() in function 'imwrite'

check camera work or not

sudo apt-get install cheese cheese

check camera id

sudo apt install v4l-utils v4l2-ctl -d  /dev/video0 --all Driver Info:  Driver name      : uvcvideo  Card type        : UVC Camera (046d:0918): Logitec  Bus info         : usb-0000:00:1a.7-5  Driver version   : 5.13.19  Capabilities     : 0x84a00001   Video Capture   Metadata Capture   Streaming   Extended Pix Format   Device Capabilities  Device Caps      : 0x04200001   Video Capture   Streaming   Extended Pix Format Priority: 2 Video input : 0 (Camera 1: ok) Format Video Capture:  Width/Height      : 640/480  Pixel Format      : 'YUYV' (YUYV 4:2:2)  Field             : None  Bytes per Line    : 1280  Size Image        : 614400  Colorspace        : Default  Transfer Function : Default (maps to Rec. 709)  YCbCr/HSV Encoding: Default (maps to ITU-R 601)  Quantization      : Default (maps to Limited Range) 

solution:

self.cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) 

改为:

self.cap = cv2.VideoCapture(0) 

Install tesserct on ubuntu

sudo apt-get install tesseract-ocr 


Python 代码逻辑

  1. 连接并打开串口
  2. 接通继电器

        Loop

           1.创建目录

           2. 判断是否黑色

           3. OCR 后图片放入目录,输出测试结果

           4. 点击Home

           5. 判断是否黑色

           6. OCR 后图片放入目录,输出测试结果

           7. 点击最后一个按钮

           8. OCR 后图片放入目录, 输出测试结果

           9. 重命名目录结果

      

Pytest 配置:

pip install -U pytest

Allure 生成测试报告:

pip install allure-pytest

Release 2.17.3 · allure-framework/allure2 · GitHub

修改Log allure修改默认logo方法 - 知乎

C:\allure2.17.3\plugins\custom-logo-plugin\static\styles.css

.side-nav__brand {
  background: url('ic_launcher.png') no-repeat left center !important;
  margin-left: 10px;
  height: 200px;
  width: 200px;
}
.side-nav__brand-text{
  /* 去掉图片后边 allure 文本 */
  display: none;
}
.side-nav__brand:after{
  content: "myTitle";
  margin-left: 18px;
  height: 20px;
  font-family: kai;
  font-size: 13px;
}

pycharm中pytest如何将⼀条⽤例执⾏多次

pytest.main(['-s', '-vv', '--alluredir', 'temp','--count=10'])

下位机 Arduino 部分

开关机代码

    int pinRelay = 11; //管脚D3连接到继电器模块的信号脚
    int pinJidianqi = 7; //管脚D3连接到继电器模块的信号脚
     
    void setup() {
      pinMode(pinRelay, OUTPUT); //设置pinRelay脚为输出状态
      pinMode(pinJidianqi, OUTPUT); //设置pinRelay脚为输出状态
    }
     
    void loop() { 
       digitalWrite(pinRelay, HIGH);//输出HIGH电平,继电器模块闭合
       digitalWrite(pinJidianqi, HIGH);//输出HIGH电平,继电器模块闭合
       delay(300000); //等待300000毫秒 5分钟
     
       digitalWrite(pinRelay, LOW);//输出LOW电平,继电器模块断开
       digitalWrite(pinJidianqi, LOW);//输出LOW电平,继电器模块断开
       delay(600000); //等待300000毫秒 6分钟
    }

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章