在Python中写入串行设备时出错

时间:2016-01-07 11:05:54

标签: python django python-3.x arduino

这是我的代码

import os
import sys
import serial
import datetime
string = datetime.datetime.now()
print(string)
ser = serial.Serial('COM4', 9600)
print(ser.name)
ser.write(string)
ser.close

我收到此错误

Traceback (most recent call last):
  File "C:\Users\Михаил\Desktop\SW\Python 3.5\COM.py", line 9, in <module>
    ser.write(string)
  File "C:\Users\Михаил\AppData\Local\Programs\Python\Python35\lib\site-packages\serial\serialwin32.py", line 301, in write
    data = to_bytes(data)
  File "C:\Users\Михаил\AppData\Local\Programs\Python\Python35\lib\site-packages\serial\serialutil.py", line 61, in to_bytes
    for item in seq:
TypeError: 'datetime.datetime' object is not iterable

2 个答案:

答案 0 :(得分:1)

您应该将bytes对象传递给ser.write(),但您使用的是datetime.datetime.now() datetime对象。

您可以使用str()将datetime对象强制转换为字符串。由于您使用的是Python 3,因此在将字符串写入串行设备之前,还需要将字符串转换为字节。

date_string = str(datetime.datetime.now())
dates_bytes = date_string.encode('ascii')
ser.write(date_bytes)

或者,如果您需要自定义格式,则可以使用strftime

date_string = datetime.datetime.now().strftime("%d/%m/%y")
date_bytes = date_string.encode('ascii')
ser.write(date_bytes)

答案 1 :(得分:0)

now()返回DateTime对象而不是字符串。即使您可以打印它,也不能将其写入串行直接。在编写时使用str(string)显式转换它。