1715|0

7047

帖子

11

TA的资源

版主

楼主
 

【国产RISC-V Linux板 昉·星光VisionFive试用报告】与迪文屏成功通信 [复制链接]

  本帖最后由 lugl4313820 于 2022-6-7 20:27 编辑

【目的】为了将昉.星光替换下笔记电脑,将Python 文件移植到febora操作系统中运行

1、修改# -*- coding: utf-8 -*-  为  # -*- coding: gbk -*-  要不遇到中文会报错。

2、将原来操作excel的部份去除。

3、将win下的serial初始化的端口函数:ser, ret = DOpenPort("COMxx",115200,None)修改为 ser, ret = DOpenPort("/dev/ttyS0",115200,None)

程序如下:(后来得出经验,用ttys0行不通,因为传过去的数据,先被终端先截胡了,进不了main函数里,所以后面更改成usb_ttl)。

#!/usr/bin/python
# -*- coding: gbk -*-
import time
import serial #导入模块
import threading
STRGLO="" #读取的数据
BOOL=True  #读取标志位

cmd_read_phone = bytes([0x5a, 0xa5, 0x04, 0x83, 0x10, 0x60, 0x13])
cmd_read_ID_number = bytes([0x5a, 0xa5, 0x04, 0x83, 0x10, 0x20, 0x18])
cmd_write_to_enter_page = bytes([0x5a, 0xa5, 0x07, 0x82, 0x00, 0x84, 0x5a, 0x01, 0x00, 0x03])
send_list = [0x5a, 0xa5, 0x00, 0x00, 0x00, 0x00]
all_range = None
# 姓名数据组装
def creat_gbk_list(mydata, my_commad, H_address,L_address):
    # 发送的list
    send_list = [0x5a, 0xa5, 0x00, 0x00, 0x00, 0x00]
    send_len = 1 + 2 + 2 + len(mydata)*2
    send_list[2] = send_len
    # 添加 命令
    send_list[3] = my_commad
    send_list[4] = H_address
    send_list[5] = L_address
    mysend_list = bytes(send_list) + mydata.encode("gbk") + b'\xFF\xFF'
    print(mysend_list)
    DWritePort(ser, mysend_list)

def ReadData(ser):
    global all_range
    while BOOL:
        if ser.in_waiting:
            #STRGLO = ser.read(ser.in_waiting).decode("gbk")
            STRGLO = ser.read(ser.in_waiting)
            # print(STRGLO)
            # print("长度为:" + str(len(STRGLO)))
            if STRGLO[0] == 0x5a and STRGLO[1] == 0xa5:
                #获取地址
                addres = STRGLO[4] << 8 | STRGLO[5]
                commd = STRGLO[3]
                recv_len = STRGLO[2]
                print("地址为:" + hex(addres) + "  长度为:" + str(recv_len) + " 命令为:" + hex(commd))
                if recv_len == 0x06 and commd == 0x83:
                    if addres == 0x1080:
                        print("按身手机号码查询")
                        # 读取手机号码数据
                        DWritePort(ser, cmd_read_phone)
                    elif addres == 0x1090:
                        print("按身份证查询")
                        DWritePort(ser, cmd_read_ID_number)
                elif commd == 0x83 and recv_len == 42 and addres == 0x1060:
                    # print("接收到手机号码")
                    recv_phone_len = STRGLO[6]
                    if(recv_phone_len == 0x13):
                        str_ph = STRGLO[7:18]
                        phone_code = str_ph.decode()
                        # 开始查找是否有手机号存在
                        try:
                            if xls_phone_code == phone_code:
                                #获取身份证号码
                                # 写性别

                                creat_gbk_list(my_xb, 0x82, 0x11, 0x20)


                                creat_gbk_list(my_sh, 0x82, 0x10, 0x20)

                                # 写职业

                                creat_gbk_list(my_job, 0x82, 0x11, 0x40)

                                # 写姓名

                                creat_gbk_list(my_name, 0x82, 0x11, 0x60)
                                # 写职业

                                creat_gbk_list(my_job, 0x82, 0x11, 0x40)
                                # 页面转移到确认页面
                                # 写姓名

                                creat_gbk_list(my_name, 0x82, 0x11, 0x60)
                                DWritePort(ser, cmd_write_to_enter_page)

                        except Exception as e:
                            print("出错啦:" + str(e))


                    else:
                        print("接收到的电话号码长度不对 长度为:" + str((recv_phone_len-8)))
                    # 查找手机号
                elif commd == 0x83 and recv_len == 52 and addres == 0x1020:
                    print("接收到手机号码")
                    recv_ID_len = STRGLO[6]
                    if(recv_ID_len == 0x18):
                        str_ID = STRGLO[7:25]
                        str_ID = str_ID.decode()
                        # 开始查找是否有手机号存在

                        try:

                            if ID_code == str_ID:
                                # 写性别

                                creat_gbk_list(my_xb, 0x82, 0x11, 0x20)
                                #获取手机号码

                                creat_gbk_list(my_phone, 0x82, 0x10, 0x60)
                                # 写职业

                                creat_gbk_list(my_job, 0x82, 0x11, 0x40)
                                # 写职业

                                creat_gbk_list(my_job, 0x82, 0x11, 0x40)
                                # 写姓名

                                creat_gbk_list(my_name, 0x82, 0x11, 0x60)
                                # 页面转移到确认页面
                                DWritePort(ser, cmd_write_to_enter_page)

                        except Exception as e:
                            print("出错啦:" + str(e))


                    else:
                        print("接收到的电话号码长度不对 长度为:" + str((recv_phone_len-8)))
                    # 查找手机号码
            else:
                print("非法数据")


#打开串口
# 端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
# 波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
# 超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
def DOpenPort(portx,bps,timeout):
    ret=False
    try:
        # 打开串口,并得到串口对象
        ser = serial.Serial(portx, bps, timeout=timeout)
        #判断是否打开成功
        if(ser.is_open):
           ret=True
           threading.Thread(target=ReadData, args=(ser,)).start()
    except Exception as e:
        print("---异常---:", e)
    return ser, ret



#关闭串口
def DColsePort(ser):
    global BOOL
    BOOL=False
    ser.close()



#写数据
def DWritePort(ser,text):
    result = ser.write(text)  # 写数据
    return result




#读数据
def DReadPort():
    global STRGLO
    str=STRGLO
    STRGLO="" #清空当次读取
    return str



if __name__=="__main__":
    ser, ret = DOpenPort("/dev/ttyUSB0",115200,None)
    if(ret==True):#判断串口是否成功打开
        print("打开串口成功1")
         # count=DWritePort(ser,"我是东小东,哈哈")
         # print("写入字节数:",count)
         #DReadPort() #读串口数据
         #DColsePort(ser)  #关闭串口

4、将程序上传到星光开发板,然后执行 python main.py,用迪文串口屏发送指令:

 

【总结】经过初步的修改,可以进行通讯了。下一步,书写与服务器的代码。

与迪文屏通迅

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表