117 lines
3.4 KiB
C
117 lines
3.4 KiB
C
#include "lora_demo.h"
|
|
#include "HTS221.h"
|
|
#include "RHF76.h"
|
|
|
|
/*
|
|
==================================================================================
|
|
data template:
|
|
|
|
Type Name Token DataType RW Attribute
|
|
property temperature temperature integer readonly range: [-100, 155]
|
|
initial: 0
|
|
step: 1
|
|
unit: centigrade
|
|
|
|
property humidity humidity integer readonly range: [-0, 100]
|
|
initial: 0
|
|
step: 1
|
|
unit: %
|
|
|
|
property report_period period integer read-write range: [0, 3600]
|
|
initial: 0
|
|
step: 1
|
|
unit: second
|
|
|
|
==================================================================================
|
|
up-link parser javascript:
|
|
|
|
function RawToProtocol(fPort, bytes) {
|
|
var data = {
|
|
"method": "report",
|
|
"clientToken" : new Date(),
|
|
"params" : {}
|
|
};
|
|
data.params.temperature = bytes[0];
|
|
data.params.humidity = bytes[1];
|
|
data.params.period = bytes[2] | (bytes[3] << 8);
|
|
return data;
|
|
}
|
|
|
|
==================================================================================
|
|
down-link parser javascript:
|
|
|
|
function ProtocolToRaw(obj) {
|
|
var data = new Array();
|
|
data[0] = 5;// fport=5
|
|
data[1] = 0;// unconfirmed mode
|
|
data[2] = obj.params.period & 0x00FF;
|
|
data[3] = (obj.params.period >> 8) & 0x00FF;
|
|
return data;
|
|
}
|
|
|
|
*/
|
|
|
|
uint16_t report_period = 3000;
|
|
|
|
typedef struct device_data_st {
|
|
uint8_t temperature;
|
|
uint8_t humidity;
|
|
uint16_t period;
|
|
} __PACKED__ dev_data_t;
|
|
|
|
typedef struct device_data_wrapper_st {
|
|
union {
|
|
dev_data_t dev_data;
|
|
uint8_t serialize[sizeof(dev_data_t)];
|
|
} u;
|
|
} dev_data_wrapper_t;
|
|
|
|
dev_data_wrapper_t dev_data_wrapper;
|
|
|
|
void recv_callback(uint8_t *data, uint8_t len)
|
|
{
|
|
int i = 0;
|
|
|
|
printf("len: %d\n", len);
|
|
|
|
for (i = 0; i < len; ++i) {
|
|
printf("data[%d]: %d\n", i, data[i]);
|
|
}
|
|
|
|
if (len == 1) {
|
|
report_period = data[0];
|
|
} else if (len >= 2) {
|
|
report_period = data[0] | (data[1] << 8);
|
|
}
|
|
printf("report_period: %d\n", report_period);
|
|
}
|
|
|
|
void application_entry(void *arg)
|
|
{
|
|
int16_t temperature;
|
|
int16_t humidity;
|
|
|
|
HTS221_Init();
|
|
|
|
rhf76_lora_init(HAL_UART_PORT_1);
|
|
tos_lora_module_recvcb_register(recv_callback);
|
|
|
|
tos_lora_module_join_otaa("8cf957200000fa57", "8cf957200000fa572059aaaaad204a72");
|
|
|
|
while (1) {
|
|
HTS221_Get_Temperature(&temperature);
|
|
HTS221_Get_Humidity(&humidity);
|
|
|
|
printf("temperature: %2.1f\n", temperature / 10.0);
|
|
printf("humidity : %2.1f\n", humidity / 10.0);
|
|
|
|
dev_data_wrapper.u.dev_data.temperature = temperature / 10;
|
|
dev_data_wrapper.u.dev_data.humidity = humidity / 10;
|
|
dev_data_wrapper.u.dev_data.period = report_period;
|
|
|
|
tos_lora_module_send(dev_data_wrapper.u.serialize, sizeof(dev_data_t));
|
|
tos_task_delay(report_period);
|
|
}
|
|
}
|
|
|