Conceptos B谩sicos

1

Qu茅 aprender谩s sobre Internet of Things

2

Espectro electromagn茅tico y qu茅 es radiofrecuencia

3

Clasificacion de radiofrecuencia

4

Regulaci贸n de la radiofrecuencia

5

驴Qu茅 son las Telecomunicaciones?

6

Halfduplex y Fullduplex

7

Clasificaci贸n de transmisiones: Upstream y Downstream

8

Link budget

9

Con ciertas caracter铆sticas, 驴Habr铆a conexi贸n en el sistema?

Alto data rate

10

Wi-fi

11

Bluetooth

12

Redes celulares

LPWANs

13

NB-IoT

14

Consideraciones para implementaci贸n de NB-IoT

15

LoRaWAN

Reto 2

16

驴Qu茅 usar铆as para monitorear la posici贸n GPS de un veh铆culo? y 驴Qu茅 usar铆as para monitorear datos en campo?

Dise帽o

17

Arquitectura de nodos

Introducci贸n a la pr谩ctica

18

Instalaci贸n de framework ESP32 e instalaci贸n de framework SAMD21

19

Qu茅 es una interrupci贸n

Pr谩ctica de WiFi

20

Prueba de se帽al Wi-fi

21

Protocolo HTTP desde un microcontrolador

22

Conectando sensores y actuadores al microcontrolador

23

Preparaci贸n de aplicaci贸n para recibir datos

24

Programaci贸n por eventos de un microcontrolador

25

Configuraci贸n de eventos del microcontrolador

26

Conexi贸n de aplicaci贸n

Pr谩ctica con LoRa

27

驴Cu谩l es el stack de LoRaWAN?

28

Creando tu propio gateway

29

Ensamblado de gateway

30

Pon a andar tu gateway de LoRa

31

Creando tu Stack de LoRa

32

Conecta tu nodo a internet

33

Integrando datos a un dashboard

34

Terminando de implementar nuestro stack de LoRa

35

BugFixing nuestro stack de LoRa

36

Ensamblando el nodo de LoRa

37

Probando LoRa en nuestro Dashboard

38

Pr谩cticas con tarjetas MKR

Cierre del curso

39

Cierre del curso

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Creando tu Stack de LoRa

31/39
Recursos

驴C贸mo instalar y configurar la librer铆a LMiC en Arduino?

Para comenzar a trabajar con el protocolo LoRa, es fundamental preparar un entorno adecuado. La instalaci贸n de la librer铆a LMiC es un primer paso crucial. Este componente, desarrollado por IBM, facilita la integraci贸n de LoRa para m煤ltiples plataformas de microcontroladores.

驴C贸mo descargar y descomprimir la librer铆a LMiC?

Para descargar la librer铆a:

  1. Navega al repositorio indicado por el sistema de discusiones del curso.
  2. Descarga el archivo comprimido de la librer铆a.
  3. Descomprime el archivo y col贸calo en una ubicaci贸n accesible, como el escritorio.

Posteriormente, debes mover la carpeta descomprimida a la carpeta de librer铆as de Arduino:

# Asumiendo que est谩s en el sistema operativo Windows
# Si est谩s usando otro, cambia la ruta seg煤n sea necesario
C:\Users\[TuUsuario]\Documents\Arduino\libraries

Una vez que la librer铆a est谩 en su lugar, reinicia el IDE de Arduino para comenzar a trabajar con ella.

驴C贸mo incluir las librer铆as necesarias en el c贸digo?

Para comenzar a escribir tu c贸digo, primero necesitas incluir varias librer铆as en tu archivo. Aqu铆 tienes un ejemplo de c贸mo hacerlo:

#include <lmic.h>    // Librer铆a para manejar LoRa
#include <hal/hal.h> // Abstracci贸n de hardware
#include <SPV.h>     // Librer铆a para manejar SPV
#include <DHT.h>     // Librer铆a para sensor de temperatura y humedad DHT22

Estas librer铆as son fundamentales para gestionar tanto el hardware como las funciones de comunicaci贸n y los sensores que deseas utilizar.

驴C贸mo definir pines y estructuras esenciales?

Definir correctamente los pines y estructuras es fundamental para la funcionalidad de tu montaje. Aqu铆 te mostramos c贸mo puedes hacer estas definiciones:

驴C贸mo inicializar los pines y el sensor DHT22?

Primero define los pines que utilizar谩s para tus acciones:

#define DHTPIN 23   // Pin de datos del sensor DHT22
#define DHTTYPE DHT22 // Tipo de sensor DHT

DHT dht(DHTPIN, DHTTYPE); // Instanciar el objeto DHT

驴C贸mo establecer el mapeo de pines para LoRa?

LoRa requiere un mapeo espec铆fico de pines. Para configurarlo, utiliza la estructura osjob_t de esta manera:

static const lmic_pinmap lmic_pins = {
    .nss = 18, // Pin de selecci贸n de esclavo 
    .rxtx = LMIC_UNUSED_PIN,
    .rst = 14,  // Pin de reset
    .dio = {26, 33, 32} // Pines DIO
};

驴C贸mo estructurar el evento en la funci贸n principal?

Las funciones de la librer铆a LMiC operan en base a eventos. Para gestionar estos eventos:

驴C贸mo construir la funci贸n de eventos?

Crea una funci贸n que pueda manejar varios casos de eventos. Utiliza un switch que pueda distinguir entre diferentes eventos, como EV_TXCOMPLETE:

void onEvent(ev_t ev) {
    Serial.print(os_getTime());
    Serial.print(": ");
    switch(ev) {
        case EV_TXCOMPLETE:
            Serial.println(F("Transmitido!"));
            break;
        default:
            Serial.println(F("Evento desconocido"));
            break;
    }
}

驴Por qu茅 son importantes las funciones modulares?

La modularidad del c贸digo hace que sea m谩s f谩cil a帽adir nuevas funcionalidades o cambiar partes del c贸digo sin afectar el resto. Aqu铆 creas funciones separadas para leer datos de sensores y enviar la informaci贸n por LoRa.

驴C贸mo se crean las funciones para lectura y transmisi贸n de datos?

Para mejorar la organizaci贸n, crea dos funciones: una para leer datos del sensor y otra para la transmisi贸n de estos datos:

// Funci贸n para leer datos del sensor DHT22
void readSensors() {
    float temp = dht.readTemperature();
    // Otros c谩lculos de sensor
}

// Funci贸n para enviar datos
void sendData(int data, int length) {
    // C贸digo para enviar datos usando LMiC
}

驴Cu谩les son los pr贸ximos pasos en el desarrollo de tu proyecto LoRa?

Con las bases asentadas, el siguiente paso incluye:

  • Modularizar a煤n m谩s el programa.
  • Realizar pruebas de transmisi贸n con los sensores.
  • Configurar una cuenta en The Things Network (TTN) y enlazarla con un dashboard gratuito como DashBoard.

Cada paso te acerca m谩s a tener un sistema s贸lido de comunicaci贸n basada en LoRa, ampliando tus habilidades en el Internet de las Cosas. 隆Contin煤a aprendiendo y explorando nuevas funciones y capacidades!

Aportes 7

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

#include <lmic.h>
#include <hal/hal.h>
#inlcude < SPI.h >
#include < DHT.h >

#define DHTPIN 23
#define DHTYPE DHT22

DHT dht( DHTPIN, DHTYPE );

void os_getArtEui ( u1_t* buf ) { }
void os_getDevEui ( u1_t* buf ) { }
void os_getDevKey ( u1_t* buf ) { }

const lmic_pinmap lmic_pins = {
.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = 14,
.dio = { 26 , 33 , 32 }
}

void onEvent ( ev_t ev ) {
switch ( ev ) {
case EV_TXCOMPLETE:

     break;
     default:
     Serial.println ( "Evento desconocido" );
     break;

}

void setup ( ) {
// put your setup main code here, to run repeatedly:
}

void loop ( ) {
// put your main code here, to run repeatedly:
}

void enviar_datos ( uint8_t *mydata, unint16_t len) {
LMIC_setTxData2 ( 1,mydata,len,0);
}

void getInfoAndSend ( ) {
float temp = dht.readTemperature ( );

}

Quien no tenga un TTGo sino un devkit32 y un modulo de radio rf95 o hpd13a puede usar el siguiente codigo, debe mapear los pines MISO, MOSI, SCK, y todas las tierras del radio deben estar aterrizadas

#include <CayenneLPP.h>
#include<lmic.h>
#include<hal/hal.h>
#include <SPI.h>
#include<DHT.h>


#define DHTPIN 22
#define DHTYPE DHT11
#define LED_BUILTIN 2

DHT dht(DHTPIN,DHTYPE);
CayenneLPP lpp(51);

uint32_t DEV_ADDR = 0x26021285;
uint8_t NET_SESS_KEY[16] = { 0xFE, 0x99, 0x29, 0x91, 0xD2, 0x60, 0x99, 0x63, 0xCA, 0xC0, 0x67, 0xAB, 0xA7, 0xFF, 0xBD, 0x52 };
uint8_t APP_SESS_KEY[16] = { 0xD9, 0x8C, 0xC1, 0xA2, 0x8D, 0x43, 0xBD, 0x07, 0x61, 0xAE, 0xCF, 0x8D, 0x76, 0xB4, 0x48, 0x5C };

void os_getArtEui(u1_t* buf){}
void os_getDevEui(u1_t* buf){}
void os_getDevKey(u1_t* buf){}

const unsigned TX_INTERVAL = 10;
unsigned long previousMillis = 0;

const lmic_pinmap lmic_pins = {
  .nss =5,
  .rxtx = LMIC_UNUSED_PIN,
  .rst =14,
  .dio = {26,33,32}
};

void onEvent(ev_t ev)
{
  switch(ev)
  {
    case EV_TXCOMPLETE:
      Serial.println("[LMIC] Radio Tx Complete");
      digitalWrite(LED_BUILTIN, LOW);
      break;
    default:
      Serial.println("Evento Desconocido");
      break;
  }
}

void enviar_datos(uint8_t *mydata, uint16_t len)
{
  if(LMIC.opmode & OP_TXRXPEND)
  {
    Serial.println("[LMIC] OP_TXRXPEND, not sending");
  }
  else
  {
      LMIC_setTxData2(1,mydata,len,0);
  }
  
}

void getInfoAndSend()
{
  digitalWrite(LED_BUILTIN, HIGH);
  // Leer sensores y transmitir
  float temp = dht.readTemperature();
  lpp.addTemperature(1,temp);
  enviar_datos(lpp.getBuffer(),lpp.getSize() ); 
}

void setup() 
{
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.print("Led ON");
  Serial.println();
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  Serial.print("Led OFF");
  Serial.println();
  Serial.println("[INFO] Iniciando");
  dht.begin();
  os_init();
  LMIC_reset();
  LMIC_setSession(0x1,DEV_ADDR, NET_SESS_KEY, APP_SESS_KEY);
  // put your setup code here, to run once:
  for(int chan=0; chan<72;++chan)
  {
    LMIC_disableChannel(chan);
  }
  // Escojemos 904.3 Mhz, 915 Mhz en la banda de 902 - 928 Mhz
  LMIC_enableChannel(10);
  LMIC_setLinkCheckMode(0);
  
  LMIC_setDrTxpow(DR_SF7,20);
  previousMillis = millis();
}

void loop() 
{
  // put your main code here, to run repeatedly:
  if( millis() > previousMillis + (TX_INTERVAL*1000) )
  {
    getInfoAndSend();
    previousMillis=millis();
  }
  os_runloop_once();
}```
#include <lmic.h>
#include <hal/hal.h>
#inlcude < SPI.h >
#include < DHT.h >

#define DHTPIN 23
#define DHTYPE DHT22

DHT dht( DHTPIN, DHTYPE );

void os_getArtEui ( u1_t* buf ) { }
void os_getDevEui ( u1_t* buf ) { }
void os_getDevKey ( u1_t* buf ) { }

const lmic_pinmap lmic_pins = {
.nss = 18,
.rxtx = LMIC_UNUSED_PIN,
.rst = 14,
.dio = { 26 , 33 , 32 }
}

void onEvent ( ev_t ev ) {
switch ( ev ) {
case EV_TXCOMPLETE:

     break;
     default:
     Serial.println ( "Evento desconocido" );
     break;
}

void setup ( ) {
// put your setup main code here, to run repeatedly:
}

void loop ( ) {
// put your main code here, to run repeatedly:
}

void enviar_datos ( uint8_t *mydata, unint16_t len) {
LMIC_setTxData2 ( 1,mydata,len,0);
}

void getInfoAndSend ( ) {
float temp = dht.readTemperature ( );

}

Cuantos son el numero Maximo de dispositivos soportados en simultaneo? gracias

Lo recomendable es instalar los diferentes softwares en la carpeta /opt

Buenas tardes, tengo problemas al visualizr este video