{"id":7766,"date":"2018-05-09T00:23:58","date_gmt":"2018-05-08T23:23:58","guid":{"rendered":"http:\/\/blog.whatsbee.net\/?p=7766"},"modified":"2018-05-09T00:34:48","modified_gmt":"2018-05-08T23:34:48","slug":"sexto-paso-pines-pines-y-mas-pines","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=7766","title":{"rendered":"Sexto paso: pines, pines y m\u00e1s pines"},"content":{"rendered":"<p>Recapitulando lo que hemos hecho hasta ahora solo nos queda libre el GPIO2 y todav\u00eda tenemos que poner:<\/p>\n<ul>\n<li>Un sensor de ultrasonidos HC-SR04P-&gt; 2 pines<\/li>\n<li>Un led de estado-&gt; 1 pin<\/li>\n<li>Un rel\u00e9 reed para que el usuario pueda interactuar-&gt;1 pin<\/li>\n<li>Un buffer para conseguir que los sensores no consuman cuando el micro est\u00e1 en Deep Sleep-&gt; 1 pin<\/li>\n<li>Un term\u00f3metro para hacer la compensaci\u00f3n de temperatura del sensor de ultrasonidos-&gt; 1 pin.<\/li>\n<\/ul>\n<p>En total tenemos que liberar 6 pines, lo cual parece una tarea imposible, pero estoy firmemente dispuesto a que este circuito sea lo m\u00e1s sencillo posible, por lo que vamos a darle una vuelta.<\/p>\n<p>Aclaro algunas cosas en este punto: Me gustar\u00eda tener un mecanismo para poder configurar el dispositivo, cambiarle los periodos de sleep, las claves de Lora, y para poder almacenarlo en un modo con un consumo m\u00ednimo y que el cliente se lo active al recibirlo. Uno de los motivos por los que hemos utilizado el ESP8266 es para poder poner el dispositivo en un modo que nos permita acceder a trav\u00e9s de su wifi y configurarlo.\u00a0 Para ponerlo en modo wifi hace falta alg\u00fan\u00a0elemento\u00a0que haga de interfaz con el usuario. Como queremos que sea lo m\u00e1s impermeable posible pondremos un rel\u00e9 reed. Acercando un im\u00e1n al dispositivo el rel\u00e9 se habilitar\u00e1 y la WiFi se pondr\u00e1 en marcha en modo de configuraci\u00f3n. Tambi\u00e9n queremos dar al usuario un indicador de que estamos en modo de configuraci\u00f3n, la idea es utilizar un led, posiblemente\u00a0dentro de la carcasa aprovechando la trasparencia que tiene el material. Nos quedan dos temas por resolver: por un lado\u00a0para calcular el nivel utilizamos un sensor de ultrasonidos y calculamos la distancia en funci\u00f3n del tiempo que tarda el rebote y la velocidad del sonido. Como la velocidad del sonido var\u00eda en funci\u00f3n de la temperatura\u00a0\u00a0no nos ir\u00eda mal conocerla para compensar la diferencia. Finalmente, no quiero tener permanentemente alimentados los sensores ya que nos consumir\u00edan energ\u00eda mientras el micro duerme. Por ese motivo mi intenci\u00f3n es que la l\u00ednea de alimentaci\u00f3n de los sensores se active solo cuando necesitemos medir, con un pin. Mientras el micro duerme no estar\u00e1n alimentados, en el momento en el que el micro tenga que leer los alimentar\u00e1. El pin, directamente, no soporta la corriente necesaria por lo que vamos a hacer la prueba con un buffer, he encontrado uno que consume solo 0,9uA en reposo, que parece el adecuado.<\/p>\n<h3>Recuperando pines<\/h3>\n<p>Leyendo la documentaci\u00f3n de la librer\u00eda LMIC veo que el Pin DIO3 de la radio se utiliza para la modulaci\u00f3n FSK, como solo vamos a usar Lora lo liberamos directamente. Ohhh, malas noticias, el pin que hab\u00edamos usado es el GPIO3 que corresponde al RX de la UART, podremos hacer algo, pero no es utilizable para cualquier cosa.<\/p>\n<p>Buscando buscando llego a <a href=\"https:\/\/github.com\/matthijskooijman\/arduino-lmic\/pull\/34\/commits\/1416a62fe2e99b247d408e737ff8f30e0ffa34a1?diff=split\">este art\u00edculo<\/a>,\u00a0al parecer alguien tiene un comit pendiente a la librer\u00eda LMIC para poder prescindir de los DIOS de la radio y en lugar de leerlos por hardware leer un registro del RFM95 a trav\u00e9s del SPI.\u00a0 Lo pruebo y funciona!!! con lo que liberar\u00edamos dos pines, pero leo que\u00a0no est\u00e1 del todo claro que no hayan problemas de timing con la recepci\u00f3n de Lora. Al final opto por una soluci\u00f3n intermedia que sugieren, que es conectar los DIO1, DIO2 y DIO3 con unos diodos emulando una puerta OR y una resistencia de pulldown. He recuperado otro\u00a0GPIO sin correr demasiados riesgos, y este es de los buenos.<\/p>\n<p>Veo que la \u00faltima versi\u00f3n de la librer\u00eda del sensor de ultrasonidos permite utilizar el trigger y el echo en el mismo pin del procesador. Tiene todo el sentido del mundo, en lugar de usar dos pines la librer\u00eda pone el trigger como output, dispara lo pone como input y espera el echo (me imagino), con esto no libero ning\u00fan pin, pero me ahorro uno.<\/p>\n<p>Intento sensar el rel\u00e9 reed en el puerto anal\u00f3gico, pero veo que no puedo, el puerto anal\u00f3gico es utilizado por la funci\u00f3n ESP.getVcc() para recoger la tensi\u00f3n de alimentaci\u00f3n y este dato lo necesitamos para conocer el nivel de la bater\u00eda. No me sirve la idea, mi plan B que era utilizar un sensor de temperatura anal\u00f3gico tambi\u00e9n se desmonta.<\/p>\n<p>Aunque el GPIO0 se utiliza para poner en modo programaci\u00f3n el ESP y alguna cosilla m\u00e1s, pienso que es un buen puerto para poner el LED. Este puerto tiene que estar a nivel alto para que el procesador arranque en el modo que deseamos, pero la comprobaci\u00f3n se hace solo en el inicio, por lo que entiendo que despu\u00e9s se puede utilizar sin problemas. Pruebo el LED y me doy cuenta de que ese puerto cambia de estado varias veces cuando arranca el micro.\u00a0 No nos sirve!!!! el cambio de estado implica que el LED se enciende y consume bater\u00eda. Posteriormente pruebo el term\u00f3metro por este GPIO y veo que funciona sin problemas (o con problemas que no tienen que ver con esto que comentaremos m\u00e1s adelante), con lo que recupero un GPIO m\u00e1s porque el GPIO0 lo hab\u00eda descartado inicialmente.<\/p>\n<p>He puesto el GPIO3 (RX) con input, lo cual me permite seguir depurando por el TX y utilizarlo para la entrada del rel\u00e9 reed. Como el rel\u00e9 reed est\u00e1 normalmente abierto me va a permitir subir los programas cuando lo necesite sin Interferir, as\u00ed que al final podremos aprovechar el primer GPIO que liberamos.<\/p>\n<p>Nos falta uno y habremos triunfado para el buffer que va a alimentar los sensores. El ESP 12e tiene accesibles unos pines en la parte de atr\u00e1s, cuando intento configuar el modo me aparece basura por el puerto serie y el ESP se acaba reiniciado desde el wdg. Despu\u00e9s de\u00a0algunas b\u00fasquedas veo que se utilizan internamente para la comunicaci\u00f3n con la memoria flash, lo cual hace inviable el utilizarlos. profundizando e investigando un poco m\u00e1s veo en <a href=\"https:\/\/github.com\/esp8266\/Arduino\/issues\/2124\">este art\u00edculo<\/a>\u00a0que hay dos pines que se utilizan para la comunicaci\u00f3n QIO y no se utilizan para la comunicaci\u00f3n DIO con la flash. Uno no se puede utilizar porque est\u00e1 cableado internamente a la memoria, pero el GPIO10 se puede liberar si el modo de comunicaci\u00f3n con la\u00a0flash es DIO.\u00a0 Pruebo y, eureka!!!!! me funciona sin problemas para conectar el bufferque proporcionar\u00e1 la alimentaci\u00f3n a los senores.<\/p>\n<p>Tengo todos los GPIO que necesitaba que era una cosa que no ten\u00eda clara al principio. Con todo esto ya podemos dibujar el esquema del circuito.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recapitulando lo que hemos hecho hasta ahora solo nos queda libre el GPIO2 y todav\u00eda tenemos que poner: Un sensor de ultrasonidos HC-SR04P-&gt; 2 pines Un led de estado-&gt; 1 pin Un rel\u00e9 reed para que el usuario pueda interactuar-&gt;1&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=7766\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":7767,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[208],"tags":[209,222,216,217,221],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7766"}],"collection":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7766"}],"version-history":[{"count":3,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7766\/revisions"}],"predecessor-version":[{"id":7770,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7766\/revisions\/7770"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/media\/7767"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}