123 lines
3.3 KiB
Python
123 lines
3.3 KiB
Python
|
'''
|
|||
|
功能描述
|
|||
|
'''
|
|||
|
import math
|
|||
|
import sensor, image, time, lcd
|
|||
|
import binascii
|
|||
|
from Maix import GPIO
|
|||
|
from machine import Timer, PWM, UART, Timer
|
|||
|
from fpioa_manager import fm
|
|||
|
|
|||
|
|
|||
|
#--------------感光芯片配置 START -------------------
|
|||
|
|
|||
|
DISTORTION_FACTOR = 1.5 # 设定畸变系数
|
|||
|
def init_sensor():
|
|||
|
'''
|
|||
|
初始化感光芯片
|
|||
|
'''
|
|||
|
lcd.init(freq=15000000) #初始化LCD
|
|||
|
sensor.reset() #复位和初始化摄像头,执行sensor.run(0)停止。
|
|||
|
sensor.set_vflip(1) #将摄像头设置成后置方式(所见即所得)
|
|||
|
# sensor.set_pixformat(sensor.RGB565) # 设置像素格式为彩色 RGB565
|
|||
|
sensor.set_pixformat(sensor.GRAYSCALE) # 设置像素格式为灰色
|
|||
|
sensor.set_framesize(sensor.QVGA) # 设置帧大小为 QVGA (320x240)
|
|||
|
sensor.skip_frames(time = 2000) # 等待设置生效.
|
|||
|
clock = time.clock() # 创建一个时钟来追踪 FPS(每秒拍摄帧数)
|
|||
|
|
|||
|
|
|||
|
init_sensor()
|
|||
|
#--------------感光芯片配置 END -------------------
|
|||
|
|
|||
|
|
|||
|
#--------------串口UART部分 START -------------------
|
|||
|
|
|||
|
#映射串口引脚
|
|||
|
fm.register(6, fm.fpioa.UART1_RX, force=True)
|
|||
|
fm.register(7, fm.fpioa.UART1_TX, force=True)
|
|||
|
|
|||
|
#初始化串口
|
|||
|
uart = UART(UART.UART1, 115200, read_buf_len=4096)
|
|||
|
|
|||
|
|
|||
|
def get_symbol(num):
|
|||
|
'''
|
|||
|
根据数值正负,返回数值对应的符号
|
|||
|
正数: ‘+’, 负数‘-’ 主要为了方便C语言解析待符号的数值。
|
|||
|
|
|||
|
'''
|
|||
|
if num >=0:
|
|||
|
return ord('+')
|
|||
|
else:
|
|||
|
return ord('-')
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
def UsartSend(str_data):
|
|||
|
'''
|
|||
|
串口发送函数
|
|||
|
'''
|
|||
|
uart.write(str_data)
|
|||
|
|
|||
|
|
|||
|
#--------------串口UART部分 END -------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#--------------二维码识别部分 START -------------------
|
|||
|
|
|||
|
def QR_Check():
|
|||
|
'''
|
|||
|
二维码函数
|
|||
|
'''
|
|||
|
res = img.find_qrcodes() # 寻找二维码
|
|||
|
if len(res) > 0: # 在图片和终端显示二维码信息
|
|||
|
img.draw_rectangle(res[0].rect())
|
|||
|
img.draw_string(2,2, res[0].payload(), color=(0,128,0), scale=2)
|
|||
|
print(res[0].payload())
|
|||
|
uart.write(bytes([0x55]))
|
|||
|
uart.write(bytes([0x92]))
|
|||
|
uart.write(bytes([0x01]))
|
|||
|
uart.write(bytes([len(res[0].payload())]))
|
|||
|
for qrdata in res[0].payload():
|
|||
|
uart.write(bytes([ord(qrdata)]))
|
|||
|
#print(chr(ord(qrdata)))
|
|||
|
uart.write(bytes([0xbb]))
|
|||
|
|
|||
|
#--------------二维码识别部分 END -------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#---------------------MAIN-----------------------
|
|||
|
#将蓝灯引脚IO12配置到GPIO0,K210引脚支持任意配置
|
|||
|
fm.register(12, fm.fpioa.GPIO0)
|
|||
|
LED_B = GPIO(GPIO.GPIO0, GPIO.OUT) #构建LED对象
|
|||
|
|
|||
|
while True:
|
|||
|
LED_B.value(0) #点亮LED
|
|||
|
# 串口数据接收判断
|
|||
|
data = uart.read(8)
|
|||
|
if data is not None:
|
|||
|
print(data)
|
|||
|
print(len(data))
|
|||
|
print(binascii.hexlify(data).decode('utf_8'))
|
|||
|
if(len(data) >= 8):
|
|||
|
if((data[1] == 0x02)&(data[7] == 0xBB)):
|
|||
|
if(data[2] == 0x92):
|
|||
|
print("识别二维码")
|
|||
|
if(data[3] == 0x01):
|
|||
|
print("开始识别")
|
|||
|
if(data[3] == 0x02):
|
|||
|
print("停止识别")
|
|||
|
|
|||
|
# 拍摄图片
|
|||
|
img = sensor.snapshot()
|
|||
|
# 去除图像畸变
|
|||
|
img.lens_corr(DISTORTION_FACTOR)
|
|||
|
# 二维码识别
|
|||
|
QR_Check()
|
|||
|
# 在LCD上显示
|
|||
|
lcd.display(img)
|
|||
|
|