樹莓派python3.7 通過串口下發數據 環境PyCharm Community Edition 2019.3.3 x64 安裝後pip3 install幾個模塊
import serial
import time
import queue
import json
import struct
from datetime import datetime
setmpctQue = queue.Queue()
command_power = {
'switch_on': [ # 多路電源終端1-8路開
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'), # 第一路開
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'), # 第八路開
],
'switch_off': [ # 多路電源終端1-8路關
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'), # 第一路關
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'),
('XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX'), # 第八路關
],
}
def sensorData(): # start those thread and and guard them
creatCCD = threading.Thread(target=CCthreadT) # 開啓串口收集發送線程
creatMPCT = threading.Thread(target=SetMPCTThread) # 設置多路電源終端線程
creatCCD.start()
creatMPCT.start()
def CCthreadT():
threadCC = threading.Thread(target=colectTred)
threadCC.start()
while True:
if not threadCC.is_alive(): # 如果串口採集線程卡死 隔60s再次開啓
threadCC = threading.Thread(target=colectTred)
threadCC.start()
time.sleep(60)
def SetMPCTThread(): #設置多路電源終端線程
threadPut = threading.Thread(target=setmpct)
threadPut.start()
while True:
if not threadPut.is_alive(): # 如果設置多路電源終端線程卡死 隔60s再次開啓
threadPut = threading.Thread(target=setmpct)
threadPut.start()
time.sleep(60)
def colectTred(): # 串口收集數據 選要改動加接口 by xxxxxxx
# s0=serial.Serial("/dev/ttyAMA0",115200) # 樹莓派端
s0 = serial.Serial("COM11", 115200) # PC端
temp = 0
while True:
while s0.inWaiting():
try:
temp = s0.read()
except Exception as e:
pass
while not setmpctQue.empty(): # 當收到數據時
data = setmpctQue.get()
# Hex_str = bytes.fromhex(data) # 文本轉換Hex
s0.write(data)
time.sleep(0.01)
##################################### 配置多路電源開關 ############################
def setmpct(): # 根據時間設置多路電源終端開關狀態
print('zcollect 334 creat setmpct')
on = '14:35:00' # 開燈時間
off = '14:36:00' # 關燈時間
on_send_num = 0
off_send_num = 0
while True:
now_time = datetime.now()
nowtime2str = now_time.strftime("%H:%M:%S")
if nowtime2str >= on and nowtime2str <= off: # 開燈時間
if on_send_num < 8:
# if on_send_num != 1 and on_send_num != 2 and on_send_num != 3: # 不對某路進行控制
hex = bytes.fromhex(command_power['switch_on'][on_send_num])
setmpctQue.put(hex) # 發送
on_send_num += 1
off_send_num = 0
time.sleep(2)
elif off_send_num < 8: # 關燈時間
hex = bytes.fromhex(command_power['switch_off'][off_send_num])
setmpctQue.put(hex) # 發送
off_send_num += 1
on_send_num = 0
time.sleep(2)
time.sleep(2)
if __name__ == '__main__':
sensorData()
pass