Lampe en bois à commande vocale Edison. Prix ​​d'émission 5 $

image

C'est combien coûte le relais WiFi SONOFF (d'ITEAD), qui est le cœur de cet appareil.

«Je n'ai eu aucun échec. Je viens de trouver 10 mille façons qui ne fonctionnent pas »- Thomas Alva Edison.

C'est incroyable, pas encore dans un passé aussi lointain, les gens des écoles ont écrit avec des plumes. Aujourd'hui, tout le monde a une brique magique avec des images dans sa poche, qui vous permet d'accéder à des informations du monde entier. Envoyez des messages instantanés à n'importe qui sur la planète. Nous avons le contrôle vocal, la reconnaissance faciale et, comme on dit, une menace pour toute l'humanité de la part de l'intelligence artificielle. Plus récemment, ces technologies sont apparues comme une fiction inimaginable. Cependant, aujourd'hui, je vais vous montrer comment, ayant des compétences de base en programmation, tout le monde peut utiliser la commande vocale. Commençons donc!

ATTENTION !!! Fonctionne sous haute tension. Faites attention à ce que vous faites! L'auteur de l'article n'est pas responsable des actions que vous entreprenez et de tout dommage matériel ou physique pouvant résulter de l'utilisation des informations de cet article! Si vous n'êtes pas sûr de quelque chose, demandez à une personne plus expérimentée de vous aider.

Le schéma principal de l'appareil.

image

Étant donné que le téléphone ne peut être connecté qu'à un seul point d'accès WiFi à la fois, nous travaillerons via un routeur. En général, cela est pratique lorsque tous vos appareils intelligents sont sur le même réseau et que vous pouvez facilement les gérer sans avoir à vous reconnecter constamment à chacun d'eux. L'inconvénient est que tous vos appareils dépendent de la santé d'un routeur.

1 - Nous devons reprogrammer le relais WiFi Sonoff


Pour ce faire, vous devez démonter le relais et souder les contacts pour qu'il clignote. Par défaut, il est configuré pour fonctionner via un serveur chinois. Personnellement, je ne comprends pas très bien pourquoi la lumière dans les toilettes doit déjà être allumée via un serveur de l'Empire du Milieu.

image


image


Nous pouvons maintenant connecter le module cp2102 de Silicon Labs pour le clignotement Sonoff. Je l'utilise toujours pour travailler avec Arduino mini.

image

image

ATTENTION !!! Lors de la reprogrammation, ne connectez pas le relais WiFi au réseau 220/110 volts!

La reprogrammation du relais est très simple. Il s'agit d'un module esp8266 standard. J'ai pris un croquis standard du serveur de point d'accès de l'IDE Arduino et l'ai changé un peu.

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

Vous devrez spécifier le nom de votre point d'accès (routeur / routeur), votre mot de passe et votre adresse IP statique pour l'ampoule. La commande de relais est située sur la broche 12. Assurez-vous de régler la taille du flash sur 1 Mo dans l'IDE.

Appuyez et maintenez le bouton sur la carte Sonoff. Insérez le convertisseur USB cp2102 dans l'ordinateur (tout en maintenant le bouton enfoncé). Après 2-3 secondes, relâchez le bouton. Le relais est maintenant en mode programmation. Téléchargez le fichier de croquis depuis l'IDE Arduino. Cliquez sur Confirmer / Compiler. Après l'avoir reprogrammé, redémarrez le module.

2 - Créons maintenant une application mobile pour contrôler ce relais via Wi-Fi. (Android)


Je ne donnerai que les extraits de code principaux. Ensuite, vous pouvez les utiliser pour la mise en œuvre dans vos applications. Google fournit une interface très simple et pratique pour la reconnaissance vocale. Voici le code qui vous permet de convertir votre voix en texte et de l'enregistrer sur une ligne régulière.

 // 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(); } } } } 

Ensuite, vous pouvez le comparer avec les commandes que vous souhaitez implémenter.

C'est le code pour travailler avec le Wi-Fi. Envoi d'un message au serveur.

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

C'est très simple. «1» allumez l'ampoule, «0» éteignez l'ampoule. Vous pouvez ajouter les chèques que vous souhaitez, recevoir une réponse du serveur, etc. tp J'ai créé deux programmes pour moi. Le premier est le widget de commande vocale, qui se trouve sur le bureau et est toujours à portée de main. La seconde est une application simple pour allumer / éteindre l'ampoule au toucher d'un bouton.

image

Je suppose que vous êtes déjà fatigué de lire toutes sortes de textes, donc je vous suggère de voir une vidéo sur comment c'était.


Comme l'a dit Albert Einstein: "Vos possibilités ne sont limitées que par votre imagination."

Je vous souhaite une bonne journée et uniquement des appareils intelligents!

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


All Articles