Tabla de contenido:

Tira de LED WiFi + Sensor de temperatura con ESP8266: 6 pasos
Tira de LED WiFi + Sensor de temperatura con ESP8266: 6 pasos

Video: Tira de LED WiFi + Sensor de temperatura con ESP8266: 6 pasos

Video: Tira de LED WiFi + Sensor de temperatura con ESP8266: 6 pasos
Video: ✔️ Lectura de sensor de temperatura y humedad por WiFi con ESP8266- 👈😉 - Curso IoT con ESP8266 #15 2024, Mes de julio
Anonim
Tira de LED WiFi + Sensor de temperatura con ESP8266
Tira de LED WiFi + Sensor de temperatura con ESP8266

Este tutorial describe los pasos para configurar un ESP8266 y hacerlo hablar tanto con un sensor de temperatura como con una tira de LED, al mismo tiempo que puede recibir entrada y enviar salida con MQTT a través de WiFi. El proyecto se realizó para un curso tomado en Cal Poly San Luis Obispo en el otoño de 2016 - CPE 439: Real Time Embedded Systems. El objetivo general era demostrar la facilidad de crear una "cosa" conectada a Internet con hardware barato.

Suministros / Equipo requerido:

  • Placa de desarrollo NodeMCU ESP8266
  • Tira de LED WS2812B
  • Sensor de temperatura MAX31820
  • Tablero de circuitos
  • Resistencia de 4.7K ohmios
  • Resistencia de 220 ohmios
  • cables de puente
  • cable micro-usb
  • PC (o VM) con linux (por ejemplo, Ubuntu)

Supuestos / requisitos previos:

  • experiencia con el uso de herramientas de línea de comandos e instalación de paquetes en una distribución basada en Debian
  • comprensión básica de la sintaxis de Makefile
  • cables de conexión

Paso 1: crear un entorno de construcción

Para construir el proyecto, necesitará esp-open-sdk instalado en su máquina. Siga el enlace y lea las instrucciones de construcción. En resumen, estará haciendo algunos comandos sudo apt-get para instalar dependencias, un clon git --recursive para clonar / descargar esp-open-sdk, y finalmente un comando make para compilar esp-open-sdk.

Mírame

Paso 2: Obtenga el código fuente, configure y compile

Ahora que esp-open-sdk está construido, clone el repositorio del proyecto.

clon de git

Cambie al directorio del proyecto, cree una carpeta.local y copie la configuración de ejemplo.

cd esp-rtos-tests

mkdir -p.local cp settings.example.mk.local / settings.mk

Ahora abra.local / settings.mk con cualquier editor de texto y cambie la siguiente configuración:

  • OPENSDK_ROOT: la ruta absoluta para la ubicación de esp-open-sdk que construyó en el paso 1
  • WIFI_SSID: el SSID de su red WiFi
  • WIFI_PASS: la contraseña de su red WiFi
  • PIXEL_COUNT: la cantidad de píxeles en su tira de LED WS2812B

Nota: Dado que este proyecto usa SPI para manejar los LED y usa NodeMCU 3.3v para suministrarlos, probablemente no podrá manejar más de ~ 60 LED.

Nota: No es necesario cambiar las otras configuraciones, pero puede hacerlo si lo desea. Se recomienda mantener el orden de las prioridades de las tareas. Cuanto menor sea el número de prioridad, menor será la prioridad de la tarea.

Ahora construye el proyecto:

make -C examples / cpe439

Si todo está configurado correctamente, debería comenzar a compilarse. Al final debería ver:

'Firmware / cpe439.bin' creado con éxito

Mírame

Paso 3: conecte los componentes de hardware

Conectar componentes de hardware
Conectar componentes de hardware

Ahora que el código está compilado, es hora de conectar nuestros periféricos.

Primero, pegue el NodeMCU en la placa de prueba, luego use cables de puente para hacer las conexiones como se muestra en el diagrama.

Un par de cosas a tener en cuenta:

  1. Importante: la línea de datos WS2812B no es bidireccional. Si observa de cerca las marcas en el lado del LED de la tira, debería ver pequeñas flechas apuntando en una dirección. La salida de D7 de NodeMCU debe dirigirse al WS2812B de la misma manera que el marcador de dirección, que puede ver en el diagrama si observa de cerca.
  2. Dependiendo del tipo de conectores con los que venga su WS2812B, es posible que deba hacer algunas modificaciones para que se conecten de forma segura a la placa de pruebas. También puede usar pinzas de cocodrilo para conectarlos a cables de puente compatibles con la placa de pruebas.
  3. Los pines MAX31820 tienen un paso más pequeño y son más delgados que los puentes estándar de 0.1 "/2.54 mm, lo que los hace difíciles de conectar. Una forma de evitar esto es usar cables de puente hembra a macho, quitar la carcasa de plástico del lado hembra, luego use unos alicates para engarzar los extremos del puente hembra firmemente alrededor de los pines MAX31820 más pequeños.

Verifique las conexiones antes de encender el NodeMCU para no dañar los componentes.

Paso 4: flashear y ejecutar

Brillante

Con todo el hardware conectado, conecte su NodeMCU y flash con el siguiente comando:

hacer flash -C examples / cpe439 ESPPORT = / dev / ttyUSB0

/ dev / ttyUSB0 es el com serial bajo el que NodeMCU debería aparecer. Si tiene otros dispositivos en serie conectados, puede aparecer como / dev / ttyUSB1 o algún otro número. Para comprobarlo, puede ejecutar este comando dos veces, una vez con NodeMCU desconectado y otra vez conectado, y comparar la diferencia:

ls / dev / ttyUSB *

Otro problema que puede encontrar es no tener permiso para acceder al dispositivo. Hay dos formas de solucionar este problema:

  1. Agregue su usuario al grupo de marcación externa:

    sudo adduser $ (whoami) dialout

  2. chmod o chown el dispositivo:

sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0Se prefiere el primer método ya que es una solución permanente.

Corriendo

Después de ejecutar el comando flash con éxito, el dispositivo se iniciará inmediatamente y comenzará a ejecutar el código compilado. En cualquier momento después de flashear, puede ejecutar el siguiente comando para ver la salida en serie:

python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q

Para ahorrar tiempo, puede agregar esto a su archivo ~ /.bashrc:

alias nodemcu = 'python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q'

..que le permite simplemente escribir "nodemcu" como un alias para ese comando.

Si todo está configurado correctamente, su tira de LED debería iluminarse en verde, y en la serie debería ver conexión WiFi, obtener una dirección IP, conectarse a MQTT y mensajes de que se están expulsando los datos de temperatura.

conectado con MyWiFiSSID, canal 1dhcp cliente de inicio… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, máscara: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueuexQuett_task: status = 5xQueuexQuetque_task: status = 5xQueuexQueque_tarea:: (Re) conectando al servidor MQTT test.mosquitto.org… xQueueReceive + 25.50xQueueSend ok doneSend MQTT connect… MQTTv311donexQueueReceive +25.56 xQueueSend ok

Paso 5: interactuar

Suponiendo que su dispositivo se haya conectado a WiFi y el broker MQTT con éxito, podrá enviar y recibir datos de NodeMCU con MQTT. Si aún no lo ha hecho, instale el paquete de clientes mosquitto:

sudo apt-get install mosquitto-clients

Ahora debería poder usar los programas mosquitto_pub y mosquitto_sub desde su shell.

Recibir actualizaciones de temperatura

Para recibir datos de temperatura, queremos usar el comando mosquitto_sub para suscribirnos al tema en el que está publicando NodeMCU.

mosquitto_sub -h test.mosquitto.org -t / cpe439 / temp

Debería ver los datos de temperatura (en grados Celsius), llegando a la terminal.

+25.87+25.93+25.68…

Configurar el color de la tira de LED de forma remota

Se utiliza un formato de mensaje simple para enviar valores RGB al NodeMCU a través de MQTT. El formato del comando se ve así:

r: RRRg: GGGb: BBB ~

Donde RRR, GGG, BBB corresponden a valores RGB (0-255) del color que desea enviar. Para enviar nuestro comando, usaremos el comando mosquitto_pub. Aquí hay unos ejemplos:

mosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 255g: 0b: 0 ~' # redmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 0g: 255b: 0 ~ '# greenmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m' r: 0g: 0b: 255 ~ '# azul

Si desea ser creativo, busque un selector de color en línea como este y edite el comando con el valor RGB que elija.

¡Cuidado

Los temas de este proyecto se establecen en / cpe439 / rgb y / cpe439 / temp en un corredor público de MQTT, lo que significa que no hay nada que impida que otra persona publique o se suscriba a los mismos temas que usted. Para probar cosas, usar un corredor público está bien, pero para proyectos más serios, querrá conectarse a un corredor con protección por contraseña o ejecutar su propio corredor en el servidor.

Paso 6: Detalles de implementación

Onewire

El ESP8266 tiene solo 1 núcleo, por lo que bloquear tareas como esperar 750 ms para que el sensor de temperatura realice una medición de temperatura normalmente provocaría que el WiFi no funcione bien, y tal vez incluso se bloquee. En el paradigma FreeRTOS, llama a vTaskDelay () para manejar estas largas esperas, pero también se requieren muchas esperas más cortas entre lecturas y escrituras que son más cortas que el tick del sistema FreeRTOS y, por lo tanto, no se pueden evitar con vTaskDelay (). Para evitar esto, el controlador de un solo cable en este proyecto se escribió para que se ejecute en una máquina de estado que es impulsada por el temporizador de hardware del ESP8266, que puede desencadenar eventos tan bajos como cada 10 microsegundos, que resulta ser el más corto. tiempo requerido entre operaciones de lectura / escritura onewire. La mayoría de las otras implementaciones usan una llamada de bloqueo a delay_us () o similar para manejar esto, pero si está constantemente tomando actualizaciones de temperatura, todos esos retrasos comienzan a acumularse, lo que resulta en una aplicación menos receptiva. La fuente de esta parte del código se encuentra en la carpeta extras / onewire.

WS2812B

El ESP8266 no tiene ninguna opción de hardware estándar para PWM lo suficientemente rápido como para manejar tiras de LED a 800 KHz. Para evitar esto, este proyecto utiliza el pin SPI MOSI para controlar los LED. Al ajustar la frecuencia de reloj de SPI y cambiar la carga útil de SPI, puede lograr un control bastante confiable de cada LED individual. Este método no está exento de defectos: por un lado, los LED deben alimentarse con una fuente de 5V y se debe agregar un cambiador de nivel a la salida del pin SPI. Pero 3.3V funciona. En segundo lugar, existen fallos que se producen debido a una sincronización imperfecta con el método SPI. Y tercero, ahora no puede usar SPI para nada más. Puede encontrar información adicional sobre este método aquí, y la fuente de esta parte del código se encuentra en la carpeta extras / ws2812.

Un método más confiable para manejar tiras de LED es usar i2s. Sin embargo, este método tiene muchos trucos específicos de chips, por lo que SPI parecía ser una mejor opción como ejercicio de aprendizaje.

Recomendado: