当前位置:   article > 正文

python怎么串口通信_python串口通信

串口需要单独进程么

测试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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/791233
推荐阅读
相关标签
  

闽ICP备14008679号