首页 > 编程语言 >[Raspberry Pi]树莓派多线程下串口收发数据

[Raspberry Pi]树莓派多线程下串口收发数据

时间:2023-07-08 19:44:25浏览次数:44  
标签:__ 树莓 rxBuffer ser dataUpdateFlag 串口 多线程

[Raspberry Pi]树莓派多线程下串口收发数据

鼠鼠用的是python开发树莓派,因为python是最优美的语言!

少废话,直接上代码:

import threading
import serial
import cv2


ser = serial.Serial("/dev/ttyAMA0", 115200)
ser.timeout = 5
if not ser.isOpen:
    ser.open()  # 打开串口
startRdFlag = 0
rxBuffer = []
dataUpdateFlag = 0


def comPrint(_string):
    message = _string
    ser.write(message.encode())
    
def readThread():
    global rxBuffer, dataUpdateFlag
    print("start Read Thread!\n")
    while True:
        if dataUpdateFlag == 0:
            rxBufferLen = ser.inWaiting()
            if rxBufferLen > 0:
                rxBuffer = ser.readline()
                dataUpdateFlag = 1  # 通知主任务有新数据
                
def mainThread():
    global dataUpdateFlag,rxBuffer
    print("start Main Thread!\n")
    while True:
        ret, frame = cap.read()
        cv2.imshow("frame", frame)

        if dataUpdateFlag == 1: # 有新数据
            # 处理数据
            print(rxBuffer)
            
            # flag归零
            dataUpdateFlag = 0
            # 处理完数据,开始接收新数据
        cv2.waitKey(5)
    cv2.destroyWindow()


if __name__ == '__main__':
    thread1 = threading.Thread(target=mainThread)
    thread2 = threading.Thread(target=readThread)

    thread1.start()
    thread2.start()

标签:__,树莓,rxBuffer,ser,dataUpdateFlag,串口,多线程
From: https://www.cnblogs.com/Asaka-QianXiang/p/17537730.html

相关文章

  • 多线程part2-多线程的两个概念
    并发同一时刻,有多个指令在单个CPU上交替执行理解:打游戏的时候,右手操作鼠标,同时用右手喝可乐,手速特别快交替执行,这时,你的右手相当于CPU,执行的对象相当于线程并行同一时刻,有多个指令在多个CPU上同时执行理解:关键点在于同时 ......
  • 多线程
    importtime,threadingfromthreadingimportLockdefwork(timer):#如果在函数内部找不到变量,就会向上寻找,main函数属于向上的领域withlock:print('操作文件')print('只要在withlock里,就是单线程')print(f'线程名称名:{threading......
  • 树莓派4B-细分驱动步进电机
    树莓派4B-细分驱动步进电机项目介绍利用4B树莓派控制步进电机转动,精度可达:0.0144度(即360度/25000)适用于非常精密的角度转动。舵机的精度为1度,无法实现超高精度控制。硬件需求硬件型号不同,只要功能相同,代码即可兼用。树莓派CDKU-S100-24开关电源DM542驱动器42by......
  • C++之原子操作:实现高效、安全的多线程编程
    背景在多线程编程中,线程间的同步和数据竞争问题是无法避免的。传统的同步方法,如互斥锁(mutex)和条件变量(conditionvariable),可能导致性能下降和死锁等问题。C++11引入了原子操作,提供了一种更高效、安全的多线程编程方式。本文将介绍C++中的原子操作概念、使用方法及示例。C++中的......
  • 使用STM32的usb虚拟串口CDC_Transmit_FS打印freertos的任务列表vTaskList
    创建一个任务,打印信息后,把自己删除/*USERCODEENDHeader_func_showSysInfo*/voidfunc_showSysInfo(voidconst*argument){/*USERCODEBEGINfunc_showSysInfo*//*Infiniteloop*/for(;;){osDelay(1000);chartaskList[200];......
  • 我用numpy实现了GPT-2,GPT-2源码,GPT-2模型加速推理,并且可以在树莓派上运行,读了不少hung
     之前分别用numpy实现了mlp,cnn,lstm和bert模型,这周顺带搞一下GPT-2,纯numpy实现,最重要的是可在树莓派上或其他不能安装pytorch的板子上运行,生成数据gpt-2的mask-multi-headed-self-attention我现在才彻底的明白它是真的牛逼,比bert的multi-headed-self-attention牛的不是一点半点,......
  • 多线程知识:三个线程如何交替打印ABC循环100次
    本文博主给大家讲解一道网上非常经典的多线程面试题目。关于三个线程如何交替打印ABC循环100次的问题。下文实现代码都基于Java代码在单个JVM内实现。问题描述给定三个线程,分别命名为A、B、C,要求这三个线程按照顺序交替打印ABC,每个字母打印100次,最终输出结果为:ABCABC.......
  • Java中的多线程
    1.线程实现1.1线程创建(三种方法)Java下载图片的方法:通过FileUtils.copyURLToFile方法获取线程名字Thread.currentThread.getName()classWebDownloader{//下载方法publicvoiddownloader(Stringurl,Stringname){try{FileUtils.co......
  • 树莓派4B控制直流电机的使用
    直流电机驱动1、硬件介绍树莓派4B、杜邦线、L298N驱动模块、直流电机、外接电源2、硬件连接注意:ENA和ENB的跳冒必须安上去,如果没有拿杜邦线连通,就是用一根母母线把尖头盖住这里我只连接了一个直流电机,所以INT3和INT4的连线不用管,3、代码编写importRPi.GPIOasGPIOimport......
  • 多线程python
    如何开启进程使用的是内置的模块:multiprocessfrommultiprocessingimportProcessdeftask():withopen('a.txt','w',encoding="utf8")asf:f.write('helloworld')#开一个进程来执行task这个任务#如何开进程"""在Wind......