• Aucun résultat trouvé

IOT : ESP8266 MODULE 12 CARTE DÉVELOPPEMENT

N/A
N/A
Protected

Academic year: 2022

Partager "IOT : ESP8266 MODULE 12 CARTE DÉVELOPPEMENT"

Copied!
6
0
0

Texte intégral

(1)

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.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;

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

(4)

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;

(5)

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 }

4. TESTS

Le résultat HTML est donnée dans la copie d'écran ci-dessous :

Le programme contient :

un visuel en HTML5 (objet canvas) pour indiquer l'état de la LED

(6)

un groupe bouton radio afin de controler la LED la valeur de l'entrée analogique en décimal.

4.1. Conditions de test :

Un réseau Wifi local est crée grâce à Connectify.

Un PC avec Arduino1.5 est branché par un cable USB/TTL5V sur la carte à tester pour le transfert du programme.

4.2. Condition de programmation Placer GPIO0 sur 0 (ON du switch) Débrancher et rebrancher la carte

Téléverser le programme (compilation + téléversement)

A 80% juste avant le téléversement FAIRE un RESET de la carte (BP RST)

Le transfert s'effectue.

Références

Documents relatifs

The dossier is submitted in paper format (Note: Full paper dossiers can only be submitted to NCAs still accepting paper submissions and should only be used exceptionally when a

Type de protection Protection des sorties contre les surtensions Protection contre inversion de polarité en entrée Protection contre inversion de polarité à la sortie. 1 fusible

2) Jamais vous n’êtes forcé de vendre vos actions pour réaliser vos pertes. 3) Vous devez apprendre à ne pas considérer sérieusement les fluctuations du marché pour réussir.

L’entrée doit être raccordée en utilisant un seul contact (NO ou NF : programmable via INPUT dans le logiciel) comme décrit dans la figure suivante. Cette configuration ne prend

[r]

• le modèle d’une structure décrit le type des variables membres d’une structure  c’est un type. • une instance d’une structure a une existence réelle

Les drapeaux d’état sont affectés à la zone d’entrée de l’unité centrale (WX). Les adresses des E/S dans le tableau sont des adresses offset. Les adresses des E/S réelles

Si la détection de quadrant [8] est activée, l‘électronique re- connait automatiquement la polarité [9] et la variation (cro- issante ou décroissante) [10] de la grandeur réglante