Go Down

Topic: Compteur de j'aime Facebook sur Arduino (Read 3251 times) previous topic - next topic

hbachetti

A ta guise, donc.
Essaie l'autre solution dans un deuxième temps.
Elle tiendra beaucoup moins de place.
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

achappard

En respectant le cablage de @hbachetti, j'ai uploadé le programme suivant qui marche bien :
Code: [Select]
#include <Arduino_JSON.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "MON_RESEAU_WIFI";
const char* password = "MON_PASS_WIFI";
unsigned int display_fan_count        = 0;
const String get_fans_count_url  = "http://mon-url-me-renvoyant-du-json.com";


void setup () {

  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(1000);
    Serial.println("Connection au réseau WIFI...");

  }
  Serial.println("Connecté au WIFI !!!");
}

void loop() {

  if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status

    unsigned int current_fan_count = retrieve_fb_fan_count();
    if ( current_fan_count != display_fan_count) {
      display_fan_count = current_fan_count;
      update_display_fan_count(display_fan_count);
    }
    //Serial.println(current_fan_count);
  }

  delay(3000);    //Send a request every 30 seconds

}

void update_display_fan_count(int new_number) {
  Serial.println("Mise à jour du compteur : " + (String) new_number + " fans");
}

int retrieve_fb_fan_count() {
  HTTPClient http;  //Declare an object of class HTTPClient

  http.begin(get_fans_count_url);  //Specify request destination
  int httpCode = http.GET();                                                                  //Send the request

  if (httpCode > 0) { //Check the returning code

    String payload = http.getString();          //Get the request response payload
    JSONVar myObject = JSON.parse(payload);     // Convert to json

    if (JSON.typeof(myObject) == "undefined") {
      return 0; // erreur
    }
    if (myObject.hasOwnProperty("fan_count")) {
      return (int) myObject["fan_count"];
    }
  }
  http.end();   //Close connection
  return 0;
}



Seulement, lorsque je débranche le RST du Ground de l'arduino et le GPI0 de l'ESP01 du Ground (pour dire à l'ESP01 : c'est bon j'ai fini de te programmé), je n'ai plus de débug.

hbachetti

Bien entendu, c'est la UNO qui reprend la ligne série pour son propre compte.
C'est l'inconvénient de la solution UNO + ESP01.

Il est certainement possible de brancher un FTDI sur GPIO2 de l'ESP01 (TX uniquement, pas besoin de RX) avec un SoftwareSerial à initialiser dans le code ESP01 et ensuite utiliser ce SoftwareSerial à la place de Serial pour afficher le debug.

Ça commence à ressembler à une usine à gaz ...
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

achappard

#33
Apr 05, 2019, 06:49 pm Last Edit: Apr 05, 2019, 06:57 pm by achappard
Whoua, je m'y perds  :o . Pas si facile! Je pensais que c'était plus simple. C'est con, le programme tourne bien sur l'esp01. Je pense que une fois le programme ci dessous uploadé sur l'ESP, il faut faire un branchement différent sur la UNO. Mais je ne sais pas où trouver le détail de ces branchements.

Je vais m'inspirer de cette vidéo : c'est exactement ce que je cherche( je ne sais pas pourquoi il branche sur du 5V, je vais rester sur le 3.3V)

hbachetti

Une ligne série ne se partage pas.
Pour charger du code dans la UNO, le bootloader a besoin de la ligne série.
Donc il faut débrancher l'ESP01 du RX/TX de la UNO pour que cela puisse se faire.

Ensuite, il a un besoin de communication entre la UNO et l'ESP01 (transmettre une valeur de compteur).

Le RX/TX de l'ESP01 est utilisé pour communiquer avec la UNO, auquel cas le debug va aussi suivre le même chemin, ce que le programme de la UNO ne va pas comprendre.

Imaginons qu'il y ait un canal de communication entre RX/TX ESP01 et un SoftwareSerial sur la UNO.

Il est possible d'adopter une convention :
- si l'ESP01 envoie une ligne commençant par un mot clé : facebook=valeur, la valeur est affichée sur le TM1637
- si l'ESP01 envoie autre chose, les caractères (le debug) sont envoyés sur Serial
Cela revient à faire une espèce de routage avec un protocole hyper-simplifié.
Donc au final, le debug de l'ESP01 et le debug de la UNO seront affichés sur la console.

Cela convient-il ?

La solution du TM1637 sur l'ESP01 est plus simple ...
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

icare

Bonjour,
Deux articles sur le sujet dans Hackable n° 29 pages 14 et 24
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

achappard

Quote
La solution du TM1637 sur l'ESP01 est plus simple ...
Après plusieurs jours d'essai, je pense que je vais partir sur cette solution. Je me plie à votre expérience.
Cependant, dans l'idée de faire évoluer le projet, je voudrais avoir plus de broche de dispo (Deux pour l'afficheur TM1637 + eventuellement d'autre (pkoi pas commander un servo moteur levant un drapeau à chaque nouveau "J'aime Facebook"?

Du coup je pensais partir sur une carte ESP8266 NodeMcu WiFi Development Board

Pensez-vous que cela soit faisable ? Si oui cette carte délivre du 3.3V : ce voltage sera-t-il suffisant pour piloter le TM1637 ou autre composant (comme un simple servo) ?

Merci de vos réponses.

dbrion06

"Si oui cette carte délivre du 3.3V : ce voltage sera-t-il suffisant pour piloter le TM1637 "
La réponse est mitigée:
Normalement, un niveau logique du TMS 1637 devrait depasser 0.7* Vdd : si le TMS1637 est alimenté en 5 volts, 3volts ne suffisent pas; mais, selon http://www.microcontroller.it/english/Tutorials/Elettronica/componenti/TM1637.htm
One final note concerns the supply voltage: if TM1637 can be supplied from 3 to 5V (this is not explained in the data sheet), it is the minimum conduction voltage of the LEDs that determines the minimum supply value. Thus, blue LEDs will not be able to be powered at less than 5V.

Une solution serait de ne pas alimenter le TMS sous 5v, mais sous 5v -0.7v (la chute d'une diode dans le sens passant type 1N4001) ; là, des niveaux logiques de 4.2*0.7 = 2.8 pour le 1 sont acceptables (et il faut espèrer que les diodes bleues seront allumables).
Une autre solution serait d'utiliser des adaptateurs de niveaux bidirectionnels.

Pour les servomoteurs, la commande doit avoir un niveau haut au delà de 2.5v volts (pas de problème, si mon pari et ma mémoire sont fidèles)

hbachetti

La datasheet du TM1637 ne précise pas le minimum de tension d'alimentation.
Mais je vois beaucoup de projets à base de TM1637 alimentés en 3.3V :
https://github.com/bitbank2/tm1637
http://www.esp8266learning.com/tm1637-7-segment-display-example.php
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

achappard

J'ai reçu mon ESP12E aujourd'hui : je le branche, upload mon programme sans soucis ! Tout marche bien !
J'attends maintenant mon TM1637 pour faire l'affichage.

Merci @hbachetti pour les conseils !

hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

achappard


dbrion06

Merci pour votre réalisation, décrite clairement dans le lien que vous avez mis ci dessus.

hbachetti

Trop fort pour un "Tout nouveau dans le monde d'Arduino"

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up