Python CGI - 将长字符串发送到串行端口

时间:2013-05-24 12:05:38

标签: python serial-port cgi arduino

我在Raspberry Pi上有一个Python CGI脚本,它将文本框的内容转换为1和0。我希望有一个1000 ish max。

的字符串

二进制字符串被略微格式化并通过串口发送到arduino ... arduino使用字符串中的数据来处理LED的内容。如果我将二进制字符串剪切并粘贴到arduino串行监视器中,一切正常,当我尝试通过以下python代码自动进行此操作时,一切都开始工作但很快停止进入循环。

我可以通过在ser.write命令之后改变time.sleep(3)来控制工作需要多长时间.....但我不想设置一个不必要的长延迟我想确保代码在继续打印HTML内容之前等待字符串发送(并停止arduino上的灯光显示)。

说完这个,整个字符串必须通过arduino,因为arduino在字符串末尾等待'\ n'来处理它。

猜猜这一定是学校男生的错误....提示和指示非常感谢。这是我正在使用的CGI代码。

#!/usr/bin/python
# Import modules for CGI handling and serial
import cgi, cgitb, serial, time, binascii
# Create instance of FieldStorage 
form = cgi.FieldStorage() 
#define serial port
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
#Wait while serial connects
time.sleep(3)
# Get data from fields
prayer = form.getvalue('prayer')
# Convert to binary
binprayer = bin(int(binascii.hexlify(prayer), 16))
# remove the '0b' from the front end of the string
bintrimint = binprayer[2:]
# add a \n to the end
bintrim = bintrimint + '\n'

ser.write(bintrim)
time.sleep(3)

print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Binary Prayer - a test script</title>"
print "</head>"
print "<body>"
print "<h2>You entered the following text: %s</h2>" % prayer
print "<h2>%s</h2>" % binprayer
print "<h2>%s</h2>" % bintrim
print "</body>"
print "</html>"

1 个答案:

答案 0 :(得分:0)

我查看了http://pyserial.sourceforge.net/pyserial_api.html

 write(data)
    Parameters: data – Data to send.
    Returns: Number of bytes written.

我认为你应该确保写下所有内容。