AtomVM
AtomVM es una máquina virtual ligera que permite ejecutar bytecode de Erlang, Elixir y LFE (Lisp Flavored Erlang) en dispositivos incrustados con pocos recursos (como microcontroladores). Su objetivo es hacer posible usar lenguajes del ecosistema BEAM en hardware donde la máquina virtual de Erlang tradicional no puede correr por ser demasiado pesada.
Características principales
-
Permite usar lenguajes funcionales como Elixir en entornos de muy bajo nivel.
-
Consume muy poca memoria (menos de 500 KB en muchos casos).
-
Soporta concurrencia ligera y estructuras de datos funcionales.
-
Ideal para el desarrollo de sistemas incrustados inteligentes y compactos
Historia
AtomVM comenzó su desarrollo en el año 2018 por Pascal Gigler con el objetivo de llevar Elixir y Erlang a un hardware más pequeño. La comunidad fue creciendo, sumando desarrolladores que aportaron soporte para nuevos dispositivos y bibliotecas, llegando a poder realizarse proyectos industriales de IoT que necesitaban de un dispositivo con tolerancia a fallos, y concurrencia, las cuales tenia el dispositivo.
Ejemplo práctico: Medición ambiental con AtomVM y DHT11
Este ejemplo usa un sensor DHT11 conectado a un ESP32, leyendo temperatura y humedad usando Elixir sobre AtomVM.
Requisitos:
-
Microcontrolador ESP32 con AtomVM cargado.
-
Sensor DHT11 conectado al pin GPIO 4 (puedes cambiarlo).
-
Módulo nativo
avm_dht
disponible en el firmware de AtomVM.
defmodule DHTReader do
@dht_pin 4
def start do
IO.puts("Iniciando lectura del sensor DHT11...")
loop()
end
defp loop do
case :avm_dht.read(@dht_pin, :dht11) do
{:ok, temperature, humidity} ->
IO.puts("Temperatura: #{temperature} °C")
IO.puts("Humedad: #{humidity} %")
{:error, reason} ->
IO.puts("Error al leer sensor: #{inspect(reason)}")
end
:timer.sleep(5000) # Espera 5 segundos
loop()
end
end
DHTReader.start()
Instrucciones
-
Compila el archivo con
elixirc dht_reader.ex
. -
Sube el archivo
.beam
al ESP32 con las herramientas de AtomVM. -
Asegúrate de incluir el módulo nativo
avm_dht
en tu firmware. -
El ESP32 imprimirá por consola la temperatura y humedad cada 5 segundos.
ESP32 sumado con Elixir Nerves permite crear sistemas más complejos, como sistemas de domotica, sistemas industriales, estaciones meteorológicas con panel, etc. |

AtomVM y Elixir Nerves permiten unir el mundo del hardware incrustado con la programación funcional moderna. Usarlos en conjunto puede llevar a soluciones más robustas, escalables y fáciles de mantener. Además, estas tecnologías permiten desarrollar soluciones completas de IoT, automatización y monitoreo sin depender de lenguajes más difíciles como C o C++, y aprovechando todo el ecosistema de Elixir.