Conceptos básicos de la programación MicroPython con ESP32 y ESP8266

Si estás interesado en adentrarte en el mundo de la programación en MicroPython con los populares dispositivos ESP32 y ESP8266, estás en el lugar indicado. En este artículo te guiaremos a través de los conceptos básicos que necesitas conocer para empezar a programar con estos microcontroladores de forma sencilla y eficiente. ¡No te lo pierdas!

MicroPython es una nueva implementación del lenguaje de programación Python dirigida a microcontroladores y sistemas integrados como ESP32 o ESP8266.

Programar en MicroPython es muy similar a programar en Python: con algunas excepciones, todas las funciones del lenguaje Python también se incluyen en MicroPython. Debido a que los microcontroladores y los sistemas integrados son mucho más limitados que nuestras computadoras, MicroPython no viene con la biblioteca estándar completa de forma predeterminada.

Conceptos básicos de la programación MicroPython con ESP32 y ESP8266

Si ya sabes programar en Python, programar en MicroPython es lo mismo. Sólo debes tener en cuenta que MicroPython se utiliza para dispositivos restringidos. Por lo tanto, debes mantener tu código lo más simple posible.

Este artículo explica los conceptos básicos de la sintaxis del lenguaje de programación Python que también se aplican a MicroPython, como por ejemplo:

  • Operadores matemáticos
  • Operadores relacionales
  • Tipos de datos
  • función imprimir()
  • Declaraciones condicionales
  • Bucles while y for
  • Funciones personalizadas
  • Clases y objetos
  • Módulos

requisitos

En este tutorial usaremos uPyCraft IDE como entorno de desarrollo, pero también puedes usar cualquier otro programa. Para instalar uPyCraft IDE y comenzar, siga estos siguientes tutoriales:

  • Comenzando con MicroPython en ESP32 y ESP8266
  • Instale el IDE de uPyCraft:
    • Instalar uPyCraft IDE – Instrucciones para PC con Windows
    • Instalar uPyCraft IDE – Instrucciones para Mac OS X
    • Instalar uPyCraft IDE – Instrucciones para Linux Ubuntu
  • Flashear/cargar firmware MicroPython a ESP32 y ESP8266

Operadores matemáticos

Micropython puede realizar operaciones matemáticas. La siguiente tabla muestra los operadores matemáticos admitidos:

operador Operacion matematica
+ aditivo
sustracción
* multiplicación
/ división
// División, descartando el punto decimal
% Resto por división

Pruebe varias operaciones en el shell para ver cómo funciona. Ejemplo:

>>> 2+2*9-3
17
>>> 28594/2312
12.36765
>>> 214522236/7.5
2.860297e+07
>>> 23//2
11
>>> 25%3
1

Puedes realizar otras operaciones matemáticas si utilizas el matemáticas Módulo, como raíz cuadrada, funciones trigonométricas, logaritmo, exponenciación, etc.

Operadores relacionales

Puede realizar comparaciones utilizando operadores relacionales. Estos comparan los valores de ambos lados y muestran la relación entre ellos.

operador Descripción
== Mismo
!= No debe ser equiparado con
> Mas grande que
< Menos que
>= Mayor qué o igual a
<= Igual o menor que

Haga varias comparaciones y pruebe el resultado:

>>> 2 == 3
False
>>> 4 == 4
True
>>> 3 > 2
True
>>> 489808234 != 2223
True
>>> 4.5 >= 4.5
True

Asignar valores a variables

En Python, no es necesario declarar el tipo de cada variable. Si estás acostumbrado a programar tus placas con Arduino IDE, sabes que debes declarar el tipo de variable cuando creas una nueva variable. No existe tal cosa en Python.

Las variables son simplemente un marcador de posición para valores: números o texto. Para asignar un valor a una variable, use el signo igual (=), con el nombre de la variable a la izquierda y el valor a la derecha.

Por ejemplo, para crear una variable que contenga el número GPIO al que está conectado un LED, simplemente puede escribir:

led_pin = 23

En el IDE de Arduino tendrías algo como esto:

const int led_pin = 23;

Como puedes ver, Python es mucho más fácil que programar en C (en el IDE de Arduino).

Nota: Los nombres que proporcione a las variables no pueden contener espacios y distinguen entre mayúsculas y minúsculas. bolígrafo LED difiere de LED_PIN o Led_Pin.

Tipos de datos

Las variables pueden almacenar múltiples tipos de valores, no solo números enteros. Aquí Tipos de datos ven a jugar. Un tipo de datos es una clasificación de un valor que especifica qué operaciones se pueden realizar sobre el valor y cómo se debe almacenar.

La siguiente tabla muestra los tipos de datos que utilizamos con más frecuencia en nuestros proyectos.

Tipo de datos Descripción
entero (int) Entero (número entero)
flotar (flotar) Número con punto decimal
cadena (cadena) Juego de caracteres entre comillas
bool (booleano) Bien o mal

Creemos variables con diferentes tipos de datos:

>>> a = 6
>>> b = 95.32
>>> c="Hello World!"
>>> d = True
  • El primer valor, el Aes un enteroque es un número entero.
  • El b La variable contiene uno. flotar Valor que es un número con un decimal.
  • El tercer valor, «¡Hola mundo!», es un líneauna cuerda. Una cadena debe estar entre comillas simples (“¡Hola, mundo!”) o dobles (“¡Hola, mundo!”).
  • Finalmente, D es un valor booleanoun tipo que sólo puede tomar Verdadero o Falso.

Existe una función para comprobar el tipo de datos de una variable: el Tipo() Función. Esta función acepta como argumento la variable cuyo tipo de datos desea verificar.

type(variable)

Después de declarar la variable en el ejemplo anterior A, b, CY Dpuedes comprobar el tipo de datos. Por ejemplo, si ingresa:

>>> type(a)

Devuelve lo siguiente:

<class 'int'>

eso dice que A es un int (entero). Experimente con las otras variables y debería obtener algo como esto:

>>> type(b)
<class 'float'>
>>> type(c)
<class 'str'>
>>> type(d)
<class 'bool'>

función imprimir()

El prensa() La función imprime el mensaje entre paréntesis en el shell. Esto es particularmente útil en nuestros proyectos para depurar el código y realizar un seguimiento de lo que sucede. Por ejemplo:

>>> print('LED is on')
LED is on

Comentarios

Los comentarios en Python comienzan con el carácter almohadilla (#) y se extienden hasta el final de la línea. Un comentario es útil para agregar «anotaciones» a su programa o para decirle a cualquiera que lea el programa qué está haciendo el script. Esto no agrega ninguna funcionalidad a su programa. Ejemplo:

# This is just a comment

Dado que trabajamos en condiciones limitadas en MicroPython, hay situaciones en las que debes evitar agregar comentarios para ahorrar espacio en la memoria ESP.

Declaraciones condicionales

Para escribir programas útiles, probablemente necesitará realizar diferentes acciones dependiendo de si una condición particular es verdadera o falsa. Estamos hablando de declaraciones condicionales. Tienen la siguiente estructura:

if <expr1>:
  <statement1>
elif <expr2>:
  <statement2>
elif <expr3>:
  <statement3>
(...)
else:
  <statementn>

es una expresión booleana y puede ser VERDADERO o INCORRECTO. Si es cierto, el llevado a cabo inmediatamente después. El debe tener sangría para que Python sepa qué declaración va con cada expresión.

El elif La declaración significa else if y solo se ejecuta si la primera Si La condición no es cierta.

El diferente La declaración sólo se ejecuta si ninguna de las otras expresiones es Verdadera.

No hay límite para el número de elif Instrucciones en un programa. Tampoco es necesario tener uno diferente cláusula, pero si la hay, debe estar al final.

En el IDE de Arduino, utilizamos llaves {} para definir bloques de código. Con MicroPython usamos sangría. Además, debe utilizar dos puntos. : después de cada expresión. A diferencia del IDE de Arduino, la expresión no tiene por qué estar entre paréntesis.

Importante: La sangría predeterminada de Python es de 4 espacios. En MicroPython La sangría solo debe tener 2 espacios. para empaquetar más código en la memoria del microcontrolador.

Bucles Mientras y Para

Los bucles le permiten ejecutar un bloque de código varias veces siempre que se cumpla una condición. Hay dos tipos de bucles: mientras Y para Moler. Por ejemplo, puedes usar todos los números del 1 al 10 con uno mientras Cinta:

number = 1
while number <= 10:
  print(number)
  number = number + 1

El código perteneciente al bucle while, indicado por la sangría, se ejecuta siempre que el valor en el número La variable es menor o igual a (<=) 10. En cada bucle la corriente número se imprime y luego se agrega 1.

También puedes imprimir números del 1 al 10 con un para bucle, así:

number = 1
for number in range(1, 11):
  print(number)

El para El bucle se ejecuta hasta que el valor en el número La variable oscila entre 1 y 11. La Rango() La función asigna automáticamente el siguiente valor. número Variable, hasta 1 debajo del último número que especificó.

Debes utilizar un bucle for cuando quieras repetir un bloque de código un número específico de veces. Utilice un bucle while cuando desee repetir el código hasta que ya no se cumpla una condición específica. En algunas situaciones puedes utilizar ambos, a menudo uno es más adecuado que el otro.

Similar a las declaraciones condicionales. para Y mientras Las expresiones booleanas deben tener dos puntos. : inmediatamente después y las expresiones a ejecutar deben tener sangría.

Funciones personalizadas

Para definir una nueva función, se utiliza la palabra En cualquier seguido del nombre que le quieres dar a la función y una serie de paréntesis (y argumentos dentro de ellos si es necesario). Después del paréntesis, agregue dos puntos. : y luego decirle a la función qué declaraciones ejecutar. Las instrucciones deben tener una sangría de 2 espacios (en MicroPython). Ejemplo:

def my_function(<arg1>, <arg2>, ...):
  <statement>
  (...)
  return

Por ejemplo, una función que convierte la temperatura de Celsius a Fahrenheit podría verse así:

def celsius_to_fahrenheit(temp_celsius): 
  temp_fahrenheit = temp_celsius * (9/5) + 32 
  return temp_fahrenheit

El celsius_to_Fahrenheit() La función acepta como argumento una temperatura en grados Celsius (temperatura_celsius). Luego realiza el cálculo para convertir la temperatura. Finalmente, devuelve la temperatura en Fahrenheit (temperatura_Fahrenheit).

nota: Las funciones no necesariamente tienen que devolver nada. Podrías simplemente hacer un poco de trabajo sin tener que devolver nada.

Clases y objetos

Python es un lenguaje de programación orientado a objetos (POO). Hay dos conceptos importantes que debes comprender en programación orientada a objetos: clases y objetos.

Una clase es un modelo para objetos. Define un conjunto de atributos (datos y funciones) que caracterizan a un objeto. Las funciones dentro de una clase se llaman métodos. Las clases están definidas por la palabra clave. Clase seguido del nombre de la clase. Ejemplo:

class MyClass:
  (...)

Nota: Los nombres de clases en Python normalmente deberían estar en mayúsculas. Sin embargo, puedes darle el nombre que quieras.

Un objeto es una instancia de una clase. Es simplemente una colección de datos y métodos en una sola entidad. Puede utilizar todas las funciones de su clase a través del objeto. ¿Confundido? Veamos un ejemplo sencillo.

Si queremos definir varias personas con los mismos atributos en un programa Python, podemos pensar en el término «Persona» como una clase. Por ejemplo, queremos definir una persona con atributos como nombre, edad, país, etc.

Conceptos básicos de la programación MicroPython con ESP32 y ESP8266

Entonces podemos crear una clase llamada persona. Nuestra clase tendrá los siguientes atributos: Apellido, ViejoY país. Puedes agregar tantos atributos como quieras. También creamos una función (método) que genera una descripción de la persona en función de sus atributos:

class Person:
  name = ""
  age = 0
  country = ""
  def description(self):
    print("%s is %d years old and he is from %s." %(self.name, self.age, self.country))

Como puede ver, estamos definiendo una nueva clase usando la palabra clave Claseseguido del nombre que queremos darle a la clase.

Dentro de persona En clase definimos varias variables que contienen valores. Por defecto esto es Apellido Y país son cadenas vacías, y el Viejo es 0. Luego también definimos una función (método) que imprime todos los valores de las variables en el shell.

Todas las funciones dentro de una clase deben él mismo Parámetro como argumento y otros argumentos si es necesario.

El él mismo El parámetro se refiere al objeto en sí. Se utiliza para acceder a variables que pertenecen a la clase. Por ejemplo, para acceder a Apellido Deberíamos usar variables dentro de la clase. nombre.propio.

Ahora que hemos creado una clase, podemos crear tantas como queramos. persona Objetos como queramos usando esta clase. El persona El objeto tendrá un nombre, edad y país. También podremos comparar su descripción con la Descripción() Método.

Por ejemplo, uno nuevo. persona Objeto nombrado persona1:

>>> person1 = Person()

Establecer propiedades de objeto

Alrededor de Apellido, ViejoY país de persona1 Objeto. Puedes hacer esto de la siguiente manera:

>>> person1.name = "Rui"
>>> person1.age = 25
>>> person1.country = "Portugal"

Métodos de llamada

Más adelante en su código puede usar el creado Descripción() método en cada persona Objeto. Para llamar al Descripción() método en el persona1 Objeto:

>>> person1.description()

Esto debería generar:

Rui is 25 years old and he is from Portugal.

Ahora debes entender que puedes crear tantos objetos como quieras usando la misma clase y puedes usar los métodos disponibles con todos los objetos de esa clase.

Conceptos básicos de la programación MicroPython con ESP32 y ESP8266

El método constructor

En lugar de tener que definir una clase y luego establecer las propiedades del objeto, lo que puede llevar mucho tiempo, puede utilizar el método constructor dentro de su clase.

El método constructor se utiliza para iniciar datos una vez que se crea una instancia de un objeto de una clase. El método constructor también se denomina método __init__. Usando el método __init__ Persona() La clase se ve así:

class Person():
  def __init__(self, name, age, country):
    self.name = name
    self.age = age
    self.country = country
  def description(self):
    print("%s is %d years old and he is from %s." %(self.name, self.age, self.country))

para entonces uno persona Objeto con los mismos atributos que definimos antes, solo debemos hacer lo siguiente:

>>> person1 = Person("Rui", 25, "Portugal")

Cuando usted llama Descripción() sobre el persona1 objeto, obtienes el mismo resultado:

>>> person1.description()
Rui is 25 years old and he is from Portugal.

Módulos

Un módulo es un archivo que contiene un conjunto de clases y funciones que puedes usar en tu código; también puedes llamarlo biblioteca. Para acceder a las clases y funciones de este código, solo necesita importar este módulo a su código.

Puede crear sus propios módulos o utilizar módulos ya creados de la biblioteca estándar de Python. MicroPython solo tiene un pequeño subconjunto de la biblioteca estándar de Python, pero tiene varios módulos para controlar GPIO, establecer conexiones de red y más.

Importar módulos/bibliotecas es muy fácil:

import module_name

Para importar desde máquina Biblioteca que contiene clases para controlar GPIO, ingrese:

import machine

En la mayoría de los programas no necesitarás todas las clases de un módulo. Es posible que solo desees importar una única clase. Por ejemplo, sólo el Bolígrafo clase de la máquina Módulo:

from machine import Pin

Conceptos básicos de la programación MicroPython con ESP32 y ESP8266

Envolver

En este tutorial, solo hemos arañado la superficie de los conceptos básicos de Python que también se aplican a MicroPython. Si está acostumbrado a programar productos electrónicos con Arduino IDE, encontrará que MicroPython tiene una sintaxis mucho más simple y fácil de usar. Resumamos algunas de las diferencias clave entre sus bocetos de Arduino y programas en MicroPython:

  • No usas punto y coma ; al final de una declaración
  • Utilice dos puntos después de expresiones booleanas en sentencias y bucles condicionales :
  • Para definir bloques de código, use sangría en lugar de llaves {}
  • Cuando crea una variable, no tiene que definir qué tipo de datos es; no tiene que declarar una variable
  • La sangría en MicroPython es de 2 espacios.

Recomendación de lectura: Programación MicroPython con ESP32 y ESP8266 eBook

Esperamos que este artículo sobre la sintaxis básica de MicroPython le haya resultado útil. Pronto agregaremos tutoriales sobre programación ESP32 y ESP8266 con MicroPython. ¡Estad atentos y suscríbete al blog de RNT!

Gracias por leer.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded



Conceptos básicos de la programación MicroPython con ESP32 y ESP8266

MicroPython es una re-implementación del lenguaje de programación Python, dirigido a microcontroladores y sistemas integrados como el ESP32 o ESP8266.

Programar en MicroPython es muy similar a programar en Python: todas las características del lenguaje de Python también están en MicroPython, con algunas excepciones. Debido a que los microcontroladores y sistemas integrados son mucho más limitados que nuestras computadoras, MicroPython no incluye la biblioteca estándar completa por defecto.

Si ya sabes cómo programar en Python, programar en MicroPython es lo mismo. Solo debes tener en cuenta que MicroPython se utiliza para dispositivos restringidos. Por lo tanto, debes mantener tu código lo más simple posible.

Preguntas frecuentes sobre programación en MicroPython con ESP32 y ESP8266

¿Cuáles son los operadores matemáticos admitidos en MicroPython?

MicroPython puede realizar operaciones matemáticas. Los operadores matemáticos admitidos incluyen la suma (+), resta (-), multiplicación (*), división (/), división entera (//) y el resto de la división (%).

¿Qué tipos de datos se pueden almacenar en variables en MicroPython?

Las variables en MicroPython pueden almacenar varios tipos de valores, como números enteros (int), números con decimales (float), cadenas de texto (str) y booleanos (bool).

¿Cómo se definen y utilizan las funciones definidas por el usuario en MicroPython?

Para definir una función en MicroPython, se utiliza la palabra clave «def» seguida del nombre de la función y los argumentos necesarios. Las funciones pueden realizar tareas específicas y pueden o no devolver un valor.

¿Cuál es la diferencia entre las clases y los objetos en Python?

En Python, una clase es una plantilla para objetos que define atributos y métodos. Un objeto es una instancia de una clase que contiene datos y métodos específicos.

¿Cómo se importan módulos en MicroPython?

Los módulos en MicroPython son archivos que contienen clases y funciones que se pueden usar en tu código. Para importar un módulo en MicroPython, simplemente se utiliza la declaración «import nombre_del_módulo».

Para obtener más información detallada sobre la programación en MicroPython con ESP32 y ESP8266, te recomendamos consultar el blog de Random Nerd Tutorials.

¡Esperamos que esta información te haya sido útil para comprender los conceptos básicos de la programación con MicroPython en dispositivos ESP32 y ESP8266!


Deja un comentario