Bonjour tout le monde,
j'ai une petite requête car je ne sais pas comment faire. Je souhaiterais mettre à jour la date et l'heure du module RTC mais de façon automatique et avec mon smartphone.
Pour une mise à jour automatique, le plus simple me semble d'aller chercher les informations sur un serveur ntp. Donc il faut une liaison WiFi.
Pour mettre à jour avec un smartphone, il faut connecter ta carte arduino en Bluetooth avec ton smartphone et lui envoyer ensuite les données de date et heure. Pour cela, il te faut utiliser une application de communication Bluetooth, telle que Serial Bluetooth terminal. Par contre ce sera moins précis puisqu'il y aura un humain dans la boucle, la précision sera limitée à une ou deux secondes.
Si tu veux faire en automatique avec ton smartphone, tu peux créer un partage de connexion WiFi et y connecter ton arduino pour aller interroger le serveur ntp. Sinon, on peut imaginer une application dédiée, sous Android, à concevoir toi-même avec MIT App Inventor par exemple.
Selon ta carte arduino, il te faudra des modules supplémentaires ou non pour le WiFi et le Bluetooth. Ainsi un ESP8266 a déjà le Wi-Fi, un ESP32 a les deux.
salut Lesept, j'aimerais me passer d'une liaison wifi car j'ai déjà une liaison bluetooth.
Pour ce qui est de l'application je l'ai déjà, je me connecte en bluetooth sans soucis, j'ai donc un module HC-05 dans mon projet.
Pour le NTP, ne peut on pas interroger le serveur directement avec le smartphone et transmettre ces valeurs à l'arduino en passant par le bluetooth via un protocole (de mon cru probablement) ?
J'ai une copie d'arduino nano (ECCDuino).
Hackira:
Pour le NTP, ne peut on pas interroger le serveur directement avec le smartphone et transmettre ces valeurs à l'arduino en passant par le bluetooth via un protocole (de mon cru probablement) ?
J'ai une copie d'arduino nano (ECCDuino).
Je suppose que c'est faisable, au moins avec MIT App Inventor, mais je n'ai jamais fait ça.
Ton smartphone (Androïd, IPhone ?) possède déjà son propre mécanisme de maintien de l'heure. Il est censé être toujours à l'heure, même hors réseau.
Il n'y a aucun besoin d'interroger un NTP, il te suffit de lui envoyer l'heure courante du smartphone, à moins que tu aies envie de t'imposer ceinture, bretelles, parachute et airbag ![]()
pour tout ce qui est ceinture, bretelles, parachute et airbag j'aime vivre dangereusement donc je n'aurais pas tendance à en mettre de trop, pas d'utilité XD
par contre aurais tu une solution pour le faire simplement ?
J'ai beau essayer je n'arrive pas à savoir comment je peut récupérer ce que je lui envoie via l'application.
Tout dépend comment tu envoies les données.
Si c'est sous forme de texte il faut adopter un format (exemple "2019-11-19 16:52") et parser les données.
sscanf ou strtok peuvent aider.
Si les données sont binaires (structure) c'est plus direct.
Mais encore faudrait-il savoir ce que tu envoies.
Je ne sais envoyer que du texte mais si c'est plus simple en binaire je vais essayer.
Par contre j'envoie un truc du style : sync 11-11-2019 16:52, bon après c'est peut être pas mis dans le même ordre mais l'essentiel est la.
Si ça peut t'inspirer.....
Reste en texte si c'est plus simple côté phone.
Parsing avec sscanf côté ARDUINO :
void setup() {
Serial.begin(115200);
char s[] = "sync 11-11-2019 16:52";
char req[6];
int day, mon, year, h, m;
sscanf(s, "%s %d-%d-%d %d:%d", req, &day, &mon, &year, &h, &m);
Serial.print(req); Serial.print(" "); Serial.print(day); Serial.print(" ");
Serial.print(mon); Serial.print(" "); Serial.print(year); Serial.print(" ");
Serial.print(h); Serial.print(" "); Serial.println(m);}
void loop() {
}
le truc c'est que c'est moi qui envoie le "sync ...", ce que je souhaite faire c'est une synchronisation automatique, or la je lui envoie une information qu'il ne vérifie même pas ...
Il faudrait être plus précis.
Tu envoies par quel moyen et quand ?
c'est justement la le problème : j'appuie sur le bouton de mon application android->passe par la voie série bluetooth et je ne fait rien du tout après pour le moment car je ne souhaite pas m'embarquer dans un code qui ne seras pas adapté à ce que je souhaite faire, et surtout je ne sais pas comment je peut le faire...
Tu envoies par quel moyen et quand ?
Tu ne réponds pas à la question.
mon application android->passe par la voie série bluetooth
Qu'il y ait un bouton je pouvais m'en douter, mais le contenu des données envoyées reste inconnu.
Je ne connais pas le développement APP ANDROID, mais envoyer les données périodiquement sans qu'il y ait besoin d'appuyer sur un bouton ne doit pas être un gros problème, non ?
hbachetti:
Tu ne réponds pas à la question.
ben si j'y réponds puisque je passe par la voie série du bluetooth
hbachetti:
Qu'il y ait un bouton je pouvais m'en douter, mais le contenu des données envoyées reste inconnu.Je ne connais pas le développement APP ANDROID, mais envoyer les données périodiquement sans qu'il y ait besoin d'appuyer sur un bouton ne doit pas être un gros problème, non ?
mon soucis ne se situe pas sur le développement android via MIT, la dessus je me débrouille plutôt pas mal.
Par contre c'est niveau arduino que ca me pose problème je ne sais pas comment je peut faire pour le faire automatiquement. les données envoyées sont du style : "sync 20/11/2019 16:00" rien de plus rien de moins.
Je m'était mis dans l'idée de me faire un pseudo protocole pour pouvoir savoir comment traiter l'information reçu mais la je suis perdu et je ne sais pas trop comment m'y prendre ...
Tu n'expliques pas ce qui te pose problème.
Si c'est la réception des données série, vois le tuto de J-M-L :
https://forum.arduino.cc/index.php?topic=500683.0
Si c'est le traitement des données reçues, en #9 j'ai donné un exemple traitant une chaîne du type "sync 11-11-2019 16:52".
Le modifier pour traiter une chaîne "sync 20/11/2019 16:00" est-il insurmontable ?
la réception des données ca c'est bon j'arrive a afficher ca sur l'ecran de mon arduino, par contre le traitement ca me pose problème car je ne comprends pas trop ton code.
Non pas qu'il ne soit pas clair, c'est très con et très basique mais je fonctionne comme ca : j'ai besoin que l'on m'explique la logique pour comprendre ce que je fait sinon je n'y arrive pas ![]()
et la je dois t'avouer que sans explication de ton code j'ai un peut de mal, je comprends certains trucs mais pas tout le code, donc si tu pouvais, sans vouloir faire mon chieur, m'expliquer le code ou le commenté simplement cela me simplifierais grandement la tache pour comprendre ce que je dois faire et le faire par moi même ![]()
Cherche "c++ reference sscanf" tu comprendras un peu mieux