1. IDE Pycharm
install Pycharm (1.安装包 2.补丁jar 3.增加补丁路径 4.离线后输入激活码)
install Python python-3.6.6-amd64.exe (记得勾选添加环境变量)
PyCharm 2019.3.1 (Professional Edition)
Build #PY-193.5662.61, built on December 18, 2019
Licensed to pig6
Subscription is active until July 8, 2089
Runtime version: 11.0.5+10-b520.17 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 958M
Cores: 8
Registry:
Non-Bundled Plugins:
将补丁文件jetbrains-agent.jar放置到D:\Program Files\JetBrains\PyCharm 2019.3.1\bin
然后打开pycharm安装路径下bin文件夹中 pycharm64.exe vmoptions文件,在最后一行添加你的补丁路径,
-javaagent:D:\Program Files\JetBrains\PyCharm 2019.3.1\bin\jetbrains-agent.jar
激活码
520E5894E2-eyJsaWNlbnNlSWQiOiI1MjBFNTg5NEUyIiwibGljZW5zZWVOYW1lIjoicGlnNiIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiJVbmxpbWl0ZWQgbGljZW5zZSB0aWxsIGVuZCBvZiB0aGUgY2VudHVyeS4iLCJjaGVja0NvbmN1cnJlbnRVc2UiOmZhbHNlLCJwcm9kdWN0cyI6W3siY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUlMwIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiV1MiLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJSRCIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJEQiIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IlJNIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJBQyIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkRQTiIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IkdPIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwODktMDctMDcifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjA4OS0wNy0wNyJ9LHsiY29kZSI6IlBDIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDg5LTA3LTA3In1dLCJoYXNoIjoiODkwNzA3MC8wIiwiZ3JhY2VQZXJpb2REYXlzIjowLCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-DZ/oNHBfyho0XrrCJJvAOKg5Q1tLBgOdbCmzCKwkuM+Yryce0RoOi3OOmH6Ba/uTcCh/L37meyD0FJdJIprv59y4+n+k2kIeF/XKrKqg0dEsDUQRw0lUqqMt99ohqa+zmbJ44Yufdwwx/F1CtoRGvEQ2Mn0QjuqRoZJZ3wiT5Am22JiJW8MaNUl3wg9YPj+OPGARKKJUdUJ0NGUDQBcBAv5ds8LhbSbJSbPkbkwH/a1QMz4nEdn6lRDKI1aFIn43QhBSCFqvUq6TPJlbIJ0ZjE+PyZjHFBKCgkry0DHPXU2BbtIZPsksQnN3fx240a9K6sN7peZnLpEoMoq23FEz4g==-MIIElTCCAn2gAwIBAgIBCTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE4MTEwMTEyMjk0NloXDTIwMTEwMjEyMjk0NlowaDELMAkGA1UEBhMCQ1oxDjAMBgNVBAgMBU51c2xlMQ8wDQYDVQQHDAZQcmFndWUxGTAXBgNVBAoMEEpldEJyYWlucyBzLnIuby4xHTAbBgNVBAMMFHByb2QzeS1mcm9tLTIwMTgxMTAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ndaik1GD0nyTdqkZgURQZGW+RGxCdBITPXIwpjhhaD0SXGa4XSZBEBoiPdY6XV6pOfUJeyfi9dXsY4MmT0D+sKoST3rSw96xaf9FXPvOjn4prMTdj3Ji3CyQrGWeQU2nzYqFrp1QYNLAbaViHRKuJrYHI6GCvqCbJe0LQ8qqUiVMA9wG/PQwScpNmTF9Kp2Iej+Z5OUxF33zzm+vg/nYV31HLF7fJUAplI/1nM+ZG8K+AXWgYKChtknl3sW9PCQa3a3imPL9GVToUNxc0wcuTil8mqveWcSQCHYxsIaUajWLpFzoO2AhK4mfYBSStAqEjoXRTuj17mo8Q6M2SHOcwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQBonMu8oa3vmNAa4RQP8gPGlX3SQaA3WCRUAj6Zrlk8AesKV1YSkh5D2l+yUk6njysgzfr1bIR5xF8eup5xXc4/G7NtVYRSMvrd6rfQcHOyK5UFJLm+8utmyMIDrZOzLQuTsT8NxFpbCVCfV5wNRu4rChrCuArYVGaKbmp9ymkw1PU6+HoO5i2wU3ikTmRv8IRjrlSStyNzXpnPTwt7bja19ousk56r40SmlmC04GdDHErr0ei2UbjUua5kw71Qn9g02tL9fERI2sSRjQrvPbn9INwRWl5+k05mlKekbtbu2ev2woJFZK4WEXAd/GaAdeZZdumv8T2idDFL7cAirJwcrbfpawPeXr52oKTPnXfi0l5+g9Gnt/wfiXCrPElX6ycTR6iL3GC2VR4jTz6YatT4Ntz59/THOT7NJQhr6AyLkhhJCdkzE2cob/KouVp4ivV7Q3Fc6HX7eepHAAF/DpxwgOrg9smX6coXLgfp0b1RU2u/tUNID04rpNxTMueTtrT8WSskqvaJd3RH8r7cnRj6Y2hltkja82HlpDURDxDTRvv+krbwMr26SB/40BjpMUrDRCeKuiBahC0DCoU/4+ze1l94wVUhdkCfL0GpJrMSCDEK+XEurU18Hb7WT+ThXbkdl6VpFdHsRvqAnhR2g4b+Qzgidmuky5NUZVfEaZqV/g==
2. 新项目开始
- File -> New Project -> Pure Python -> Create ….
- File -> Settings –> Project: xxx ->Project Interpreter
- project interpreter: python 3.6 (3.6.6)
click ‘+” -> click Manage Repositories click ‘+’ 镜像源
以下选择一个即可:
初始:
https://pypi.python.org/simple
国内:
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
阿里云 http://mirrors.aliyun.com/pypi/simple/
豆瓣(douban) http://pypi.douban.com/simple/
然后 click ‘刷新按钮’ 然后 。。。。 搜索“pyserial” 然后click Install Package
坑:不知为何国内的源没法安装成功
3. 串口基本操作
pyserial库常用函数:
serial = serial.Serial('COM1', 115200) #打开COM1并设置波特率为115200,COM1只适用于Windows
serial = serial.Serial('/dev/ttyS0', 115200) #打开/dev/ttyS0并设置波特率为115200, 只适用于Linux
print(serial.portstr) #能看到第一个串口的标识
serial.write("hello") #往串口里面写数据
serial .close() #关闭serial 表示的串口
serial .open() #打开串口
data = serial .read(num) # 读num个字符
data = serial .readline() #读一行数据,以/n结束,要是没有/n就一直读,阻塞。
serial .baudrate = 9600 # 设置波特率
print serial #可查看当前串口的状态信息
serial.isOpen() #当前串口是否已经打开
serial.inWaiting() #判断当前接收的数据
serial.flushInput() # 清除输入缓冲区数据
serial.flushOutput() #中止当前输出并清除输出缓冲区数据
# utf-8
import serial
import serial.tools.list_ports
port_list = list(serial.tools.list_ports.comports())
print(port_list)
if len(port_list) == 0:
print("无可用串口!")
else:
for i in range(0, len(port_list)):
print(port_list[i])
try:
portx = "COM1" # 端口:CNU; Linux上的/dev /ttyUSB0等; windows上的COM3等
bps = 115200
# 超时设置,None:永远等待操作;
# 0:立即返回请求结果;
# 其他:等待超时时间(单位为秒)
timex = 5
ser = serial.Serial(portx, bps, timeout=timex) # 打开串口,并得到串口对象
print("串口详情参数:", ser)
result = ser.write("hello world !\r\n".encode("gbk")) # 写数据
print("写总字节数:", result)
# # 十六进制的发送
# result = ser.write(chr(0x06).encode("utf-8")) # 写数据
# print("写总字节数:", result)
#
# 十六进制的读取
# print(ser.read().hex()+"\r\n") # 读一个字节
ser.close() # 关闭串口
except Exception as e:
print("error!", e)
# BIF build in funciton 内置函数
# 逐渐割掉瑕疵,才能产生卓越体验
# print("test\r\n" * 8)
temp = input("Please input a number:\r\n")
guess = int(temp)
if guess == 8:
test_str = r'fish cccc\n'
print(test_str)
test_str = 'fish cccc\n'
print(test_str)
print("input right\n")
else:
print("input error\n")
print("game over\n")
串口 echo
import threading
import serial
import serial.tools.list_ports
DATA = "" # 读取的数据
NOEND = True # 是否读取结束
# 读数据的本体
def read_data(ser):
global DATA, NOEND
# 循环接收数据(此为死循环,可用线程实现)
while NOEND:
if ser.in_waiting:
DATA = ser.read(ser.in_waiting).decode("gbk")
print("\n>> receive: ", DATA, "\n>>", end="")
# print(">>", end="")
if (DATA == "quit" or DATA == "quit\n"):
print("oppo seri has closen.\n>>", end="")
# 列出串口清单
def list_seri():
ret = False
try:
port_list = list(serial.tools.list_ports.comports())
print(port_list)
if len(port_list) == 0:
test_str = r'无可用串口!\n'
print(test_str)
test_str = '无可用串口!\n'
print(test_str)
ret = False
else:
ret = True
for i in range(0, len(port_list)):
print(port_list[i])
except Exception as e:
print("error!", e)
return ret
# 打开串口
def open_seri(portx, bps, timeout):
ret = False
try:
# 打开串口,并得到串口对象
ser = serial.Serial(portx, bps, timeout=timeout)
# 判断是否成功打开
if (ser.is_open):
ret = True
th = threading.Thread(target=read_data, args=(ser,)) # 创建一个子线程去等待读数据
th.start()
except Exception as e:
print("error!", e)
return ser, ret
# 关闭串口
def close_seri(ser):
global NOEND
NOEND = False
ser.close()
# 写数据
def write_to_seri(ser, text):
res = ser.write(text.encode("gbk")) # 写
return res
# 读数据
def read_from_seri():
global DATA
data = DATA
DATA = "" # 清空当次读取
return data
# import serial.tools.list_ports
if __name__ == "__main__":
# 列出串口清单
ret = list_seri()
# 打开一个串口
port = input("输入串口名:")
ser, ret = open_seri(port, 115200, None) # 串口com3、bps为115200,等待时间为永久
# oprate_lst = {"quit":close_seri}
# print("操作数字所对应的行为,1:read_from_seri 2:write_to_seri 3:close_seri: ")
while True:
text = input(">>")
write_to_seri(ser, text)
if text == "quit":
close_seri(ser)
print("bye!")
break
add file write
import sys
import threading
import datetime
import serial
import serial.tools.list_ports
DATA = "" # 读取的数据
NOEND = True # 是否读取结束
# def log_init():
file_name = str(sys.argv[0])
log_file = open(file_name + '.log', 'w')
data_file = open(file_name + '.csv', 'w')
# 读数据的本体
def read_data(ser):
global DATA, NOEND
# 循环接收数据(此为死循环,可用线程实现)
while NOEND:
if ser.in_waiting:
DATA = ser.read(ser.in_waiting).decode("gbk")
print("\n>> receive: ", DATA, "\n>>", end="")
data_file.write('rd:' + DATA)
# print(">>", end="")
if (DATA == "quit" or DATA == "quit\n"):
print("oppo seri has closen.\n>>", end="")
# 列出串口清单
def list_seri():
ret = False
try:
port_list = list(serial.tools.list_ports.comports())
print(port_list)
if len(port_list) == 0:
test_str = r'无可用串口!\n'
print(test_str)
test_str = '无可用串口!\n'
print(test_str)
ret = False
else:
ret = True
for i in range(0, len(port_list)):
print(port_list[i])
except Exception as e:
print("error!", e)
return ret
# 打开串口
def open_seri(portx, bps, timeout):
ret = False
try:
# 打开串口,并得到串口对象
ser = serial.Serial(portx, bps, timeout=timeout)
# 判断是否成功打开
if (ser.is_open):
ret = True
th = threading.Thread(target=read_data, args=(ser,)) # 创建一个子线程去等待读数据
th.start()
except Exception as e:
print("error!", e)
return ser, ret
# 关闭串口
def close_seri(ser):
global NOEND
NOEND = False
ser.close()
# 写数据
def write_to_seri(ser, text):
res = ser.write(text.encode("gbk")) # 写
return res
# 读数据
def read_from_seri():
global DATA
data = DATA
DATA = "" # 清空当次读取
return data
# import serial.tools.list_ports
if __name__ == "__main__":
# 列出串口清单
ret = list_seri()
# 打开一个串口
port = input("输入串口名:")
ser, ret = open_seri(port, 115200, None) # 串口com3、bps为115200,等待时间为永久
# oprate_lst = {"quit":close_seri}
# print("操作数字所对应的行为,1:read_from_seri 2:write_to_seri 3:close_seri: ")
data_file.write('user: ')
data_file.write('date: ' + datetime.datetime.now().strftime("%Y-%m-%d") + '\n')
data_file.write('time: ' + datetime.datetime.now().strftime("%H-%M-%S") + '\n')
# eg = raw_input('sample used:')
while True:
text = input(">>")
write_to_seri(ser, text)
data_file.write('wt:' + text + '\n')
if text == "quit":
close_seri(ser)
print("bye!")
break
作者:EnzoSun
微信关注:勿忘初兴
本文出处:http://sunduoze.github.io/post/python_start/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Sun's Blog