Tabla de contenido:
- Paso 1: crear un entorno de construcción
- Paso 2: Obtenga el código fuente, configure y compile
- Paso 3: conecte los componentes de hardware
- Paso 4: flashear y ejecutar
- Paso 5: interactuar
- Paso 6: Detalles de implementación
Video: Tira de LED WiFi + Sensor de temperatura con ESP8266: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
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
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:
- 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.
- 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.
- 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:
-
Agregue su usuario al grupo de marcación externa:
sudo adduser $ (whoami) dialout
- 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:
Luces LED multicolores reactivas a la música - Sensor de detección de sonido Arduino - Tira de LED RGB: 4 pasos
Luces LED multicolores reactivas a la música | Sensor de detección de sonido Arduino | Tira de LED RGB: proyecto de luces LED multicolores reactivas a la música. En este proyecto, se utilizó una simple tira de LED 5050 RGB (no el LED direccionable WS2812), un sensor de detección de sonido Arduino y un adaptador de 12 V
Lectura de temperatura usando el sensor de temperatura LM35 con Arduino Uno: 4 pasos
Lectura de temperatura usando el sensor de temperatura LM35 con Arduino Uno: Hola chicos, en este instructables aprenderemos cómo usar LM35 con Arduino. Lm35 es un sensor de temperatura que puede leer valores de temperatura de -55 ° C a 150 ° C. Es un dispositivo de 3 terminales que proporciona voltaje analógico proporcional a la temperatura. Hig
Punto de acceso (AP) NodeMCU ESP8266 para servidor web con sensor de temperatura DT11 y temperatura y humedad de impresión en el navegador: 5 pasos
Punto de acceso (AP) NodeMCU ESP8266 para servidor web con sensor de temperatura DT11 y temperatura y humedad de impresión en el navegador: Hola, en la mayoría de los proyectos usamos ESP8266 y en la mayoría de los proyectos usamos ESP8266 como servidor web para que se pueda acceder a los datos en cualquier dispositivo a través de wifi accediendo al servidor web alojado por ESP8266, pero el único problema es que necesitamos un enrutador que funcione para
Tira de LED activada por sensor de movimiento con temporizador: 6 pasos (con imágenes)
Tira de LED activada por sensor de movimiento con temporizador: ¡Hola a todos! Estoy muy feliz de estar escribiendo otro instructable en este momento. Este proyecto surgió cuando un compañero instructable-er (?!) (David @dducic) me contactó hace varios meses pidiendo ayuda con el diseño. Así que aquí estaba la especificación original: & q
SENSOR SUHU DENGAN LCD DAN LED (Hacer sensor de temperatura con LCD y LED): 6 pasos (con imágenes)
SENSOR SUHU DENGAN LCD DAN LED (Hacer sensor de temperatura con LCD y LED): hai, saya Devi Rivaldi mahasiswa UNIVERSITAS NUSA PUTRA dari Indonesia, di sini saya akan berbagi cara membuat sensor suhu menggunakan Arduino dengan Salida ke LCD dan LED. Ini adalah pembaca suhu dengan desain saya sendiri, dengan sensor ini anda