Edison Lâmpada de madeira ativada por voz. Preço de emissão $ 5

imagem

É o custo do relé SONOFF WiFi (da ITEAD), que é o coração deste dispositivo.

“Não tive falhas. Acabei de encontrar 10 mil maneiras que não funcionam ”- Thomas Alva Edison.

Isso é inacreditável, ainda não em um passado tão distante, as pessoas nas escolas escreviam com penas. Hoje todo mundo tem um tijolo mágico com fotos no bolso, o que permite acessar informações de todo o mundo. Envie mensagens instantâneas para qualquer pessoa no planeta. Temos controle de voz, reconhecimento facial e, como as pessoas dizem, uma ameaça para toda a humanidade por parte da inteligência artificial. Mais recentemente, essas tecnologias pareciam ficção inimaginável. No entanto, hoje vou mostrar como, tendo habilidades básicas de programação, todo mundo pode usar o controle de voz. Então, vamos começar!

ATENÇÃO !!! Trabalhe com alta tensão. Cuidado com o que faz! O autor do artigo não é responsável pelas ações que você executa e por qualquer dano material ou físico que possa surgir como resultado do uso das informações deste artigo! Se você não tiver certeza de algo, peça a uma pessoa mais experiente para ajudá-lo.

O esquema principal do dispositivo.

imagem

Como o telefone pode ser conectado apenas a um ponto de acesso WiFi por vez, trabalharemos através de um roteador. Em geral, isso é conveniente quando todos os seus dispositivos inteligentes estão na mesma rede e você pode gerenciá-los facilmente sem precisar se reconectar constantemente a cada um deles. A desvantagem disso é que todos os seus dispositivos dependem da integridade de um roteador.

1 - precisamos reprogramar o relé WiFi Sonoff


Para fazer isso, é necessário desmontar o relé e soldar os contatos nele para piscar. Por padrão, ele está configurado para funcionar através de um servidor chinês. Pessoalmente, não está muito claro para mim por que a luz no vaso sanitário já precisa estar acesa através de um servidor do Reino Médio.

imagem


imagem


Agora podemos conectar o módulo cp2102 do Silicon Labs para o Sonoff piscando. Ainda o uso para trabalhar com o arduino mini.

imagem

imagem

ATENÇÃO !!! Ao reprogramar, não conecte o relé WiFi à rede de 220/110 volts!

Reprogramar o relé é muito simples. Este é um módulo esp8266 regular. Peguei um esboço padrão do servidor de ponto de acesso do Arduino IDE e o alterei um pouco.

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

Você precisará especificar o nome do seu ponto de acesso (roteador / roteador), a senha e o endereço IP estático da lâmpada. O controle do relé está localizado no pino 12. Certifique-se de definir o tamanho do flash como 1 MB no IDE.

Pressione e segure o botão no quadro Sonoff. Insira o conversor USB cp2102 no computador (enquanto mantém pressionado o botão). Após 2-3 segundos, solte o botão. Agora o relé está no modo de programação. Faça o download do arquivo de esboço no IDE do Arduino. Clique em Confirmar / Compilar. Após a reprogramação, reinicie o módulo.

2 - agora vamos criar um aplicativo móvel para controlar esse relé via Wi-Fi. (Android)


Vou dar apenas os principais trechos de código. Em seguida, você pode usá-los para implementação em seus aplicativos. O Google fornece uma interface muito simples e conveniente para reconhecimento de voz. Aqui está o código que permite converter sua voz em texto e salvá-la em uma linha 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(); } } } } 

Em seguida, você pode compará-lo com os comandos que deseja implementar.

Este é o código para trabalhar com Wi-Fi. Enviando uma mensagem para o 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(); 

É muito simples "1" acende a lâmpada, "0" apaga a lâmpada. Você pode adicionar as verificações que desejar, receber uma resposta do servidor etc. tp Eu criei dois programas para mim. O primeiro é o widget de controle de voz, localizado na área de trabalho e sempre disponível. A segunda é uma aplicação simples para ligar / desligar a lâmpada com o toque de um botão.

imagem

Suponho que você já esteja cansado de ler todos os tipos de textos, então sugiro que você veja um vídeo sobre como foi.


Como Albert Einstein disse: "Suas possibilidades são limitadas apenas pela sua imaginação".

Desejo-lhe um bom dia e apenas dispositivos inteligentes!

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


All Articles