Fork me on GitHub

Posts in tag `esp8266'

esp8266 a 160MHz con MicroPython

April 18, 2018

El módulo machine tiene la función freq que devuelve la frecuencia en hertz

>>> import machine
>>> machine.freq()
80000000

Esto es 80MHz, la frecuencia normal de trabajo del esp8266, pero podemos llevarlo al doble de su velocidad

>>> machine.freq(160000000)

Los valores intermedios no son permitidos

>>> machine.freq(100000000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: frequency can only be either 80Mhz or 160MHz

Para probar el cambio he aquí una pequeña función que cuenta ticks

import utime

def performance_test():
    secs = utime.ticks_ms()
    end_time = secs + 5000
    count = 0
    while utime.ticks_ms() < end_time:
        count += 1
    print("Count:", count)

Finalmente

>>> machine.freq(80000000)
>>> performance_test()
Count: 55596

>>> machine.freq(160000000)
>>> performance_test()
Count: 98702

MicroPython Python esp8266

Compilar MicroPython en Ubuntu 16.04

April 16, 2018

Nerdlabs Micropython con ESP8266

Una buena forma de ahorrar memoria con MicroPython es cargar tus propios módulos como frozen byte-code en la imagen misma, es decir en el binario que usás para flashear tu micro, para lo cual hay que compilar MicroPython con los módulos que necesitás.

Para empezar asegurate de tener instalado todo esto

sudo apt-get install make unrar-free autoconf \
                     automake libtool gcc g++ gperf \
                     flex bison texinfo gawk ncurses-dev \
                     libexpat-dev python-dev \
                     python-serial sed git unzip \
                     help2man wget bzip2 libtool-bin

Luego hay que descargar el ESP toolchain desde el repo de Git

git clone --recursive https://github.com/pfalcon/esp-open-sdk.git

Cambiar al directorio y compilar

cd esp-open-sdk
make

Una vez finalizada la compilación agregar el directorio bin al PATH

export PATH=/some/dir/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

Finalmente bajar el repositorio de MicroPython

git clone https://github.com/micropython/micropython.git
cd micropython
git submodule update --init

Agregar tus módulos .py en ports/esp8266/modules

Y compilar MicroPython

make -C mpy-cross
cd ports/esp8266
make axtls
make

Esto generará el archivo build/firmware-combined.bin y es el que tenés que usar con esptool.py para flashear el micro.

Más info en la MicroPython Development Documentation.

MicroPython Python esp8266

Librería para motores de paso 28byj-48

July 17, 2017

Simple-Stepper es un pequeña lib para manejar steppers 28byj-48 que hice luego de mirar este video, donde se muestra el funcionamiento del motor. La lib es compatible con esp8266 y maneja tres tipos de secuencias: Wake Drive, Full Step y Half Step. No maneja aceleración, para eso está AccelStepper.

Aquí un ejemplo con un motor, haciendo un giro completo en sentido horario.

#include <SimpleStepper.h>

SimpleStepper stepper(SimpleStepper::FULLSTEP, D5, D6, D7, D8)

void loop ()
{
  stepper.steps(stepper.getFullRotationSteps());

  while ( ! stepper.ready())
  {
    stepper.step();
    delay(3);
    yield();
  }
}

La lib funciona con varios motores en simultáneo, en github se puede ver un ejemplo con dos motores.

Arduino Minirobots Trabajos esp8266

Workshop sobre ESP8266

July 10, 2017

El año pasado entré a trabajar en el estudio de IoT de Globant. Entre otras cosas estuve investigando el ESP8266 y de ello surgió este Workshop sobre esp8266 para divulgar lo aprendido entre el resto de los compañeros.

El taller cuenta con una introducción al esp8266 y sus distintos módulos, incluyendo con los devkits más populares, como NodeMCU y Wemos D1. Luego hay una introducción a MicroPython y varios ejemplos de uso. Finalmente se analizan los mismos ejemplos con C++ usando la librería ESP8266 Core for Arduino.

Entre los ejemplos se ve manejo de LEDs, NeoPixels, switches, sensores de temperatura y humedad, pantallas OLED, lectores de SD y servos. Hay un ejemplo completo de una lámpara RGB WiFi con Python y cómo actualizar el firmware mediante OTA usando C++. También se muestra PlatformIO como IDE de desarrollo con C++ y Phant como servidor IoT.

El taller está orientado a programadores sin necesidad de conocimientos de electrónica.

Charlas MicroPython Python esp8266

Controlando mi ESP-Car con Python

March 4, 2017

Compré en Pimoroni este Zumo Kit y un par de motorcitos, y lo completé con un NodeMCU y este motor shield. He aquí el resultado

ESP8266 car

El código que hice para el micro lo borré por accidente pero es bastante sencillo, similar a este, sólo que le agregué un servidor http con una mini api para manejar los movimientos básicos.

Para manejarlo remotamente hice con Python un pequeño cliente que expone una shell y tiene una función demo() que es la que se muestra en el video

Además hice una app para Android usando App Inventor 2, me quedó así

Python Trabajos Video esp8266

MicroPython - Lámpara RGB

August 26, 2016

Continuando las pruebas con MicroPython me puse a hacer una lámpara RGB controlable por wifi. Quería probar también eso de levantar mi propio access point y que los clientes se conectaran a él. Encontré que es bastante sencillo de hacer, simplemente puse lo siguiente en boot.py

# boot.py
import network

ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid="RGBLamp", password="12345678")

while not ap_if.active():
    pass

Esto levanta una red wifi RGBLamp y pone a NodeMCU como gateway en el 192.168.4.1 :)

También metí en este archivo las dos líneas necesarias para levantar webrepl ya que desde la interfaz web es muy sencillo subir los archivos a NodeMCU.

import webrepl
webrepl.start()

boot.py es el primer archivo que lee MicroPython e inmediatamente después busca main.py para la ejecución del programa principal. El código me quedó así

La interfaz web quedó así, sencilla, en principio porque apunté a algo mini pero también porque me encontré con algunos problemas de falta de memoria al querer procesar un template más grande, lo que me hizo incluso tener que minimizar el template antes de subirlo a NodeMCU.

Como mencioné antes un par de veces tuve que darle vueltas al código para evitar el memory allocation failed dado que esp12e tiene algo así como 36 KB de RAM. Estuve leyendo un poco al respecto y encontré (nunca falta quien...) a alguien que dejó de usarlo por esto.

MicroPython Python Trabajos esp8266

MicroPython - Instalación en NodeMCU

August 22, 2016

En este post de Adafruit descubrí que existe un firmware de MicroPython para NodeMCU. MicroPython es un proyecto que nació en Kickstarter y que consiste en una reescritura de Python3 para hacerlo más liviano y óptimo para correr en microcontroladores. Al igual que el firmware de Lua también cuenta con un intérprete que se accede vía serial (con screen o picocom) y vía web usando el módulo webrepl.

La instalación es sencilla, primero hay que instalar esptool mediante pip

$ sudo pip install esptool

Luego bajar el último firmware para ESP8266 y finalmente subirlo a NodeMCU borrando previamente el firmware anterior

$ esptool.py --port /dev/ttyUSB0 erase_flash
$ esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=8m -fm dio 0 esp8266-2016-05-03-v1.8.bin

El detalle de cada paso está bien documentado en la doc de MicroPython.

Finalmente se puede acceder a la consola usando screen

$ screen /dev/ttyUSB0 115200
MicroPython v1.8.3-35-g49dd532 on 2016-08-18; ESP module with ESP8266
Type "help()" for more information.
 >>>

Para levantar webrepl hay que primero conectarse a la red local. Aquí hay ejemplos de cómo hacerlo, pero básicamente es

>>> import network, time
>>> wlan = network.WLAN(network.STA_IF)
>>> wlan.active(True)
>>> wlan.connect('your-ssid', 'your-password')
>>> while not wlan.isconnected():
...    time.sleep_ms(50)
...
>>> print(wlan.ifconfig())
('192.168.0.15', '255.255.255.0', '192.168.0.1', '8.8.8.8')

Luego de eso iniciamos webrepl

>>> import webrepl
>>> webrepl.start()
WebREPL daemon started on ws://192.168.4.1:8266
WebREPL daemon started on ws://192.168.0.15:8266
Started webrepl in normal mode

No hace falta bajar el editor, se puede usar la versión online simplemente cambiando la IP.

MicroPython Python esp8266

Lámpara RGB con NodeMCU

June 18, 2016

Siguiendo con las pruebas con NodeMCU armé un pequeño script que cambia aleatoriamente los valores de un led rgb cada cierto tiempo. Para setear los valores del led usé el módulo pwm. Salvo el pin 0 el resto de los pines soporta pwm. Acá el esquema de conexiones

Para generar los valores aleatorios usé math.random de la librería estándar y para el timer el módulo tmr. Metí todo en funciones y quedó así

Quería probar el upload del archivo y entonces encontré luatool, escrito en Python :) Se pueden subir n archivos y uno de ellos debe ser init.lua, que será el que se ejecute durante el start.

luatool  --port /dev/ttyUSB0 --src rgb.lua --dest init.lua --verbose

Eso es todo :)

Lua Trabajos esp8266

Primeros pasos con NodeMCU

April 3, 2016

NodeMCU es un proyecto IoT Open Source hecho en China que incorpora el chip ESP8266 para conexión WiFi y que además es programable en Lua 5.1.

Algo muy interesante de NodeMCU es que su firmware incorpora el intéprete Lua, al cual se accede mediante el puerto serial, permitiendo escribir comandos e interactuar directamente con el hardware en tiempo real.

El intérprete embebido incorpora muchos módulos útiles como wifi para manejar la conexión.. wifi, net y http para crear servidores o clientes http, gpio y pwm para control de los pines y varios otros. Está todo muy bien documentado en https://nodemcu.readthedocs.org.

Para empezar lo primero es instalar el firmware usando esptool. Aquí hay una buena guía para esto, pero básicamente es seguir este ejemplo

sudo python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_integer_0.9.6-dev_20150704.bin

Al finalizar veremos algo así

Wrote 450560 bytes at 0x00000000 in 44.3 seconds (81.3 kbit/s)...

Leaving...

Luego hay que ingresar usando el puerto serie al que esté conectado, para eso se puede usar minicom o screen. Prefiero screen porque minicom me borra lo escrito al redimensionar la ventana.

screen /dev/ttyUSB0 9600

Al ingresar se ven unos caracteres raros (posiblemente chino y no tengo la fuente) y el prompt del intérprete de Lua. Si el prompt no aparece generalmente lo hace luego de apretar Enter, sino node.restart() reincia NodeMC

NodeMCU 0.9.6 build 20150704  powered by Lua 5.1.4
lua: cannot open init.lua
>

Listo, estamos en condiciones de escribir Lua! Acá van un par de ejemplos

> -- Connect to your AP
> wifi.setmode(wifi.STATION)
> wifi.sta.config("SSID", "password")
> ip = wifi.sta.getip()
> print(ip)
192.168.18.110
> -- A simple HTTP server
> srv = net.createServer(net.TCP)
> srv:listen(80, function(conn)
>     conn:on("receive", function(conn,payload)
>         print(payload)
>         conn:send("<h1>Hello from NodeMCU.</h1>")
>     end)
>     conn:on("sent", function(conn) conn:close() end)
> end)

Lua Trabajos esp8266

← Older | Newer →