我有一个arduino Uno通过USB连接到我的笔记本电脑。我在Windows 7上运行WAMP网络服务器。我安装了python 2.7和py串口。我写了一个HTML,单击按钮时会调用led1.py(python脚本)。 python脚本将与arduino通信以放置一个led,然后用户将按另一个按钮推出Led。 按下按钮时调用python脚本,led正在启动,但HTML页面出错:
内部服务器错误;
服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员admin @ localhost并告知他们错误发生的时间,以及可能导致错误的任何操作。服务器错误日志中可能提供了有关此错误的更多信息。
我哪里错了? HTML代码如下:
<html>
<head>
<title>Sample Web Form</title>
</head>
<body>
<h1>Fill Out This Form</h1>
<form action="/cgi-bin/led.py" method="POST">
<input type="submit" name='action' value="LEFT">
<input type="submit" style="background-color:yellow" name='action' value="LEFT"/><br><br><br>
<input type="submit" style="background-color:yellow" name='action' value="BACK"/>
</form>
</body>
</html>
Python代码如下:
#!python
import serial
import time
keyword =form.getvalue('action')
arduino = serial.Serial('COM4', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1)
arduino.open()
arduino.isOpen()
time.sleep(5) # waiting the initialization...
print("initialising")
while True:
if keyword == 'LEFT':
arduino.write("H\n") # turns LED ON
break
elif keyword == 'BACK':
arduino.write('L\n') # turns LED OFF
break
elif break
arduino.close() #say goodbye to Arduino
和Arduino代码非常简单:
int redpin =13;
int incomingbyte;
void setup()
{
Serial.begin(115200);
pinMode(redpin,OUTPUT);
pinMode(greenpin,OUTPUT);
pinMode(fanpin,OUTPUT);
}
void loop()
{
if(Serial.available()>0)
{
incomingbyte=Serial.read();
}
if(incomingbyte == 'H')
{
digitalWrite(redpin,HIGH);
}
if(incomingbyte == 'L')
{
digitalWrite(redpin,LOW);
}
}
你能告诉我我哪里错了吗?我是python的新手。 另外,我想使用python在同一个HTML页面中显示来自arduino传感器的数据。怎么可能呢?我可以为此完成HTML和Python的完整小程序。
答案 0 :(得分:1)
如果python脚本的内容是cgi-bin/led.py
的内容,则必须如下所示:
7 print "Content-type: text/html"
8 print
9
10 print """
11 <html>
12
13 <head><title>Sample CGI Script</title></head>
14
15 <body>
16
17 <h3> Sample CGI Script </h3>
18 """
来自http://wiki.python.org/moin/CgiScripts
你缺少python脚本中的标题。