{"id":491,"date":"2017-04-07T19:58:54","date_gmt":"2017-04-07T17:58:54","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=491"},"modified":"2020-09-24T19:59:44","modified_gmt":"2020-09-24T17:59:44","slug":"internet-of-things-restful-api-con-python-y-flask-raspberry-pi-zero-y-sensor-de-temperatura","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=491&lang=es","title":{"rendered":"Internet of Things, Restful API con Python y Flask, Raspberry Pi Zero y sensor de temperatura"},"content":{"rendered":"<p><a href=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2017\/04\/rpi_zero_sensor_temp.jpg\"><img loading=\"lazy\" src=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2017\/04\/rpi_zero_sensor_temp-300x222.jpg\" alt=\"\" title=\"rpi_zero_sensor_temp\" width=\"300\" height=\"222\" class=\"alignright size-medium wp-image-1454\"><\/a>Estoy montando un proyecto acad\u00e9mico de <strong>Internet of Things<\/strong>. Se pretende medir la temperatura exterior en mi barrio con un sensor <strong>DS18B20<\/strong> conectado a una Raspberry Pi Zero. Tal como se ve en la foto, he tenido que conectar un l\u00e1piz Wifi USB. Idealmente ser\u00eda mejor hacer el proyecto con la nueva Raspberry Pi Zero W que acaba de salir hace un mes, y que lleva wifi incorporada.<\/p>\n<p>La temperatura se va almacenando cada 10 minutos en una base de datos <strong>MongoDB<\/strong>. La parte m\u00e1s interesante del proyecto es programar una <strong>Restful API<\/strong>, y para hacerlo lo har\u00e9 con <strong>Python<\/strong> y el microframework <strong>Flask<\/strong>, a partir  de alg\u00fan ejemplo que he encontrado (ver los enlaces). En la versi\u00f3n 1 s\u00f3lo hab\u00eda un servicio, que era el bolcado de todas las temperaturas. La versi\u00f3n 2 ya hace m\u00e1s cosas: bolcar todas las temperaturas; recuperar la temperatura actual; filtrar por un d\u00eda; filtrar por varios d\u00edas al mismo tiempo.<\/p>\n<p>Otra parte importante es la capa de presentaci\u00f3n, y para ello utilizo la librer\u00eda <strong>Highcharts.com<\/strong>, que da unos resultados muy espectaculares. Para cada funci\u00f3n de la API se dar\u00e1 un ejemplo html, para ejemplificar c\u00f3mo se pueden digerir los datos.<\/p>\n<p>En las futuras versiones de la API se calcular\u00e1n las medias de temperatura diarias, mensuales y anuales, de manera que se puedan hacer comparativas entre d\u00edas, meses,&#8230; De momento todav\u00eda no est\u00e1 disponible.<\/p>\n<p>La API todav\u00eda no es p\u00fablica, estoy en fase de desarrollo. En el momento que sea estable y p\u00fablica ya lo anunciar\u00e9. De momento la tengo dentro de casa, bajo  los efectos del termostato de la calefacci\u00f3n, con lo que los resultados no son interesantes. Pero la idea es despu\u00e9s de Semana Santa trasladarlo todo al local, el sensor en el exterior, y la Raspberry Pi dentro del local. Se podr\u00e1 acceder a la API en el domini o<em>http:\/\/joanqc.no-ip.biz\/<\/em>, pero todav\u00eda no est\u00e1 disponible.<\/p>\n<p>La idea de desarrollar esta API es, a parte de que programar es divertido, poder utilitzar <em>open data<\/em> en formato JSON en la asignatura de <strong>Javascript (M06)<\/strong> en el ciclo de Desarrollo de Aplicaciones Web (DAW), en el instituto. Evidentmente, hay muchos ejemplos disponibles de open data y format <em>JSON<\/em>. Pero un ejemplo donde los alumnos vean de d\u00f3nde salen realmente los datos, siempre ser\u00e1 interesante.<\/p>\n<p>En el primer enlace tenemos la documentaci\u00f3n y discusi\u00f3n de toda la puesta a punto. Es el punto de partida principal si se quiere reproducir el proyecto. En el segundo enlace se documenta la API, en sus diferentes versiones.<\/p>\n<ul>\n\\t<\/p>\n<li><a href=\"http:\/\/wiki.joanillo.org\/index.php\/IoT,_Raspberry_Pi,_RESTful_web_services\" title=\"IoT, Raspberry Pi, RESTful web services\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/wiki.joanillo.org\/index.php\/IoT,_Raspberry_Pi,_RESTful_web_services<\/a><\/li>\n<p>\\t<\/p>\n<li><a href=\"http:\/\/wiki.joanillo.org\/index.php\/Rest_API-IoT-Raspberry:_joanillo_temperatura_restapi\" title=\"Rest API IoT Raspberry: joanillo_temperatura_restapi\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/wiki.joanillo.org\/index.php\/Rest_API-IoT-Raspberry:_joanillo_temperatura_restapi<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Estoy montando un proyecto acad\u00e9mico de Internet of Things. Se pretende medir la temperatura exterior en mi barrio con un sensor DS18B20 conectado a una Raspberry Pi Zero. Tal como se ve en la foto, he tenido que conectar un l\u00e1piz Wifi USB. Idealmente ser\u00eda mejor hacer el proyecto con la nueva Raspberry Pi Zero [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[310,314,322,324,320,348],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/491"}],"collection":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=491"}],"version-history":[{"count":1,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/491\/revisions"}],"predecessor-version":[{"id":492,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/491\/revisions\/492"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}