{"id":1955,"date":"2020-03-30T10:52:01","date_gmt":"2020-03-30T16:52:01","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=1955"},"modified":"2021-05-24T01:00:54","modified_gmt":"2021-05-24T06:00:54","slug":"programacion-del-display-128x32-en-arduino","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/programacion-del-display-128x32-en-arduino\/","title":{"rendered":"Programaci\u00f3n del display 128&#215;32 en Arduino"},"content":{"rendered":"<p>En \u00e9ste art\u00edculo veremos c\u00f3mo realizar la programaci\u00f3n del display 128&#215;32 en Arduino. Se muestra el montaje del prototipo, las librer\u00edas que se necesitar\u00e1n, el escaneo de puertos <a href=\"https:\/\/books.google.com.mx\/books?id=O0PfBgAAQBAJ&amp;lpg=PA114&amp;dq=i2c%20arduino&amp;pg=PA112#v=onepage&amp;q=i2c%20arduino&amp;f=false\" target=\"_blank\" rel=\"noopener\">I2C<\/a>, c\u00f3mo imprimir pixeles, l\u00edneas y rect\u00e1ngulos, c\u00f3mo mover un pixel dentro del display y c\u00f3mo imprimir texto y n\u00fameros en el display.<\/p>\n<p><!--more--><\/p>\n<h2>Parte 1. Montaje del prototipo<\/h2>\n<p>Conecte GND (en el display) con GND (en Arduino)<\/p>\n<p>Conecte VCC (en el display) con 3.3V (en Arduino). Si no funciona con 3.3, conectar con 5V.<\/p>\n<p>Conecte SCL (en el display) con A5 (en Arduino)<\/p>\n<p>Conecte SDA (en el display) con A4 (en Arduino)<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Prototipo.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1962\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Prototipo.jpg\" alt=\"Programaci\u00f3n de display 128x32 en Arduino Prototipo\" width=\"800\" height=\"1080\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Prototipo.jpg 800w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Prototipo-222x300.jpg 222w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Prototipo-768x1037.jpg 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Prototipo-759x1024.jpg 759w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h2>Parte 2. Instale librer\u00edas<\/h2>\n<p>En el IDE Arduino:<\/p>\n<p>Clic en men\u00fa Herramientas -&gt; Administrar Bibliotecas<\/p>\n<p>Busque la librer\u00eda 1306<\/p>\n<p>Seleccione (e instale) la librer\u00eda Adafruit SSD1306<\/p>\n<p>Si solicita instalar Adafruit GFX, inst\u00e1lela.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-arduino.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1958\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-arduino.png\" alt=\"Programaci\u00f3n del display 128x32 en arduino\" width=\"1600\" height=\"904\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-arduino.png 1600w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-arduino-300x170.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-arduino-768x434.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-arduino-1024x579.png 1024w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/a><\/p>\n<h2>Parte 3. Scanear el puerto I2C de su display<\/h2>\n<p>Utilice el siguiente c\u00f3digo para scanear el puerto I2C en el que est\u00e1 conectado su display.<\/p>\n<p>Abra el monitor serial para ver y anotar el puerto. Por lo general el puerto es 0x3c.<\/p>\n<pre class=\"lang:c decode:true \">#include &lt;Wire.h&gt;\r\n\r\n\r\nvoid setup()\r\n{\r\n  Wire.begin();\r\n\r\n  Serial.begin(9600);\r\n  while (!Serial);             \/\/ Leonardo: wait for serial monitor\r\n  Serial.println(\"\\nI2C Scanner\");\r\n}\r\n\r\n\r\nvoid loop()\r\n{\r\n  byte error, address;\r\n  int nDevices;\r\n\r\n  Serial.println(\"Scanning...\");\r\n\r\n  nDevices = 0;\r\n  for(address = 1; address &lt; 127; address++ ) \r\n  {\r\n    \/\/ The i2c_scanner uses the return value of\r\n    \/\/ the Write.endTransmisstion to see if\r\n    \/\/ a device did acknowledge to the address.\r\n    Wire.beginTransmission(address);\r\n    error = Wire.endTransmission();\r\n\r\n    if (error == 0)\r\n    {\r\n      Serial.print(\"I2C device found at address 0x\");\r\n      if (address&lt;16) \r\n        Serial.print(\"0\");\r\n      Serial.print(address,HEX);\r\n      Serial.println(\"  !\");\r\n\r\n      nDevices++;\r\n    }\r\n    else if (error==4) \r\n    {\r\n      Serial.print(\"Unknown error at address 0x\");\r\n      if (address&lt;16) \r\n        Serial.print(\"0\");\r\n      Serial.println(address,HEX);\r\n    }    \r\n  }\r\n  if (nDevices == 0)\r\n    Serial.println(\"No I2C devices found\\n\");\r\n  else\r\n    Serial.println(\"done\\n\");\r\n\r\n  delay(5000);           \/\/ wait 5 seconds for next scan\r\n}<\/pre>\n<p>En el monitor serial observar\u00e1 algo as\u00ed:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-Arduino-direccion.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1964\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-Arduino-direccion.png\" alt=\"Programaci\u00f3n del display 128x32 en Arduino direccion\" width=\"612\" height=\"348\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-Arduino-direccion.png 612w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-del-display-128x32-en-Arduino-direccion-300x171.png 300w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/><\/a><\/p>\n<h2>Programaci\u00f3n del display 128&#215;32 en Arduino<\/h2>\n<h2>Parte 4. Inicializaci\u00f3n de su display y pantalla de bienvenida<\/h2>\n<p>El siguiente c\u00f3digo inicializar\u00e1 su display y mostrar\u00e1 una pantalla de bienvenida con el logo de Adafruit.<\/p>\n<pre class=\"lang:c decode:true \">#include &lt;SPI.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;Adafruit_GFX.h&gt;\r\n#include &lt;Adafruit_SSD1306.h&gt;\r\n\r\n\/\/ Esto indica que nuestro display no tiene pin de reset\r\nAdafruit_SSD1306 display(-1);\r\n\r\nvoid setup() {\r\n  \/\/ Inicializamos el display\r\n  display.begin(SSD1306_SWITCHCAPVCC,0x3C);  \r\n  \/\/ Borramos el display\r\n  display.clearDisplay(); \r\n  \/\/ Mostramos la pantalla de bienvenida\r\n  display.display();\r\n}\r\n\r\nvoid loop() {\r\n  \/\/ put your main code here, to run repeatedly:\r\n\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h2>Parte 5. Imprimir pixeles, l\u00edneas y rect\u00e1ngulos<\/h2>\n<p>El siguiente c\u00f3digo dibujar\u00e1 un pixel, una l\u00ednea y dos rect\u00e1ngulos, uno de ellos con color de relleno.<\/p>\n<pre class=\"lang:c decode:true \">#include &lt;SPI.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;Adafruit_GFX.h&gt;\r\n#include &lt;Adafruit_SSD1306.h&gt;\r\n\r\n\r\n\r\n\/\/ Esto indica que nuestro display no tiene pin de reset\r\nAdafruit_SSD1306 display(-1);\r\n\r\nvoid setup() {\r\n  \/\/ Inicializamos el display\r\n  display.begin(SSD1306_SWITCHCAPVCC,0x3C);  \r\n  \/\/ Borramos el display\r\n  display.clearDisplay(); \r\n  \/\/ Dibujamos un pixel en la coordenada 10,10\r\n  display.drawPixel(10,10,WHITE);\r\n  \/\/ Dibujamos una linea que va de 5,15 a 60,15\r\n  display.drawLine(10,15,60,15,WHITE);\r\n  \/\/ Dibujamos un rect\u00e1ngulo en 10,20 de 20 de ancho y 10 de alto\r\n  display.drawRect(10,20,20,10,WHITE);\r\n  \/\/ Dibujamos un rect\u00e1ngulo lleno, en 40,20 de 20 de ancho y 10 de alto\r\n  display.fillRect(40,20,20,10,WHITE);\r\n  display.display();\r\n}\r\n\r\nvoid loop() {\r\n  \/\/ put your main code here, to run repeatedly:\r\n\r\n}<\/pre>\n<p>El display muestra lo que le indicamos.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Salida.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1967\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Salida.jpg\" alt=\"Programaci\u00f3n de display 128x32 en Arduino Salida\" width=\"700\" height=\"505\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Salida.jpg 700w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Salida-300x216.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<h2>Parte 6. Pixel que se mueve en el display<\/h2>\n<p>El siguiente c\u00f3digo dibuja un pixel en una coordenada x,y. Luego modifica el valor de x, se borra toda la pantalla y vuelve a dibujar el pixel en la nueva coordenada x,y.<\/p>\n<pre class=\"lang:c decode:true \">#include &lt;SPI.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;Adafruit_GFX.h&gt;\r\n#include &lt;Adafruit_SSD1306.h&gt;\r\n\r\n\r\n\r\n\/\/ Esto indica que nuestro display no tiene pin de reset\r\nAdafruit_SSD1306 display(-1);\r\nint i=1;\r\nint direccion=0; \/\/ 0 va hacia la derecha\r\nvoid setup() {\r\n  \/\/ Inicializamos el display\r\n  display.begin(SSD1306_SWITCHCAPVCC,0x3C);  \r\n  \/\/ Borramos el display\r\n  display.clearDisplay(); \r\n  \r\n  display.display();\r\n}\r\n\r\nvoid loop() {\r\n  for (i=0; i&lt;=127; i++){\r\n    display.clearDisplay();\r\n    display.drawPixel(i,16,WHITE);\r\n    display.display();\r\n  }\r\n  for (i=127; i&gt;=1; i--){\r\n    display.clearDisplay();\r\n    display.drawPixel(i,16,WHITE);\r\n    display.display();\r\n  }\r\n    \r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h2>Parte 7. Imprimir texto y n\u00fameros<\/h2>\n<p>El siguiente c\u00f3digo imprimer un \u201cHola, mundo\u201d en el display. Imprime un valor num\u00e9rico y un valor de texto en un tama\u00f1o de letra mayor.<\/p>\n<pre class=\"lang:c decode:true \">#include &lt;SPI.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;Adafruit_GFX.h&gt;\r\n#include &lt;Adafruit_SSD1306.h&gt;\r\n\r\n\r\n\r\n\/\/ Esto indica que nuestro display no tiene pin de reset\r\nAdafruit_SSD1306 display(-1);\r\n\r\nvoid setup() {\r\n  \/\/ Inicializamos el display\r\n  display.begin(SSD1306_SWITCHCAPVCC,0x3C);  \r\n  \/\/ Borramos el display\r\n  display.clearDisplay(); \r\n  \r\n  \r\n  display.display();\r\n}\r\n\r\nvoid loop() {\r\n\r\n  display.setTextSize(1);\r\n  display.setTextColor(WHITE);\r\n  display.setCursor(0,0);\r\n  display.println(\"Hola, mundo\");\r\n  display.setTextColor(BLACK, WHITE);\r\n  display.println(3.1416);\r\n  display.setTextSize(2);\r\n  display.setTextColor(WHITE);\r\n  display.println(\"Iniciar\");\r\n  display.display();\r\n  \r\n\r\n}<\/pre>\n<p>El display mostrar\u00e1 lo siguiente:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Texto.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1969\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Texto.jpg\" alt=\"Programaci\u00f3n de display 128x32 en Arduino Texto\" width=\"700\" height=\"575\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Texto.jpg 700w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/03\/Programaci\u00f3n-de-display-128x32-en-Arduino-Texto-300x246.jpg 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>Espero que \u00e9stos ejemplo que permitan iniciarte en la programaci\u00f3n del display 128&#215;32 en Arduino.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En \u00e9ste art\u00edculo veremos c\u00f3mo realizar la programaci\u00f3n del display 128&#215;32 en Arduino. Se muestra el montaje del prototipo, las librer\u00edas que se necesitar\u00e1n, el escaneo de puertos I2C, c\u00f3mo imprimir pixeles, l\u00edneas y rect\u00e1ngulos, c\u00f3mo mover un pixel dentro del display y c\u00f3mo imprimir texto y n\u00fameros en el display.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[278],"tags":[270,271,272],"class_list":["post-1955","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-arduino","tag-lenguajes-de-interfaz","tag-sistemas-programables"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=1955"}],"version-history":[{"count":10,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1955\/revisions"}],"predecessor-version":[{"id":2004,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/1955\/revisions\/2004"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=1955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=1955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=1955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}