Introduction: Usar API De Pokemon Con ESP8266

About: Fundador de The Inventor's House Hackerspace, Movimiento Maker y Hardware Libre, DIY, Workaholic

****Gracias por la mención en su blog Adafruit***

Este domingo nos reunimos mi amigo Iddar y un servidor para experimentar con el ESP8266 versión 03 y lo que salio fue un ejemplo de como usar un API con el modulo WiFi, en esta ocasión realizamos un pequeño ejemplo la API de pokeapi.co que almacena toda la información de pokemones existentes, mostramos la información de los pokemones por medio de una pantalla OLED SPI y listo un ejemplo fácil de realizar.

Comencemos!!

Step 1: Material

El material necesario para realizar este proyecto es:

  • ESP8266-03 o cualquier otra versión de ESP8266 que tenga los pines SPI disponibles
  • Pantalla OLED SSD1306 128x64 SPI
  • FTDI friend Adafruit
  • Protoboard
  • Jumpers

Step 2: API Rest Pokemon

Para poder realizar nuestra prueba vamos a usar la API de pokeapi.co que como les comente tiene una gran lista de pokemones con todas sus características principales, esta es solo una de las muchas API's que pueden encontrar en internet, nosotros obtuvimos esta de node-machine

¿Qué es REST?
REST, REpresentational State Transfer, es un tipo de arquitectura de desarrollo web que se apoya totalmente en el estándar HTTP. REST nos permite crear servicios y aplicaciones que pueden ser usadas por cualquier dispositivo o cliente que entienda HTTP, por lo que es increíblemente más simple y convencional que otras alternativas que se han usado en los últimos diez años como SOAP y XML-RPC.

Cuando nosotros consultemos en esta caso esta API nos devolverá en un archivo JSON con toda la informacion del pokemon por el cual hemos preguntado

Step 3: Programación Y Circuito

Para este ejemplo usaremos el lenguaje de programación LUA en cual ya había mostrado como manejar en un instructable anterior

https://www.instructables.com/id/Manejar-pantalla-OLED-SPI-con-ESP8266/

Si usted tiene un Arduino a la mano también puede cargar firmware a su dispositivo, puede consultar este otro instructable para ver como

https://www.instructables.com/id/Cargar-firmware-al-ESP8266-con-Arduino

Una vez teniendo instalado el firmware NodeMCU en nuestro ESP8266 y el ESPlorer en nuestra maquina, hay que primero subir el archivo "prueba.MONO" y por ultimo el init.lua debe contener lo siguiente:

local json = require "cjson"
print("Connecting to wifi...") wifi.setmode(wifi.STATION) wifi.sta.config("XXXX","PASSWORD") --Change for name and password you wifi

local ip = wifi.sta.getip()

function init_spi_display() -- Hardware SPI CLK = GPIO14-->SCL OLED -- Hardware SPI MOSI = GPIO13-->SDA OLED -- Hardware SPI MISO = GPIO12 (not used) -- CS, D/C, and RES can be assigned freely to available GPIOs cs = 8 -- GPIO15, pull-down 10k to GND dc = 4 -- GPIO2 --> D/C OLED res = 0 -- GPIO16 --> RST OLED

spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, spi.DATABITS_8, 0) disp = u8g.ssd1306_128x64_spi(cs, dc, res) end

function xbm_picture() disp:setFont(u8g.font_6x10) disp:drawStr( 62, 10, "Ability:") disp:drawStr( 62, 62, weather.name) disp:drawXBM( 0, -5, 60, 60, xbm_data ) end

function bitmap_test(delay) file.open("prueba.MONO", "r") xbm_data = file.read() file.close()

disp:firstPage() repeat xbm_picture() until disp:nextPage() == false

tmr.wdclr() end

function updateWeather() local conn=net.createConnection(net.TCP, 0) conn:on("receive", function(conn, payload) print("Conn: ") print(conn) print("Payload: ") -- print(payload) local payload = string.match(payload, "{.*}") print(payload)

weather = nil if payload ~= nil then weather = json.decode(payload) print("Ability:") print(weather.name) bitmap_test() end

payload = nil conn:close() conn = nil end )

print(ip) conn:connect(80, "162.243.133.52") conn:send("GET /api/v1/ability/5/ HTTP/1.1\r\n" .."Host: pokeapi.co\r\n" .."Cache-Control: no-cache\r\n" .."\r\n") conn = nil

end init_spi_display()

tmr.alarm(0, 1000, 1, function() print(".") ip = wifi.sta.getip() if ( ( ip ~= nil ) and ( ip ~= "0.0.0.0" ) )then print(ip) tmr.stop(0) updateWeather() end end )

https://github.com/theinventorshouse/esp-pokemon-api

Step 4: Prueba

Una vez todo cargado en el ESP8266 y conectado en la protoboard, deberíamos tener algo como lo que se muestra en la imagen.

  • NOTA: En este ejercicio solo estamos obteniendo la parte de habilidad, ya que al tratar de obtener todos los datos del pokemon parece ser que la memoria del ESP8266 se desborda, seria cuestión de probar en un ESP8266 versión 12 o alguna otra versión con mas memoria RAM para validad esto.

Espero esto les sirva para algún otro proyecto donde requieran consumir un API Rest, espero sus comentarios y sus dudas

Saludos Inventores!!