Introduction: Usar API De Pokemon Con ESP8266
****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 wifilocal 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 )
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!!