martes, 29 de marzo de 2016

Framework Platformio + Geany + Raspberry PI

Hace un tiempo me quede sin PC sin notebook y buscanba la forma de programar diferentes microcontroladores usando el IDE de arduino bajo RPI (Raspberry PI) pero no hay version del cross-compiler para arm para poder programar los ESP.
Buscando encontre de casualidad Platformio un cross-compiler desde linea de comandos para diferentes entornos de trabajo Atmel, esspresif entre otros y la verdad es que me sorprendio logre programar arduinos y esp8266 sin problemas desde un RPI.
Tiene un excelente control de librerias e instalacion de lo que nesecites es mas que recomendable.
Tiene un par de inconvenientes el IDE grafico para RPI estoy usando GEANY debe haber otro pero realmente estoy comodo programando de esta forma.

Estube realizando pruebas con arduino uno, mega y un esp-01 y andubo perfecto, podemos cargar el firmware de OTA o webupdate y actualizar los esp de forma remota configurando la IP.


Instalacion siguiendo la info de la pagina web http://platformio.org/#/ y otros blogers
***********************************************
si no esta instalado easy_install
sudo apt-get install python-setuptools
luego
sudo easy_install pip (gestor de paquetes en python)
sudo pip install platformio
***********************************************

Tiene algunas complicaciones porque hay q usar la terminal pero es mas de mi agrado:
Crear la carpeta

***********************************************
sudo mkdir arduino/proy_01 (CARPETA DE PROYECTOS)
***********************************************

inicializar la placa tiene muchas opciones pero las podes listar y ver cual necesitas

***********************************************
platformio init --board esp01-1M (ESP8266 CON 1M ojo las esp-01 de color azul claro son de 512K)
***********************************************

otro ejemplo:
***********************************************
platformio init --board uno  (arduino uno)
***********************************************


poner el codigo en la carpeta genera un .ini y dos carpetas src y lib

***********************************************
-platformio.ini (archivo de configuracion)
-src(adentro va el .ino o .cpp)
-lib(librerias externas o propias)
***********************************************

Compilar generar el firmware en modo local.
***********************************************
platformio run
***********************************************

Subir o descargar el firmware al uC
***********************************************
platformio run --target upload
***********************************************

Limpiar archivos compiladodos y temporales.
***********************************************
platformio clean
***********************************************

Todo esto se puede hacer desde geany y compilar desde ahi... :) solo hay que configurar en opciones de compilacion.

compile=platformio run
build=platformio run --target upload
make object=platformio clean

y seleccionar la sintaxis de color de C++ y compilar seleccionando el archivo .ini









Voy a ir actualizando porque me siento bastante comodo con platformio y raspberry PI.
Sldos...

Siguiendo con las pruebas me consegui un esp-12, me costo programarlo pero funciono bien, unos de los problemas es la memoria no sabes si tienen 512K-1M o 4M y vienen con el protector para EMF el cual no te deja ver la flash a menos que lo desarmes.

Voy a tratar de analizar y probar un poco la arquitectura asi me queda en el blog...

Tamaños de memoria SPI

***********esto es del foro del esp822 *******************************
# SPI_SIZE_MAP
# 0 : 512 KB (256 KB + 256 KB)
# 1 : 256 KB
# 2 : 1024 KB (512 KB + 512 KB)
# 3 : 2048 KB (512 KB + 512 KB)
# 4 : 4096 KB (512 KB + 512 KB)
# 5 : 2048 KB (1024 KB + 1024 KB)
# 6 : 4096 KB (1024 KB + 1024 KB)
*******************************************************

esp8266-01 azul claro 512k (no funcionan para OTA)



esp8266-01 negro o verde obscuro  1M (si funcionan pero tienen poco espacio)


esp8266-12 azul claro (1M - no estoy seguro si alguien lo sabe he visto q les cambian la memoria de 512k a 1M  no hay mucha info muchas dudas, yo le descargue con la opcion esp01_1m pero no estoy seguro ya que hice una prueba con un DHT11 y me muestra un float y no hay conversion a entero esto lo tengo que revisar creo q son de 512k)


esp8266-12E verde oscuro AI (4M de memoria eeprom)
esp12E - Pinout

Diagrama de ingenieria inversa de la version de AI-Thinker


esta bueno agregarla un capacitor en la alimentacion por pequeñas variaciones en los consumos de corriente para evitar se active el WDT y se resetee.

Programando el esp12



Programando el esp12E(no lo probe aun)



Bueno programe un esp12 como indica el datasheet

1-reset no lo use aun pero es necesario una ves descargas el firmware, sacar jumper y debes resetearlo
2-ADC (convertidor analogico a digital soporta 1v)
3-CH_PD (enable chip va a 1 yo use una resist. 101R - 100ohm)
4-GPIO16 usado para el modo deep_sleep (no probado aun)
5-GPIO14
6-GPIO12
7-GPIO13
8-VCC (3.3 Vcc) va a 1
9-GND
10-102R smd a GND va a 0
11-GPIO2
12-GPIO0 este se usa para ponerlo en modo programacion va a 0 con un jumper
13-GPIO5
14-GPIO4
15-TX aca va cruzado a RX (en los datasheet sale diferente chequear)
16-RX aca va cruzado a TX (en los datasheet sale diferente chequear)

Entonces:
*******************************************************
Flash Mode
vcc CH_PD  GPIO0 GPIO15
 1        1           0            0

Boot Mode
vcc CH_PD GPIO0  GPIO15
1        1             X        0

X- a nada libre o a VCC
*******************************************************

Funciono asi es mas al GPIO2 lo use para leer un DHT11 otra cosa que lei y lo voy a poner en practica es el modo bajo consumo o "deep sleep mode" algo que es muy util bajar el consumo tambien tiene un WDT (watdog timer) muy util cuando se cuelga el uP.

La idea es ponerlo a dormir y despertarlo (deep sleep mode) por decirlo asi con:

un timer interno (que lea cada 1hs un DHT22 ej. )
una interrupcion externa(arduino - rpi)
via UART (Arduino - RPI - uP - uC - PC con ftdi )
WDT (bueno este es interesante teoricamente se genera un pulso el cual si no existe resetea el uC lo he usado en PLC se genera el pulso sobre un rele/timer si falla el PLC chau pulso y activa una proteccion, aca es algo diferente porque es interno pero se podria crear un WDT con un GPIO generas el pulso y con algun arduino si deja de leerlo activar el respaldo)

Administracion de energia(sacado del datasheet de espressif)



OFF
si se pone a 0 CH_PD el RTC se desabilita y se borran los registros.

DEEP_SLEEP
Solo el RTC se alimenta el resta esta desconectado y mantiene datos basicos dela coneccion WIFI

SLEEP
El RTC queda operando algun evento para despertarlo (MAC - host - RTC timer - ext int) lo pone en modo de funcionamiento

WAKEUP
en este modo funciona el crystal oscilador y los PLL todo habilitado

ON
EN este modo el clock opera a toda velocidad se puede usar la instruccion WAITI para operar a velocidad minima.

:) mas que interesante no ?




Detalles a tener en cuenta para programar(no hacer lo que yo jaja)

Algunos errores al descargar el firmware con PlatformIO, fueron ocasionados por el cableado arme
todo en una plaqueta y funciona bien, tambien fallo la descarga por que tenia una terminal serie abierta leyendo por el puerto usb /dev/USB0, o sea usaba el archivo, (terminal minicom no aconsejada pero funciona ya encontrare alguna mejor).

*usar plaquetas para prototipos
*usar el menor cableado posible y que este bien firme
*no dejar abierta las consolas serie (arduino ide - minicom - putty etc.)

Saludos....