Usar API De Pokemon Con ESP8266

by sabas1080 in Circuits > Arduino

5726 Views, 17 Favorites, 0 Comments

Usar API De Pokemon Con ESP8266

IMG_20150609_192630226_HDR.jpg
Pokemon.jpg

****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!!

Material

IMG_20150609_202209226.jpg
IMG_20150604_193158952 (1).jpg
IMG_20150609_203743456_HDR.jpg

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

API Rest Pokemon

pokéapi   The Pokemon RESTful API.png
pokéapi   The Pokemon RESTful API2.png
Pokemon.jpg

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

Programación Y Circuito

ESPlorer_pokemon.png
ESP8266_OLED_SPI.png

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

Prueba

IMG_20150609_203748172_HDR.jpg

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!!