今天开始写第一篇微博,就先写刚完成的过磅自动化“项目”吧。受甲方(老爸)委托,实现过磅收费完全自动化,不需要人工干预,项目费用为零。可能有人会不明白,我就先介绍一下“项目”背景吧。
老爸退休无聊,在单位过磅收费,打发老年时光。所谓过磅就是这种,如图, 载重拉货卡车开到磅秤上,然后记重收费,每天来几辆车,几点来,都是随机的,尤其是半夜凌晨车更多(夜晚查车的少),这样24小时伺候,老爸吃不消了,给了我任务,就是把过磅自动化,我 不敢怠慢,马上开始了调研和开发过程。
先做硬件准备。根据调研,淘宝上卖的过磅自动化的机器要一万三,结合经费紧张的实际,制定出了一套经济方案,由我自己写程序实现称重和收费,这样就买个二手电脑和显示器,然后连接地磅串口接收数据就ok了,所以硬件是地磅串口一分二线和连接电脑线(共计50元),二手戴尔电脑(选它是因为它可以长期开机很稳定)和显示器(共170元),因为电脑静电会干扰地磅计数,又买了串口的静电隔离器(30元),连接路由器的网线(0元),这基本上就是必须的硬件设备 了。
下面是重头戏软件开发了,语言选用了python,因为模块丰富,可以实现各种功能。路代码前,先上流程图。
下面单独详细介绍每个模块和代码,本程序用到的模块如图一
主要用到的python模块是threading、pyautogui、pytesseract、serial、matplotlib 等,
一.初始化模块
这个模块是初始化全局变量、程序主路径、开启称重线程,代码如图2
称重子进程的作用是 接收地磅传来的数据,并根据重量来生成地磅状态:有车,无车、有车稳定。
二.就绪等待
这个状态在汽车上地磅前所处的状态。一直循环,时间间隔较长,为10秒。一旦状态变为有车,间隔变为1秒,当状态变为有车稳定时,转为下一个状态,网络通转为有网称重,网络不通转为无网称重。代码如图3
三、有网称重
这个模块要实现的功能
1、根据重量计算出费用,然后显示收费二维码
2、生成检测费用线程,检测微信费用到账情况,到账后语言告知。
3、监测费用线程存活情况,如果不存活则返回就绪状态,否则超时返回。
4、收到钱状态位为1,则显示重量,超时或者车离开则消失页面,返回就绪状态。
在做监测微信费用这个功能的时候,刚开始打算调研微信接口,了解后发现先要注册上传资料成为商户等等,关键还要给微信流水0.38%(还是优惠的),想想就心疼,我存银行一年定期要三个月才能这么多利息呢,它嗖的一下就抽走我这么多,不行,我这块就把python的图像识别和微信的收款助手这两个功能结合起来,通过图像识别出是否收到款项(不需要关注金额,因为二维码收费金额是程序固定的),效果非常好,没有失误过(哈哈,又省了一笔银子)。上代码,如图4
四.无网称重
在无网络的情况下,微信收不到收款信息,则只能提供一个固定的收费二维码和语音提示价格,让客户自己自觉缴费(缴费多少不可控),收费后(这里利用了第三方收费平台)短信下发激活线路,重量显示屏显示60秒后自动关闭。代码如图5
以上为主要模块的介绍,其他代码都是围绕着这几个模块服务的,就不一一呈上了,有问题请留言。