Nouveau modèle de materiel.
Cette fois ci, je vais utiliser un arduino MEGA avec un ESP8266/ Wemos D1 embarqué.
Ce matériel nécessite pas mal de travail pour la prise en main et à date , il n'existe que 2 tutos vidéos pour apprendre à s'en servir.
Autonomie constatée : 3h40 avec une batterie 10 000mHa
Mot clés de recherche sur aliexpress et google
Mega + WiFi R3 ATmega2560 + ESP8266 (mémoire 32 mo), USB-TTL CH340G. Compatible pour Arduino Mega, NodeMCU, WeMos ESP8266
Prix : 11 euros en Avril 202
1 Arduino MEGA 2560 + cable USB
prix : 8 euros
1 Ecran TFT 3.95 (NEW)
Prix : 6 euros
1 Module Wifi ESP01s
Prix : 1,50 euros
2 Modules RFID MFRC522 135Mhz
Prix unitaire : 1,50 euros
1 batterie 1 port USB -10000mAh
Prix unitaire : 7 euros - probablement insuffisante, compter 10 euros pour une batterie 30 000 mAH
colle : 0,20 euro
50 câbles : 1 euro
3*6 broches coudées
2 mini aimants : 0,25 euros
1 interrupteur On/Off : 0,15 euros
1 connecteur mini usb male : 0,15 euros
1 cable usb : 0,20 euros
1 connecteur femelle USB : 0,15 euros
il existe 2 tutoriels pour la prise en main de ce matériel.
Ceux ci sont les bases et pas toujours très précis.
ils ne présentent qu'un cas d'usage, qui est un base.
le premier est la vidéo de reference. un mélange d'espagnol, de russe et d'anglais
https://www.instructables.com/id/Arduino-MEGA-2560-With-WiFi-Built-in-ESP8266/
La seconde vidéo est la traduction ou l'utilisation de la première vidéo mais en français
https://www.youtube.com/watch?v=fTrlHmrXeZ4
et enfin une version papier :
Avant de commencer, voici quelques points très important pour une expérience améliorées.
L'utilisation de ce MEGA est uniquement basé sur la bonne utilisation des 2 switch ci contre :
Ta table d'utilisation des switchs ou dip
A droite vous trouverez un image de la table des switch,
Conseil d'utilisation :
le dip à 8 switch sera beaucoup manipulé, surtout lors de la prise en main, mais les switchs plastiques sont très fragiles, donc si vous ne voulez pas ruinez votre investissement rapidement, n'utilisez pas un tournevis de précision pour changer de position.
Voici l’état du switch après un vingtaine de manipulation
voici l'astuce que j'ai trouvé pour éviter ce désastre.
Utiliser un cure dent.
0,30 centimes d'investissement pour sauver votre arduino
Dernier point, je l'ai lu, et donc j'ai bêtement appliqué sans le remettre en cause.
Entre chaque changement de switch, il faut rebrancher/rebrancher le cable USB.
Cela a un coté très embêtant.
Switch RX0/RX3pour l'utilisation du serial ou serial3
Switch 8 positions qui utilisent la table ci dessous pour son utilisation
L état du même switch après 50 manipulations avec un cure dent.
Inutile de faire de la soudure sans s'assurer au préalable que les différents composants de l'arduino fraichement déballé fonctionne.
Donc toute cette partie est dédié au test de l'arduino, avec le code source et les manip. Elle est directement issu des tuto cités ci dessus.
Step0 : récupérer la bibliothèque memoryfree.h et l'ajouter à l'arduino.
Step 1 : tester le fonctionnement de l'arduino MEGA uniquement.
Dans l'ide, vérifier le type de carte sélectionné : Arduino Mega
Récupérer le code source ci contre.
Positionner les switch comme suit ( CH340 Connect to ATMEGA2560 ( upload sketch)
OFF OFF ON ON OFF OFF OFF OFF et rX0
Brancher le câble usb, vérifier le port, uploader le sketch
Débrancher le cable, modifier le switch
ON ON ON ON OFF OFF OFF OFF
Ouvrir le monitor, avec les paramètres suivants :
115200
je tape "B" puis [envoyer]
le blink test allume et éteint la led bleu L
je télécharge le code ci contre dans l'IDE arduino
Résumé des étapes pré requis :
Sélectionner Fichier / préférences
remplir le champ Url de gestionnaire de carte
https://arduino.esp8266.com/stable/package_esp8266com_index.json
ajouter la carte esp8266
installer la bibliotheque esp8266
vérifier que l'installation est correct, vous devez voir apparaitre les choix ci dessous dans
copier /coller le code "TEST-ESP" ci contre dans l'ide
Positionner les switch comme suit :
0FF 0FF ON ON OFF OFF OFF OFF et RX0
Selectionner le type de carte : Wemos D1, mais a priori ca fonctionne aussi avec esp8266 generic
Modifier les lignes suivantes avec vos informations de connexions
const char* ssid = "...";
const char* password = "...";
uploader le sketch
Si vous n'avez pas fait d'erreur dans les switch, dans la selection du materiel et sur le RX0, vous aurez l'ecran de gauche.
le message "hard resetting via RTS pin..." indique que le chargement du code est OK.
debrancher l'arduino
Modifier les switch
ON ON ON ON OFF OFF OFF OFF
Activer votre partage Wifi si vous utilisez un telephone
Vérifier que vous avez bien un partage de connexion sur votre tel, sinon vous vous êtes trompés dans le SSID ou le mot de passe.
Attention a respecter les majuscules/minuscules.
Ouvrez le moniteur, avec 115200 bauds et pas de lignes de fin
rebrancher/rebrancher l'arduino
C'est le geste magique comme sous windows, il faut le redémarrer après qu'il se soit attaché au réseau pour une raison que j' ignore.
Si vous récupérez le Chip ID et une adresse IP, votre ESP fonctionne.
Tips : le code contient déjà la partie "Server HTML" pour la suite de configuration
récupérer la bibliothèque MCU friend et l’intégrer à l'IDE
https://www.arduinolibraries.info/libraries/mcufriend_kbv
débrancher l'arduino
positionner les switch
OFF OFF OFF OFF ON ON ON OFF / rx0
rebrancher l'arduino.
Dans l'IDE, telecharger le code ci contre issu de la bibliothèque MCU friends - TouchScreen_calibr_native
modifier les switchs
ON ON ON ON OFF OFF OFF OFF / Rx0
brancher l’écran sur le MEGA
cliquer sur les croix et récupérer à la fin les informations suivantes :
On va maintenant piloter l'arduino à partir de l'eSP en allumant la led 13 via le serveur Web.
L'esp reçoit l'ordre via l'url, l'analyse et envoi une commande vers l'arduino via le serial3
débrancher l'arduino
modifier les pins :
OFF OFF ON ON OFF OFF OFF OFF et rx0
Changer le type de carte en Arduino MEGA
Télécharger le code ci contre
Débrancher
modifier les pins
rebrancher, vérifier que le partage de connexion s'active, débrancher et rebrancher puis ouvrir le monitor
Dans le monitor, vous voyez les informations de l'eSP qui sont envoyés vers l'arduino via l'eSP03 et le code du MEGA contient une partie qui va lire le serial 3 et l'afficher sur le serial.
quelque soit la combinaison des switchs, le monitor n'affichera que le serial de l'arduino MEGA.
récupérer l'adresse ip, attacher votre PC au réseau de votre téléphone et ouvrez un navigateur soit sur le téléphone, soit sur le PC. saisissez l'adresse IP.
Par défaut le port est 80 standard mais il possible de le modifier dans le code de l'ESP
cliquer sur les boutons LED state ON ou OFF
Conclusions :
l'utilisation du switch RX0/RX3 n'est pas beaucoup détaillée.
Le monitor n'affiche que les informations de l'arduino mega
Vous pouvez communiquer entre l'arduino et le Mega de 2 manières
- via le serial 3
-via le serveur Web sous réserve de récupérer l'adresse ip de celui ci
j'ai fait une fausse manip et j'ai effacé cette partie...!! concernant l'ecran TFT et la bibliotheque MCU friends
driver mcufriends
https://www.arduinolibraries.info/libraries/mcufriend_kbv
taille : 3.97 pouces
Résolution: 400*240
Contrôleur: ST7793
Fournir le LCD, IC spécification ST7793 microcontrôleur
On charge un nouveau programme
debrancher
Swich OFF OFF ON ON OFF OFF OFF OFF -RX0
l'ecran est branché sur le MEGA
On modifie le code a coté comme suit :
const int XP=6,XM=A1,YP=A2,YM=7; //240x400 ID=0x7793
const int TS_LEFT=784,TS_RT=784,TS_TOP=496,TS_BOT=518;
//landscape smp001 - ceci reste en commentaire, c'est pour un rappel de l'equivalence entre les constantes et le x et y
//x = map(p.y, LEFT=791, RT=748, 0, 400)
//y = map(p.x, TOP=519, BOT=557, 0, 240)
On reprend les valeurs de la capture d’écran ci dessus :
const int TS_LEFT=866,TS_RT=197,TS_TOP=274,TS_BOT=900;
On enlève les commentaires de la partie ci dessous :
// pour etalonnage *********************
Serial.print("debug MEGA :: TouchXY- ref000 - tp.z=");
Serial.print(tp.z);
Serial.print(" - tp.x=");
Serial.print(tp.x);
Serial.print(" - tp.y=");
Serial.println(tp.y);
// ************************************
On dessine un ecran sur une feuille A4 comme ci contre afin de faire des relevés de mesures.
Telecharger le programme
debrancher
enlever l'ecran
positionner les switchs en
ON ON ON ON OFF OFF OFF OFF rx3
remettre l'ecran
brancher
ouvrir le monitor
le but est maintenant de faire un relevé de valeurs aux limites de chaque case, sachant que x et y sont compris entre 150 et 940.
je n'utilise pas de fonction Map car les valeurs ne sont pas "constantes" sur toute la surface de l'ecran tactile.
je commence par les deplacements verticaux pour chaque case, en appuyant aux limites de la case. j'insiste sur chaque case
je fais la meme chose pour les deplacements horizontaux pour obtenir la grille finale ci contre
Puis je reporte les valeurs dans le code de l'arduino.
Fonction bool Touch_getXY(void)
je vais remplacer les valeurs aux limites de lignes par les valeurs en rouge dans le tableau et pour chaque colonne.
La colonne la plus a gauche est la col=0
la colonne la plus à droite (ou 5eme colonne) est la col=4
je pourrais faire la même chose pour les ecarts 0 .. 2 en les remplaçants par les valeurs, mais la formule mathématique utilisé marche assez bien. Bien sur cette "regle" peut changer en fonction de la réponse du matériel et des valeurs constatés.
On remet en commentaire l'etalonnage
// pour etalonnage *********************
Serial.print("debug MEGA :: TouchXY- ref000 - tp.z=");
Serial.print(tp.z);
Serial.print(" - tp.x=");
Serial.print(tp.x);
Serial.print(" - tp.y=");
Serial.println(tp.y);
// ************************************
On débranche,
Switch OFF OFF ON ON OFF OFF OFF OFF rx0
branchement
upload du sketch
débranchement
switch ON ON ON ON OFF OFF OFF OFF
et on teste les cases une par une, écran par écran pour voir si la réponse est satisfaisante et si les cases qui s'affichent sont celles sélectionnées.
On surveille particulièrement un "saut d'affichage" qui verrait une autre valeur s'afficher avant la valeur sélectionnée.
si cela arrive, c'est que l'arduino va "trop vite".
dans la loop, il suffit d'ajuster la valeur 200 à la hausse dans le loop
if (current>previous+200)
{
Touch_getXY();
previous=millis();
}
Etalonnage vertical de l'ecran
etalonnage horizontal
grille finale
test apres etalonnage
exemple de saut d'affichage
je ne vais pas tout refaire l'explication du cablage et du programme, vous trouverez les informations sur les pages du site dédiées au MFRC522.
On enleve l'ecran TFT
on positionne les cables dupont et l'alimentation 3.3
On verifie que dans le code uploader la section suivante du loop n'est pas commenté.
if (current>previous+200)
{
Touch_getXY();
previous=millis();
}
if( current_rfid>previous_rfid+interval_rfid)
{
lire_mfrc522();
previous_rfid=millis();
}
On met en commentaire le bout de code pour l’étalonnage de l’écran TFT
// pour etalonnage *********************
// Serial.print("debug MEGA :: TouchXY- ref000 - tp.z=");
// Serial.print(tp.z);
// Serial.print(" - tp.x=");
// Serial.print(tp.x);
// Serial.print(" - tp.y=");
// Serial.println(tp.y);
// ************************************
switch
OFF OFF ON ON OFF OFF OFF OFF ( rx0
rebranchement
upload du sketch
debranchement
ON ON ON ON OFF OFF OFF OFF rx3
on remet l'ecran et le cable usb.
rebranchement
ouverture du monitor
Les branchements sur l'arduino
vérification sur l'ecran TFT que les MFRC522 fonctionnent.
vérification sur le monitor
debrancher
Enlever l'ecran TFT
Modifier les switch
OFF OFF OFF OFF ON ON ON OFF ( rx0
Dans l'ide arduino, charger le programme ci contre
Changer le matériel en Wemos D1
Personnaliser le code suivant avec une référence unique par arduino
String ref_esp01="001";
upload du sketch
debranchement
modification des switchs
OFF OFF OFF OFF ON ON OFF et RX0
rebranchement
ouverture du monitor pour vérifier qu'on recupere bien une adresse ip
le monitor
la vérification de l'enregistrement dans les tables
Mettre les switch sur
ON ON ON ON OFF OFF OFF OFF, RX3
Aucune autre combinaison de switch ne fonctionne.
poser l'alimentation
Dans la console, les logs suivant vont apparaitre.
Ci dessous quelques parties importantes à contrôler et leur signification :
Au bout de 5 secondes, affichage de :
TouchScreen.h GFX Calibration
cela signigie que programme a correctement demarré, sinon enlever et remettre l'alimentation
Vérifier que vous avez correctement renseigner la reference du matérielTouchScreen.h GFX Calibration
SMP001
6.16
08/05/2020
Le buffer d'envoi est bien complété des 2 trames de test :
MEGA :: 0 - - - 0
MEGA :: 1 - buf=1&Tag=000 - buf=1&Len=7! - 9
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
le dernier chiffre (ici -9) represente le nombre d'essai.
A chaque envoi, il est decrémenté. A 0, et sans http200 en retour, la boucle passe à la ligne suivante.
A reception d'un http 200, cette valeur passe à 0 et la boucle efface l'enregistrement et passe à la ligne suivante (voir ci dessous)
la trame envoyée a été recu par le serveur Web et acquitté pour la ligne 1 du buffer.
debug MEGA :: data_from_esp01: ----------1 -----------
valeur_car-48=1
le programme passe à la ligne suivante , en effacant le contenu de la ligne 1
MEGA :: 0 - - - -1
MEGA :: 1 - - - -1
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
debug MEGA :: data_from_esp01: inChar= 1-debug MEGA :: loop - cpt_premier_http200_recu==1
Modifie l'affichage de l'ecran Wait à l'ecran de jeu sur le TFT
Positionner un badge RFID sur un des lecteurs,
debug MEGA :: lire-mfrc522 : cmdfromarduino= Tag=93DC2F1A&Posid=1!
la ligne suivante est rajouter dans le buffer
MEGA :: 3 - buf=3&Tag=93DC2F1A&Posid=1! - buf=3&Len=20! - 2
Posid=1 correspond au lecteur 1. Faire la meme chose sur l'autre lecteur ,et la valeur de Posid va etre modifiée.
MEGA :: 4 - buf=4&Tag=4BB4DB15&Posid=2! - buf=4&Len=20! - 2
Lors du retrait diu badge RFID, la ligne suivante va apparaitre pour chaque lecteur
buf=5&Tag=210&Posid=1! - buf=5&Len=15! - 2 ( lecteur 1)
buf=5&Tag=210&Posid=1! - buf=5&Len=15! - 2 (lecteur 2)
TouchScreen.h GFX Calibration
SMP001
6.16
08/05/2020
vitesse serial : 115200
vitesse serial3 (eSP01) : 115200
ID = 0x7793
MEGA :: 1 - buf=1&Tag=000 - buf=1&Len=7! - 9
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
MEGA :: 3 - - - -1
MEGA :: 4 - - - -1
MEGA :: 5 - - - -1
MEGA :: 6 - - - -1
MEGA :: 7 - - - -1
MEGA :: 8 - - - -1
MEGA :: 9 - - - -1
Fin Setup
debug MEGA :: envoi_vers_esp : retry_pos_en_cours =1
debug MEGA :: envoi_vers_esp : retry_pos_max =3
MEGA - envoi vers esp - 001- retry_tableau[retry_pos_en_cours][1]=buf=1&Len=7!
debug MEGA :: envoi_vers_esp : retry_pos_en_cours =1
debug MEGA :: envoi_vers_esp : retry_pos_max =3
debug MEGA :: data_from_esp01: inChar= 1-debug MEGA :: data_from_esp01: inChar=
-debug MEGA :: data_from_esp01: inChar=
-debug MEGA :: data_from_esp01: inputstring= 1
debug MEGA :: data_from_esp01: valeur_car= 49
debug MEGA :: data_from_esp01: ----------1 ----------- valeur_car-48=1
debug MEGA :: data_from_esp01: ----------1 ----------- retry pos en cours=2
MEGA :: 0 - - - -1
MEGA :: 1 - - - -1
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
MEGA :: 3 - - - -1
MEGA :: 4 - - - -1
MEGA :: 5 - - - -1
MEGA :: 6 - - - -1
MEGA :: 7 - - - -1
MEGA :: 8 - - - -1
MEGA :: 9 - - - -1
debug MEGA :: data_from_esp01: inChar= 1-debug MEGA :: loop - cpt_premier_http200_recu==1
debug MEGA :: envoi_vers_esp : retry_pos_en_cours =2
debug MEGA :: envoi_vers_esp : retry_pos_max =3
debug MEGA :: lire-mfrc522 : reader= 0
debug MEGA :: lire-mfrc522 : cmdfromarduino= Tag=93DC2F1A&Posid=1!
debug MEGA :: lire-mfrc522 : controle_len= Len=20!
MEGA :: 0 - - - -1
MEGA :: 1 - - - -1
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
MEGA :: 3 - buf=3&Tag=93DC2F1A&Posid=1! - buf=3&Len=20! - 2
MEGA :: 4 - - - -1
MEGA :: 5 - - - -1
MEGA :: 6 - - - -1
MEGA :: 7 - - - -1
MEGA :: 8 - - - -1
MEGA :: 9 - - - -1
debug MEGA :: lire-mfrc522 : reader= 1
debug MEGA :: lire-mfrc522 : cmdfromarduino= Tag=4BB4DB15&Posid=2!
debug MEGA :: lire-mfrc522 : controle_len= Len=20!
MEGA :: 0 - - - -1
MEGA :: 1 - - - -1
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
MEGA :: 3 - buf=3&Tag=93DC2F1A&Posid=1! - buf=3&Len=20! - 2
MEGA :: 4 - buf=4&Tag=4BB4DB15&Posid=2! - buf=4&Len=20! - 2
MEGA :: 5 - - - -1
MEGA :: 6 - - - -1
MEGA :: 7 - - - -1
MEGA :: 8 - - - -1
MEGA :: 9 - - - -1
Dans la video ci contre, je n'ai pas branché les lecteurs RFID, mais il faut le faire dans l'ideal.
En meme temps j'ouvre la console pour verifier que les touches appuyees sont bien ajouter au buffer d'envoi
il faut 5 secondes avant que le premier message apparaisse sur la console ( voir ci dessus)
Lorsque l'ecran passe de Wait à l'ecran de jeu, c'est que j'ai un retour du serveur http, et donc la connexion reseau fonctionne de bout en bout.
Pour l'esp8266 : le watchdog fonctionne correctement :
ESP8266 board info:
Chip ID: REF ESP01 :001
ip :192.168.43.174
Fin page_html
Fin traitement_web
Ne pas oublier de connecter le PC sur le tel afin de pouvoir consulter la page Web
ESP Fin setup
ESP:watchdog
ESP:WOK
ESP:watchdog
ESP:WKO
ESP:watchdog
ESP:WOK
Pour le MEGA :
debug MEGA :: data_from_esp01: valeur_car= 49
debug MEGA :: data_from_esp01: ----------1 ----------- valeur_car-48=1
debug MEGA :: data_from_esp01: ----------1 ----------- retry pos en cours=2
MEGA :: 0 - - - -1
MEGA :: 1 - - - -1
MEGA :: 2 - buf=2&Tag=000 - buf=2&Len=7! - 9
MEGA :: 3 - - - -1
MEGA :: 4 - - - -1
MEGA :: 5 - - - -1
MEGA :: 6 - - - -1
La log indique que la trame 1 a été correctement recu par le serveur http.
Lors de l'upload du programme MEGA, vous avez l'erreur suivante :
'A1' was not declared in this scope.
Verifier que le matériel selectionné est MEGA en non Wemos D1
Lors de l'upload du programme ESP9266, vous avez l'erreur suivante :
EPS8266Wifi.h non trouvé
Vérifier que le matériel selectionné est Wemos D1 et non MEGA
Si l'ecran TFT reste blanc au demarrage, verifier que le commutateur est sur RX3
Prendre l'arduino avec l'ecran, connecter un cable USB,
retourner l'ecran pour poser le gabarit sur le dessus du carton
Positionner l'ecran en faisant attention que le bout rigide du cable USB ne touche pas le bord de la boite en carton.
A l'aide d'un stylo, dessiner le contour
Couper le contour avec un cutter
Renforcer les bords avec du scotch pour eviter une usure trop rapide de la boite.
Etiquetter le materiel ( photo3)
Rajouter des cales a l'aide d'allumette pour eviter que l'ecran ne sorte par le haut de la boite (photo4)
Inserer les cables tripodes etc..dans l'arduino
verification de l'ajustement de la longueur des cables pour les 2 lecteurs RFID.