Edison Lámpara de madera activada por voz. Precio de emisión $ 5

imagen

Eso es lo que cuesta el relé WiFi SONOFF (de ITEAD), que es el corazón de este dispositivo.

“No tuve fallas. Acabo de encontrar 10 mil formas que no funcionan "- Thomas Alva Edison.

Esto es increíble, aún no en un pasado tan lejano, la gente en las escuelas escribía con plumas. Hoy todos tienen un ladrillo mágico con imágenes en su bolsillo, lo que le permite acceder a información de todo el mundo. Envíe mensajes instantáneos a cualquier persona en el planeta. Tenemos control de voz, reconocimiento facial y, como dice la gente, una amenaza para toda la humanidad por parte de la inteligencia artificial. Más recientemente, estas tecnologías han parecido una ficción inimaginable. Sin embargo, hoy te mostraré cómo, teniendo habilidades básicas de programación, absolutamente todos pueden usar el control por voz. ¡Entonces comencemos!

ATENCION !!! Trabajar con alto voltaje. ¡Ten cuidado con lo que haces! ¡El autor del artículo no es responsable de las acciones que realice ni de ningún daño material o físico que pueda surgir como resultado del uso de la información de este artículo! Si no está seguro de algo, pídale ayuda a una persona con más experiencia.

El esquema principal del dispositivo.

imagen

Dado que el teléfono solo se puede conectar a un punto de acceso WiFi a la vez, trabajaremos a través de un enrutador. En general, esto es conveniente cuando todos sus dispositivos inteligentes están en la misma red, y puede administrarlos fácilmente sin tener que volver a conectarse constantemente a cada uno de ellos. La desventaja de esto es que todos sus dispositivos dependen de la salud de un enrutador.

1 - necesitamos reprogramar el relé WiFi de Sonoff


Para hacer esto, debe desarmar el relé y soldar los contactos para que parpadee. Por defecto, está configurado para funcionar a través de un servidor chino. Personalmente, no me queda muy claro por qué la luz del inodoro ya debe estar encendida a través de un servidor del Reino Medio.

imagen


imagen


Ahora podemos conectar el módulo cp2102 de Silicon Labs para el flasheo de Sonoff. Todavía lo uso para trabajar con Arduino Mini.

imagen

imagen

ADVERTENCIA !!! Al reprogramar, ¡no conecte el relé WiFi a la red de 220/110 voltios!

Reprogramar el relé es muy simple. Este es un módulo esp8266 normal. Tomé un boceto estándar del servidor de punto de acceso del IDE de Arduino y lo cambié un poco.

#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiClient.h> // name and password from WiFi network const char* ssid = "Your access point (router) name"; const char* password = "router password"; IPAddress ip(192,168,1,112); // enter static ip IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); //       80 WiFiServer server(80); void setup() { Serial.begin(115200); delay(100); //preparing GPIO pinMode(12, OUTPUT); digitalWrite(12, 1); pinMode(13, OUTPUT); digitalWrite(13, 1); // connecting to WiFi Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet); // waiting for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // run server server.begin(); Serial.println("Server started"); // show ip Serial.println(WiFi.localIP()); } void loop() { // connection check WiFiClient client = server.available(); if (!client) { return; } // Waiting for data Serial.println("new client"); while (!client.available()) { delay(1); } // Reading the first line of the query String req = client.readStringUntil('\r'); Serial.println(req); client.flush(); // works with GPIO if (req.indexOf("/12/0") != -1) digitalWrite(12, 0); else if (req.indexOf("/12/1") != -1){ digitalWrite(12, 1); Serial.println("TEST OK"); String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nTest OK. Uptime: "; // UpTime int Sec = (millis() / 1000UL) % 60; int Min = ((millis() / 1000UL) / 60UL) % 60; int Hours = ((millis() / 1000UL) / 3600UL) % 24; int Day = ((millis() / 1000UL) / 3600UL / 24UL); s += Day; s += "d "; s += Hours; s += ":"; s += Min; s += ":"; s += Sec; s += "</html>\n"; client.print(s); client.stop(); return; } else // If an invalid query write error { Serial.println("invalid request"); String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nInvalid request"; s += "</html>\n"; client.print(s); client.stop(); return; } client.flush(); // Response formation String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO set OK"; s += "</html>\n"; // Send the response to the client client.print(s); delay(1); Serial.println("Client disonnected"); } 

Deberá especificar el nombre de su punto de acceso (enrutador / enrutador), contraseña y dirección IP estática para la bombilla. El control del relé se encuentra en el pin 12. Asegúrese de establecer el tamaño del flash en 1 MB en el IDE.

Mantenga presionado el botón en el tablero Sonoff. Inserte el convertidor USB cp2102 en la computadora (mientras mantiene presionado el botón). Después de 2-3 segundos, suelte el botón. Ahora el relé está en modo de programación. Descargue el archivo de boceto del IDE de Arduino. Haga clic en Confirmar / Compilar. Después de reprogramarlo, reinicie el módulo.

2: ahora creemos una aplicación móvil para controlar este relé a través de Wi-Fi. (Android)


Solo daré los fragmentos de código principal. Luego puede usarlos para la implementación en sus aplicaciones. Google proporciona una interfaz muy simple y conveniente para el reconocimiento de voz. Aquí está el código que le permite convertir su voz a texto y guardarlo en una línea regular.

 // Main code to start speech recognition. // You can put it's execution, on some button in your app. Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); speechIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak please"); startActivityForResult(speechIntent, RESULT_SPEECH_TO_TEXT); // Then on onAcivityResult we will get result @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RESULT_SPEECH_TO_TEXT && resultCode == RESULT_OK) { ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); if (!matches.isEmpty()) { String result_recognition_string = matches.get(0); // convert to lower case, since google speech recognition // returns "different" results. For example: youtube defines as YouTube result_recognition_string = result_recognition_string.toLowerCase(Locale.getDefault()); if (result_recognition_string.contains("lamp on") ) { // lamp on new LightOn().execute(); } } } } 

Luego puede compararlo con los comandos que desea implementar.

Este es el código para trabajar con Wi-Fi. Enviando un mensaje al servidor.

 public class LightOn extends AsyncTask<Void,Void,Void> { private static final String LOG_TAG = "MyLog"; @Override protected Void doInBackground(Void... params) { URL url; HttpURLConnection urlConnection = null; try { url = new URL("http://192.168.1.112/12/1"); // "0" to turn off urlConnection = (HttpURLConnection) url .openConnection(); InputStream in = urlConnection.getInputStream(); InputStreamReader isw = new InputStreamReader(in); int data = isw.read(); while (data != -1) { char current = (char) data; data = isw.read(); System.out.print(current); Log.e(LOG_TAG, "Reply from server - " + current); } } catch (Exception e) { e.printStackTrace(); } finally { if (urlConnection != null) { urlConnection.disconnect(); } } return null; } } // run it new LightOn().execute(); 

Es muy simple "1" enciende la bombilla, "0" apaga la bombilla. Puede agregar las comprobaciones que desee, recibir una respuesta del servidor, etc. tp Creé dos programas para mí. El primero es el widget de control de voz, que se encuentra en el escritorio y está siempre a mano. La segunda es una aplicación simple para encender / apagar la bombilla con solo tocar un botón.

imagen

Supongo que ya estás cansado de leer todo tipo de textos, así que te sugiero que veas un video sobre cómo fue.


Como dijo Albert Einstein: "Tus posibilidades están limitadas solo por tu imaginación".

¡Te deseo un buen día y solo dispositivos inteligentes!

Source: https://habr.com/ru/post/es432990/


All Articles