0

我第一次发帖,但我真的卡住了,需要帮助。

我目前正在开发一个家庭自动化系统,我想使用路由器控制远程 Arduino 设备。

这部分已经完成,我可以使用可以打开或关闭的浏览器连接到链接。我什至用它做了一个应用程序。

目前我正在研究一个语音识别代码,它需要一个代码然后翻译成语音,语音识别部分与 SpeechRecognition 库配合得很好,一旦 python 理解了代码,它必须给出一个命令并使用 url。

如果我尝试访问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)

以该响应结束。

我用于 ESP8266 的 Arduino 代码是:

#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;
  }



}
4

1 回答 1

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("");

}

不幸的是,我现在没有能力对此进行测试,所以我希望它可以工作。否则发表评论。

于 2017-03-18T15:48:11.980 回答