主要内容

Esta página se ha traducido mediante traducción automática。Haga clic aquí para ver la versión original en inglés。

重新整理数据agrícolas través de The Things Network

Este ejemplo muestra cómo configurar la recopilación de datos de trres sensors conectados a una placa de microprocessor con una radio LoRa®。Esta configuración permite la creación de una red de sensorres distribuidos en un área grande。Los sensor envían datos a The Things Network, que luego se envían a ThingSpeak para su análisis y visualización。En el ejemplo, crea un dispositivo prototipo, se conecta a Things Network e integra la recopilación de datos con ThingSpeak。气候变化aquí地球温度数据与地球温度数据。

视力一般

"元首之战"La integración de Things Network划分了不同的次pasos。埃尔帕索más错综复杂的la construcción del dispositivo。Para complete el ejemplo, need a una cuenta de ThingSpeak y una cuenta en The Things Network。En ThingSpeak, crea un nuevo canal。En Things Network, crea una aplicación y registra un dispositivo。Luego, crea un decodificador de carga útil y agrega la integración que reenvía los datos a ThingSpeak。

1)配置uncanal ThingSpeak para recilar datos

2) Configurar la Red de Cosas

  • Crear aplicacion

  • 注册dispositivo

  • Crear formato de carga útil

  • Anadir调查Integracion

3) Crear dispositivo

  • 硬件利用并行传感器

  • 爱斯库玛和康涅西奥内斯

4)程序配置

  • Configuración de programación

  • 脏污

配置uncanal de ThingSpeak para recopilar datos

1) Cree un canal ThingSpeak, como se muestra en新运河上的新数据.登记新运河和新运河。

2) Navegar a laConfiguración运河pagina。建立,仪式,campo, de, siguiente, manera。

  • 坎波1 -计数器

  • 坎波2 -土壤水分

  • 坎波3 -温度F

3) Haga clicGuardar运河En la parte劣质para guardar la configuración。

Configurar la aplicación de红色的东西

Crea una cuentaEn la red de cosasY luego inice sesión enLa consola de red Things

Crear aplicacion

1) SeleccionarAplicaciones。

2) Seleccionar在aplicacion

3) Crea unID为aplicación, luego agrega联合国Descripcion.Selecciona厄尔登记处巴萨多恩苏ubicación。

登记官

1) Haga clicDispositivosPestaña y注册商UN dispositivo。Para más información, ver配置记录

2) Cree una identificación de dispositivo。在我的性格里,我是你的性格。不,seleccione el botón a la izquierda de laDispositivo行campo para general el EUI automáticamente。

3) Haga clicRegistro.El navegador le devuelve a la视力一般pestana。

4) Seleccione el需要使用pestana。

5) En la configuración,选择ABP para el método de activación。Para facilitar la depuración, puede deshabilitar opcionalmente el身体健康问题Al final de la página。

6)注册主任Dirección del dispositivoClave de sesión de redyClave de sesión de la aplicación.Esta información es necessity en el código de su dispositivo。

Crear formateador de carga útil

El formateador de carga利用los字节羡慕a la aplicación desde la puerta de enlace para ensamblar un mensaje。En este ejemplo, el mensaje de carga deseado es un objectdidificado En JSON que se envía a ThingSpeak。

1)回顾过去aplicación usando el menú de navegación en la parte superior。Luego haga clic en elcarga格式útilpestana。

2) En el译码器interfaz, cree el código para convertir los bytes enviados desde su dispositivo en unobjeto JSON para escribir en ThingSpeak。El código条件段纬度y正负价值的可能性。

函数解码器(b,端口){var计数器= b[0] << 8) | b[1];Var moisture = b[2] | b[3] << 8;Var temp= (b[4] | b[5] << 8)/100;var lat = (b [6] [7] | b < < 8 | b [8] < < 16 | (b [8] & 0 x80吗?0xFF << 24: 0)) / 10000;var朗= (b [9] | b [10] < < 8 | b [11] < < 16 | (b [11] & 0 x80吗?0xFF << 24: 0)) / 10000;返回{field1:计数器,field2:湿度,field3:温度,纬度:纬度,经度:lon}}

Anadir调查Integracion

Para reenviar datos a ThingSpeak, debe tener una aplicación en Things Network con un dispositivo registrado y un formateador de carga útil。Cree una integración de ThingSpeak para reenviar los datos。

1) inice sesión en suLa consola de red Things

2) SeleccionarAplicacionesy seleccione la aplicación desde la que desea reenviar datos a ThingSpeak。

3) Haga clicintegracionespestana。

4)选择一个ThingSpeak。

5)在前进的道路上,请您integración。

6)在营地Autorización,在运河旁的森林里,在运河旁的森林里,在数据上。La clave API está disponible en el响棒APIpestaña de su canal ThingSpeak。

7) En el campo Idde canal, ingrese la Id。de canal para canal ThingSpeak al que desea reenviar datos。El ID del canal está disponible en la página de su canal de ThingSpeak。

Crear dispositivo

硬件利用并行传感器

Puede usar varios dispositivos LoRa兼容协议LoRaWan para conectarse a事物网络。Este ejemplo demuestra el procedimiento utilzando la siguiente configuración de硬件。

爱斯库玛和康涅西奥内斯

我的感觉是相通的,我的灵魂是相通的。La fotografía可能的事configuración de los senores en una caja de proyecto。En esta configuración,可能的温度传感器,没有反射准确的温度外部。伴随有Agregar una antenaa la收音机LoRa。

1)圆锥混凝土alimentación地磁para GPS和温度传感器。没有混凝土la alimentación al传感器de hummedad。

2)混凝土la salida del传感器de hummedad del suelo a la entrada analógica en A0。

3)配置系统参数传感器esté en uso。El pin de alimentación del sensor de humedad está conectado al pin GPIO 11 en la pluma M0。阿帕格拉alimentación cuando no está en uso prolonga la vida útil del传感器。

4)连接传感器DH-22 a PA-15 en el Feather M0,连接5 en el boceto de Arduino。

5) Para la placa GPS,混凝土TX a RX en el Feather M0 y RX a TX。

6) Habilite la radio LoRa conectando PA20(引脚29,GPIO 6) en el Feather M0 a tierra。

7) Cree un interruptor de alimentación conectando un interruptor desde el pin En a tierra。

程序配置

Configuración de programación

1) Descargue el último IDE de Arduino。

2) Descarga elAdafruit GPS图书馆哦,我同意Adafruit_GPS图书馆管理中心。Seleccione草图>包括图书馆>管理库.BusquedaAdafruit_GPSPara agregarlo a SUS bibliotecas安装。

3) Descarga elBiblioteca LoraWan-in-Cpara el entorno Arduino o añadir ellmicy哈尔/哈尔《图书馆管理》。Seleccione草图>包括图书馆>管理库.Busquedalmicy seleccioneMCCI LoRaWAN LMIC图书馆Para agregarlo a SUS bibliotecas安装。También同意elMCCI Arduino LoRaWan库到库管理器。

4) Crear la aplicación。阿巴拉,那,新,文,那,在,IDE, Arduino,和,保卫,档案。agree el código proporcionado en la sección Código。

脏污

1)关于变量的百科全书。

#include  #include  #include  #include "DHT.h" #include  #define DHTPIN 5 #define GPSSerial Serial1 #define SOIL_PIN 14 #define SOIL_POWER_PIN 11 #define GPSECHO false //如果你想调试和监听原始GPS语句#define PAYLOAD_SIZE 13 //发送的字节数加2 // LoRaWAN NwkSKey,网络会话密钥静态const PROGMEM u1_t NwkSKey [16] = {0x98, 0xEB, 0x1A, 0xC5, 0xF9, 0x20, 0x15, 0xCD, 0x12, 0xE5, 0x72, 0xFF, 0xCD,0xE2, 0x94, 0x46};// LoRaWAN AppSKey,应用程序会话密钥静态const u1_t PROGMEM AppSKey [16] = {0x50, 0x28, 0x4D, 0xAE, 0xEA, 0x41, 0x53, 0x7E, 0xCA, 0x70, 0xD2, 0x26, 0xCC, 0x14, 0x66, 0x19};// LoRaWAN终端设备地址(DevAddr) static const u4_t DevAddr = 0x26021115;//回调函数只用于空中激活。保留这些变量为空,除非您使用空中激活。void os_getArtEui(u1_t *buf) {} void os_getDevEui(u1_t *buf) {} void os_getDevKey(u1_t *buf){} //发送到TTN网关静态uint8_t Payload [PAYLOAD_SIZE];静态osjob_t sendjob;const unsigned TX_INTERVAL = 60;//was 30 // Pin mapping for Adafruit Feather M0 LoRa const lmic_pinmap lmic_pins = {.nss = 8, .rxtx = LMIC_UNUSED_PIN, .rst = 4, .dio = {3,6, LMIC_UNUSED_PIN}, .rxtx_rx_active = 0, .rssi_cal = 8, // LBT cal for Adafruit Feather M0 LoRa, in dB. .spi_freq = 8000000,}; Adafruit_GPS GPS(&GPSSerial); // Connect to the GPS on the hardware port. DHT dht(DHTPIN, DHT22); // Connect to the temperature sensor. uint16_t counter = 0; int32_t myLatitude = -12345; // Initialize for testing before GPS finds a lock. int32_t myLongitude = 54321; // Initialize for testing. int myMoisture = 0; // 10 bit ADC value. float temperatureF = 1111;

2)美国设置función对地温度传感器,GPS和无线电LoRa。

void setup() {Serial.begin(115200);dht.begin ();以“开始”);//设置湿度传感器pinMode的电源引脚(SOIL_POWER_PIN,OUTPUT);digitalWrite (SOIL_POWER_PIN、低);GPS.begin (9600);// 9600 NMEA为默认波特率。GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA);GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ);//设置1hz的更新速率。 delay(1000); // Wait for GPS to initialize. // Ask for firmware version GPSSerial.println(PMTK_Q_RELEASE); // Initialize the LMIC. os_init(); // Reset the MAC state. Resetting discards the session and pending data transfers. LMIC_reset(); // Set static session parameters. uint8_t appskey[sizeof(APPSKEY)]; uint8_t nwkskey[sizeof(NWKSKEY)]; memcpy_P(appskey, APPSKEY, sizeof(APPSKEY)); memcpy_P(nwkskey, NWKSKEY, sizeof(NWKSKEY)); LMIC_setSession(0x13, DEVADDR, nwkskey, appskey); LMIC_selectSubBand(1); // Only use the correct The Things Network channels, disable the others. for (int c = 0; c < 72; c++) { if ((c < 8) || (c > 15)) { LMIC_disableChannel(c); } } LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100); // Disable link check validation LMIC_setLinkCheckMode(0); // TTN uses SF9 for its RX2 window. LMIC.dn2Dr = DR_SF9; // Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library) LMIC_setDrTxpow(DR_SF7, 14); // Start job. processJob(&sendjob); }

3)美国循环función全球定位系统数据分析过程参数。

void loop() //反复运行{os_runloop_once();char c = GPS.read();if (GPSECHO) {if (c){Serial.print(c);}} //如果接收到一个句子,解析它If (GPS.newNMEAreceived()) {If (!GPS.parse(GPS.lastNMEA())) //同时设置newNMEAreceived()标志为false返回;}}

4)埃尔GetSensorDataLa función关于人类的感觉和我们的数据,luego lo apaga。También lee el传感器温度验证la información del配置GPS。Si hay una posición de GPS, esta función actualiza la información de posición。

void GetSensorData() {digitalWrite(SOIL_POWER_PIN, HIGH);延迟(1000);myMoisture = analoggread (SOIL_PIN);digitalWrite (SOIL_POWER_PIN、低);temperatureF = dht。readTemperature(true);系列。println("moisture " +字符串(myMoisture) + " temp " +字符串(温度值));if (GPS.fix){串行。print("Location: "); Serial.print( GPS.latitudeDegrees * 100, 4 ); Serial.print( " break " ); Serial.print( GPS.lat ); Serial.print( ", " ); Serial.print( GPS.longitudeDegrees * 100 , 4 ); Serial.println( GPS.lon ); myLatitude = GPS.latitudeDegrees * 10000; myLongitude = GPS.longitudeDegrees * 10000; } }

5)美国onEventfunción para procesar eventos de la radio LoRa。La función actualiza el monitor serie, programa La próxima transmisión y recibe mensajes。

void onEvent(ev_t ev) {Serial.print(os_getTime());系列。打印(“:”);switch (ev) {case EV_SCAN_TIMEOUT: Serial.println(F("EV_SCAN_TIMEOUT"));打破;case EV_BEACON_FOUND: Serial.println(F("EV_BEACON_FOUND"));打破;case EV_BEACON_MISSED: Serial.println(F("EV_BEACON_MISSED"));打破;case EV_BEACON_TRACKED: Serial.println(F("EV_BEACON_TRACKED")); break; case EV_JOINING: Serial.println(F("EV_JOINING")); break; case EV_JOINED: Serial.println(F("EV_JOINED")); break; case EV_JOIN_FAILED: Serial.println(F("EV_JOIN_FAILED")); break; case EV_REJOIN_FAILED: Serial.println(F("EV_REJOIN_FAILED")); break; case EV_TXCOMPLETE: Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)")); if (LMIC.txrxFlags & TXRX_ACK) Serial.println(F("Received ack")); if (LMIC.dataLen) { Serial.println(F("Received ")); Serial.println(LMIC.dataLen); Serial.println(F(" bytes of payload")); } // Schedule next transmission os_setTimedCallback(&sendjob, os_getTime() + sec2osticks(TX_INTERVAL), do_send); break; case EV_LOST_TSYNC: Serial.println(F("EV_LOST_TSYNC")); break; case EV_RESET: Serial.println(F("EV_RESET")); break; case EV_RXCOMPLETE: // data received in ping slot Serial.println(F("EV_RXCOMPLETE")); break; case EV_LINK_DEAD: Serial.println(F("EV_LINK_DEAD")); break; case EV_LINK_ALIVE: Serial.println(F("EV_LINK_ALIVE")); break; case EV_TXSTART: Serial.println(F("EV_TXSTART")); break; default: Serial.print(F("Unknown event: ")); Serial.println((unsigned)ev); break; } }

6)埃尔processJobLa función convierte los datos del sensor en bits para ser enviados a través de La radio LoRa。

void processJob(osjob_t *j) {getSensorData();如果(LMIC。opmode & OP_TXRXPEND) //检查当前是否有TX/RX作业在运行。{系列。println(F("OP_TXRXPEND,未发送"));} else{有效载荷[0]=字节(计数器);有效载荷[1]=计数器>>8;有效载荷[2]=字节(myMoisture);有效载荷[3]= myMoisture >> 8;int shiftTemp = int(温度f * 100); // Convet temperature float to integer for sending and save two places. payload[4] = byte(shiftTemp); payload[5] = shiftTemp >> 8; payload[6] = byte(myLatitude); payload[7] = myLatitude >> 8; payload[8] = myLatitude >> 16; payload[9] = byte(myLongitude); payload[10] = myLongitude >> 8; payload[11] = myLongitude >> 16; LMIC_setTxData2(1, payload, sizeof(payload) - 1, 0); // Prepare upstream data transmission at the next possible time. counter++; Serial.println(String(counter)); } // Next TX is scheduled after TX_COMPLETE event.

Para obtener información清醒cómo crear un panel de visualización detallado en su canal de ThingSpeak, consulteCrear una vista de canal de ThingSpeak personalizada