采用数据包的形式传送数据。
k210发送二维码内容给stm32后通过串口打印出接收到的数据。
实现stm32接收二维码中的任务,并显示在lcd屏上。
话不多说,上代码。
K210端代码
import sensor
import image
import lcd
import time
from machine import UART
from fpioa_manager import fm
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(9, fm.fpioa.UART1_RX, force=True)
uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)
rwa_1=0
rwa_2=0
rwa_3=0
rwb_1=0
rwb_2=0
rwb_3=0
clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(0)
sensor.run(1)
sensor.skip_frames(30)
######################
def sending_data(rwA_1,rwA_2,rwA_3,rwB_1,rwB_2,rwB_3):
FH = bytearray([0x2C,0x12,rwA_1,rwA_2,rwA_3,rwB_1,rwB_2,rwB_3,0x5B])
uart.write(FH);
#########
Color = (90,45,0)
flag=0
flg_uart=0
a=0
b=0
k=''
lcd.set_backlight
while True:
clock.tick()
img = sensor.snapshot() #一帧图像
res = img.find_qrcodes() #查找图像中是否有二维码列表
fps =clock.fps()
if len(res) > 0:
img.draw_string(2, 2, res[0].payload(), color=(0,158,0), scale=5)
flag=1
#print(res[0].payload())
s=res[0].payload()
k=s
if flag==1:
#lcd.clear(77)
img = image.Image(size=(320, 240),color = (150, 158, 75),mode = "RGB565")
img.draw_string(0,0,k,color=Color, scale=5)
lcd.display(img,(0,0,320,240)) #显示图像到lcd上
if a==0:
print(k)
#uart.write(k)
#uart.write('\r\n')
rwa_1=int(k[0])
rwa_2=int(k[1])
rwa_3=int(k[2])
rwb_1=int(k[4])
rwb_2=int(k[5])
rwb_3=int(k[6])
#print(rwa_1,rwa_2,rwa_3)
#print(rwb_1,rwb_2,rwb_3)
sending_data(rwa_1,rwa_2,rwa_3,rwb_1,rwb_2,rwb_3)
a=a+1
else :
lcd.display(img,(0,0,320,240))
if uart.any():
data = uart.read()
b=b+1
#print(uart.read())
print('Received:', data)
stm32端代码
void USART3_IRQHandler(void)
{
u8 com_data;
u8 i;
static u8 RxCounter1=0;
static u16 RxBuffer1[10]={0};
static u8 RxState = 0;
if( USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET) //
{
//LED1=!LED1;
USART_ClearITPendingBit(USART3,USART_IT_RXNE); //
com_data = USART_ReceiveData(USART1);
if(RxState==0&&com_data==0x2C) //0x2c??
{
RxState=1;
RxBuffer1[RxCounter1++]=com_data;
//LED1=!LED1;
}
else if(RxState==1&&com_data==0x12) //0x12??
{
RxState=2;
RxBuffer1[RxCounter1++]=com_data;
//LED1=!LED1;
}
else if(RxState==2)
{
RxBuffer1[RxCounter1++]=com_data;
if(RxCounter1==9 && com_data == 0x5B) //
{
//LED1=!LED1;
RWA_1=RxBuffer1[RxCounter1-7];
RWA_2=RxBuffer1[RxCounter1-6];
RWA_3=RxBuffer1[RxCounter1-5];
RWB_1=RxBuffer1[RxCounter1-4];
RWB_2=RxBuffer1[RxCounter1-3];
RWB_3=RxBuffer1[RxCounter1-2];
RxCounter1 = 0;
RxState = 0;
printf("%d,%d,%d,%d,%d,%d",RWA_1,RWA_2,RWA_3,RWB_1,RWB_2,RWB_3);
}
else if(RxCounter1 > 9) //
{
RxState = 0;
RxCounter1=0;
for(i=0;i<9;i++)
{
RxBuffer1[i]=0x00; //
}
}
}
else //????
{
RxState = 0;
RxCounter1=0;
for(i=0;i<9;i++)
{
//LED1=!LED1;
RxBuffer1[i]=0x00; //
}
}
}
}
在此记录一下
效果图
欢迎大家交流