aqa's People
aqa's Issues
Se está llenando el segmento de memoria .text al momento de hacer el enlazamiento del binario
Al momento de compilar se presenta el siguiente error:
Linking .pioenvs/esp12e/firmware.elf
/home/brolin/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .pioenvs/esp12e/firmware.elf section `.text' will not fit in region `iram1_0_seg'
collect2: error: ld returned 1 exit status
*** [.pioenvs/esp12e/firmware.elf] Error 1
Si se comenta el #define NUEVA_TARJETA compila y la estructura de memoria que muestra del firmware es
Linking .pioenvs/esp12e/firmware.elf
Calculating size .pioenvs/esp12e/firmware.elf
Building .pioenvs/esp12e/firmware.bin
text data bss dec hex filename
372901 7228 32088 412217 64a39 .pioenvs/esp12e/firmware.elf
Se encuentra en internet esta información
- http://docs.platformio.org/en/latest/faq.html#program-memory-usage
- https://mcuoneclipse.com/2013/04/14/text-data-and-bss-code-and-data-size-explained/?utm_source=platformio&utm_medium=docs
Esta situación se presenta con las últimas versiones de platformio, para la versión 1.4.0 no se presentaba.
Errores en la altura que reporta el GPS
@josenobile señala altitudes sospechosas en la trama de datos:
lat,lng,date,hour,altitude,course,speed,humidity,temperature,pm1,pm25,pm10
6.263632,-75.597555,5/11/2017,06:13:41.00,1526.7,338.67,0.0,33.0,28.0,11,16,16
6.263632,-75.597555,5/11/2017,06:13:46.00,1526.7,338.67,0.0,32.0,29.0,10,15,15
6.263632,-75.597555,5/11/2017,06:13:52.00,1526.7,338.67,0.0,32.0,29.0,10,15,15
6.263632,-75.597555,5/11/2017,06:13:57.00,1526.7,338.67,0.0,32.0,29.0,10,15,15
6.2499,-75.593618,5/11/2017,22:59:34.00,150.6,103.42,28.54,38.0,23.0,53,75,82
6.249803,-75.593328,5/11/2017,22:59:39.00,152.7,118.22,25.0,38.0,23.0,53,75,82
6.249647,-75.593075,5/11/2017,22:59:45.00,155.0,135.6,18.82,38.0,23.0,53,75,82
6.249367,-75.592937,5/11/2017,22:59:50.00,157.7,156.37,23.37,38.0,23.0,53,75,82
6.249087,-75.592778,5/11/2017,22:59:56.00,159.6,149.09,20.67,38.0,23.0,53,75,82
6.248748,-75.592612,5/11/2017,23:00:02.00,155.9,149.59,20.52,38.0,23.0,53,75,82
6.248477,-75.592462,5/11/2017,23:00:08.00,157.8,148.75,18.56,38.0,23.0,41,55,61
Hay momentos donde se pasa de por ejemplo 1526 metros a 150 metros en la calle San Juan de Medellín.
Problemas de con versión de librería <ESPAsyncTCP> v1.1.2
Al intentar compilar una nueva clonación del repositorio sale un error en platformio-emacs:
.piolibdeps/ESPAsyncTCP_ID305/src/ESPAsyncTCP.cpp:78:28: error: invalid conversion from 'long int (*)(void*, tcp_pcb*, pbuf*, long int)' to 'tcp_recv_fn {aka signed char (*)(void*, tcp_pcb*, pbuf*, signed char)}' [-fpermissive]
tcp_recv(_pcb, &_s_recv);
^
La estructura dependencias que genera es:
Library Dependency Graph
|-- <DHT sensor library> v1.3.0
| |-- <Adafruit Unified Sensor> v1.0.2
|-- <FastLED> v3.1.6
| |-- <EspSoftwareSerial>
|-- <DoubleResetDetector> v0.0.2
|-- <ESPAsyncWebServer> v1.1.0
| |-- <ESPAsyncTCP> v1.1.2
| | |-- <ESP8266WiFi> v1.0
| |-- <ESP8266WiFi> v1.0
| |-- <Hash> v1.0
|-- <ESPAsyncWifiManager> v0.12
| |-- <ESP8266WiFi> v1.0
| |-- <DNSServer> v1.1.0
| | |-- <ESP8266WiFi> v1.0
| |-- <ESPAsyncWebServer> v1.1.0
| | |-- <ESPAsyncTCP> v1.1.2
| | | |-- <ESP8266WiFi> v1.0
| | |-- <ESP8266WiFi> v1.0
| | |-- <Hash> v1.0
|-- <Hash> v1.0
|-- <ESPAsyncTCP> v1.1.2
| |-- <ESP8266WiFi> v1.0
|-- <ESP8266HTTPClient> v1.1
| |-- <ESP8266WiFi> v1.0
|-- <TinyGPSPlus>
|-- <EspSoftwareSerial>
Comparandola con la estructura de una copia del repositorio que si compila bien se puede notar el uso de la versión 1.1.0 de ESPAsyncTCP :
Library Dependency Graph
|-- <DHT sensor library> v1.3.0
| |-- <Adafruit Unified Sensor> v1.0.2
|-- <FastLED> v3.1.6
| |-- <EspSoftwareSerial>
|-- <DoubleResetDetector> v0.0.2
|-- <ESPAsyncWebServer> v1.1.0
| |-- <ESPAsyncTCP> v1.1.0
| | |-- <ESP8266WiFi> v1.0
| |-- <ESP8266WiFi> v1.0
| |-- <Hash> v1.0
|-- <EspSoftwareSerial>
|-- <Hash> v1.0
|-- <ESPAsyncWifiManager> v0.12
| |-- <DNSServer> v1.1.0
| | |-- <ESP8266WiFi> v1.0
| |-- <ESPAsyncWebServer> v1.1.0
| | |-- <ESPAsyncTCP> v1.1.0
| | | |-- <ESP8266WiFi> v1.0
| | |-- <ESP8266WiFi> v1.0
| | |-- <Hash> v1.0
| |-- <ESP8266WiFi> v1.0
|-- <ESPAsyncTCP> v1.1.0
| |-- <ESP8266WiFi> v1.0
|-- <ESP8266HTTPClient> v1.1
| |-- <ESP8266WiFi> v1.0
|-- <TinyGPSPlus>
Calibración
Para comparar la medición del sensor laser con el homologado del SIATA tenemos unas mediciones a pocos metros de la estación de la Y (zona del tesoro) :
- 2017-05-18 a las 10:01, PM2.5 : 40
- 2017-05-18 a las 14:23, PM2.5 : 22
Alguien puede ayudar a evaluar los datos de esa estación ese día a esas horas y comparar las mediciones para tener una aproximación al margen de error que estamos viviendo.
Hay glitches en el sensor de temperatura DTH11
Mejorar recepción del GPS
Uber menciona que si se usa una antena activa se puede mejorar la recepción.
No tenemos funcionalidades en el código para el lector de memoria SD
¿Cómo optimizar el almacenamiento y envío de datos del sensor?
Se busca lograr un formato optimizado como el que usan en https://earth.nullschool.net/ que es este https://raw.githubusercontent.com/cambecc/earth/master/public/data/weather/current/current-wind-surface-level-gfs-1.0.json
O en https://medium.com/vis-gl/wind-map-a58575f87fe3 que lo hacen binario https://github.com/uber/deck.gl/blob/5.3-release/showcases/wind/src/utils/load-data.js#L7
En este proyecto comprimen https://github.com/ourairquality/oaq-esp-open-rtos la información a almacenar en la Flash
Diseñar estrategia de almacenamiento offline y envío de datos al servidor
La memoria flash de los ESP tiene aproximadamente 3Megas de espacio para almacenamiento.
¿Cada cuánto debo registrar una muestra de datos?
¿Es necesario agregar una SD como otro nivel de almacenamiento, cuánto tiempo puedo guardar en la flash?
¿En qué momento debo enviar los datos, buscar permanentemente redes inalámbricas o descargar datos al celular y luego enviar desde el celular o cuándo llegue a un sitio establecido como HOME enviar datos?
Interfaces (entre entidades)
Podemos empezar a estructurar una forma clara, transparente y consistente para manejar las relaciones (flujos) entre entidades, entendidas como humanos, máquinas, instituciones, etc.
-
Debería contener las maneras de reaccionar ante diferentes verbos (como referencia los verbos que usa el protocolo http, GET, POST, PUT, DELETE etc.)
-
No es un sistema de tiempo real pues no se puede entregar una garantía de tiempo de respuesta.
-
Debería soportar el anonimato y el consenso
Iniciamos una documentación en el documento interfaces.org basado en la estructura de http://r-s-g.org/LCL/
¿Cómo verificar el funcionamiento del GPS?
Uno de los sensores deja una trama así:
federico,8.302080,0.000000,,,1.95,8.30,1.94,-1.00,-1.00,26,34,37
federico,8.302080,0.000000,,,1.95,8.30,1.94,-1.00,-1.00,26,33,34
federico,8.302080,0.000000,,,1.95,8.30,1.94,-1.00,-1.00,25,33,33
federico,8.302080,0.000000,,,1.95,8.30,1.94,-1.00,-1.00,21,30,30
Se ha probado al aire libre, con cielo abierto que en anteriores mediciones garantizaban la lectura del GPS.
¿Cómo verificar la conexión del GPS?
Entender la forma como mide el sensor de laser
@santiago encontró que el sensor se queda reportando la misma medida exacta por un tiempo, necesitamos entender esa situación y decidir si es así como queremos que funcione o corregirla.
No tenemos montaje para el lector de memoria SD
El firmware actual no permite conectarse a una red que tenga un portal intermedio (portal cautivo) como algunas redes corporativas o públicas
Aquí hay unos indicios para enfrentar el asunto: https://stackoverflow.com/questions/33343273/connect-to-captive-portal-wifi-using-esp8266
Diseñar circuitos cad para soldar dispositivos
Diseñar circuitos cad para integrar los siguientes dispositivos:
- Sensor de partículas (hay varios tipos)
- Cerebro (esp8266)
- Sensor detector de gas
- Sensor de humedad y temperatura
- GPS l80 de quectel
- Batería
- Sensor de cantidad de luz
- Botones de control externo
¿De qué manera se puede expandir el alcance de la lectura de un sensor?
Hay casos donde el sensor debe quedar cerca a una ventana para que el GPS pueda localizarse, si el transito de personas es por otra zona que no tiene línea de vista con los leds del sensor se requiere un satelite (ESP+LED's) que pueda leer la medición de Internet o del mismo sensor para replicar la medición en sus leds.
Crear endpoints en el servidor para manejo de los datos
¿Cómo vamos a manejar los datos en el servidor?
¿Cuál servidor vamos a usar?
No tenemos alternativas de retroalimentación visual del dispositivo
Se ha pensado en una matriz de leds que permita escribir el valor de la medición en el momento, o hacer animaciones en la gama de color de la medición.
También se ha pensado en un display.
Diseñar enclosure para disposición de los sensores
Dadas las carecterísticas del sistema:
¿Cómo debe ser el contenedor? funciona a la intemperie?
¿Cuál materiales podemos usar?
¿Se hace uno genérico para bicicletas, personas a pie, personas en carro?
Seleccionar micrófono para medir niveles de audio
Hacer que el color del led sea gradiente
Ya se logró que el led reporte lectura de la partícula PM2.5 en tres colores (verde, amarillo, rojo)
Nos preguntamos si lograr una escala gradiente en el led puede mejorar la experiencia de lectura.
Acá se documenta como definir los colores https://github.com/FastLED/FastLED/wiki/Controlling-leds
Reportar valor de sensores en el ESSID de la red
A través del ESSID de un AP creado por software en el firmware del ESP8266 se puede reportar el valor de los sensores principales.
Es crear el modo AP con la siguiente linea de código WiFi.softAP(AP_NameString, password); donde ssid es un String como String AP_NameString = "Calidad Aire PM2.5 " + PM25_value + "ug/m3";
Tener en cuenta que el ESSID tiene un límite de 32 caracteres
Llenar los campos en el post del blog
Textos de divulgación
El proyecto esta siendo invitado a presentarse ante públicos que no están familiarizados con sensores, código, microcontroladores etc. necesitamos unos textos, ojalá infográficos que ayuden a contextualizar y ser comprendidos por estas personas, quizá un fanzine, o un volante que pueda ser entregado.
Diseñar sistema de alimentación recargable
El sistema que se viene pensando es móvil, esto propone varios retos:
¿Cuál es la autonomía del dispositivo en términos de consumo de energía?
¿Qué tipo de baterías usar?
¿Se puede generar la energía que alimenta el sistema con páneles solares o una dínamo en una bicicleta?
¿Cómo integramos las mediciones de dos instancias de influxdb?
Perdimos un servidor por unos días, en reacción reenviamos las mediciones a otro servidor, queremos integrar los datos de ambas mediciones.
Quizá podría hacerse usando backup y restore descritos aquí https://docs.influxdata.com/influxdb/v1.5/administration/backup_and_restore/
No hemos ensamblado sensores para instalaciones fijas
No estamos aprovechando la posibilidad de tener sensores fijos midiendo 24 horas, idealmente igualar o superar el número de sensores de ciudadanos científicos.
Dificultades para leer archivos grandes
Durante el modo en que el ESP intenta conectarse a una red wifi hay una ventana para bajar el archivo datalog.txt accediendo a http//192.168.4.1/log pero la ventana de tiempo es, al parecer, muy corta y se congela la descarga para archivos grandes. (hasta 200k parece lograr bajar), aquí algunas de los métodos intentados:
*** esperar 1 minuto antes de resetear de nuevo =
***** conectarse a la segunda red creada
***** oprimir 20 segundos el boton reset
***** apagar dispositivo 5 minutos (trata de descargar las redes creadas en el cliente) =
***** Borrar las redes del ESP* en las redes conocidas ( descarga un porcentaje)
***** https://community.platformio.org/t/problem-connecting-esp8266-to-wifi-library-problem/610/6
***** Se considera la potencia, se intenta un cable más corto
***** FAIL Se considera usarlo sin conexion al computador, sino con adaptador a la pared FAIL
CLOSED: [2017-11-10 Fri 07:06]
- State "FAIL" from [2017-11-10 Fri 07:06] \
- no se resuelve
***** FAIL Se intentan listar los archivos con fs_list_files(); // test
CLOSED: [2017-11-10 Fri 07:22]
- State "FAIL" from "INPROGRESS" [2017-11-10 Fri 07:22]
****** entra al loop pero no lista los archivos
****** FAIL Se intenta abrir con SPIFFS.open("datalog.txt", "r");
CLOSED: [2017-11-10 Fri 07:22]
- State "FAIL" from [2017-11-10 Fri 07:22] \\
no sale nada
***** FAIL Se intenta poner la wifiManager.setConfigPortalTimeout(180); // test
CLOSED: [2017-11-10 Fri 07:56]
- State "FAIL" from [2017-11-10 Fri 07:56] \
no permite descargar
***** INPROGRESS Se intenta poner mas larga la espera del modo wifi
****** FAIL Descarga casi completo el archivo de 2.2 megas
CLOSED: [2017-11-10 Fri 07:36]
- State "FAIL" from [2017-11-10 Fri 07:36] \
queda incompleto el archivo
****** FAIL se intenta comentar la linea ESP.reset() del condicional del blocking loop
CLOSED: [2017-11-13 Mon 17:55]
- State "FAIL" from [2017-11-13 Mon 17:55] \
nada
***** FAIL Se intenta acceder a la FLASH con sudo dd if=/dev/ttyUSB0 of=/tmp/esp.image
CLOSED: [2017-11-10 Fri 07:08]
- State "FAIL" from [2017-11-10 Fri 07:08] \\
al parecer solo lee la línea en ejecución
***** TODO No escanee redes solo inicie el servidor de archivos
***** DONE Instalo FTPServerSample https://github.com/nailbuster/esp8266FTPServer/tree/master/examples/FTPServerSample
CLOSED: [2017-11-14 Tue 06:58]
****** FAIL Hago lectura corta e intento bajar por FTP
CLOSED: [2017-11-14 Tue 07:11]
- State "FAIL" from [2017-11-14 Tue 07:11] \
no se ve ningún archivo al conectarse por FTP después de hacer mediciones
***** INPROGRESS Dump de la memoria con esptool https://github.com/espressif/esptool#dumping-memory
****** TODO ¿cómo entender las direcciones de memoria descritas aquí? https://github.com/esp8266/esp8266-wiki/wiki/Memory-Map
Cambiar el huso horario de las mediciones
Hay que restarle 5 horas a la medida que esta guardando el sensor.
Documentar como se hace por si alguien en otro huso horario quiere participar en la red de mediciones
No hay diagrama de conexiones para el wemos d1 mini
Por el momento se puede adaptar la conexión con la gráfica http://wiki.unloquer.org/lib/exe/fetch.php?media=:personas:brolin:proyectos:montajeaqa.jpg
El punto de llegada de Influx y Chronograf no tienen ningún sistema de permisos
Cualquiera puede hacer cualquier cosa por ejemplo lo que señala Oscar: "veo que tengo acceso a opciones que deberían ser solo de un admin como borrarDB y otras."
No tenemos una forma de diferenciar las emisiones de pm2.5 generadas por el portador del sensor
Carlos (SIATA) señala
Hay un tema para pensar del correo sobre los sensores móviles puesto que hay dos miradas complementarias e interesantes.
-
Una primera aplicación de los sensores móviles pequeños que queremos impulsar y desarrollar en conjunto con un/loquer es como sensores pasivos a bordo de vehiculos 0 o cerca a 0 emisiones o caminando garantizando que el vehiculo no altera la medición (en este caso no tiene mucho sentido que se incluya uso de motos, taxis u otros vehículos).
-
Uso continuo (24/7) por personas de manera que se pueda estimar la calidad del ambiente en el que una persona normalmente vive/trabaja/se mueve/etc (en este caso pues si la persona se mueve en una moto tiene sentido que se mida desde ella).
Dimensiones del PCB y los sensores.
Tienen links a los datasheets de los sensores y algún dibujo del PCB? Es para sacar dimensiones y medir bien el chasis.
Problemas para borrar los datos de la Flash
Algunos dispositivos han presentado problema para borrar los archivos de datalog.txt en ese caso descomentamos la función SPIFFS.format();
https://github.com/unloquer/AQA/blob/master/firmware/src/main.cpp#L29
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.