¡Uppsss! No estás logueado ¿eres usuario registrado?
Si eres usuario de la plataforma, HAZ CLIC AQUI PARA ACCEDER A TU CUENTA
Después, vuelve a acceder a la plataforma de cursos.
Home › Foros › Curso IOT e Industria 4.0 › Módulo 2. Raspberry e IOT2040 › crear archivos
- Este debate tiene 10 respuestas, 3 mensajes y ha sido actualizado por última vez el hace 3 años, 1 mes por
roberto.vicario.
-
AutorEntradas
-
9 abril, 2019 a las 15:32 #7446
roberto.vicario
ParticipanteHola Íñigo:
esto se está poniendo muy interesante.
estoy haciendo un proyectito de registro de temperaturas transmitiéndolas por MQTT y registrándolas en un archivo. Estoy leyendo la temperatura con un NodeMCU y un sensor DS18B20. Funciona. Enviar por MQTT. Funciona. Registrar en un archivo de texto como un CSV para posteriores accesos: estadísticas… Funciona. Sacar una gráfica en un Dashboard. Funciona aunque me falta afinarlo.
Ahora quiero que el archivo se trocee para evitar un archivo demasiado largo o para facilitar accesos posteriores. La idea es que cada mes se genere un archivo distinto, pero no he dado con la forma de lograrlo. Mi idea inicial era, obtener de un timestamp la fecha y hora (sacadas en JS, y hasta ahí funciona, porque forman parte de lo que escribo en el archivo) y colocarlas en el path, algo así;
…/Desktop/año/mes pero me genera un archivo con ese nombre (…/año/mes)
Por fin la pregunta; ¿cómo puedo pasar el valor de la variable, no el nombre de la variable? Todos los intentos han acabado en que doy una cadena de caracteres y sale esa cadena como nombre del archivo. Lo que yo quiero es que si es marzo ponga marzo y si es 2019 ponga 2019. No sé si me he explicado pero confío en que me has entendido.
Un saludo y muchas gracias por todo
Roberto
9 abril, 2019 a las 22:03 #7452Iñigo Gútiez
SuperadministradorHola Roberto,
He creado un ejemplo que espero que te sirva. Lo he dejado en el Anexo.
Creo que es lo que quieres hacer (más o menos).
Además, le he añadido un pequeño truquillo que espero que te guste
El enlace es: https://programacionsiemens.com/cursos/module-6/crear-csv-en-carpetas-de-forma-dinamica/
Ya me dirás si te es útil.
9 abril, 2019 a las 23:30 #7460roberto.vicario
ParticipanteFantástico, Íñigo:
de alguna forma intuía que iban por ahí los tiros. ya había sacado el mes el año y tal de la variable Date, pero era al pasarla al nombre del archivo donde me liaba. yo intentaba meterlo en el nodo File, pero ahí lo considera una cadena de caracteres, y en el nodo función, que es donde intuía que había que hacerlo, no veía cómo pasar el nombre del archivo al siguiente nodo.
Por suerte siempre hay alguien que sabe algo más y lo cuenta, que es lo que más vale. Gracias y me pongo a arreglarlo.
Un saludo
Roberto
10 abril, 2019 a las 7:25 #7462Iñigo Gútiez
SuperadministradorGenial. Me alegro 🙂
10 abril, 2019 a las 14:17 #7467franciscod
ParticipanteHola Roberto,
podrias subir el código que has hecho para ese sensor y las conexiones? Gracias!
10 abril, 2019 a las 18:54 #7468Iñigo Gútiez
SuperadministradorHola Roberto, podrias subir el código que has hecho para ese sensor y las conexiones? Gracias!
Vamos a ver ejemplo enseguida en arduino con mqtt y más cositas interesantes.
Pero si lo comparte, genial vaya jaja
-
Esta respuesta fue modificada hace 3 años, 1 mes por
Iñigo Gútiez.
10 abril, 2019 a las 23:29 #7477roberto.vicario
ParticipantePor supuesto.
En realidad, no lo he hecho. Encontré por casualidad un ejemplo que casi clavaba lo que yo quería hacer. Sólo tuve que adaptar dos o tres cosas y ya lo tenía. La verdad es que me vino de lujo, porque lo de los reenganches a la Wifi y tal para mí son un poco jaleo…
Está hecho para un ESP8266 desde el IDE de Arduino. Si ya conoces Arduino, sin más, adaptas el IDE con unas librerías y punto. Si no lo has visto, déjale a Íñigo que haga los primeros pases (que veo que ya tiene el horno a punto) y luego te lo metes sin anestesia.
Déjame que lo organice un poco y mañana lo subo. Soy un poco desastre y no son horas de ponerse a buscar …
Un saludo
Roberto
11 abril, 2019 a las 19:58 #7484roberto.vicario
ParticipanteBuenas tardes:
lo prometido es deuda. Aquí va el código del sensor. Por ser fiel a la verdad, lo he sacado de uno de la web instructables.com, que hacía prácticamente lo que yo quería, leer temperatura y, a través de la wifi de casa, publicarla en un servidor de MQTT. En un principio lo conecté al servidor de test.mosquitto.org y después al de la raspberry. El finde pasado, me fui de casa y dejé al sensor leyendo la temperatura del salón y transmitiéndola al servidor de test.mosquitto.org mientras yo, en Burgos, recibía en el portátil los datos a través de mosquitto y node-red.
En el código he cambiado (comentado) una función de reconexión al servidor MQTT porque me fallaba continuamente por otra función casi igual pero que no me falla. He comentado lo que publicaba esa función y listo. Las transmisiones las hace cada 10 segundos, pero se puede modificar al gusto.
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);
// Update these with values suitable for your network.
const char* ssid = «TU RED WIFI»;
const char* password = «TU CLAVE DE ACCESO»;
const char* mqtt_server = «TU SERVIDOR MQTT»;WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
float temp = 0;
int inPin = 5;void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print(«Connecting to «);
Serial.println(ssid);
WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(«.»);
}
Serial.println(«»);
Serial.println(«WiFi connected»);
Serial.println(«IP address: «);
Serial.println(WiFi.localIP());
}/*void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(«Attempting MQTT connection…»);
// Attempt to connect
if (client.connect(«arduinoClient_temperature_sensor»)) {
Serial.println(«connected»);
} else {
Serial.print(«failed, rc=»);
Serial.print(client.state());
Serial.println(» try again in 5 seconds»);
// Wait 5 seconds before retrying
delay(5000);
}
}
}*/void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(«Attempting MQTT connection…»);
// Create a random client ID
String clientId = «ESP8266Client-«;
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println(«connected»);
// Once connected, publish an announcement…
// client.publish(«outTopic», «hello world»);
// … and resubscribe
// client.subscribe(«inTopic»);
} else {
Serial.print(«failed, rc=»);
Serial.print(client.state());
Serial.println(» try again in 5 seconds»);
// Wait 5 seconds before retrying
delay(5000);
}
}
}void setup()
{
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
pinMode(inPin, INPUT);
sensors.begin();
}void loop()
{
if (!client.connected()) {
reconnect();
}
client.loop();long now = millis();
if (now – lastMsg > 10000) {
lastMsg = now;
sensors.setResolution(12);
sensors.requestTemperatures(); // Send the command to get temperatures
temp = sensors.getTempCByIndex(0);
Serial.println(temp);
if((temp > -30) && (temp <50))
{
client.publish(«TU TOPIC», String(temp).c_str());
}
}
}E E E Eso es todo amigos
Roberto
11 abril, 2019 a las 21:08 #7486roberto.vicario
ParticipanteSobre el circuito, el sensor DS18b20 se alimenta a 5 V y tiene tres pines o hilos. Se puede alimentar desde la propia placa del NodeMCU, por los pines Vin y GND si estamos alimentando la placa desde la conexión USB. Entre alimentación y masa se pone una resistencias de 4k7 ohm. El tercero es la salida de datos y se conecta al pin de entrada de datos que hayas elegido. En mi caso es el 5 del ESP8266 que corresponde con el D1 de la placa de NodeMCU (con el CP2102). La verdad es que es un poco jaleo la configuración de los puertos, por la numeración GPIO, por la numeración del ESP o por la numeración de la placa.
Si dejas la placa alimentada desde el USB no necesitas nada más.
esta es la web de la que lo he sacado.
https://www.instructables.com/id/Remote-Temperature-Monitoring-Using-MQTT-and-ESP82/
y esta es una imagen del esquema con fritzing
Saludos de nuevo
Roberto
11 abril, 2019 a las 22:23 #7488Iñigo Gútiez
SuperadministradorBien bien… ¡¡esa es la idea!!
¿Mola o no mola la experiencia?
12 abril, 2019 a las 1:45 #7498roberto.vicario
ParticipanteMOLA, MOLA.
la verdad es que Arduino lo conocía desde hace bastante tiempo, y ya había hecho alguna cosita, discreta, eso sí. Pero desde hace un tiempo me venía picando la curiosidad el tema del IOT y las comunicaciones. Quería hacer cosas de este estilo, leer un dato, transmitirlo y presentarlo en un PC o en un archivo o en el móvil… si además puedes hacer el camino inverso ya tienes un control remoto de tu calefacción o de tu arduino para que te haga un café cuando llegues a casa.
Vamos, la vida padre. Con qué poco me conformo…
-
Esta respuesta fue modificada hace 3 años, 1 mes por
-
AutorEntradas
- Debes estar registrado para responder a este debate.