【问题标题】:Python CGI - Sending long strings to serial portPython CGI - 将长字符串发送到串口
【发布时间】:2013-05-24 12:05:37
【问题描述】:

我在 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>"

【问题讨论】:

  • 尝试打印 binprayer 以查看您在 ser.write() 之前发送的内容。实际通过了多少字节?还写需要空终止的字符串吗?不要添加“\n”,而是尝试使用“\0”,然后在第二次写入调用中发送“\n”。

标签: python serial-port cgi arduino


【解决方案1】:

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

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

我认为你应该确保你写的一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多