Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
Internet de las cosas (IoT) es uno de los temas populares en el planeta en este momento. Y está creciendo rápidamente día a día con Internet. El Internet de las cosas está transformando hogares simples en hogares inteligentes, donde todo, desde las luces hasta las cerraduras, se puede controlar desde su teléfono inteligente o computadora de escritorio. Este es el lujo que todos quieren tener.
Siempre jugamos con las herramientas que tenemos y seguimos trabajando para llegar al siguiente paso de nuestros límites. Intentamos darle a nuestro cliente una visión de las últimas tecnologías e ideas. Para que pueda convertir su hogar en hogares inteligentes y disfrutar del sabor del lujo sin mucho esfuerzo.
Hoy, pensamos en trabajar en uno de los temas más importantes en IoT: la orientación de mapas digitales.
Construiremos un servidor web a través del cual podremos monitorear los movimientos de cualquier dispositivo o cosa (depende de ti, a quién quieres espiar;)). Siempre puede pensar en actualizar este proyecto al siguiente nivel con algunas modificaciones y no se olvide de informarnos en los comentarios a continuación.
¡¡Empecemos que.. !!
Paso 1: Equipo que necesitamos..
1. Sensor LSM9DS0
El sensor 3 en 1 fabricado por STMicroelectronics, el LSM9DS0 es un sistema en paquete con un sensor de aceleración lineal digital 3D, un sensor de velocidad angular digital 3D y un sensor magnético digital 3D. El LSM9DS0 tiene una escala completa de aceleración lineal de ± 2g / ± 4g / ± 6g / ± 8g / ± 16g, un campo magnético a escala completa de ± 2 / ± 4 / ± 8 / ± 12 gauss y una velocidad angular de ± 245 / ± 500 / ± 2000 dps.
2. Adafruit Huzzah ESP8266
El procesador ESP8266 de Espressif es un microcontrolador de 80 MHz con un front-end WiFi completo (como cliente y punto de acceso) y pila TCP / IP con soporte DNS también. El ESP8266 es una plataforma increíble para el desarrollo de aplicaciones de IoT. El ESP8266 proporciona una plataforma madura para aplicaciones de monitoreo y control que utilizan Arduino Wire Language y Arduino IDE.
3. Programador USB ESP8266
Este adaptador de host ESP8266 fue diseñado específicamente por Dcube Store para la versión Adafruit Huzzah del ESP8266, lo que permite la interfaz I²C.
4. Cable de conexión I2C
5. Cable mini USB
La fuente de alimentación del cable mini USB es una opción ideal para alimentar el Adafruit Huzzah ESP8266.
Paso 2: Conexiones de hardware
En general, hacer conexiones es la parte más fácil de este proyecto. Siga las instrucciones y las imágenes y no debería tener problemas.
En primer lugar, tome el Adafruit Huzzah ESP8266 y coloque el programador USB (con el puerto I²C orientado hacia adentro) en él. Presione suavemente el Programador USB y terminaremos con este paso tan fácil como un pastel (vea la imagen de arriba).
Conexión del sensor y Adafruit Huzzah ESP8266 Tome el sensor y conecte el cable I²C con él. Para un funcionamiento correcto de este cable, recuerde que la salida I²C SIEMPRE se conecta a la entrada I²C. Se tuvo que seguir lo mismo para el Adafruit Huzzah ESP8266 con el programador USB montado sobre él (vea la imagen de arriba).
Con la ayuda del programador USB ESP8266, es muy fácil programar ESP. Todo lo que necesita hacer es conectar el sensor al programador USB y listo. Preferimos usar este adaptador porque facilita mucho la conexión del hardware. No se preocupe por soldar los pines de ESP al sensor o leer los diagramas de pines y la hoja de datos. Podemos usar y trabajar en múltiples sensores simultáneamente, solo necesita hacer una cadena. Sin estos programadores USB plug and play, existe un gran riesgo de realizar una conexión incorrecta. Un mal cableado puede matar tanto su wifi como su sensor.
Nota: El cable marrón siempre debe seguir la conexión de tierra (GND) entre la salida de un dispositivo y la entrada de otro dispositivo.
Encendido del circuito
Conecte el cable Mini USB al conector de alimentación de Adafruit Huzzah ESP8266. Enciéndelo y listo, ¡estamos listos para comenzar!
Paso 3: Código
El código ESP para el sensor Adafruit Huzzah ESP8266 y LSM9DS0 está disponible en nuestro repositorio de github.
Antes de continuar con el código, asegúrese de leer las instrucciones dadas en el archivo Léame y configure su Adafruit Huzzah ESP8266 de acuerdo con él. Solo tomará 5 minutos configurar el ESP.
El código es extenso pero está en la forma más simple que puedas imaginar y no tendrás dificultad para entenderlo.
Para su comodidad, también puede copiar el código ESP de trabajo para este sensor desde aquí:
// Distribuido con licencia de libre albedrío.// Úselo de la forma que desee, lucrativa o gratuita, siempre que encaje en las licencias de sus obras asociadas. // LSM9DSO // Este código está diseñado para funcionar con el Mini Módulo TCS3414_I2CS I2C disponible en dcubestore.com.
#incluir
#incluir
#incluir
#incluir
// La dirección LSM9DSO Gyro I2C es 6A (106)
#define Addr_Gyro 0x6A // LSM9DSO Accl La dirección I2C es 1E (30) #define Addr_Accl 0x1E
const char * ssid = "su ssid";
const char * contraseña = "su contraseña"; int xGyro, yGyro, zGyro, xAccl, yAccl, zAccl, xMag, yMag, zMag;
Servidor ESP8266WebServer (80);
vacío handleroot ()
{datos int sin firmar [6];
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Gyro); // Seleccionar registro de control 1 Wire.write (0x20); // Velocidad de datos = 95Hz, X, Y, Eje Z habilitado, encendido Wire.write (0x0F); // Detener la transmisión I2C Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Gyro); // Seleccionar registro de control 4 Wire.write (0x23); // 2000 dps a gran escala, actualización continua Wire.write (0x30); // Detener la transmisión I2C Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Accl); // Seleccionar registro de control 1 Wire.write (0x20); // Velocidad de datos de aceleración = 100Hz, X, Y, Eje Z habilitado, encendido Wire.write (0x67); // Detener la transmisión I2C en el dispositivo Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Accl); // Seleccionar registro de control 2 Wire.write (0x21); // Selección de escala completa +/- 16g Wire.write (0x20); // Detener la transmisión I2C Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Accl); // Seleccionar registro de control 5 Wire.write (0x24); // Alta resolución magnética, velocidad de salida de datos = 50Hz Wire.write (0x70); // Detener la transmisión I2C Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Accl); // Seleccionar el registro de control 6 Wire.write (0x25); // Magnético de escala completa +/- 12 gauss Wire.write (0x60); // Detener la transmisión I2C Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr_Accl); // Seleccionar el registro de control 7 Wire.write (0x26); // Modo normal, modo de conversión continua magnética Wire.write (0x00); // Detener la transmisión I2C Wire.endTransmission (); retraso (300);
for (int i = 0; i <6; i ++) {// Iniciar I2C Transmission Wire.beginTransmission (Addr_Gyro); // Seleccionar registro de datos Wire.write ((40 + i)); // Detener la transmisión I2C Wire.endTransmission ();
// Solicitar 1 byte de datos
Wire.requestFrom (Addr_Gyro, 1);
// Leer 6 bytes de datos
// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb if (Wire.available () == 1) {data = Wire.read (); }}
// Convertir los datos
int xGyro = ((datos [1] * 256) + datos [0]); int yGyro = ((datos [3] * 256) + datos [2]); int zGyro = ((datos [5] * 256) + datos [4]);
for (int i = 0; i <6; i ++) {// Iniciar transmisión I2C Wire.beginTransmission (Addr_Accl); // Seleccionar registro de datos Wire.write ((40 + i)); // Detener la transmisión I2C Wire.endTransmission ();
// Solicitar 1 byte de datos
Wire.requestFrom (Addr_Accl, 1);
// Leer 6 bytes de datos
// xAccl lsb, xAccl msb, yAccl lsb, yAccl msb // zAccl lsb, zAccl msb if (Wire.available () == 1) {data = Wire.read (); }}
// Convertir los datos
int xAccl = ((datos [1] * 256) + datos [0]); int yAccl = ((datos [3] * 256) + datos [2]); int zAccl = ((datos [5] * 256) + datos [4]);
for (int i = 0; i <6; i ++) {// Iniciar transmisión I2C Wire.beginTransmission (Addr_Accl); // Seleccionar registro de datos Wire.write ((8 + i)); // Detener la transmisión I2C Wire.endTransmission ();
// Solicitar 1 byte de datos
Wire.requestFrom (Addr_Accl, 1);
// Leer 6 bytes de datos
// xMag lsb, xMag msb, yMag lsb, yMag msb // zMag lsb, zMag msb if (Wire.available () == 1) {data = Wire.read (); }}
// Convertir los datos
int xMag = ((datos [1] * 256) + datos [0]); int yMag = ((datos [3] * 256) + datos [2]); int zMag = ((datos [5] * 256) + datos [4]);
// Salida de datos al monitor en serie
Serial.print ("Eje X de rotación:"); Serial.println (xGyro); Serial.print ("Eje Y de rotación:"); Serial.println (yGyro); Serial.print ("Eje Z de rotación:"); Serial.println (zGyro); Serial.print ("Aceleración en el eje X:"); Serial.println (xAccl); Serial.print ("Aceleración en el eje Y:"); Serial.println (yAccl); Serial.print ("Aceleración en el eje Z:"); Serial.println (zAccl); Serial.print ("Campo magnético en el eje X:"); Serial.println (xMag); Serial.print ("Campo magnético en el eje Y:"); Serial.println (yMag); Serial.print ("Archivado magnético en el eje Z:"); Serial.println (zMag);
// Salida de datos al servidor web
server.sendContent ("
TIENDA DCUBE
www.dcubestore.com
"" Mini módulo I2C del sensor LSM9DS0
);
server.sendContent ("
Eje X de rotación = "+ String (xGyro)); server.sendContent ("
Eje Y de rotación = "+ String (yGyro)); server.sendContent ("
Eje Z de rotación = "+ String (zGyro)); server.sendContent ("
Aceleración en el eje X = "+ String (xAccl)); server.sendContent ("
Aceleración en el eje Y = "+ String (yAccl)); server.sendContent ("
Aceleración en el eje Z = "+ String (zAccl)); server.sendContent ("
Magnético archivado en X-Axis = "+ String (xMag)); server.sendContent ("
Archivado magnético en el eje Y = "+ String (yMag)); server.sendContent ("
Archivado magnético en el eje Z = "+ String (zMag)); retraso (1000);}
configuración vacía ()
{// Inicializar la comunicación I2C como MASTER Wire.begin (2, 14); // Inicializar la comunicación en serie, configurar la velocidad en baudios = 115200 Serial.begin (115200);
// Conectarse a la red WiFi
WiFi.begin (ssid, contraseña);
// Espera la conexión
while (WiFi.status ()! = WL_CONNECTED) {retraso (500); Serial.print ("."); } Serial.println (""); Serial.print ("Conectado a"); Serial.println (ssid);
// Obtenga la dirección IP de ESP8266
Serial.print ("dirección IP:"); Serial.println (WiFi.localIP ());
// Inicie el servidor
server.on ("/", handleroot); server.begin (); Serial.println ("servidor HTTP iniciado"); }
bucle vacío ()
{server.handleClient (); }
Paso 4: funcionamiento del código
Ahora, descargue (o git pull) el código y ábralo en el IDE de Arduino.
Compile y cargue el código y vea el resultado en Serial Monitor.
Nota: Antes de cargar, asegúrese de ingresar su red SSID y contraseña en el código.
Copie la dirección IP de ESP8266 del Serial Monitor y péguela en su navegador web. Verá una página web con eje de rotación, aceleración y lectura del campo magnético en los 3 ejes.
La salida del sensor en Serial Monitor y Web Server se muestra en la imagen de arriba.
Paso 5: Aplicaciones y características
El LSM9DS0 es un sistema en paquete con un sensor de aceleración lineal digital 3D, un sensor de velocidad angular digital 3D y un sensor magnético digital 3D. Al medir estas tres propiedades, puede obtener una gran cantidad de conocimientos sobre el movimiento de un objeto. Midiendo la fuerza y la dirección del campo magnético de la Tierra con un magnetómetro, puede aproximar su rumbo. Un acelerómetro en su teléfono puede medir la dirección de la fuerza de gravedad y estimar la orientación (retrato, paisaje, plano, etc.). Los cuadricópteros con giroscopios incorporados pueden estar atentos a movimientos bruscos o cabeceos. Podemos usar esto en el Sistema de posicionamiento global (GPS).
Algunas aplicaciones más incluyen navegación interior, interfaces de usuario inteligentes, reconocimiento de gestos avanzado, juegos y dispositivos de entrada de realidad virtual, etc.
Con la ayuda de ESP8266, podemos aumentar su capacidad a una mayor longitud. Podemos controlar nuestros dispositivos y monitorear su desempeño desde nuestros equipos de escritorio y dispositivos móviles. Podemos almacenar y administrar los datos en línea y estudiarlos en cualquier momento para modificarlos. Más aplicaciones incluyen automatización del hogar, red de malla, control inalámbrico industrial, monitores para bebés, redes de sensores, dispositivos electrónicos portátiles, dispositivos con reconocimiento de ubicación Wi-Fi, balizas del sistema de posición Wi-Fi.
Paso 6: Recursos para ir más lejos
Para obtener más información sobre LSM9DS0 y ESP8266, consulte los enlaces a continuación:
- Hoja de datos del sensor LSM9DS0
- Diagrama de cableado LSM9DS0
- ESP8266 Hoja de datos