Tutos
Fabrication d’une prise wifi
par Bertrand, adhérent au Fablab Descartes
Machines et outils
Logiciels
Description
Fabrication d'une prise wifi : le but est d’allumer ou d’éteindre une prise de courant à partir de n’importe quel appareil doté d’un accès internet, tout en permettant son contrôle via un poussoir.
Matériel nécessaire
- Une vieille prise type programmateur ou prise 433Mhtz
- Un relais et son circuit de mise en œuvre
- Une ESP8266 (équivalent à Arduino + wifi) dans mon cas une Wemos D1mini
- Un petit transformateur pour alimenter la Wemos et le relais
- Un interrupteur pour contrôle local
Etape 1 – préparation de la prise
- Dévisser les vis spéciales (remplacées ensuite par des vis cruciformes normales)
- Dessouder le cadran, les fils de contact (noirs) seront conservés et utilisés sur pour le contact relais
- Souder 2 fils d’alimentation qui apporterons au transformateur le courant
- Positionner les premiers composants en essayant d’isoler le plus possible le 220V
- Pour la partie basse tension préparer à partir du relais
- 2 fils 5V (rouges) vers alimentation et le Wemos (5V)
- 3 fils GND (bleus) vers alimentation, le poussoir et le Wemos (GND)
- 1 fil de commande du relais (gris) vers le Wemos (D2)
- Ajouter sur le poussoir un fil vers le Wemos (D3)
Etape 2 – programmation
Le programme type arduino utilise différents scripts trouvés sur le net et en particulier le très bon tuto : https://projetsdiy.fr/programmer-esp8266-ide-arduino-librairies-gpio-web-serveur-client/
J’y ai ajouté la prise en compte du bouton poussoir et quelques commentaires additionnels. Notre Wemos fonctionne en serveur et va présenter une mini page Web à l’adresse AdresseIP:80 (le port 80 est utilisé par défaut donc non obligatoire à la saisie) ex : 198.168.1.12 :80
Configuration de l’IDE Arduino :
Lancez l’IDE Arduino et cliquer sur fichier puis préférences. Dans la ligne ‘URL de gestionnaire de carte supplémentaires’ entrer : http://arduino.esp8266.com/staging/package_esp8266com_index.json
Puis valider en cliquant OK.
Sélection de la carte :
Cliquer dans outils puis type de carte et sélectionner en première ligne ‘gestionnaire de carte’. Une fenêtre s’ouvre et dans la zone recherche saisissez ‘esp8266’. Cliquer sur le module esp8266 et installer.
Vous pouvez alors sélectionner dans outils puis type de carte, la carte liste ‘Wemos D1 R2 & mini’.
Programme : téléverser le programme suivant
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "Livebox-xxxx"; // Identifiant WiFi
const char* password = "1234567890ABCDEF1234567890"; // Mot de passe WiFi
ESP8266WebServer server(80); // On instancie un serveur qui ecoute sur le port 80
int led1 = D2;
int PB1 = D3;
String etatD1 = "Off";
String getPage(){ // préparation de la page à afficher
String page = "<html lang=fr-FR><head><meta http-equiv='refresh' content='10'/>"; // C'est du code HTML, la page s'auto-actualise
page += "<title>Ma Production - 2018 aout</title>"; // Titre de la barre du navigateur
page += "<style> body { background-color: #fffff; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }</style>"; // style de la page
page += "</head><body><h1>Gestion Prise simple</h1>"; // Titre de la page (H1)
page += "<h3>Bureau</h3>"; // Sous-titre (H3)
page += "<form action='/' method='POST'>"; // Le formulaire sera envoye avec une requete de type POST
page += "<ul><li>D1 (etat: "; // Premiere ligne de la liste (ul) avec D0
page += etatD1; // on concatene la chaine contenant l'etat de la sortie
page += ") ";
page += "<INPUT type='radio' name='RBD1' value='1'>ON"; // Bouton pour activer D0
page += "<INPUT type='radio' name='RBD1' value='0'>OFF</li></ul>"; // et le desactiver
page += "<INPUT type='submit' value='Actualiser'>"; // Bouton d'actualisation
page += "</p>";
page += "</body></html>";
return page;
}
void handleRoot(){ // gestion du radiobouton RBD1
if ( server.hasArg("RBD1") ) {
handleSubmit();
} else {
server.send ( 200, "text/html", getPage() );}
}
void handleSubmit() {
// Actualise le GPIO / Update GPIO
String LEDValue1;
LEDValue1 = server.arg("RBD1");
Serial.print("Set GPIO to ");
Serial.println(LEDValue1);
if ( LEDValue1 == "1" ) {
digitalWrite(led1, 1);
etatD1 = "On";
server.send ( 200, "text/html", getPage() );
} else if ( LEDValue1 == "0" ) {
digitalWrite(led1, 0);
etatD1 = "Off";
server.send ( 200, "text/html", getPage() );
} else {
Serial.println("Err Led Value");
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// on attend d'etre connecte au WiFi avant de continuer
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// on affiche l'adresse IP qui nous a ete attribuee
Serial.println("");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// on definit les points d'entree (les URL a saisir dans le navigateur web) et on affiche un simple texte
server.on ( "/", handleRoot );
// on demarre le serveur web
server.begin();
pinMode(led1, OUTPUT); // Initialise la broche "led" comme une sortie - Initialize the "LED" pin as an output
pinMode(PB1,INPUT);
digitalWrite(PB1,HIGH); //mode pull-up
digitalWrite(led1, 0);
}
void loop() {
// a chaque iteration, on appelle handleClient pour que les requetes soient traitees
server.handleClient();
if (digitalRead(PB1)==0) {
if (etatD1=="Off"){
etatD1="On";
digitalWrite(led1,1);}
else{
etatD1="Off";
digitalWrite(led1,0);}
delay(200);
}
}
Interface :
Trouver l’adresse IP utilisée par la carte en lançant le gestionnaire de la box (192.168.1.1). Idéalement donner à la carte une IP fixe via votre box.
Lancer l’adresse Ip trouvée pour votre carte afin de voir apparaitre l’écran ci-dessous permettant la commande.
Etape 3 – Finition
Une fois le code téléversé, il reste à tester son bon fonctionnement puis à fixer les composants et fermer la boite. Un simple cache en plastique, voire carton découpé suffit. Dans mon cas, un cache a été réalisé puis imprimé en 3D.
Le poussoir a été collé ainsi que l’ensemble des composants avant de fermer le boitier.