我第一次发帖,但我真的被困了,需要帮助。
我目前正在开发一个家庭自动化系统,我想用路由器控制远程Arduino设备。
这一部分全部完成,我可以使用可以打开或关闭的浏览器连接到链接。我甚至用它做了一个应用程序。
目前我正在处理语音识别代码,它接受代码然后转换为语音,语音识别部分与SpeechRecognition库一起工作,一旦python理解代码,它必须给出命令和使用网址。
如果我尝试访问http://www.google.com这样的网址,我认为它有效,但我的网址是“http://192.168.0.227/LED=ON14”,当使用它时,程序挂起然后超时,我已经尝试了几种方法控制它,但它们似乎都不起作用。
import urllib2
sock = urllib2.urlopen("http://192.168.0.227/LED=ON14")
htmlSource = sock.read()
sock.close()
print htmlSource
这是我最近的试用
> File "<stdin>", line 1, in <module> File
> "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
> return opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 431, in open
> response = self._open(req, data) File "/usr/lib/python2.7/urllib2.py", line 449, in _open
> '_open', req) File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
> result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 1227, in http_open
> return self.do_open(httplib.HTTPConnection, req) File "/usr/lib/python2.7/urllib2.py", line 1194, in do_open
> h.request(req.get_method(), req.get_selector(), req.data, headers) File "/usr/lib/python2.7/httplib.py", line 1039, in request
> self._send_request(method, url, body, headers) File "/usr/lib/python2.7/httplib.py", line 1073, in _send_request
> self.endheaders(body) File "/usr/lib/python2.7/httplib.py", line 1035, in endheaders
> self._send_output(message_body) File "/usr/lib/python2.7/httplib.py", line 879, in _send_output
> self.send(msg) File "/usr/lib/python2.7/httplib.py", line 841, in send
> self.connect() File "/usr/lib/python2.7/httplib.py", line 822, in connect
> self.timeout, self.source_address) File "/usr/lib/python2.7/socket.py", line 562, in create_connection
> sock.connect(sa) File "/usr/lib/python2.7/socket.py", line 224, in meth
> return getattr(self._sock,name)(*args)
以该回复结束。
我的Arduino代码适用于ESP8266:
#include <ESP8266WiFi.h>
const char* ssid = "--";
const char* password = "--";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(14, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(15, OUTPUT);
digitalWrite(14, LOW);digitalWrite(12, LOW);digitalWrite(13, LOW);digitalWrite(15, LOW); digitalWrite(2,LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
IPAddress ip(192, 168, 0, 106);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 0, 1);
// Static IP Setup Info Here...
WiFi.config(ip,dns, gateway, subnet); //If you need Internet Access You should Add DNS also...
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
int value = LOW;
// Return the response
/*client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<br><br>");
client.println("<a href=\"/LED=ON14\"\"><button>Turn On 4 </button></a>");
client.println("<a href=\"/LED=OFF14\"\"><button>Turn Off 4</button></a><br />");
client.println("<a href=\"/LED=ON12\"\"><button>Turn On 2 </button></a>");
client.println("<a href=\"/LED=OFF12\"\"><button>Turn Off 2</button></a><br />");
client.println("<a href=\"/LED=ON13\"\"><button>Turn On 3 </button></a>");
client.println("<a href=\"/LED=OFF13\"\"><button>Turn Off 3</button></a><br />");
client.println("<a href=\"/LED=ON15\"\"><button>Turn On 1 </button></a>");
client.println("<a href=\"/LED=OFF15\"\"><button>Turn Off 1</button></a><br />");
client.println("</html>"); */
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("Led pin is now: ");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
// Match the request
if (request.indexOf("/ON4") != -1) {
digitalWrite(14, LOW);
value = HIGH;
}
if (request.indexOf("/OFF4") != -1) {
digitalWrite(14, HIGH);
value = LOW;
}
if (request.indexOf("/ON3") != -1) {
digitalWrite(13, LOW);
value = HIGH;
}
if (request.indexOf("/OFF3") != -1) {
digitalWrite(13, HIGH);
value = LOW;
}
if (request.indexOf("/ON2") != -1) {
digitalWrite(12, LOW);
value = HIGH;
}
if (request.indexOf("OFF2") != -1) {
digitalWrite(12, HIGH);
value = LOW;
}
if (request.indexOf("/ON1") != -1) {
digitalWrite(15, LOW);
value = HIGH;
}
if (request.indexOf("/OFF1") != -1) {
digitalWrite(15, HIGH);
value = LOW;
}
}
答案 0 :(得分:0)
我认为'urllib2'可能正在寻找结束html括号</html>
尝试在client.println("</html>");
和client.print("Led pin is now: ");
之间加delay(1);
此外,如果您希望将LED状态打印到客户端,则应将LED控制语句移到您发送给客户端的代码上方并传入value
。
所以你的代码看起来像这样。
#include <ESP8266WiFi.h>
const char* ssid = "--";
const char* password = "--";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(14, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(15, OUTPUT);
digitalWrite(14, LOW);digitalWrite(12, LOW);digitalWrite(13, LOW);digitalWrite(15, LOW); digitalWrite(2,LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
IPAddress ip(192, 168, 0, 106);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 0, 1);
// Static IP Setup Info Here...
WiFi.config(ip,dns, gateway, subnet); //If you need Internet Access You should Add DNS also...
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
int value = LOW;
if (request.indexOf("/ON4") != -1) {
digitalWrite(14, LOW);
value = HIGH;
}
if (request.indexOf("/OFF4") != -1) {
digitalWrite(14, HIGH);
value = LOW;
}
if (request.indexOf("/ON3") != -1) {
digitalWrite(13, LOW);
value = HIGH;
}
if (request.indexOf("/OFF3") != -1) {
digitalWrite(13, HIGH);
value = LOW;
}
if (request.indexOf("/ON2") != -1) {
digitalWrite(12, LOW);
value = HIGH;
}
if (request.indexOf("/OFF2") != -1) {
digitalWrite(12, HIGH);
value = LOW;
}
if (request.indexOf("/ON1") != -1) {
digitalWrite(15, LOW);
value = HIGH;
}
if (request.indexOf("/OFF1") != -1) {
digitalWrite(15, HIGH);
value = LOW;
}
// Return the response
/*client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<br><br>");
client.println("<a href=\"/LED=ON14\"\"><button>Turn On 4 </button></a>");
client.println("<a href=\"/LED=OFF14\"\"><button>Turn Off 4</button></a><br />");
client.println("<a href=\"/LED=ON12\"\"><button>Turn On 2 </button></a>");
client.println("<a href=\"/LED=OFF12\"\"><button>Turn Off 2</button></a><br />");
client.println("<a href=\"/LED=ON13\"\"><button>Turn On 3 </button></a>");
client.println("<a href=\"/LED=OFF13\"\"><button>Turn Off 3</button></a><br />");
client.println("<a href=\"/LED=ON15\"\"><button>Turn On 1 </button></a>");
client.println("<a href=\"/LED=OFF15\"\"><button>Turn Off 1</button></a><br />");
client.println("</html>"); */
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("Led pin is now: ");
client.println(value); // Parse in the value
client.println("</html>"); // Add this
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
不幸的是,我现在没有能力测试这个,所以我跳了它的工作原理。其他人发表评论。