Félix Rojo Trueba

Felix@cajon.es

Contador de visitas

Tenia ganas de tener un contador de visitas en mi web, claro que queda muy cutre poner un contador en la pantalla como se hacía antiguamente y estar entrando en la pagina de estadísticas para mirarlos me da pereza, por lo que me he decidido por crearme un contador externo con un derivado de Arduino.

Materiales.

  • 1- NodeMCU.
  • 2- Display de 8 digitos.
  • 3- Power bank (batería externa).
  • 4- Interructor.
  • 5- Cofre de los chinos (puede ser otra caja o un marco).
  • 6- Carton y papel.


Antes de todo necesitamos el ide de Arduino y configurarlo para que se pueda utilizar la placa NodeMCU para ello en el ide dentro de preferencias/ajustes en gestor de URLs Adicionales meteremos la siguiente dirección http://arduino.esp8266.com/stable/package_esp8266com_index.json

Después vamos a herramientas/placas/gestor de tarjetas y buscamos esp82.

Por ultimo en herramientas selecionamos nuestra placa en este caso el NodeMCU.

Ahora nos falta la libreria MAX7219 para controlar el dysplay, para ello la descargamos libreria MAX7219. y la incluimos dentro del ide arduino en programa/incluir libretria/añadir libreria zip.

Conexiones es muy simple

  • 1- Vcc del display al 3v3 del Node.
  • 2- Ground del display al ground de Node.
  • 3- Cs del display al D3 del Node.
  • 4- Din del display al D5 del Node.
  • 5- Clk del display al D6 del Node.
Ya tenemos todo conectado.

En la web para gestionar las visitas lo que he hecho es crearme una página llamada contador.php que solo me muestra visitas y el numero de ellas, por ejemplo visitas234, Con el NodeMCU me conecto a internet consulto esa página elimino la palabra visitas, me quedo con el número y lo mando al display esto lo hago cada segundo si alguien entra aumentara el contador casi instantáneamente. .

Introducimos el programa en el ide le compilamos y le subimos teniendo en cuenta cambiar el nombre de la red, el password , el host y la url.

/*
 Creando un contador de visitas externo con conexion wifi by Félix Rojo
 www.cajon.es
 utilizaremos un NodeMCU
 */
#define PIN_CS_MAX7219 D3 // Pin de Arduino al que se ha conectado el pin CS/SS del MAX7219
#define DIGITOS_DISPLAY_LED 8 // El display LED que se ha usado tiene 8 dígitos
 
#include <SPI.h> // La librería MAX7219 necesita que la librería SPI esté operativa y para no interferir con otros usos NO la inicializa
#include <MAX7219.h> // La librería MAX7219
#include <ESP8266WiFi.h>                        //Incluye la librería ESP8266WiFi
 
const char* ssid = "nombre red";               //Indicamos el nombre de la red WiFi (SSID) a la que queremos conectarnos.
const char* password = "password";           //Indicamos la contraseña de de red WiFi
 
const char* host = "cajon.es";            //Declaramos el servidor de conexión
const char* url="/contador.php";                       //Declaración de la url.

MAX7219 pantalla(PIN_CS_MAX7219,DIGITOS_DISPLAY_LED);
long visitas=0;
 
void setup()
{
  Serial.begin(115200);                         //Inicializamos el Puerto Serie
  Serial.println();
 
  Serial.printf("Connecting to %s ", ssid);     //Inicializamos la conexión Wi-Fi en modo Station
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");

  SPI.begin(); // Para no interferir con otro código que utilice SPI, la librería MAX7219 no inicializa SPI y hay que hacerlo desde el programa
  pantalla.inicializar(); // SPI debe estar inicializado antes de inicializar el MAX7219 (que usa SPI)
  pantalla.apagar();
  pantalla.desactivar_modo_prueba();
  pantalla.brillo(1); // Brillo medio (va desde cero hasta 15)
  pantalla.borrar();
  pantalla.encender();
}
 
void loop()
{
  WiFiClient client_1;                                 //Inicializamos el cliente (client_1)
 
  Serial.printf("\n[Conectando a %s ... ", host);      //Establecemos la conexión con el servidor
  if (client_1.connect(host, 80))
  {
    Serial.println("conectado]");
 
    Serial.println("[Enviando peticion]");             //Enviamos la petición de datos
    client_1.print(String("GET /")+url + " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" +
                 "Connection: close\r\n" +
                 "\r\n"
                );
 
    Serial.println("[Respuesta:]");                    //Leemos la respuesta del servidor
    while (client_1.connected())
    {
      if (client_1.available())
      {
        String line = client_1.readStringUntil('\n');
       if (line.substring(line.indexOf('v'),line.indexOf('v')+4) == "visi") {     //Quitamos la palabra visitas
          line=line.substring(7,100);
          Serial.println(line);                     //Salida que dejo para depurar en el serial
          visitas = line.toInt();                   //Convierto el string en entero
          pantalla.mostrar_cifra(visitas,0,false); // Mostrar el valor sin coma (cero) y sin rellenar con ceros (false)
          
        }
      }
    }
    client_1.stop();                                   //Finalizamos la conexión con el servidor
    Serial.println("\n[Desconectado]");
  }
  else
  {
    Serial.println("conexion con el servidor no lograda!]");
    client_1.stop();
  }
  delay(1000);        //Actualize cada segundo
}
              
Descargar el archivo

Ya funciona para que quedara un poco mas bonito lo meti en un cofre de los chinos (Podeis ponerlo en cualquier lado una caja un marco ...).

Yo le puse de fuente un power bank, se puede utilizar un cargador pero tiene que estar conectado a la red por lo que me pareció más engorroso.
Otro problema que tuve es que el power bank me dura unas 20 horas y luego a recargar por lo que opte por añadirle un interruptor así lo enciendo lo miro y luego lo apago..

Si os ha gustado ya sabéis montarlo si reciclais un power bank de publi y una caja de puros por ejemplo el precio del Node y el display será de 5€ más o menos.


Página creada por Félix Rojo Trueba