赞
踩
测试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
创建一个调用文件
标签:ser,python,self,通信,print,str,串口,msg
来源: https://www.cnblogs.com/kekeoutlook/p/13929618.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。