Bonsoir à tous,
Problème de déclaration IDE 1.8.7 (sur ESP8266 LoLin -PCF8574-....)
J'ai un programme qui fonctionne depuis 2 ou 3 ans et je possède les 5 dernières versions.
Ce programme n'a pas été modifié depuis janvier 2021.
Aujourd'hui, je dois modifier un paramètre (un certificat SAH1 fingerprint)
Impossible de vérifier la compilation sans même avoir apporté la moindre modification !
Signalement : 'D5' was not declared in this scope sur la ligne suivant
const uint8_t GPIOPIN[4] = {D5, D6, D7, D8}; // Led (GPIO 14,12,13,15)
L'erreur se produit également sur des anciennes versions qui fonctionnaient.
Type de carte : Generic ESP8266 Module
A priori, j'ai trouvé ce qui se passait :
La déclaration const uint8_t GPIOPIN[4] = {D5, D6, D7, D8};
ne fonctionne plus suite à une correction de bug de l'iDE ?
il faut maintenant :
const uint8_t GPIOPIN[4] = {0, 0, 0, 0}; // Led (GPIO 14,12,13,15) qui est plus logique.
Par contre, j'ai un autre problème inattendu et sans rapport.
Dois-je ouvrir une nouvelle discussion ?
Je ne peux plus téléverser alors que le moniteur série fonctionne bien avec mon programme en place.
erreurs signalées :
Le croquis utilise 438741 octets (87%) de l'espace de stockage de programmes. Le maximum est de 499696 octets.
Les variables globales utilisent 36708 octets (44%) de mémoire dynamique, ce qui laisse 45212 octets pour les variables locales. Le maximum est de 81920 octets. Jusqu'ici OK
esptool.py v3.0
Serial port COM3
Connecting......................................____Traceback (most recent call last):
File "C:\Users\scoubidou\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py", line 66, in
esptool.main(cmdline)
File "C:/Users/scoubidou/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py", line 3552, in main
esp.connect(args.before, args.connect_attempts)
File "C:/Users/scoubidou/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/esptool\esptool.py", line 529, in connect
raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
le port série sélectionné n'existe pas ou votre Arduino n'est pas connecté.
Je ne comprends pas ce qui se passe, quelqu'un peut-il me dire ce que je dois faire ?
Merci d'avance.
3ème problème : (envoi de SMS de notification avec FREE)
Après 2 ans 1/2 de bon fonctionnement, nouveau problème apparu il y a 2 ou 3 mois.
Contrainte acceptée : Le certificat SHA1 était à renouveler une fois par an environ. (fingerprint)
Maintenant, il semblerait que le certificat soit variable pour chaque SMS.
(en fait il y en a qui reviennent de temps en temps, une fois sur 10 environ) Conclusion : l'envoi d'un sms est très aléatoire.
Quelqu'un a-t-il vu ce problème ? Remède ?
Je voudrais éviter d'utiliser un serveur intermédiaire et IFTTT. (jamais testé)
Merci pour ta réponse mais je vois que ma question n'a pas été comprise ou, que tu ne connais pas bien le sujet. (sans vouloir d'offenser)
Pour envoyer SMS je connais 3 possibilités.
-1) Piloter un module GSM.
J'en ai un, j'ai réalisé un système d'envoi d'alarme qui fonctionne. (+ carte SIM)
-2) Utiliser un serveur intermédiaire et s'y connecter, IFTTT ou autre avec +/- de restrictions.
-3) Chez FREE (uniquement je pense ?) utiliser le service d'envoi de SMS de notification gratuit.
Ce service très simple de FREE, qui utilisait une empreinte numérique (clé SHA1) valable pour 1 an environ, (qu'il fallait mettre à jour annuellement), ne fonctionne plus comme avant.
La clé SHA1 varie constamment ce qui fait que l'envoi de SMS est quasi impossible.
D'où mes questions : Pourquoi ces changements ? Est-ce normal ? y a t-il une solution ? Laquelle ?
Je n'ai rien trouvé sur Goglo pour l'instant.
Concernant la technique 2), je la trouve plus "lourde" et pourquoi utiliser un serveur extérieur (un tiers) si je peux le faire plus simplement et directement ?
(A ce jour je ne l'ai jamais testé)
Je n'ai pas encore posé la question en appelant le 3244.
Je ne pense pas qu'ils sauront me répondre mais je vais essayer.
(Sur un autre problème technique j'ai dû me "bagarer" durant 6 mois avant que mon problème soit compris et pris en considération.)
Tu as raison Geryko, je ne connais pas bien le sujet. Je cherchais plutôt dans la direction de ce que tu appelles la solution 2. Si Free impose un code différent pour chaque SMS, ça va vite devenir compliqué, sauf à écrire ou trouver le programme qui génère ledit code en live. Pour ça il faut comprendre ce code, et la solution 3 devient aussi voire plus lourde que la 2.
@lesept
Je ne suis pas spécialiste non plus mais dans la technique 2) c'est cet intermédiaire qui envoie le SMS en non FREE, si j'ai bien compris.
A confirmer par d'autres svp.
A+
Par contre l'exemple que j'avais donné il ya 5 ansau message #16 de ce fil de discussion ne fonctionne probablement plus tel quel vues les modifications survenues depuis dans la librairie SSL de l'extension Arduino pour ESP8266.
Pourquoi ne pas partir de l'exemple actuel HTTPSRequest, remplacer la requête vers Github par une requête valide vers "API smsapi.free-mobile.fr ?
Mon code date d'un moment ou le HTTPS était géréde manière provisoire dans l'extension ESP8266)
Il fonctionne peu être en rétrogradant l'extension vers la version 2.3.0 !!
Quand à un changement d'empreinte SHA de certificat , toujours 'codée en dur' comme je le faisais faute de mieux en 2016, aucune idée... j'espère qu'il est désormais possible de faire mieux avec une librairie SSL actuelle.
Le problème se produit uniquement si on utilise une "empreinte numérique" (clé SHA1) valable pour 1 an environ.
et ça fonctionne une fois sur 10 ou 20 seulement car les clés SHA1 reviennent cycliquement !
C'est surtout ton dernier paragraphe qui m'intéresse et qui pourrait résoudre mon problème ?
Quelqu'un a la solution ?
Merci et à +
je n'ai pas de quoi tester en ce moment (pas de carte Free disponible)
Aujourd'hui j'éviterai , contrairement à 2015/2015, de mettre une empreinte SHA de certificat (provisoire) ) en dur dans le code ...
j'adapterai l'exemple actuel HTTPSRequest qui fait travailler une librairie HTTPS bien plus fournie....
A tort peut être je ne suis pas convaincu par le 'il faut' de ton 2e message sur aduf.org,
(il fallalit 'à l'époque' avec les moyens disponibles , mais aujourd'hui on peut peut être faire autrement, confier à la librairie actuelle la gestion des certificats, = si possible , ne pas coder en dur une empreinte de certificat)
... je n'ai pas le temps en ce moment de creuser le sujet.....
Oui, je suis bien d'accord, c'est ce que je voudrais améliorer par ailleurs.
En dur ce n'est pas très pratique. Au minimum, il faudrait pouvoir le mettre en ROM et pouvoir le modifier sans tout recompiler.
2- Je vois que tu as bien compris et tu sembles même en connaitre plus que moi ?
3-
Oui j'aurais dû dire "il fallait" (jusqu'à début 2021).
4-
A 16h37 , j'avais le même SHA1 que le tien :
PROGMEM = "bf:3b:0b:a7:45:1d:32:7e:8b:8f:93:ba:4c:8e:0d:e9:44:cc:85:e8";
SHA-1 BF:3B:0B:A7:45:1D:32:7E:8B:8F:93:BA:4C:8E:0D:E9:44:CC:85:E8 chez moi.
à 16h53 j'avais :
SHA-1 D0:86:3C:33:F9:7E:48:BF:E0:C4:65:CA:A0:9E:F8:A3:38:6C:52:A2
et de plus le/les certificat/s n'est valide que 3 mois ?
5-
Je vais essayer mais je n'y crois pas. Je pense que cette sécurité n'a rien à voir le certificat en question.
6-
Là tu m'intéresses car je ne comprends pas bien.
L'exemple actuel HTTPSRequest: tu veux dire quoi ?
Tu connais un autre exemple ?
Non seulement le certificat serait en dur mais de plus in serait dans le fichier .h !
Je creuse aussi de mon côté. (rien d'urgent)
Cordialement
EXEMPLE: HTTPSRequest.ino est l'un des exemples fourni par l'extension ESP8266 pour la librairie ESP8266WiFi, il réalise à titre d'exemple une requête au serveur Github.
HTTP over TLS (HTTPS) example sketch
This example demonstrates how to use
WiFiClientSecure class to access HTTPS API.
We fetch and display the status of
esp8266/Arduino project continuous integration
build.
OBTENTION D'UN CERTIFICAT: Cert.py est un outil en Pyhon fourni également avec cette extention ; il récupère un certificat et crée un fichier .h prêt à l'emploi. Sur ma machine sous Ubuntu je le trouve içi :
Je le lance comme indiqué en tête du fichier certs.h accompagnant HTTPRequest.ino
CONSERVATION D'UN CERTIFICAT VALIDE et/ou son EMPREINTE :
En dur ce n'est pas très pratique. Au minimum, il faudrait pouvoir le mettre en ROM et pouvoir le modifier sans tout recompiler.
NB : il est sans doute possible de stocker cette information en mémoire Flash avec SPIFFS ou mieux LittleFS qui a vocation à le remplacer. Ainsi l'actualisation pourrait se faire sans nouvelle compilation
A 16h37 , j'avais le même SHA1 que le tien :
PROGMEM = "bf:3b:0b:a7:45:1d:32:7e:8b:8f:93:ba:4c:8e:0d:e9:44:cc:85:e8";
SHA-1 BF:3B:0B:A7:45:1D:32:7E:8B:8F:93:BA:4C:8E:0D:E9:44:CC:85:E8 chez moi.
à 16h53 j'avais :
SHA-1 D0:86:3C:33:F9:7E:48:BF:E0:C4:65:CA:A0:9E:F8:A3:38:6C:52:A2
As-tu entre temps désactivé puis réactivé l'option Notification par SMS dans ton espace abonné FreeMobile (ce qui modifie la ckef API )?
Pour information : les empreintes générées aujourd'hui à 14h20 et 18h12 avec l'utilitaire Cert.py sont identiques et valent "bf:3b:0b:a7:45:1d:32:7e:8b:8f:93:ba:4c:8e:0d:e9:44:cc:85:e8"
Je "creuse" mais mais mes possibilités sont limitées.
l'utilisation de Cert.py semble résoudre le problème mais je ne comprends pas tout et je ne sais pas lire l'anglais.
J'utilise Win10 et, je ne vois pas comment faire sans avoir un exemple à adapter.
Si je comprends bien, le certificat est recalculé à chaque envoi de SMS.
En fait, il suffirait de simuler le navigateur qui lui sait envoyer un sms à partir de mon code et d'un PW.
al1fch notamment (sous linux) me dit que dans la bibliothèque esp8266WiFi il trouve HTTPSRequest.ino :
"HTTPSRequest.ino est l'un des exemples fourni par l'extension ESP8266 pour la librairie ESP8266WiFi"
A priori je possède bien la librairie ESP8266WiFi version 1.0.
Je ne trouve pas le fichier HTTPSRequest.ino ?
Je le trouve sur Github est-ce normal ?
dans ma bibliothèque ESP8266WiFi j'ai d'autres Cert.py et Cert.h