27-04-2018, 06:37 PM
![[Imagen: SensorsShield.png]](https://raw.githubusercontent.com/grafisoft/Smart-Sensors-Shield/master/SensorsShield.png)
Smart Sensors Shield
![[Imagen: NIkBixzl.jpg]](https://i.imgur.com/NIkBixzl.jpg)
Me he metido en el fregado de hacer una shield para la placa que hice para el mini curso de Internet of Things, basado en ESP8266 y usando varias herramientas de software libre. Ahora mismo se encuentra como en la foto, aun acabando el diseño y con algún problemilla por resolver que me he dado cuenta tarde.
La placa facilita la conexión de diferentes sensores de tipo I2C, UART, Onewire, etc. Comunicación SPI no esta contemplada, pues es mas difícil encontrar sensores que unicamente usen SPI (suelen tener varias opciones). Las ventajas de esta placa están enfocadas al control de lo que se le conecta, y por tanto, tener controlado el consumo en aplicaciones donde nos sea necesario reducirlo. Tenemos un control de la alimentación individual de cada conector (a excepción de uno, que para el uso que esta enfocado no lo precisa) y también el control en el bus de comunicaciones de cada tipo, es decir, cada conector tiene aisladas sus lineas de comunicaciones. En ocasiones surgen problemas al tener conectados varios dispositivos en un mismo bus, se generan conflictos. Otro caso que quedaría resuelto es si queremos conectar sensores con una misma dirección I2C, esto no supondría un problema ya que cada conector esta aislado. Disponible un conector UART con alimentación a 5V. El resto de conectores funciona a3v3. La shield cuenta con huellas extra para añadir condensadores si fuera necesario por el tipo de dispositivo que conectemos a la placa. Los conectores son compatibles con la mayoría de sensores de la plataforma Grove, si alguien no conoce esta plataforma, puede darse una vuelta por aquí: https://www.seeedstudio.com/category/Grove-c-1003.html
Actualmente no he localizado una shield similar a la que se plantea, por lo que si se ve interesante, igual me animo a portarla a otras placas como nodeMCU, Particle, Father, y poco mas. Escucho sugerencias y opiniones.
Por el momento, y dado un despiste (mas bien se me metió en la cabeza que una cosa era así, cuando no lo es), me estoy peleando con el tema de las interrupciones. El ESP8266 tiene una gestión nula de ellas, y estoy mirando como casar las interrupciones con el DeepSleep del micro, que es bastante chapucero, pero necesario. Esto abriría la puerta a poder controlar adecuadamente un pluviómetro, sin tener que dejar el nodo despierto continuamente. Si se os ocurre o conocéis algo sobre este tema, compartidlo conmigo. Voy a usar un chip expansor (el MCP23017) que tiene un pin que genera interrupción si alguno de los pines suyos tiene un cambio de estado. El problema, y donde metí la pata, el pin que genera la interrupción mantiene el estado (ya sea alto o bajo) hasta que lees el registro de interrupciones del MCP. Esto nos lleva a que no podemos meterlo directo al pin de reset del ESP8266, ya que el reset se produce con un pulso, no con un flanco. Lo comparto con vosotros a ver si se os ocurre algo. Estoy barajando la posibilidad de jugar tambien con el pin "Enable", pero hay situaciones que no funcionaria bien.
Aun le queda para que esta placa vea la luz como prototipo, calculo que 6 semanas mínimo. Si que buscare en su momento un par de personas que quieran ayudarme con el testeo y depuración de la librería. Os lo voy compartiendo por si os resultara útil y veis alguna cosa.
La placa facilita la conexión de diferentes sensores de tipo I2C, UART, Onewire, etc. Comunicación SPI no esta contemplada, pues es mas difícil encontrar sensores que unicamente usen SPI (suelen tener varias opciones). Las ventajas de esta placa están enfocadas al control de lo que se le conecta, y por tanto, tener controlado el consumo en aplicaciones donde nos sea necesario reducirlo. Tenemos un control de la alimentación individual de cada conector (a excepción de uno, que para el uso que esta enfocado no lo precisa) y también el control en el bus de comunicaciones de cada tipo, es decir, cada conector tiene aisladas sus lineas de comunicaciones. En ocasiones surgen problemas al tener conectados varios dispositivos en un mismo bus, se generan conflictos. Otro caso que quedaría resuelto es si queremos conectar sensores con una misma dirección I2C, esto no supondría un problema ya que cada conector esta aislado. Disponible un conector UART con alimentación a 5V. El resto de conectores funciona a3v3. La shield cuenta con huellas extra para añadir condensadores si fuera necesario por el tipo de dispositivo que conectemos a la placa. Los conectores son compatibles con la mayoría de sensores de la plataforma Grove, si alguien no conoce esta plataforma, puede darse una vuelta por aquí: https://www.seeedstudio.com/category/Grove-c-1003.html
Actualmente no he localizado una shield similar a la que se plantea, por lo que si se ve interesante, igual me animo a portarla a otras placas como nodeMCU, Particle, Father, y poco mas. Escucho sugerencias y opiniones.
Por el momento, y dado un despiste (mas bien se me metió en la cabeza que una cosa era así, cuando no lo es), me estoy peleando con el tema de las interrupciones. El ESP8266 tiene una gestión nula de ellas, y estoy mirando como casar las interrupciones con el DeepSleep del micro, que es bastante chapucero, pero necesario. Esto abriría la puerta a poder controlar adecuadamente un pluviómetro, sin tener que dejar el nodo despierto continuamente. Si se os ocurre o conocéis algo sobre este tema, compartidlo conmigo. Voy a usar un chip expansor (el MCP23017) que tiene un pin que genera interrupción si alguno de los pines suyos tiene un cambio de estado. El problema, y donde metí la pata, el pin que genera la interrupción mantiene el estado (ya sea alto o bajo) hasta que lees el registro de interrupciones del MCP. Esto nos lleva a que no podemos meterlo directo al pin de reset del ESP8266, ya que el reset se produce con un pulso, no con un flanco. Lo comparto con vosotros a ver si se os ocurre algo. Estoy barajando la posibilidad de jugar tambien con el pin "Enable", pero hay situaciones que no funcionaria bien.
Aun le queda para que esta placa vea la luz como prototipo, calculo que 6 semanas mínimo. Si que buscare en su momento un par de personas que quieran ayudarme con el testeo y depuración de la librería. Os lo voy compartiendo por si os resultara útil y veis alguna cosa.
Actualización: 2/7/18:
Bueno, ya esta soldado el proto 1, que como su nombre indica no sera la versión final. Me queda de soldar una parte para las interrupciones, pero a grandes rasgos quedaría así. El proto tiene algunos fallitos que se solucionaran en la siguiente versión, y algún cambio menor también habrá. Lo básico esta funcionando como se esperaba, ahora queda pulir detalles.
Se puede ver que tiene muchas huellas de componentes sin soldar, pero son huellas para soldar condensadores si se necesitaran para filtrar la alimentación de cada conector de forma individual.
Características:
- 500mA common for 3,3v sockets.
- 1A for 5v socket. Socket types:
- 4x I2C connectors. 3,3v.
- 1x I2C connector with interruption pin 3.3v.
- 1x ADC 18bits 1CH connector (3,3v).
- 1x UART 3,3v
- 1x UART 5v
- 1x Pluviometer connector or other type sensor.
- 1x Direct to ESP8266 connector
- 2.00mm connectors.
- Basic interrupts management.
Fotos [Prototipo 1]:
![[Imagen: NIkBixzl.jpg]](https://i.imgur.com/NIkBixzl.jpg)
![[Imagen: AJFO3JLl.jpg]](https://i.imgur.com/AJFO3JLl.jpg)
![[Imagen: EPdbhXpl.jpg]](https://i.imgur.com/EPdbhXpl.jpg)
![[Imagen: nVSH2Gzl.jpg]](https://i.imgur.com/nVSH2Gzl.jpg)
![[Imagen: dgryylil.jpg]](https://i.imgur.com/dgryylil.jpg)
Ejemplos en GitHub:
- Lectura de un sensor BME: [url=https://github.com/grafisoft/Smart-Sensors-Shield/tree/master/SmartSensor_Example_BME280][/url]https://github.com/grafisoft/Smart-Senso...ple_BME280
- Uso genérico del ADC 18Bits de la Shield: https://github.com/grafisoft/Smart-Senso...GenericADC
- Uso de la función de lectura rápida del ADC 18Bits: https://github.com/grafisoft/Smart-Senso..._ADC18Bits
- Uso del Socket para comunicación UART - Ejemplo de UART por Software: https://github.com/grafisoft/Smart-Sensors-Shield