home castoo
chapitre electronique
Electronique thermometre

Fiche mémo ESP8266
Carte thermometre / relais sur wifi

Janvier 2019

Conception d'une carte permettant d'exploiter l'Esp-8266.

Intérêt du montage:

Les étapes du projet


Le schéma sous eagles.

doc Tout commence par un schéma. Il y a quelques années construire un module doté des mêmes fonctions aurai demandé des connaissances poussées en électronique, aujourd'hui avec l'intégration de fonctions complexes dans des modules tout prêt, simplifies considérablement la démarche. Pour réaliser un PCB de petite taille le logiciel eagles vous permet de le faire avec une version de démonstration, je vous invite à découvrir ce logiciel fantastique. Les modules utilisés n’étaient pas présent dans la bibliothèque d'origine du logiciel on peut en trouver en téléchargement sur internet et ainsi enrichir la bibliothèque du logiciel. Dans ce schéma j'ai cherché à pouvoir réutiliser au maximum le circuit imprimé. On voit par exemple qu'il est possible d'utiliser la carte avec deux types d'alimentation, si vous avez une alimentation en 3.3v (pile par exemple) vous n'avez pas besoin de souder une alim DD/DD elle ne sera pas utilisée. Les entrées/sorties du cpu sont toutes sortie et suivant les projets elles pourront être exploitées sur des petits connecteurs... J'ai choisi d'implanter l'ESP coté composant et non coté cuivre, il suffit donc de passer des petits fils à travers le circuit et le PCB et de les souder de chaque coté.


Du schéma au dessin du PCB .

doc

L'ESP n'est pas au pas de 2.54 il faut donc vérifier lors du routage qu'il n'y a pas de piste qui passe entre ses pattes (trop peu de place).
Il faut également veiller à la dimension des pistes des contacts des relais qui sont supposer laisser passer une intensité bien supérieur au reste du montage.
De nombreuses tentatives de routage sont nécessaires pour arriver au résultat voulu.

L'interface de routage du logiciel eagles :

doc

Le PCB nu avec un essai de routage inabouti :

doc

Du dessin du PCB au circuit imprimé sur cuivre.

doc

Une option est téléchargeable dans eagles, elle permet de créer une sortie en "gravure à l'anglaise'.
C'est indispensable pour travailler avec une CNC. L'idée est de découper le minimum de cuivre autour des pistes. La piste cuivrée et les pastilles se retrouvent entourées par des tranchées qui les isolent du reste du circuit.
C'est là que ma nouvelle CNC est intervenue, je vous invite à visiter la partie CNC de mon site pour comprendre de quoi je vous parle...


La carte terminée.

doc

Dans cette version elle est équipée en entrée d'un capteur de température / humidité et de deux relais pour pouvoir commander un luminaire et la pompre d'une fontaine dans mon jardin.
Les deux sorties de relais sont protégées par des fusibles.
Le wifi a une bonne portée d'environ 30m + traversée fenêtre (volets alu) + 5m en intérieur.
Un bouton de reset du processeur est dispo sur le PCB.
Il y a également un bouton qui permet de basculer du mode programmation au mode execution de l'ESP.
Le dernier bouton est simplement un marche / arret.

Comme on peut le voir sur le côté soudures à force de souder et dessouder sur les petites pastilles des transistors (suite à la recherche d'un problème qui était en réalité logiciel !) j'ai fini par décoller certaines pastilles et j'ai été obligé de réaliser quelques straps ! (je n'en suis pas très fier !)

doc

Ici on voit mieux les soudures sur les pattes de l'ESP côté composant.

doc

Le code (perfectible je n'en doute pas !) à modifier selon vos besoins (j'ai utilisé la mémoire secondaire de l'esp pour afficher l'image).
Attention vous devez entrer dans le programme le nom réseau de votre box et sa clé (à la place des xxxx). L'esp se programme directement avec l'interface arduino ce qui facilite grandement la manip... :




// Carte PCB1 avec :
//	- Capteur température et humidité
//	- Capteur courant
//	- 2 relais
//
#include "ESP8266WiFi.h"
#include "WiFiClient.h"
#include "ESP8266WebServer.h"
#include "ESP8266mDNS.h"
#include "Wire.h"
#include "SSD1306.h"
#include "DHT.h"
#define DHTTYPE DHT22
const char* box = "Livebox-xxxx"; // Nom de la box
const char* m_passe = "xxxxxxxxxxxxxxxxxxx"; // Passe WiFi
ESP8266WebServer server(80);
#define REL_1 14
#define REL_2 4
#define DHTPIN 5	// GPIO5
#define ANAL_IN A0	// ADC entrée analogique du capteur de courant
DHT dht(DHTPIN, DHTTYPE); // déclaration objet DHT22
float v_temp = 0; // temperature
float v_temp_f = 0; // temperature Fahrenheit
float v_humid = 0; // humidité
double val_ic= 0;	// valeur capteur courant
int mv_par_amp = 185; // Milli volt par Ampere (ACS712 : 100 pour 20A ou 66 pour 30A)
int ACS712_offset = 2500; 
int relais[4]; // Etat des relais
unsigned long temp_lect = 0; // calcul du temps entre les lectures

String page_fab(){
	String page = "<html lang=fr-FR><head><meta http-equiv='refresh' content='10'/>";
	page += "<title>ESP METEO</title>";
	page += "<style> body { background-color: #fffff; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }</style>";
	page += "</head><body>";
	page += "<h1>LA ROCHELLE</h1>";
	// Donnée météo
	page += "<h3>Données météo</h3>";
	page += "<ul><li>Température : ";
	if(isnan(v_temp)) page += "Lecture en cours..."; else page += String(v_temp);
	page += " ºC    ( Ressentie : ";
	if(isnan(v_temp_f)) page += "Lecture en cours..."; else page += String(v_temp_f);
	page += " ºC )</li>";
	page += "<li>Humidité : ";
	if(isnan(v_humid)) page += "Lecture en cours..."; else page += String(v_humid);
	page += " %</li></ul>";
	// Consomation courant
	page += "<h3>Consomation</h3>";
	page += "<ul><li>Valeur courant : ";
	if(isnan(val_ic)) page += "Lecture en cours..."; else page += String(val_ic,3);
	page += " mA</li></ul>";
	// Etat des relais
	page += "<h3>ETAT DES RELAIS</h3>";
	page += "<form action='/meteo' method='POST'>";
	page += "<ul>";
	page += "<li>Relais 1 : "; page += relais[1]==0?"OFF":"ON"; page += "</li>";
	page += "<li>Relais 2 : "; page += relais[2]==0?"OFF":"ON"; page += "</li>";
	page += "</ul>";
	// Actualiser
	page += "<br><INPUT type='submit' value='Actualiser'>";
	page += "</body></head>";
	return page; 
}

//---------------------Effectue une requete sur le capteur que si un délai de 2 secondes est respecté
void get_data_dht() {
	const long interval = 2000;  // interval de 2 secondes
	unsigned long sec_act = millis();
	if(sec_act - temp_lect >= interval){
		temp_lect = sec_act;   
		v_humid = dht.readHumidity(); // Lecture du taux d'humidité
		v_temp = dht.readTemperature(); // Lecture de la température en Celcius
		v_temp_f = dht.readTemperature(true); // Lecture température en Fahrenheit
		v_temp_f = dht.convertFtoC(dht.computeHeatIndex(v_temp_f, v_humid)); // Calcul de la température ressentie
		int lect_val_ic = analogRead(ANAL_IN);	// Lecture courant
		double voltage = (lect_val_ic / 1024) * 5000; // valeur en mV
		val_ic = ((voltage - ACS712_offset) / mv_par_amp);
		
	/*	
						   courant = (float)(valeur_senseur-zero_senseur)/1024*5/ACS712_RAPPORT*100000;
						  // Courant efficace en mA
						  courant_efficace = courant / 1.414; // divisé par racine de 2

						  // Calcul de la puissance.
						  //    On divise par 1000 pour transformer les mA en Ampère
						  puissance_efficace = (courant_efficace * tension_efficace/1000);		
	*/	
		
		if (isnan(v_humid) || isnan(v_temp)){
			return;
		}
	}
}

void setup(void){
	//Serial.begin(115200);
	pinMode(REL_1, OUTPUT); digitalWrite(REL_1, 0); relais[1] = 0;
	pinMode(REL_2, OUTPUT); digitalWrite(REL_2, 0); relais[2] = 0;
	//pinMode(DHTPIN, INPUT_PULLUP);
	dht.begin(); //démarrage du capteur dht11
	// Cnx WiFi  
	WiFi.begin(box, m_passe);
	//Serial.println("");
	while (WiFi.status() != WL_CONNECTED) {
		delay(500);
		//Serial.print(".");
	}
				// Affichage adr IP (DHSCP) sur interface série pour joindre le serveur
				// Serial.println("");
				// Serial.print("Adr IP : ");
				// Serial.println(WiFi.localIP());
				//Serial.println(page_fab());
	// Traitement des requetes
	server.on("/r1_off", [](){ digitalWrite(REL_1, LOW);    relais[1] = 0; server.send(200, "text/html", page_fab()); });
	server.on("/r1_on",  [](){ digitalWrite(REL_1, HIGH);   relais[1] = 1; server.send(200, "text/html", page_fab()); }); 
	server.on("/r2_off", [](){ digitalWrite(REL_2, LOW);    relais[2] = 0; server.send(200, "text/html", page_fab()); });
	server.on("/r2_on",  [](){ digitalWrite(REL_2, HIGH);   relais[2] = 1; server.send(200, "text/html", page_fab()); }); 
	server.on("/meteo",  [](){ get_data_dht(); server.send(200, "text/html", page_fab()); });
	server.begin();
}

void loop(){
	server.handleClient();
	//if(not isnan(v_temp))
	//if(not isnan(v_humid))
}
	

L'interface web.

doc

Comme on peut le voir l'interface est facilement accessible à l'aide d'une adresse locale ou si vous l'autorisez depuis le web. On voit ici une copie d'écran de mon Iphone. Je sais il fait trop chaud chez moi, j'ai des problèmes avec mon chauffage par le sol ! c'est tout l'un ou tout l'autre ! Grrrrrrrrrrr
Les données concernant l'anémomètre et la consommation du montage ne font pas partie de cette présentation.

Ici c'est une photo de l'interface sur mon micro.

doc


J'espere que cette petite présentation vous aura donné l'envie de vous lancer... Le prix d'un Esp-8266e12 n'est que de 3 ou 4 euros.

accueil electronique

Bricolage Robotique Informatique Peinture Voyage
Téléc. portail Le robot "mécano" Astuces informatique Henri Bertrou Auvergne
Bat. Iphone 6S Le robot "solaire" Réseau couche app. Jean-Michel Castille Floride
Robot piscine Servo et IR" Réseau Les couches New York
Xiaomi M365 Le robot "thymio" Réseaux Outils L'Ouest américain
Mac Mini Le robot "Rovio" Unités grandeur inf. L'Ile Maurice
Putty SSH Windows L'Italie / Venise
Bases Raspberry Tunisie
Termius IPhone/IPad Grece
Le vieux ZX 81
...
Navigation La Rochelle CNC / Imp3D Electronique Programmation
Rencontre dauphins Les Minimes Construction CNC Alim. TPL 5110 Doc. programme
Analyse NMEA 0183 Le Vieux port CNC du commerce Carte ESP8266 Indent programme
graph. NMEA 0183 L'Ile de Ré Martyr CNC ESP8266 1 relai Prog. objet
Analyse trames AIS A visiter Réa. imp. 3D ESP8266 Alarme Prog. procédurale
Analyse AIS TCP-IP Cura impression 3D ESP8266 MQTT
Sortie en ketch Plateau CR10 ESP8266 Temp.
Echange GPS C80 Anémomètre.
HP Sun-Odyssey CNC / 3D en vrac MCP9808 Librairie
LCD yanmar Saisie Oled
Testeur nmea esp1 i2c