        <style>
            #donation_buttons td{
                border:medium none;
                background: inherit !important;
            }
            #donation_buttons table{               
                border:medium none;
                margin: auto;
                width: auto;
            }
        </style>
        {"id":6141,"date":"2020-12-28T18:36:14","date_gmt":"2020-12-28T18:36:14","guid":{"rendered":"http:\/\/rogerbit.com\/wprb\/?p=6141"},"modified":"2020-12-28T18:36:14","modified_gmt":"2020-12-28T18:36:14","slug":"weather-station-with-webserver-esp32-and-e-paper-screen","status":"publish","type":"post","link":"https:\/\/rogerbit.com\/wprb\/2020\/12\/weather-station-with-webserver-esp32-and-e-paper-screen\/","title":{"rendered":"Weather station with webserver, esp32 and e-paper screen"},"content":{"rendered":"<p>In this tutorial we will see how to make a weather station with esp32 and electronic ink display. We will analyze the source code, as well as see the connections of the electronic components, finally test the project with its operation. The printed circuit board is included completely free of charge.<\/p>\n<hr \/>\n<p>You may be interested in projects in Arduino, pic, robotics, telecommunications,\u00a0<a href=\"http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1\">subscribe http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1<\/a>\u00a0videos with full source code and diagrams<\/p>\n<div class=\"ubm_banner\"><a href=\"https:\/\/bit.ly\/3aXRDAu\" target=\"_blank\" rel=\"dofollow\"><img src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/useful_banner_manager_banners\/3-2-logo youtube.png\" width=\"1019\" height=\"731\" alt=\"SUSCRIBETE A NUESTRO CANAL DE YOUTUBE, TUTORIALES GRATIS\"><\/a><\/div>\n<hr \/>\n<p><strong>Circuit<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1.jpg\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5932\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-1024x925.jpg\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-1024x925.jpg 1024w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-300x271.jpg 300w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-768x694.jpg 768w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-600x542.jpg 600w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-820x741.jpg 820w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/circuito-1-1320x1193.jpg 1320w\" alt=\"\" width=\"1024\" height=\"925\" \/><\/a><\/p>\n<h4>FEATURES of the ESP32-T module<\/h4>\n<p><img src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2017\/08\/esp32pinout-227x300.jpg\" \/><\/p>\n<h3>Connectivity<\/h3>\n<hr \/>\n<p>The ESP32 module has all the\u00a0<strong>wiFi variants:<\/strong><\/p>\n<ul>\n<li>802.11 b\/g\/n\/e\/i\/n<\/li>\n<li>Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management<\/li>\n<\/ul>\n<p>This new version includes low-power<strong>\u00a0Bluethoot<\/strong>\u00a0connectivity<\/p>\n<ul>\n<li>Bluetooth v4.2 BR\/EDR and BLE<\/li>\n<li>BLE Beacon<\/li>\n<\/ul>\n<p>In addition, you can communicate using<strong>\u00a0SPI, I2C, UART, MAC Ethernet, Host SD protocols<\/strong><\/p>\n<h3>Microcontroller features<\/h3>\n<hr \/>\n<p>The\u00a0<strong>CPU<\/strong>\u00a0consists of a\u00a0<strong>Tensilica LX6 Model SoC<\/strong>\u00a0with the following features and memory<\/p>\n<ul>\n<li>Dual 32-bit core with 160MHz speed<\/li>\n<li>448 kBytes ROM<\/li>\n<li>520kByteS SRAM<\/li>\n<\/ul>\n<p>Have<strong>\u00a048 Pins<\/strong><\/p>\n<ul>\n<li>18 12-bit ADC<\/li>\n<li>2 8-bit DAC<\/li>\n<li>10 pin contact sensors<\/li>\n<li>16 PWM<\/li>\n<li>20 Digital inputs\/outputs<\/li>\n<\/ul>\n<h3>Power and consumption modes<\/h3>\n<p>For proper operation of the ESP32 it is necessary to supply a voltage between 2.8V and 3.6V. The energy you consume depends on the mode of operation. It contains a mode,\u00a0<strong>the Ultra Low Power Solution (ULP),<\/strong>in which basic tasks (ADC, PSTN&#8230;) continue to be performed in Sleep mode.<\/p>\n<hr \/>\n<h4>TEMPERATURE and Humidity Sensor DHT11<\/h4>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2019\/11\/dht11.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-5101\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2019\/11\/dht11.jpg\" sizes=\"(max-width: 345px) 100vw, 345px\" srcset=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2019\/11\/dht11.jpg 680w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2019\/11\/dht11-150x150.jpg 150w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2019\/11\/dht11-300x300.jpg 300w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2019\/11\/dht11-600x600.jpg 600w\" alt=\"\" width=\"345\" height=\"345\" \/><\/a><\/p>\n<p>This module consists of a DHT11 digital humidity and temperature sensor and a resistance of 1 ko. The DHT11 uses an internal thermistor and capacitive humidity sensor to determine environmental conditions, an internal chip is responsible for converting readings to a serial digital signal.<\/p>\n<div>\n<table>\n<tbody>\n<tr>\n<td>Operating voltage<\/td>\n<td>3.3V to 5.5V<\/td>\n<\/tr>\n<tr>\n<td>Humidity measurement range<\/td>\n<td>20% to 90% RH<\/td>\n<\/tr>\n<tr>\n<td>Humidity measurement accuracy<\/td>\n<td>\u00b1 5% RH<\/td>\n<\/tr>\n<tr>\n<td>Moisture measurement resolution<\/td>\n<td>1% RH<\/td>\n<\/tr>\n<tr>\n<td>Temperature measuring range<\/td>\n<td>0oC to 50oC [32oF to 122oF]<\/td>\n<\/tr>\n<tr>\n<td>Temperature measurement accuracy<\/td>\n<td>\u00b1 2oC<\/td>\n<\/tr>\n<tr>\n<td>Temperature measurement resolution<\/td>\n<td>1oC<\/td>\n<\/tr>\n<tr>\n<td>Signal transmission range<\/td>\n<td>20m<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<\/div>\n<div>\n<p><strong>Electronic ink display 4.3 Inch E-Paper 800\u00d7600<\/strong><\/p>\n<\/div>\n<div id=\"m_5388762199711057735DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2\"><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper.jpg\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5934\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper.jpg\" sizes=\"(max-width: 900px) 100vw, 900px\" srcset=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper.jpg 900w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper-300x200.jpg 300w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper-768x512.jpg 768w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper-600x400.jpg 600w, http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/09\/e-paper-820x547.jpg 820w\" alt=\"\" width=\"900\" height=\"600\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<p><strong>Overview<\/strong><\/p>\n<p>This is a serial interface E-Ink display module, 4.3 inches, 800 \u00d7 600 resolution, with built-in font libraries, ultra-low power consumption.<\/p>\n<p>You don&#8217;t have to know anything about e-Paper&#8217;s complex underlying details, or the specific algorithms for displaying graphics, texts, and images. All you need is the serial interface, and all that matters is your creativity.<\/p>\n<p><strong>Features<\/strong><\/p>\n<ul>\n<li>Easy to use, it displays any content through a serial interface, including geometric graphics, texts and images<\/li>\n<li>Embedded font libraries, supports Chinese 32-point, 48-point, and 64-dot GBK fonts and English fonts<\/li>\n<li>The built-in 128MB NandFlash allows source\/image data to be stored on an external TF card or on the internal NandFlash<\/li>\n<li>4-level gray display, resolution 800 \u00d7 600<\/li>\n<li>Adjustable serial interface baud rate, 115200 by default when turned on<\/li>\n<li>Powered from 3.3V to 5V, compatible with logical level.<\/li>\n<li>Ultra-low power consumption, resting current less than 5 mA<\/li>\n<li>Comes with host computer software, control it directly on your computer<\/li>\n<\/ul>\n<p><strong>Applications<\/strong><\/p>\n<ul>\n<li>eBook<\/li>\n<li>POS Shopping Center<\/li>\n<li>Price tag<\/li>\n<li>Industry instrument<\/li>\n<\/ul>\n<p><strong>Pin Definitions<\/strong><\/p>\n<ul>\n<li>VCC: 3.3V x 5.5V<\/li>\n<li>GND: GND<\/li>\n<li>DOUT: serial data output<\/li>\n<li>DIN: serial data in<\/li>\n<li>WAKE_UP: external alarm clock<\/li>\n<li>RST: external reset<\/li>\n<\/ul>\n<p>Learn more about this screen\u00a0<a href=\"http:\/\/rogerbit.com\/wprb\/2019\/01\/tutorial-pantalla-de-tinta-electronica-de-4-3-pulgadas-por-dfrobot\/\">in http:\/\/rogerbit.com\/wprb\/2019\/01\/tutorial-pantalla-de-tinta-electronica-de-4-3-pulgadas-por-dfrobot\/<\/a><\/p>\n<p><strong>Source<\/strong><\/p>\n<pre class=\"lang:arduino decode:true \" title=\"C\u00f3digo Fuente\">\/\/ Canal de youtube http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1\r\n\/\/Tik-Tok https:\/\/www.tiktok.com\/@carlosvolt\r\n\/\/https:\/\/www.instagram.com\/carlosvolt_electronic_robotic\r\n#include &lt;WiFi.h&gt; \r\n#include &lt;Wire.h&gt;\r\n#include &lt;NTPClient.h&gt;\r\n#include \"DHT.h\"\r\n#include &lt;epd.h&gt;\/\/Librer\u00eda para el control del display\r\n\/\/ Descomenta le linea dependiendo del sensor que vallas a usar\r\n#define DHTTYPE DHT11 \/\/ DHT 11\r\n\/\/#define DHTTYPE DHT21 \/\/ DHT 21 \r\n\/\/#define DHTTYPE DHT22 \/\/ DHT 22\r\n#define DHTPin 23 \/\/PIin del sensor DHT;\r\nDHT dht(DHTPin, DHTTYPE); \r\nfloat t;\r\nfloat h;\r\nchar temp[32];\r\nchar hume[32];\r\nString ip;\r\nString hora;\r\nconst void * dir_ip;\r\nconst void * horaUTC;\r\nint periodo = 10000;\r\nunsigned long Tiempo = 0;\r\nWiFiUDP ntpUDP;\r\nNTPClient timeClient(ntpUDP);\r\nconst char* ssid = \"Tu_red_Wifi\"; \r\nconst char* password = \"Tu_Clave_Wifi\";\r\nWiFiServer server(80);\r\nvoid setup() {\r\nSerial.begin(115200);\r\ndht.begin();\/\/Inicializar el sensor DHT\r\nSerial.print(\"Conectando a la red WiFi\");\r\nSerial.println(ssid);\r\nWiFi.begin(ssid, password);\r\nwhile (WiFi.status() != WL_CONNECTED) {\r\ndelay(500);\r\nSerial.print(\".\");\r\n}\r\nSerial.println(\"\");\r\nSerial.println(\"Conectado con \u00e9xito a la red WiFi.\");\r\nSerial.println(\"La direcci\u00f3n IP es: \");\r\nSerial.println(WiFi.localIP());\r\nserver.begin();\r\nSerial.println(\"Servidor iniciado\");\r\ntimeClient.begin();\/\/Inicializa servidor NTP\r\n\/\/Inicializamos el el display\r\n  epd_init();\r\n  epd_wakeup();\r\n  epd_set_memory(MEM_NAND);\r\n  delay(2000);\r\n}\r\nvoid loop()\r\n{\r\n  timeClient.update();\/\/Obtenemos la hora actulizada \r\n  h = dht.readHumidity();\/\/Lectura de la humedad\r\n  t = dht.readTemperature();\/\/Lectura de la temperatura\r\n  \/\/Adactamos los datos de temperatura y humedad, direci\u00f3n ip y hora UTC para mostrarlo en el display\r\ndtostrf(t, 8, 2, temp);\r\ndtostrf(h, 8, 2, hume);\r\nip = String() + WiFi.localIP()[0] + \".\" + WiFi.localIP()[1] + \".\" + WiFi.localIP()[2] + \".\" + WiFi.localIP()[3];\r\nhora = timeClient.getFormattedTime();\r\ndir_ip = ip.c_str();\r\nhoraUTC = hora.c_str();\r\n\/\/\/\/\/\/Se cumple esta condici\u00f3n cada 10 segundos\r\nif(millis() &gt; Tiempo + periodo){\r\nTiempo = millis(); \r\ntextoDisplay();\/\/Llamamos a la funci\u00f3n para mostrar datos en el display \r\n  }\r\nWiFiClient client = server.available();\r\nif (client)\/\/Si se cumple la condici\u00f3n, mostramos dotos en el webserver\r\n{ \r\nSerial.println(\"Cliente web conectado \");\r\nString request = client.readStringUntil('\\r'); \r\nclient.println(\"HTTP\/1.1 200 OK\");\r\nclient.println(\"Content-type:text\/html\");\r\nclient.println(\"Connection: close\");\r\nclient.println();\r\nclient.println(\"&lt;!DOCTYPE html&gt;&lt;html&gt;\");\r\nclient.println(\"&lt;head&gt;&lt;meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\"&gt;\");\r\nclient.println(\"&lt;link rel=\\\"icon\\\" href=\\\"data:,\\\"&gt;\");\r\nclient.println(\"&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;&lt;h1&gt;Servidor Web con esp32 y display E-Paper&lt;\/h1&gt;\");\r\nclient.println(\"&lt;h2&gt;Tipo de sensor DHT11&lt;\/h2&gt;\");\r\nclient.println(\"&lt;h2&gt;www.rogerbit.com&lt;\/h2&gt;\");\r\nclient.println(\"&lt;table&gt;&lt;tr&gt;&lt;th&gt;Valores Leidos&lt;\/th&gt;&lt;th&gt;VALUE&lt;\/th&gt;&lt;\/tr&gt;\");\r\nclient.println(\"&lt;tr&gt;&lt;td&gt;Temp. Celsius&lt;\/td&gt;&lt;td&gt;&lt;span class=\\\"sensor\\\"&gt;\");\r\nclient.println(t);\r\nclient.println(\" *C&lt;\/span&gt;&lt;\/td&gt;&lt;\/tr&gt;\"); \r\nclient.println(\"&lt;tr&gt;&lt;td&gt;Humedad&lt;\/td&gt;&lt;td&gt;&lt;span class=\\\"sensor\\\"&gt;\");\r\nclient.println(h);\r\nclient.println(\" %&lt;\/span&gt;&lt;\/td&gt;&lt;\/tr&gt;\"); \r\nclient.println(\"&lt;tr&gt;&lt;td&gt;Ultima actualizacion Hora UTC&lt;\/td&gt;&lt;td&gt;&lt;span class=\\\"sensor\\\"&gt;\");\r\nclient.println(hora);\r\nclient.println(\"&lt;\/span&gt;&lt;\/td&gt;&lt;\/tr&gt;\"); \r\nclient.println(\"&lt;\/body&gt;&lt;\/html&gt;\"); \r\nclient.stop();\r\nclient.println();\r\nSerial.println(\"Client disconnected.\");\r\nSerial.println(\"\");\r\n}\r\n}\r\nvoid textoDisplay(void)\r\n{\r\n  \/\/\/\/Estaci\u00f3n meteorol\u00f3gica\r\n  epd_set_ch_font(GBK64);\r\n  epd_set_en_font(ASCII64);\r\n  epd_disp_string(\"ESTACION-METEOROLAGICA\", 0, 10);\r\n  \/\/\/\/Temperatura\r\n  epd_set_ch_font(GBK64);\r\n  epd_set_en_font(ASCII64);\r\n  epd_disp_string(\"Temperatura: \", 0, 80);\r\n  epd_disp_string(temp, 350, 80);\r\n  epd_disp_string(\"Grados C\", 510, 80);\r\n  \/\/\/\/Humedad\r\n  epd_set_ch_font(GBK64);\r\n  epd_set_en_font(ASCII64);\r\n  epd_disp_string(\"Humedad: \", 0, 150);\r\n  epd_disp_string(hume, 350, 150);\r\n  epd_disp_string(\"Porciento\", 510, 150);\r\n  \/\/\/\/Hora UTC\r\n  epd_set_ch_font(GBK64);\r\n  epd_set_en_font(ASCII64);\r\n  epd_disp_string(\"Hora UTC:\", 0, 240);\r\n  epd_disp_string(horaUTC, 350, 240);\r\n    \/\/\/\/Direcci\u00f3n IP\r\n  epd_set_ch_font(GBK64);\r\n  epd_set_en_font(ASCII64);\r\n  epd_disp_string(\"Direccion IP: \", 0, 310);\r\n  epd_disp_string(dir_ip, 350, 310);\r\n  epd_udpate();\r\n}<\/pre>\n<p>SUBSCRIBE TO OUR NEWSLETTERS, RECEIVE IN YOUR EMAIL THE MOST OUTSTANDING NEWS, JUST BY ENTERING YOUR EMAIL<\/p>\n<p style=\"text-align: left;\">[wysija_form id=&#8221;1&#8243;]<\/p>\n<hr \/>\n<p style=\"text-align: left;\"><div class=\"page-sidebar widget\" id=\"donation_buttons\"><form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\" ><input type=\"hidden\" name=\"business\" value=\"donacion@rogerbit.com\"><input type=\"hidden\" name=\"bn\" value=\"mbjtechnolabs_SP\"><input type=\"hidden\" name=\"cmd\" value=\"_donations\"><input type=\"hidden\" name=\"item_name\" value=\"Ayuda a RogerBit.com\"><input type=\"hidden\" name=\"item_number\" value=\"www.rogerbit.com\"><input type=\"hidden\" class=\"set_donation_button_amount\" name=\"amount\" value=\"1\"><table ><tbody><tr><td><label for=\"rogerBit necesita de tu ayuda para seguir existiendo :-)\">rogerBit necesita de tu ayuda para seguir existiendo :-)<\/label><\/td><\/tr><\/tbody><\/table><table ><tbody><tr><td><input style=\"margin-top:10px;\" type=\"image\" name=\"submit\" border=\"0\" src=\"https:\/\/www.paypal.com\/en_US\/i\/btn\/btn_donateCC_LG.gif\" alt=\"PayPal - The safer, easier way to pay online\"><\/td><\/tr><\/tbody><\/table><input type=\"hidden\" name=\"currency_code\" value=\"USD\"><input type=\"hidden\" name=\"notify_url\" value=\"https:\/\/rogerbit.com\/wprb\/?Donation_Button&#038;action=ipn_handler\"><\/form><\/div><\/p>\n<hr \/>\n<p style=\"text-align: left;\"><strong>RECOMMENDED PROJECT<\/strong><\/p>\n<p><iframe loading=\"lazy\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/XrsG9Xc906o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>In this tutorial we will see how to make a weather station with esp32 and electronic ink display. We will analyze the source code, as well as see the connections of the electronic components, finally test the project with its operation. The printed circuit board is included completely free of charge. You may be interested [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":6142,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[648],"tags":[45,922,920,465,1061,986,1060,1059],"_links":{"self":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/6141"}],"collection":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/comments?post=6141"}],"version-history":[{"count":1,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/6141\/revisions"}],"predecessor-version":[{"id":6143,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/6141\/revisions\/6143"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media\/6142"}],"wp:attachment":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media?parent=6141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/categories?post=6141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/tags?post=6141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}