viernes, 24 de febrero de 2017

esp8266 - Estacion metereologica sensores + api-json openweathermap

Este proyecto nacio por mi interes por el cambio climatico que estamos teniendo, aunque se dice que el efecto invernadero es mentira sin palabras ja.

 Esta estacion metereologica comenzo con sensores reales

Servidor estacion de modo local
microcontrolador 24bits / esp-8266 esp-12
Medicion de temperatura y humedad: DHT-22
Medicion de presion atmosferica: BMP-180
Punto de rocio a presion atmosferica - Calculado
Pronostico - Calculado (mejorar)




 Obtencion de request a API
No me agradan las API pero luego de leer un muy buen post

 https://cirujadigital.wordpress.com/2017/01/11/obteniendo-informacion-de-internet-para-nuestro-proyecto-iot-apis-del-clima-geolocalizacion-fechahora-and-other-issues/

como que me dio curiosidad y admito que tiene una potencia increible pero dependemos de tener internet.

Api Geolocalizacion de google
Obtenemos los datos de georeferencia latitud y longitud desde donde generemos la peticion ip, o torre celular (funciona bien en mi caso no detecta antena pero me da la posicion por ip bastante acertada)

request(post-https) --->devuelve un json -->lo parseamos con arduino-json

Api Openweathermap
Obtenemos los datos del clima  a partir de pasarle la latitud y longitud obtenida de la api de google

request(get-http)  --->devuelve un json -->lo parseamos con arduino-json

Herramientas a usar
Rest Clinet para firefox para hacer las pruebas


Deben registrarse en ambas api para obtener las api_key y revisar la documentacion par obtener los datos.

openweathermap  http://openweathermap.org/api

GET http://api.openweathermap.org/data/2.5/weather?lat=XXX&lon=XXX&APPID=(aca va su api_key)e&units=metric&lang=es


Geolocalizacion api google  https://console.developers.google.com

Documentacion de su uso
https://developers.google.com/maps/documentation/geolocation/intro?hl=en_US

Esta es diferente usamos el metodo POST

POST https://www.googleapis.com/geolocation/v1/geolocate?key=("aca va su api_key")
Head
Content-Type: application/json
Body


{
  "homeMobileCountryCode": 310,
  "homeMobileNetworkCode": 410,
  "radioType": "gsm",
  "carrier": "Vodafone",
  "considerIp": "true",
  "cellTowers": [
    // See the Cell Tower Objects section below.
  ],
  "wifiAccessPoints": [
    // See the WiFi Access Point Objects section below.
  ]
}


Ahora con los datos de respuesta en formato JSON usamos la libreria arduino-json el cual tambien tiene un generador de variables dinamicas

https://bblanchon.github.io/ArduinoJson/assistant/




Aca dejo la implementacion de las api para la estacion metereologica no finalizada aun.



Estacion con sensores
sudo git clone https://github.com/pablinn/est_met.git
https://github.com/pablinn/est_met

Uso de API
sudo git clone https://github.com/pablinn/api_google.git

https://github.com/pablinn/api_google

Version final implementar todo mejorar la geolocalizacioncon un GPS real..

Saludos..


Mejoras implemente el modo deepsleep gracias a la ayuda del grupo esp8266 de facebook, con buenos resultados pero en el grupo me comentaban que el consumo deberia ser menor del orden de los uA

modo normal conectado 80mA
modo deepsleep 8mA deberia ser 10uA
Pero el regulado as1117 drena alrededor de 7.5 a 8 mAlo que nos da una vida de bateria aprox.

Segun este blog
http://arduinoamuete.blogspot.com.ar/2017/01/modo-deep-sleep-en-esp8266.html

ESP.deeepsleep( uint32_t uS,int modo de reinicio)

Machete :)
1 minuto --> 60 segundos S
1 minuto ->  60000 milisegundos mS (60exp3)
1 minutos -> 60000000 microsegundos uS (60exp6)

 
El maximo valor uint32_t seria 2^32 = 4294967296 uS = 71min , 32 seg

 4294967296/ 60000000=71 minutos
 
//*gpio16 conectado a reset

if (millis() >= 60000) {//1 min
      ESP.deepSleep(300 * 1000000, WAKE_RF_DEFAULT);//3min
    
     }
//*


v_BAT [v] * a_BAT [ah] / vc_BAT [v] * ac_BAT  [a]
7.4 V * 0.850 AH / 3.3 V * 0.082 A =23.2 Hs
7.4 V * 0.850 AH / 3.3 V * 0.008 A =238 Hs  :)
las 238 hs son en teoricas ya que el consuma oscilaria entre 8mA a 80mA por lo que depende del tiempo

t <tiempo de actividad (mayor consumo 80mA)
t >tiempo de deepsleep (menor consumo 8mA)

En teoria este calculo lo saque de un blog
=(v_bat / corr_work ) * (tiempo_sleep / tiempo_work)

=(850mAH /80mA )* (300s / 60s)

=53 Hs
Si extendemos el tiempo de deepsleep aumentamos las horas de autonomia

=(850 /80 )* (600 / 60)
=106hs

=(850 /80 )* (2000 / 10)  --->2000/60 = 33 minutos sleep x 10 seg work
=2125 hs



Probando la api de thingspeak esta bastante buena y podemos para realizar tendencias..


No hay comentarios.:

Publicar un comentario