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í.



