This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 2 voto(s) - 2.5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[SpainLabsIoT2018] Nodo ESP8266 - Smart Sensors Shield
#1
[Imagen: SensorsShield.png]

Smart Sensors Shield

[Imagen: 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.

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]

[Imagen: AJFO3JLl.jpg]

[Imagen: EPdbhXpl.jpg]

[Imagen: nVSH2Gzl.jpg]

[Imagen: 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
  Responder
#2
Barajo añadir un monoestable hecho con el famoso 555. Pero preferiría reducir al mínimo la circuiteria a añadir.
  Responder
#3
Ya tengo la idea, me queda probar un monoestable multivibrador y a acabar el diseño. Ya me empiezan a llegar componentes
  Responder
#4
Va avanzando la cosa, poco a poco. Ultimando revisiones al diseño y dentro de poco a fabricar. Dejo enlace a github: https://github.com/grafisoft/Smart-Sensors-Shield
  Responder
#5
Empezando a probar el prototipo:

[Imagen: UZiA7Ojh.jpg]

[Imagen: YUcMzoUh.jpg]
  Responder
#6
[Imagen: bmREgKih.jpg]

En plena pelea de código y hardware, voy a necesitar una manita si o si. Ya tengo casos extraños que no logro comprender Triste
  Responder
#7
Hace mogollon no programo en la IDE de Arduino pero comenta que pasa, quizá alguno pueda echar una mano.

Por cierto, en la placa de IoT cuantos sensores se pueden conectar sin la shield?


Saludos,
"Enseñar es aprender dos veces".
  Responder
#8
Probablemente yo pueda echarte un cable en algo, al menos en lo que respecta a programación... di lo que buscas realizar, los recursos(pines, entradas, salidas) disponibles y si tienes algo hecho, pues pasalo y le echo un ojo.
Hace tiempo que no me pongo en serio a programar en arduino pero malo será.
  Responder
#9
(20-06-2018, 10:43 PM)Kurama escribió: Hace mogollon no programo en la IDE de Arduino pero comenta que pasa, quizá alguno pueda echar una mano.

Por cierto, en la placa de IoT cuantos sensores se pueden conectar sin la shield?


Saludos,

Pues la verdad es que uso Atom+PlatforIO y programo el ESP con el framework de Arduino, es lo que as conozco.

La placa de IoT es estilo Arduino, tienelos pines accesibles, asi que segun cuanto te lo apañes con cablecitos y modulos extra, pues podras añadir mas o menos sensores.
  Responder
#10
(20-06-2018, 11:37 PM)Shellmer escribió: Probablemente yo pueda echarte un cable en algo, al menos en lo que respecta a programación... di lo que buscas realizar, los recursos(pines, entradas, salidas) disponibles y si tienes algo hecho, pues pasalo y le echo un ojo.
Hace tiempo que no me pongo en serio a programar en arduino pero malo será.

Esta tarde subo codigo y demas. El caso es que tratando de gestionar el mcp23017 (que es el expansor de pines de 16bits), las primeras instrucciones como que no las reconoce si uso la "libreria a modo de API" que voy a intentar hacer. si lo pruebo como cargando un código solo con esas instrucciones, sin usa la libreria, va bien. Asi que creo que estoy metiendo la pata en alguna pijada, pero no doy con ello.

Usando github podremos trabajar bien sobre el código no?

Gracias

saludos.
  Responder
#11
Si, supongo que si. Lo que no se es si existe algo para sincronizar el codigo del ide de arduino contra git directamente mediante commits... ya le echare un ojo...
  Responder
#12
He actualizado las librerías del PlatformIO y añadida una pequeña trampa, lo que hago es ejecutar 2 veces una función que configura la shield. Así me aseguro que por lo menos se inicializa bien, ya que no tenia claro que se inicializara bien. Sigo avanzando, subo en un rato lo que llevo hecho, voy a ver si sueldo la circuiteria de algún socket mas para seguir probando Sonrisa
  Responder
#13
[Imagen: 580saX7h.png]

Ejemplo básico de lectura de un sensor BME280. Mas o menos es fácil, aun se puede mejorar mas (la gestión del MUX de I2C lo tengo que meter dentro de la librería), pero como idea sirve. Se podrían conectar hasta 5 sensores iguales (con la misma dirección I2C) sin entrar en conflicto, y gestionados independientemente. El código quedaría así para un sensor:

Código:
/*
CURSO BASICO IOT DE LA COMUNIDAD SPAINLABS.COM
Ejemplo basico para la lectura del sensor BME280 usando la placa de
expansión Smart Sensors Shield.
Compatible con las versiones del modulo ESP8266: esp-07/12/12E.
Enlace: https://www.spainlabs.com/foros/tema-SpainLabsIoT2018-Nodo-ESP8266-Smart-Sensors-Shield
Firmware para el hardware desarrollado en el curso SpainLabsIoT2018.
Enlace: https://www.spainlabs.com/foros/tema-SpainLabs-con-el-IoT-para-tod-s

Este ejemplo realiza lo siguiente:
 - Gestión de la placa de expansión Smart Sensors Shield.
 - Lee el sensor BME280. Envia los datos al monitor serie (115200).
 - Alimenta el Socket B, durante 1s, donde tenemos colocado un led.
 - Apagado de todos los socket y de la shield.

Diseño: Grafisoft.
Fecha: 21/6/2018.
Version: 1 revA.
*/
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "SmartShield.h"

Adafruit_BME280 bme; // Sensor BME280 I2C.
//#define BME280_ADDRESS  0x76  // Otra posible direccion I2C del sensor BME.
SmartShield Shield; //SmartSensorShield library.
#define SEALEVELPRESSURE_HPA (1034.9)

void setup() {
 Serial.begin(115200);
 Serial.println("\nSmart Sensors Shield - API Development");
 Serial.println("\nSmart Sensors Shield - BME280 example");
 //Configuración de la shield.
 Shield.Set();

}

void loop() {

 Shield.ON(BOARD);
 Shield.ON(SOCKET_A);
 delay(500);

 //Configuramos el I2CMUX en el canal 7 (SD7/SC7).
 Shield.tcaselect(7);
 delay(500);

 //Inicializamos el sensor bme280.
 bool status;
 status = bme.begin(0x77);
 if (!status) {
     Serial.println("Could not find a valid BME280 sensor, check wiring!");
     while (1);
 }
 delay(100); // let sensor boot up

 //Lectura del sensor y envio de datos al monitor serie.
 Serial.print("Temperature = ");
 Serial.print(bme.readTemperature());
 Serial.println(" *C");

 Serial.print("Pressure = ");

 Serial.print(bme.readPressure() / 100.0F);
 Serial.println(" hPa");

 Serial.print("Approx. Altitude = ");
 Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
 Serial.println(" m");

 Serial.print("Humidity = ");
 Serial.print(bme.readHumidity());
 Serial.println(" %");

 Serial.println();

 //Alimentamos el Socket B durante 1 segundo.
 Shield.ON(SOCKET_B);
 delay(1000);
 //Apagamos todo.
 Shield.OFF(SOCKET_B);
 Shield.OFF(SOCKET_A);
 Shield.OFF(BOARD);
 delay(1000);

}
  Responder
#14
He subido lo que tengo de código de la librería y un ejemplillo básico. No es gran cosa, es muy muy básico y sencillo, pero como me atasque no avance mucho. Lo he subido también en zip porque es el proyecto del editor Atom+PlatformIO y algún archivo no lo sube, no se porque.

Estas semanas intentare ir avanzando y soldando las diferentes partes de la shield Sonrisa
  Responder
#15
[Imagen: YZrWbieh.png]

Subidos un par de ejemplos sobre como usar el ADC que lleva la Shield. El ADC es el MCP3421 de 18Bits.

Se suben dos ejemplos, uno de uso genérico del ADC y otro usando una función de lectura rápida en la librería.

https://github.com/grafisoft/Smart-Senso...GenericADC
https://github.com/grafisoft/Smart-Senso..._ADC18Bits
  Responder
#16
Verificado el Socket G, corresponde al conector donde tenemos comunicación UART. Subo un ejemplo de como usar la opción de simular por software el protocolo UART y así dejar libre el que tiene el conector de programación.

En Github: https://github.com/grafisoft/Smart-Sensors-Shield

Ya van quedando menos conectores, quizás los mas complejos.
  Responder
#17
Actualizado el post principal con fotos del proto casi soldado al 100%.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  ESP8266 queda inaccesible juandavid8a 4 2,671 16-02-2023, 07:40 AM
Último mensaje: ruben2023
  Ayuda por favor con TUYA SMART lambda4 0 539 10-11-2022, 04:11 PM
Último mensaje: lambda4
  CONSULTA Clones ESP32 y ESP8266 Anje 5 1,758 15-11-2020, 11:14 AM
Último mensaje: grafisoft
  [SOLUCIONADO]Raspberry Pi no ve mensaje ESP8266 silth 9 2,301 24-04-2020, 07:30 PM
Último mensaje: grafisoft
  [SpainLabsIoT2018] Caso real: Nodos ESP8266 grafisoft 78 26,394 09-04-2020, 03:33 PM
Último mensaje: grafisoft