SparkFun DataLogger IoT - 9D - Configurando el DataLogger IoT sérvidor HTTP

es una herramienta conocida como registrador de datos o “data logger”, que se usa para grabar data de sensores internos de la plataforma de Sparkfun y sensores externos vía Cables Qwiic. Antes de comenzar primero se refiere al artículo anterior configuración inicial en este link si es necesario. Se asume que ya el SparkFun DataLogger IoT - 9DoF ha sido configurado con la conección de WiFi.

Para este caso, el Raspberry Pi 5 con WiFi integrado se utilizará. Un nodo sérvidor sencillo NodeJS HTTP, que existe dentro de el Raspberry Pi 5 se configura. El Nodo JS en un “open-source”, mutli-platforma “JavaScript runtime environment” para crear sérvidor es de esta naturaleza. La conección HTTP en el “DataLogger IoT” es usado para poner la data a este sérvidor HTTP. EL Nodo JS se instala como sigue,

$ sudo apt install nodejs npm

Una vez se instala el Node.js, ya puede servir de “website” en el internet. Se puede usar la aplicación npm para instalar cualquier paquete de JavaScript adicional como sea necesario. Para verificar que la instalación este funcionando apropiadamente, primero se verifica el ip address usando el comando ifconfig. Se abre un editor de su preferencia, se cambia el “hostname ip address” el cuál típicamente se asigna por el “WiFi Router” (en este caso: 192.168.11.148) y se graba el mismo en un directorio de su preferencia, nombrado test.js.

const http = require('http');
	
const hostname = '192.168.11.148';
const port = 8080;
	
const server = http.createServer((req, res) => {
	res.statusCode = 200;
	res.setHeader('Content-Type', 'text/plain');
	res.end('Welcome to Digikey');
});
	
server.listen(port, hostname, () => {
	console.log(`Server running at http://${hostname}:${port}/`);
});

Se comienza el sérvidor HTTP Node JS,

$ node test.js
Server running at http://192.168.11.148:8080/

Se usa CTRL-C para detener el sérvidor como sea necesario, de lo contrario se mantiene corriendo en el “background” (no deja comenzarlo con el mismo puerto asignado), si esto ocurre y surge el siguiente error,

Emitted 'error' event on Server instance at..... etc...

entonces, use el comando para eliminar el proceso del sérvidor filtrado en este caso al puerto 3000, para comenzar uno nuevo cuando sea requerido,

$ sudo lsof -i :3000
COMMAND   PID    USER   FD   TYPE DEVICE SZE/OFF NODE NAME
node    13640 digikey   18u  IPv4  40858      0t0  TCP localhost:3000 (LISTEN)
node    13640 digikey   22u  IPv4  44211      0t0  TCP localhost:3000->localhost:44892 (CLOSE_WAIT)
	
$ kill -9 13640

Use el “web browser” con la dirección de IP aplicable por ejemplo en este caso (http://192.168.11.148:8080) y el siguiente mensaje se podra ver en el “browser”,

De esta manera, la instalación se ha verificado, y el servidor Node JS se puede terminar usando CTRL-C. Ahora proceda a configurar el SparkFun DataLogger IoT - 9DoF para el sérvidor Nodo JS via el cable USB, conectándose vía minicom de la siguiente manera,

minicom -D /dev/ttyUSB0 -b 115200 -7

Oprima el boton de “reset” al lado del conector USB en la plataforma. El siguiente menú se verá en el terminal. Navege por el menú para activar y configurar el “HTTP IoT - An HTTP IoT data connector option IP address:Port”

SparkFun DataLogger IoT - 9DoF   (c) 2023-2024 SparkFun Electronics             
Version: 01.02.00 Version 1.2 - build 00013e                                    
                                                                                
Device ID: SFD1B805D422C930                                                     
Time: 1970-12-31T17:13:39                                                       
Uptime: 0 days, 00:13:39.868                                                    
                                                                                
                                                                                
                                                                                
Settings for: /SparkFun DataLogger IoT - 9DoF                                   
                                                                                
         1)  Settings - System settings and operations                          
         2)  Devices Settings - Settings for connected devices                  
                                                                                
         x)  Exit                                                               
                                                                                
Select Option: 1                                                                
                                                                                
                                                                                
Settings for: /SparkFun DataLogger IoT - 9DoF/Settings                          
                                                                                
                                                                                
    General                                                                     
         1)  Application Settings - Main Application Settings                   
         2)  Save Settings - Save, Restore and Reset System settings.           
         3)  Time Setup - Manage time configuration and reference sources       
                                                                                
    Network                                                                     
         4)  WiFi Network - WiFi network connection for the system              
         5)  NTP Client - NTP Time Sync Client                                  
                                                                                
    Logging                                                                     
         6)  Logger - Data logging action                                       
         7)  Logging Timer - Set the internal between log entries               
         8)  Data File - Output file rotation manager                           
                                                                                
    IoT Services                                                                
         9)  MQTT Client - A generic MQTT Client                                
        10)  MQTT Secure Client - A secure MQTT client                          
        11)  AWS IoT - Connect to an AWS Iot Thing                              
        12)  ThingSpeak MQTT - Connection to ThingSpeak                         
        13)  Azure IoT - Connection to Azure IoT                                
        14)  HTTP IoT - An HTTP IoT data connector                              
        15)  Machinechat - Connection to Machinechat IoT Server                 
        16)  Arduino IoT - Connection to Arduino IoT Cloud                      
                                                                                
    Preview                                                                     
        17)  IoT Web Server - Browse and Download log files on the SD Card      
                                                                                
    Advanced                                                                    
        18)  System Update - Device Reset and Firmware Update Options           
                                                                                
         b)  Back                                                               
                                                                                
Select Option: 14                                                               
                                                                                
                                                                                
Settings for: /SparkFun DataLogger IoT - 9DoF/Settings/HTTP IoT                 
                                                                                
    Settings                                                                    
         1)  Enabled - Enable or Disable the HTTP Client  : true                
         2)  URL - URL to call with log information  : http://192.168.11.148:800
         3)  CA Cert Filename - File to load the certificate from  :            
                                                                                
         b)  Back                                                               
                                                                                
Select Option:

luego regrese al menú principal selecionando b (Back) cuantas veces sea necesario y luego x (Exit) para almacenar la configuración. Si el SparkFun DataLogger IoT - 9DoF se mantiene conectado via el cable USB al terminal de minicom, mostrará la data que se esta grabando. Ahora abra un editor y entre la siguiente aplicación de Node JS llamado server.js, que permitirá al usuario mostrar en el “Web browser” la data del sensor en formato conocido como “Java Script Object Notation” (JSON),

const http = require('http');
const hostname = '192.168.11.148';
const port = 8080;
var DATA;

// Setup the endpoint server
const myServer = http.createServer(function (req, res) {
  
  // on data callback, collect chunk
  req.on('data', function(chunk){
    DATA = JSON.stringify(JSON.parse(chunk),null,2);
    console.log(DATA);
  });

  // Display Data 
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(DATA);
  
  // Listen on our port
}).listen(8080);

después de grabar el previo archivo como server.js, el sérvidor Nodo JS se comienza así,

$ node server.js

{
  "MAX17048": {
    "Voltage (V)": 4.349999905,
    "State Of Charge (%)": 120.5976563,
    "Change Rate (%/hr)": 1.248000026
  },
  "ISM330": {
    "Accel X (milli-g)": -106.8720016,
    "Accel Y (milli-g)": -1001.864014,
    "Accel Z (milli-g)": 173.4840088,
    "Gyro X (milli-dps)": 35,
    "Gyro Y (milli-dps)": -210,
    "Gyro Z (milli-dps)": 192.5,
    "Temperature (C)": 27.72265625
  },
  "MMC5983": {
    "X Field (Gauss)": -1.454711914,
    "Y Field (Gauss)": 0.646850586,
    "Z Field (Gauss)": -1.508666992,
    "Temperature (C)": 30
  }

el sérvidor que corre dentro del Raspberry Pi 5 estara mostrando la data a la velocidad de coleción definida en la configuración del SparkFun DataLogger IoT - 9DoF. En el terminal se ve la data de cada sensor en formato JSON format a medida que se graba.

Procede abrir un nuevo “web broswer” dentro de la Raspberry Pi 5 y la data en formato JSON data se verá como sigue,

Cualquier otro artefacto conectado al router WiFi con acceso al “LAN” puede recibir el SparkFun DataLogger IoT - 9DoF. En el terminal se ve la data del MAX17048 micropower current fuel gauge, el ST ISM330 accelerometer/gyro inertial module, y el High Performance 3-axis Magnetic Sensor. en el “web browser”. Por ejemplo, si un célular esta conectado al “WiFi Hotspot” se puede ver en el “browser” así,

la data sera modificada cuando el “web browser” es reactivado para buscar la dirección. Ahora cualquier desarollador del sistema operativo Android, puede implementar fácilmente aplicaciones en el célular usando este sérvidor Nodo JS con data en formato JSON. Si esta data necesita ser obtenida desde python dentro de la Raspberry Pi 5, el siguiente programa en python desarollado aqui en Digikey llamado display.py,

import pandas as pd
import requests
from pandas import json_normalize  

url = "http://192.168.13.144:8080/"
response = requests.get(url)
data = pd.json_normalize(response.json())
headers = []
for items in data.head():
	headers.append(items)

info = data.head(1)
for items in headers:
	print(items," = ", info[items][0])
	

se puede usar para recoger la data de el Nodo JSON sérvidor JS en el Raspberry Pi 5 que se muestra como sigue,

$ python3 display.py 
MAX17048.Voltage (V)  =  4.35125017
MAX17048.State Of Charge (%)  =  120.5976563
MAX17048.Change Rate (%/hr)  =  0
ISM330.Accel X (milli-g)  =  -110.0439987
ISM330.Accel Y (milli-g)  =  -1002.230042
ISM330.Accel Z (milli-g)  =  169.8240051
ISM330.Gyro X (milli-dps)  =  -157.5
ISM330.Gyro Y (milli-dps)  =  -1645
ISM330.Gyro Z (milli-dps)  =  140
ISM330.Temperature (C)  =  30.6875
MMC5983.X Field (Gauss)  =  -1.441833496
MMC5983.Y Field (Gauss)  =  0.628723145
MMC5983.Z Field (Gauss)  =  -1.465515137
MMC5983.Temperature (C)  =  33

La data (IoT) del MAX17048, el ST ISM330 accelerometer/gyro inertial module es recogida vía WiFi dentro de la aplicación de python display.py, la cuál puede utilizar como se necesite.

Otros sérvicios de internet (IoT) que necesitan ser registrados se pueden configurar tales como el AWS IoT, ThingSpeak, Azure IoT, Machinechat, Arduino IoT entre otros. El SparkFun DataLogger IoT - 9DoF es portátil, versátil y fácil de usar registrador de datos “data logger” en muchas aplicaciones de IoT.

This article is available in english language here.

Este articulo está disponible en idioma ingles aquí.