viernes, 30 de junio de 2017

Nano as ISP

Para cargar los códigos en Arduino pro mini utilizaba un Arduino UNO pero me decidí a cambiarlo por un Nano y me dio algo fe follón encontrar el problema.

Ademas del cableado típico añadí un condensador de 10uf entre el reset del Nano y tierra.

Al código que viene con la IDE le modifiqué dos lineas. Recordar que este método solo sirve para las versiones de 5V.

CÓDIGO

Pieza en THINGVERSE

BLENDER FILE



iic scanner MY

Buenas, mira q me gusta juntar las cosas para comenzar un proyecto nuevo...

........................

Estos días estuve identificando las direcciones I2C de varios componentes y en un rato modifiqué el código "I2C Scanner" que se encuentra googleando. Mantiene la salida serie pero ademas muestra las direcciones en el lcd, por lo que no hace falta que este conectado al ordenador.

Si hay dos lcd con la misma dirección, se ven las notificaciones en las dos a la vez.

Usando la base que se muestra en las fotos para un Arduino Nano conecto el lcd en A4 y A5 y como tiene duplicados esos pines quedan los cables libres para el componente que queramos identificar.

enlace al CÓDIGO

También imprimí una pieza intentando economizar el gasto de plástico. La podéis descargar en Thingverse lista para impimir o descargar en formato Blender para modificar.

enlace a THINVERSE
enlace a BLENDER FILE




sábado, 17 de junio de 2017

Conunicación entre ESP8266 y Arduino

Buenas.

Hace algún tiempo había hecho una librería para comunicar ESP8266 con Arduino.

La idea era cargar un código tipo en Arduino y controlar todas sus funciones desde ESP: pinModes, reads y writes.

El primer error fue usar la comunicación por serie, la cual era muy inestable.
El segundo error fue pensar q solo podía cambiar el modo en que actúa un pin (entrada o salida) en el Setup.

Estos días estuve trabajando en la mejora.

Por una parte el bus IIC o I2C es estable porque las funciones de comunicación son interrupciones, el micro deja lo que esté haciendo para poder atenderlas. Me dio un poco de trabajo cubrir la necesidad de que los mensajes sean de una longitud determinada, conocida. Aparte de que trabaja con bytes (0-255) q hay que reconvertir a cadenas o enteros según se necesite.

Por otra parte, saber que puedo cambiar el "pinMode" durante la ejecución del programa, eliminó la necesidad de resetear Arduino para que la nueva configuración tenga efecto. Esto permite alcanzar la meta principal de tener un solo código tipo. Cargarlo solo una vez en Arduino. No es que cambie el cableado de un proyecto, sino que el proyecto y su cableado dependan de un solo código, el de ESP.

El bus IIC necesita un Master o Jefe, y ESP por su capacidad y velocidad es mejor que Arduino.
El bus IIC puede controlar varios Esclavos, cada uno con su dirección. Esto permite que un ESP pueda tener varios Arduinos a su servicio. Arduino es mejor en cuanto a numero de pines, (20 digitales en UNO, o 14 digitales y 6 entradas analógicas) y en rango de trabajo que va de 0 a 5v.

Por tanto, la única modificación que haremos al código tipo de Arduino, solo si usamos mas de un esclavo en cada Master, es dar una dirección única dentro del bus IIC.

Los códigos están disponibles en:

Github


y se aceptan dudas, comentarios y mejoras.

Anteriormente lo había enfocado como una librería, y aunque el coloreado de las funciones según se escriben facilita la lectura y corrección del código, últimamente prefiero trabajar teniendo las referencias en la misma pestaña,

El código Master1 es para un ESP con un solo esclavo.
El código Master2 es para un ESP con dos o mas esclavos.
También puede usarse un Arduino como Master. Para esto quitaríamos la única orden que hace que no compile: Wire.setClockStretchLimit(40000);.  Teniendo en cuenta ademas que SDA y SCL son fijos en Arduino, A4 y A5 en 328P (UNO, Nano, Micro) y 20 y 21 en Mega
.
El código Slave es para un Arduino Nano o Micro. También sirve para UNO teniendo en cuenta que no disponemos de las entradas analógicas 20 y 21
El código SlaveMEGA es para un Arduino Mega.  Aunque dos esclavos UNO suman 36 I/Os por menos dinero.

Como se explica en el .md el cableado es directo SDA-SDA y SCL-SCL, sin resistencias ni conversor de nivel.

En ESP-01 se debe especificar Wire.begin (0,2);.
En WemosD1 esta serigrafiado en la placa, Wire.begin (); actúa en D4 y D3.
En nodeMCU 1.0  Wire.begin ();, activa por defecto D1 y D2

Descripción de funcionamiento:

En el código de ejemplo vemos la manera sugerida de uso. Antes de actuar sobre un pin del Esclavo comprobamos su configuración
El esclavo guarda en eeprom la configuración previa aunque es redundante con la comprobación desde master por lo que se puede escoger entre los dos métodos.
Ademas de actuar sobre los pines podemos intercambiar valores de las variables nVar[i]. Para compartir floats podemos usar dos variables, una se ocuparía de la parte entera y reconstruiríamos los decimales con la otra.

En el código de ejemplo está activada la comunicación serie, que no es necesaria para el funcionamiento del código. Pero como veréis en el Monitor Serie cada vez que enviamos una orden, obtenemos un eco, lo que nos permite obtener un acuse de recibo.

ESP y Arduino se complementan. Si tenemos hardware incompatible con ESP podemos cargar sus librerias en Arduino y segur tomando las decisiones desde Master.

viernes, 9 de junio de 2017

Codigo v2 Mega

Buenas.

 Acabo de terminar la versión 3 del programador de riego, basado en WemosD1/nodeMCU y me parece un sinsentido compartir este código pq:

- seguro q ya no compila con la versiones actuales de las librerías
- hay mejor hardware y mas barato
- para hacer q funcione de una forma mas sencilla

Cedo a vuestra educada insistencia pero mi...

Recomendación:
-aprovechad las partes q podáis
-aprovechad las partes q podáis

No doy soporte.

En mi opinión es una vía muerta.
me parece mejor poner n sectores a ESTE codigo q pelear con V2 Mega

mi padre me decía de pequeño
"non hai como dar na cabeza de un"