DÉVELOPPEMENT
Objectifs : Créer une carte de développement pour module ESP8266 mod01 et mod12
1. INTRODUCTION SUR LE MODULE
Le module ESP12 permet d'avoir de nombreuses entrées sorties dont une analogique (ADC avec 0V<ADC<1V) qui ne peut pas être utiliser lorsque le module transmet en wifi (cf code)
2. LA CARTE DE DÉVELOPPEMENT
La carte de développement permet de placer des module ESP01 et ESP12.
2.1. Schéma structurel
2.2. Plan implantation
3. PROGRAMME ARDUINO DE TEST
/*ok
testéESP8266 module ESP12 en mode Serveur Web
Controle de la LED GP13 du module ESP8266MOD1 à l'aide d'un formulaire contenant 2 boutons radio pour allumer ou éteindre la LED GP13.
La page web affiche la valeur analogique de AN0 et l'état de la LED (script 'canvas' de html5) avec controle par formulaire Le réseau est formé par Connectify-sb pass : 0123456789.
Les données du formulaire sont envoyé en GET.
La détection du GET se fait en lisant la première ligne de la requête.
Les boutons radio s'appellent RDIOLR.
ATTENTION : l'utilisation du analogRead(AN0) nécessite apparemment un delay() après ! sinon ça ne fonctionne pas de plus l'ADC ne doit pas transmettre pour convertir d'après al doc technique ESP.
*/
#include <ESP8266WiFi.h>
const char* ssid = "Connectify-sb";
const char* password = "0123456789";
// Create an instance of the server
// specify the port to listen on as an argument WiFiServer server(80);
String formHtml;//formulaire HTML String lHtml;
String HtmlScript;
int LEDGP2 = 13;//13 pourESP12, 2 pour ESP2 int LEDGP12 = 12;
int INTERGP0 = 0;
int INTERGP2 = 2;
int INTERGP4 = 4;
int INTERGP15 = 15;
int BPGP16 = 16;
//int analogPin = 0;
int valAnalogInput = 3;
int i=0;
void CreerHtmlScript(){
//ok
//script affichant une LED rouge ou GRISE
HtmlScript = "<script type='application/x-javascript'>";//debut script
HtmlScript += "function dessineLampe(valinter, ocx, ocy) {var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');";//definit context canvas
HtmlScript += "var rc=70;var lal=5;var couleur='red';var lol=200; ";//declare les variables
HtmlScript += "if (valinter==1) couleur='red'; else couleur='grey';";//définit la couleur en fonction de l'état de l'inter HtmlScript += "ctx.save();ctx.beginPath();ctx.lineWidth=lal;ctx.strokeStyle = couleur;";//definit les propritete des lignes HtmlScript += "ctx.moveTo(ocx-lol/2,ocy);ctx.lineTo(ocx+lol/2,ocy);ctx.stroke();ctx.closePath(); ";//dessine ligne horizontale HtmlScript += "ctx.beginPath();ctx.moveTo(ocx,ocy -lol/2 );ctx.lineTo(ocx,ocy +lol/2 );ctx.stroke();ctx.closePath();";//dessine ligne verticale
HtmlScript += "ctx.beginPath();ctx.moveTo(ocx-0.760*lol/2,ocy -0.649*lol/2 );ctx.lineTo(ocx +0.760*lol/2 ,ocy +0.649*lol/2 );ctx.stroke();ctx.closePath();";//ligne 45 degré gauche
HtmlScript += "ctx.beginPath();ctx.moveTo(ocx+0.760*lol/2,ocy -0.649*lol/2 );ctx.lineTo(ocx -0.760*lol/2 ,ocy +0.649*lol/2 );ctx.stroke();ctx.closePath(); ";//ligne 45 degré droit
HtmlScript += "ctx.beginPath();ctx.fillStyle = 'white';ctx.arc(ocx,ocy,rc+ lal,0,6,false);ctx.fill();ctx.closePath();";//cercle blanc HtmlScript += "ctx.beginPath();ctx.fillStyle = couleur;ctx.arc(ocx,ocy,rc-lal,0,6,false);ctx.fill();ctx.closePath(); ";//cercle de couleur HtmlScript += "ctx.fillStyle ='rgba(255,255,255,.5)' ;ctx.font = '50px _sans' ;ctx.textAlign= 'center';ctx.fillText(valinter,ocx,ocy+10) ;}
";//texte
HtmlScript += "</script>";//fin script }
/**************************************************/
void HtmlCreerPartieAnalog(){
lHtml = "";
lHtml += "<BR>La valeur de A0 (ADC) est : ";
lHtml += valAnalogInput;
lHtml += "<BR>";
}
/**************************************************/
void CreerForm(){
/*
* */
formHtml ="<form method=\"GET\" name=\"form1\"><br>";
if (digitalRead(LEDGP2)){
formHtml += "<input name=\"RDIOLR\" value=\"1\" ";
formHtml +="type=\"radio\" checked>LED ROUGE ON<br>";
formHtml +="<input name=\"RDIOLR\" value=\"0\" ";
formHtml +="type=\"radio\">LED ROUGE OFF<br>";
}//if else {
formHtml +="<input name=\"RDIOLR\" value=\"1\" ";//31char formHtml +="type=\"radio\">LED ROUGE ON<br>";//29char formHtml +="<input name=\"RDIOLR\" value=\"0\" ";//31char formHtml +="type=\"radio\" checked>LED ROUGE OFF<br>";
}//else
formHtml += "<input type=\"submit\"></form>";
}//fin CreerForm
/*******************************************************/
void setup() { Serial.begin(115200);
delay(10);
// prepare les entrees sorties
pinMode(LEDGP2, OUTPUT);//sortie LEDGP2 en sortie digitalWrite(LEDGP2, 0);//allumage LED GP2 pinMode(LEDGP12,OUTPUT);
pinMode(BPGP16,INPUT);
pinMode(INTERGP4,INPUT);
pinMode(INTERGP2,INPUT);
pinMode(INTERGP0,INPUT);
pinMode(INTERGP15,INPUT);
valAnalogInput = analogRead(A0);delay(10);//ok
// Connect to WiFi network Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
WiFi.mode(WIFI_AP_STA);//mode STA et AP permet d'accèder à 192.168.4.1 en AP
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server server.begin();
Serial.println("Server started");
// Print the IP address Serial.println(WiFi.localIP());
//allumage LEDGPIO12
digitalWrite(LEDGP12,1);delay(1000);digitalWrite(LEDGP12,0);
i=0;
}
/***************************************/
void loop() {
//mesure analogique : attention ADC ok uniquement hors transmission
valAnalogInput = analogRead(A0);delay(10);//ok ATTENTION delay obligatoire
//creation d'une jauge pour afficher sur la page html la valeur
// Check if a client has connected WiFiClient client = server.available();
if (!client) { return;
}
// attente requete client Serial.println("new client");
while(!client.available()){
delay(1);
}
//lectrue de la premiere ligne reçue String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
//detecte un GET : on utlise un GET car les données sont sur la premiere ligne if (req.indexOf("RDIOLR=1") !=-1) digitalWrite(LEDGP2,1);
else if (req.indexOf("RDIOLR=0") !=-1) digitalWrite(LEDGP2,0);
//envoi une page html
String pageHTML = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";//entete de l'envoi pageHTML
pageHTML += "<head>" ; CreerHtmlScript(); //insere le script pageHTML += HtmlScript;
pageHTML += "</head>";
pageHTML +="<body ";
//appelle la fonction dessineLampe() avec les bon arguments
if (digitalRead(LEDGP2)) {
pageHTML += "onload=\"dessineLampe(1,150,150)\" > ";
}
else pageHTML += "onload=\"dessineLampe(0,150,150)\" > ";
//test alert()
// pageHTML += "onload = 'alert(\"essai\")'>";
pageHTML += "<h1>Esp8266 LED+CAN</h1><br>";
pageHTML += "<canvas id='canvas' width='400' height='400'></canvas> ";
HtmlCreerPartieAnalog();
pageHTML +=lHtml;
CreerForm();//insere le formulaire pageHTML += formHtml;
pageHTML += "</body></html>\n";
client.flush();
// Send the response to the client client.print(pageHTML);
delay(1);
Serial.println("Client disonnected");
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed }