测试1 单独开一个进程接收,不发送,共享内存拿数据
创建一个类Serial.py
''' 函数作用: 1开启其一个进程 2开启一个串口 3串口数据解析 4开辟共享内存 str 接收温度 湿度 mq2数据 (字符类型) 5主进程创建类调用这些数据 ''' # -*- coding: utf-8 -* import serial import time from multiprocessing import Process,Manager class Class_sensor: def __init__(self): pass #读取温度和湿度和MQ2烟雾火焰 def serial_wsmq2(self,arr,clock): ser = serial.Serial('/dev/ttyUSB0', 9600) if ser.isOpen == False: ser.open() # 打开串口 #ser.write(b"Raspberry pi is ready") try: while True: line = str(ser.readline()) #print('1') if line is not None: fengefu='-' a=line.strip().split(fengefu) # x.strip()#除去每行的换行符 按照:分割 wendu = "".join(a[1:2] ).strip() # 去除空格 shidu = "".join(a[3:4]).strip() # 去除空格 light = "".join(a[5:6]).strip() # 去除空格 #print('温度-'+ wendu +'-湿度-'+shidu+"-光照-"+light+"-") #print(mq9) with clock: arr[1]=str(wendu) arr[2]=str(shidu) arr[3]=str(light) except KeyboardInterrupt: ser.close() def class_int(self): #1初始化共享内存 self.manager=Manager() self.str_msg=self.manager.dict()#存str类型数据 #用几个必须预先初始化 否则后面无法访问 self.str_msg[1]='0'#温度 self.str_msg[2]='0'#湿度 self.str_msg[3]='0'#光照 #2线程锁 保护多个线成对数据控制 self.lock=self.manager.Lock() p = Process(target=self.serial_wsmq2, args=(self.str_msg,self.lock)) p.deamon=True #伴随主进程关闭而关闭 p.start() ''' #共享内存测试 t = Class_sensor()#类的初始化 t.class_int()#串口初始化 while 1: #print(t.str_msg[1]) #调用数据 #print(t.str_msg[2]) #调用数据 #print(t.str_msg[3]) #调用数据 pass '''
创建一个调用文件
#!/usr/bin/env python2 # -*- coding: utf-8 -*- from Serial import Class_sensor t = Class_sensor()#类的初始化 t.class_int()#串口初始化 wendu=t.str_msg[1] #温度0-100度 shidu=t.str_msg[2] #湿度 用来测下雨 0-100% light=t.str_msg[3] #光照 0-255
例程2 单独一个进程接收,同一个串口发送,共享内存拿收到的数据
创建一个类 Serial.py
创建一个调用文件