Felix@cajon.es
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.
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
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.